annotate src/xterm.c @ 66003:eefcdbee90bc

(glyph_rect): Return 0 if position is outside text area.
author Kim F. Storm <storm@cua.dk>
date Mon, 10 Oct 2005 22:54:19 +0000
parents 42e5365826f1
children 699f7f132908
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.
59745
2177d96b9c08 (x_error_quitter): Add a prototype. Make it static again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59725
diff changeset
2 Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
64770
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64084
diff changeset
3 2002, 2003, 2004, 2005 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
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63886
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63886
diff changeset
20 Boston, MA 02110-1301, 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>
61181
3b4e4d883374 Include ThreeD.h for XtNbeNiceToColormap.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60135
diff changeset
133 #include <X11/Xaw3d/ThreeD.h>
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
134 #else /* !HAVE_XAW3D */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
135 #include <X11/Xaw/Simple.h>
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
136 #include <X11/Xaw/Scrollbar.h>
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
137 #endif /* !HAVE_XAW3D */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
138 #ifndef XtNpickTop
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
139 #define XtNpickTop "pickTop"
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
140 #endif /* !XtNpickTop */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
141 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
142 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
143
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
144 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
145
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
146 #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
147 #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
148 #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
149 #endif
713d4d840a11 (x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6010
diff changeset
150
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
151 #ifdef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
152 #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
153 #ifndef XtNinitialState
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
154 #define XtNinitialState "initialState"
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
155 #endif
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
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
158 #define abs(x) ((x) < 0 ? -(x) : (x))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
159
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
160 /* 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
161 #ifdef USE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
162 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
163 #else
01bf5601e788 (use_xim) [!USE_XIM]: Default to disable XIM if emacs
Kim F. Storm <storm@cua.dk>
parents: 51676
diff changeset
164 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
165 #endif
01bf5601e788 (use_xim) [!USE_XIM]: Default to disable XIM if emacs
Kim F. Storm <storm@cua.dk>
parents: 51676
diff changeset
166
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
167
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
168
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
169 /* 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
170
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
171 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
172
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
173 /* 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
174 start. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
175
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
176 static int any_help_event_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
177
44359
ff9f7aee02c8 Rename autoselect_window_p to mouse_autoselect_window.
Pavel Jan?k <Pavel@Janik.cz>
parents: 44313
diff changeset
178 /* 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
179 static Lisp_Object last_window;
43343
ac7b0c0802cc (x-autoselect-window): New variable.
Pavel Jan?k <Pavel@Janik.cz>
parents: 43302
diff changeset
180
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
181 /* 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
182
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
183 int x_use_underline_position_properties;
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
184
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
185 /* 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
186 use. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
187
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
188 struct x_display_info *x_display_list;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
190 /* 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
191 . 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
192 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
193 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
194
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
195 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
196
2474
86c8a6e08fd4 Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents: 2468
diff changeset
197 /* 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
198 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
199 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
200 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
201
2468
35aa32e1a003 * xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents: 2439
diff changeset
202 extern struct frame *updating_frame;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
203
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
204 /* 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
205
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
206 struct frame *pending_autoraise_frame;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
207
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
208 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
209 /* The application context for Xt use. */
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
210 XtAppContext Xt_app_con;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
211 static String Xt_default_resources[] = {0};
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
212 #endif /* USE_X_TOOLKIT */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
213
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
214 /* 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
215
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
216 static int toolkit_scroll_bar_interaction;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
218 /* Non-zero means to not move point as a result of clicking on a
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
219 frame to focus it (when focus-follows-mouse is nil). */
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
220
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
221 int x_mouse_click_focus_ignore_position;
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
222
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
223 /* Non-zero timeout value means ignore next mouse click if it arrives
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
224 before that timeout elapses (i.e. as part of the same sequence of
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
225 events resulting from clicking on a frame to select it). */
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
226
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
227 static unsigned long ignore_next_mouse_click_timeout;
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
228
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
229 /* Mouse movement.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
230
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
231 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
232 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
233 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
234 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
235
c99dd01d9334 (note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 14963
diff changeset
236 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
237
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
238 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
239 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
240 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
241 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
242 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
243 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
244 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
245 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
246 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
247 is off. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
248
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
249 /* 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
250
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
251 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
252 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
253
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
254 /* 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
255
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
256 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
257 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
258 an ordinary motion.
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
259
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
260 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
261 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
262 event. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
263
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
264 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
265
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
266 /* 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
267 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
268 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
269 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
270 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
271 it's somewhat accurate. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
272
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
273 static Time last_mouse_movement_time;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
274
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
275 /* 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
276 events. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
277
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
278 #ifdef __STDC__
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
279 static int volatile input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
280 #else
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
281 static int input_signal_count;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
282 #endif
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
283
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
284 /* Used locally within XTread_socket. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
285
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
286 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
287
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
288 /* 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
289
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
290 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
291 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
292
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
293 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
294
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
295 /* Tells if a window manager is present or not. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 extern Lisp_Object Vx_no_window_manager;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298
53336
9a1b69cfa7be (Qface, Qmouse_face): Remove unused externs.
Kim F. Storm <storm@cua.dk>
parents: 53083
diff changeset
299 extern Lisp_Object Qeql;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
300
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 extern int errno;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
303 /* 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
304
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
305 extern EMACS_INT extra_keyboard_modifiers;
1841
338e4ffdb54b (XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
306
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
307 /* 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
308
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
309 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
310 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
311 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
312
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
313 static Lisp_Object Qvendor_specific_keysyms;
51405
c3e680aa1a51 (Qutf_8): Moved to coding.c
Dave Love <fx@gnu.org>
parents: 51213
diff changeset
314 static Lisp_Object Qlatin_1;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
315
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
316 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
317 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
318
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
319 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
320 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
321 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
322 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
323 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
324 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
325 unsigned));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
326 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
327 int x_catch_errors P_ ((Display *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
328 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
329 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
330 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
331 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
332 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
333 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
334 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
335 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
336 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
337 void x_initialize P_ ((void));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
338 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
339 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
340 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
341 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
342 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
343 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
344 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
345 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
346 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
347 static void x_new_focus_frame P_ ((struct x_display_info *, struct frame *));
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
348 static void x_focus_changed P_ ((int, int, struct x_display_info *,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
349 struct frame *, struct input_event *));
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
350 static void x_detect_focus_change P_ ((struct x_display_info *,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
351 XEvent *, struct input_event *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
352 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
353 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
354 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
355 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
356 enum text_cursor_kinds));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
357
58403
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
358 static void x_clip_to_row P_ ((struct window *, struct glyph_row *, int, GC));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
359 static void x_flush P_ ((struct frame *f));
30321
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
360 static void x_update_begin P_ ((struct frame *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
361 static void x_update_window_begin P_ ((struct window *));
1f4d6c2c8a7a Add some more prototypes.
Gerd Moellmann <gerd@gnu.org>
parents: 30302
diff changeset
362 static void x_after_update_window_line P_ ((struct glyph_row *));
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
363 static struct scroll_bar *x_window_to_scroll_bar P_ ((Display *, Window));
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
364 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
365 enum scroll_bar_part *,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
366 Lisp_Object *, Lisp_Object *,
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
367 unsigned long *));
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
368 static void x_check_fullscreen P_ ((struct frame *));
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
369 static void x_check_expected_move P_ ((struct frame *));
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
370 static int handle_one_xevent P_ ((struct x_display_info *, XEvent *,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
371 int *, struct input_event *));
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
372
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
373
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
374 /* 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
375
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
376 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
377 x_flush (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
378 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
379 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
380 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
381 if (f == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
382 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
383 Lisp_Object rest, frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
384 FOR_EACH_FRAME (rest, frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
385 x_flush (XFRAME (frame));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
386 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
387 else if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
388 XFlush (FRAME_X_DISPLAY (f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
389 UNBLOCK_INPUT;
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
393 /* 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
394 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
395 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
396 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
397 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
398 performance. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
399
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
400 #define XFlush(DISPLAY) (void) 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
401
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
402
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
403 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
404 Debugging
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
405 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
406
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
407 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
408
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
409 /* 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
410 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
411
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
412 struct record
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
413 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
414 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
415 int type;
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
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
418 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
419
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
420 int event_record_index;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
421
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
422 record_event (locus, type)
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
423 char *locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
424 int type;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
425 {
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
426 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
427 event_record_index = 0;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
428
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].locus = locus;
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
430 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
431 event_record_index++;
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
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
434 #endif /* 0 */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
435
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
436
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
437
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
438 /* 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
439
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
440 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
441 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
442 Display *dpy;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
443 {
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
444 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
445
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
446 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
447 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
448 return dpyinfo;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
449
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
450 return 0;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
451 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
452
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
453
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
454
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
455 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
456 Starting and ending an update
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
457 ***********************************************************************/
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
458
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
459 /* 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
460 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
461 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
462 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
463 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
464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
465 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
466 x_update_begin (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
467 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
468 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
469 /* Nothing to do. */
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
473 /* 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
474 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
475 position of W. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
476
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
477 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
478 x_update_window_begin (w)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
479 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
480 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
481 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
482 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
483
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
484 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
485 set_output_cursor (&w->cursor);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 BLOCK_INPUT;
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
488
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
489 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
490 {
6660
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
491 /* 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
492 display_info->mouse_face_defer = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
493
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
494 /* 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
495 highlighting. */
10274
83aaf59dabbe (XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 10223
diff changeset
496 if (FRAME_GARBAGED_P (f))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
497 display_info->mouse_face_window = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
498
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
499 #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
500 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
501 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
502 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
503 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
504 here to prevent it from being scrolled. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
505
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
506 /* 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
507 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
508 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
509 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
510 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
511 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
512 && 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
513 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
514 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
515
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
516 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
517 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
518 break;
cb14d76e993c (note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents: 6649
diff changeset
519
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
520 if (i < w->desired_matrix->nrows)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
521 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
522 }
30153
1eb41ec71ea5 (x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 30137
diff changeset
523 #endif /* 0 */
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
524 }
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
525
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
529
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
530 /* 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
531
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
532 static void
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
533 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
534 struct window *w;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
535 int x, y0, y1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
536 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
537 struct frame *f = XFRAME (WINDOW_FRAME (w));
63879
bb26dfdf2698 (x_draw_vertical_window_border): Use foreground of
Juri Linkov <juri@jurta.org>
parents: 63103
diff changeset
538 struct face *face;
bb26dfdf2698 (x_draw_vertical_window_border): Use foreground of
Juri Linkov <juri@jurta.org>
parents: 63103
diff changeset
539
bb26dfdf2698 (x_draw_vertical_window_border): Use foreground of
Juri Linkov <juri@jurta.org>
parents: 63103
diff changeset
540 face = FACE_FROM_ID (f, VERTICAL_BORDER_FACE_ID);
bb26dfdf2698 (x_draw_vertical_window_border): Use foreground of
Juri Linkov <juri@jurta.org>
parents: 63103
diff changeset
541 if (face)
bb26dfdf2698 (x_draw_vertical_window_border): Use foreground of
Juri Linkov <juri@jurta.org>
parents: 63103
diff changeset
542 XSetForeground (FRAME_X_DISPLAY (f), f->output_data.x->normal_gc,
bb26dfdf2698 (x_draw_vertical_window_border): Use foreground of
Juri Linkov <juri@jurta.org>
parents: 63103
diff changeset
543 face->foreground);
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
544
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
545 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
546 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
547 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
548
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
549 /* 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
550
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
551 Draw vertical borders between horizontally adjacent windows, and
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
552 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
553
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
554 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
555 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
556 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
557
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
558 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
559 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
560 here. */
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
561
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
562 static void
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
563 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
564 struct window *w;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
565 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
566 {
36929
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
567 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
568
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
569 if (!w->pseudo_window_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
570 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
571 BLOCK_INPUT;
30160
432da5a9f734 (x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents: 30153
diff changeset
572
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
573 if (cursor_on_p)
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
574 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
575 output_cursor.vpos,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
576 output_cursor.x, output_cursor.y);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
577
57373
38e45bf0128a (x_update_window_end): Fix flicker on vertical line between
Kim F. Storm <storm@cua.dk>
parents: 57333
diff changeset
578 if (draw_window_fringes (w, 1))
38e45bf0128a (x_update_window_end): Fix flicker on vertical line between
Kim F. Storm <storm@cua.dk>
parents: 57333
diff changeset
579 x_draw_vertical_border (w);
53609
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
580
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
581 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
582 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
583
36929
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
584 /* 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
585 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
586 if (mouse_face_overwritten_p)
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
587 {
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
588 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
589 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
590 dpyinfo->mouse_face_window = Qnil;
9d0ed4b0c89a (x_update_window_end): Handle overwritten mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 36880
diff changeset
591 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
592
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
593 updated_window = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
594 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
596
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
597 /* 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
598 update_end. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
599
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
600 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
601 x_update_end (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
602 struct frame *f;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
603 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
604 /* Mouse highlight may be displayed again. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
605 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
607 #ifndef XFlush
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 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
609 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 UNBLOCK_INPUT;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
611 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 }
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
613
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
614
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
615 /* 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
616 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
617 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
618
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
619 static void
6616
951c8941b931 [INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents: 6560
diff changeset
620 XTframe_up_to_date (f)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
621 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
622 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
623 if (FRAME_X_P (f))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
624 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
625 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
626
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
627 if (dpyinfo->mouse_face_deferred_gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
628 || f == dpyinfo->mouse_face_mouse_frame)
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 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
631 if (dpyinfo->mouse_face_mouse_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
632 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
633 dpyinfo->mouse_face_mouse_x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
634 dpyinfo->mouse_face_mouse_y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
635 dpyinfo->mouse_face_deferred_gc = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
636 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
637 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
638 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
641
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
642 /* Draw truncation mark bitmaps, continuation mark bitmaps, overlay
41134
04a7db64864b Fringe cleanup.
Kim F. Storm <storm@cua.dk>
parents: 41088
diff changeset
643 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
644 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
645 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
646 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
647 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
648
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
649 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
650 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
651 struct glyph_row *desired_row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
652 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
653 struct window *w = updated_window;
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
654 struct frame *f;
40514
a4363606beb1 (x_after_update_window_line): Don't run the code
Gerd Moellmann <gerd@gnu.org>
parents: 40499
diff changeset
655 int width, height;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
656
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
657 xassert (w);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
658
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
659 if (!desired_row->mode_line_p && !w->pseudo_window_p)
53609
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
660 desired_row->redraw_fringe_bitmaps_p = 1;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
661
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
662 /* 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
663 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
664 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
665 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
666 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
667 overhead is very small. */
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
668 if (windows_or_buffers_changed
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
669 && desired_row->full_width_p
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
670 && (f = XFRAME (w->frame),
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
671 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
672 width != 0)
a4363606beb1 (x_after_update_window_line): Don't run the code
Gerd Moellmann <gerd@gnu.org>
parents: 40499
diff changeset
673 && (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
674 height > 0))
a4363606beb1 (x_after_update_window_line): Don't run the code
Gerd Moellmann <gerd@gnu.org>
parents: 40499
diff changeset
675 {
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
676 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
677
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
678 /* 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
679 if (WINDOWP (f->tool_bar_window)
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
680 && w == XWINDOW (f->tool_bar_window))
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
681 y -= width;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
682
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
683 BLOCK_INPUT;
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
684 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
685 0, y, width, height, False);
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
686 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
687 FRAME_PIXEL_WIDTH (f) - width,
40435
b23a0899363f (x_after_update_window_line): Clear internal border
Gerd Moellmann <gerd@gnu.org>
parents: 40433
diff changeset
688 y, width, height, False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
689 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
690 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
691 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
692
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
693 static void
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
694 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
695 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
696 struct glyph_row *row;
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
697 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
698 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
699 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
700 Display *display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
701 Window window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
702 GC gc = f->output_data.x->normal_gc;
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
703 struct face *face = p->face;
53609
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
704 int rowY;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
705
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
706 /* Must clip because of partially visible lines. */
53609
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
707 rowY = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
708 if (p->y < rowY)
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
709 {
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
710 /* Adjust position of "bottom aligned" bitmap on partially
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
711 visible last row. */
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
712 int oldY = row->y;
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
713 int oldVH = row->visible_height;
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
714 row->visible_height = p->h;
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
715 row->y -= rowY - p->y;
58403
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
716 x_clip_to_row (w, row, -1, gc);
53609
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
717 row->y = oldY;
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
718 row->visible_height = oldVH;
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
719 }
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
720 else
58403
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
721 x_clip_to_row (w, row, -1, gc);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
722
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
723 if (p->bx >= 0 && !p->overlay_p)
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
724 {
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
725 /* 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
726 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
727 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
728 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
729 if (face->stipple)
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
730 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
731 else
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
732 XSetForeground (display, face->gc, face->background);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
733
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
734 XFillRectangle (display, window, face->gc,
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
735 p->bx, p->by, p->nx, p->ny);
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
736
41721
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
737 if (!face->stipple)
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
738 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
739 }
e0335ea68760 (zv_height, zv_bits, zv_period): Changed zv bitmap to
Kim F. Storm <storm@cua.dk>
parents: 41631
diff changeset
740
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
741 if (p->which)
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
742 {
53933
869ca316cdda (x_draw_fringe_bitmap): Handle wider bitmaps (max 16 bits).
Kim F. Storm <storm@cua.dk>
parents: 53888
diff changeset
743 unsigned char *bits;
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
744 Pixmap pixmap, clipmask = (Pixmap) 0;
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
745 int depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f));
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
746 XGCValues gcv;
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
747
53933
869ca316cdda (x_draw_fringe_bitmap): Handle wider bitmaps (max 16 bits).
Kim F. Storm <storm@cua.dk>
parents: 53888
diff changeset
748 if (p->wd > 8)
869ca316cdda (x_draw_fringe_bitmap): Handle wider bitmaps (max 16 bits).
Kim F. Storm <storm@cua.dk>
parents: 53888
diff changeset
749 bits = (unsigned char *)(p->bits + p->dh);
869ca316cdda (x_draw_fringe_bitmap): Handle wider bitmaps (max 16 bits).
Kim F. Storm <storm@cua.dk>
parents: 53888
diff changeset
750 else
869ca316cdda (x_draw_fringe_bitmap): Handle wider bitmaps (max 16 bits).
Kim F. Storm <storm@cua.dk>
parents: 53888
diff changeset
751 bits = (unsigned char *)p->bits + p->dh;
869ca316cdda (x_draw_fringe_bitmap): Handle wider bitmaps (max 16 bits).
Kim F. Storm <storm@cua.dk>
parents: 53888
diff changeset
752
41741
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
753 /* 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
754 by the server. */
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
755 pixmap = XCreatePixmapFromBitmapData (display, window, bits, p->wd, p->h,
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
756 (p->cursor_p
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
757 ? (p->overlay_p ? face->background
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
758 : f->output_data.x->cursor_pixel)
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
759 : face->foreground),
41741
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
760 face->background, depth);
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
761
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
762 if (p->overlay_p)
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
763 {
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
764 clipmask = XCreatePixmapFromBitmapData (display,
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
765 FRAME_X_DISPLAY_INFO (f)->root_window,
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
766 bits, p->wd, p->h,
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
767 1, 0, 1);
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
768 gcv.clip_mask = clipmask;
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
769 gcv.clip_x_origin = p->x;
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
770 gcv.clip_y_origin = p->y;
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
771 XChangeGC (display, gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, &gcv);
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
772 }
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
773
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
774 XCopyArea (display, pixmap, window, gc, 0, 0,
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
775 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
776 XFreePixmap (display, pixmap);
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
777
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
778 if (p->overlay_p)
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
779 {
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
780 gcv.clip_mask = (Pixmap) 0;
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
781 XChangeGC (display, gc, GCClipMask, &gcv);
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
782 XFreePixmap (display, clipmask);
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
783 }
41741
c0edacaaaea8 (x_draw_fringe_bitmap): Always undo clipping.
Gerd Moellmann <gerd@gnu.org>
parents: 41721
diff changeset
784 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
785
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
786 XSetClipMask (display, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
787 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
788
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
790
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
791 /* 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
792 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
793 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
794 rarely happens). */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
796 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 XTset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
801 /* 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
802 the X-windows go away, and suspending requires no action. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
804 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 XTreset_terminal_modes ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
807 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
808
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
809
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810
24991
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 Display Iterator
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
813 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
814
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
815 /* Function prototypes of this page. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
816
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
817 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
818
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
819
27974
d443ad369a18 (PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents: 27967
diff changeset
820 /* 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
821 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
822
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
823 static XCharStruct *
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
824 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
825 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
826 XChar2b *char2b;
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
827 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
828 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
829 /* The result metric information. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
830 XCharStruct *pcm = NULL;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
831
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
832 xassert (font && char2b);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
833
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
834 if (font->per_char != NULL)
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 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
837 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
838 /* 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
839 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
840 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
841 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
842 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
843 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
844 if (char2b->byte1 == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
845 && 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
846 && 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
847 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
848 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
849 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
850 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
851 /* 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
852 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
853 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
854 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
855
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
856 byte1 = N/D + min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
857 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
858
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
859 where:
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 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
862 / = integer division
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
863 \ = integer modulus */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
864 if (char2b->byte1 >= font->min_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
865 && char2b->byte1 <= font->max_byte1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
866 && 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
867 && 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
868 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
869 pcm = (font->per_char
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
870 + ((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
871 * (char2b->byte1 - font->min_byte1))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
872 + (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
873 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
874 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
875 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
876 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
877 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
878 /* 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
879 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
880 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
881 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
882 && 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
883 pcm = &font->max_bounds;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
884 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
885
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
886 return ((pcm == NULL
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
887 || (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
888 ? NULL : pcm);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
889 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
890
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
891
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
892 /* 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
893 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
894
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
895 static int
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
896 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
897 int c;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
898 XChar2b *char2b;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
899 struct font_info *font_info;
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
900 int *two_byte_p;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
901 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
902 int charset = CHAR_CHARSET (c);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
903 XFontStruct *font = font_info->font;
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 /* 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
906 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
907 fixed encoding. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
908 if (font_info->font_encoder)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
909 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
910 /* It's a program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
911 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
912
62799
eba7c6883fe3 (x_encode_char): Call check_ccl_update in advance.
Kenichi Handa <handa@m17n.org>
parents: 62218
diff changeset
913 check_ccl_update (ccl);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
914 if (CHARSET_DIMENSION (charset) == 1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
915 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
916 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
917 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
918 ccl->reg[2] = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
919 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
920 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
921 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
922 ccl->reg[0] = charset;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
923 ccl->reg[1] = char2b->byte1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
924 ccl->reg[2] = char2b->byte2;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
925 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
926
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
927 ccl_driver (ccl, NULL, NULL, 0, 0, NULL);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
928
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
929 /* 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
930 program. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
931 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
932 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
933 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
934 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
935 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
936 else if (font_info->encoding[charset])
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
937 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
938 /* 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
939 encoding numbers. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
940 int enc = font_info->encoding[charset];
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
941
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
942 if ((enc == 1 || enc == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
943 && CHARSET_DIMENSION (charset) == 2)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
944 char2b->byte1 |= 0x80;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
945
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
946 if (enc == 1 || enc == 3)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
947 char2b->byte2 |= 0x80;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
948 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
949
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
950 if (two_byte_p)
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
951 *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
952
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
953 return FONT_TYPE_UNKNOWN;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
954 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
955
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
956
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
957
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
958 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
959 Glyph display
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
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
962
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
963
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
964 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
965 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
966 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
967 int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
968 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
969 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
970 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
971 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
972 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
973 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
974 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
975 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
976 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
977 unsigned long *, double, int));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
978 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
979 double, int, unsigned long));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
980 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
981 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
982 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
983 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
984 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
985 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
986 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
987 static void x_draw_relief_rect P_ ((struct frame *, int, int, int, int,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
988 int, int, int, int, int, int,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
989 XRectangle *));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
990 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
991 int, int, int, XRectangle *));
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
992
29619
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
993 #if GLYPH_DEBUG
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
994 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
995 #endif
d171b4754825 (x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents: 29600
diff changeset
996
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
997
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
998 /* 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
999 face. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1002 x_set_cursor_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1003 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1004 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1005 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
1006 && 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
1007 && 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
1008 && !s->cmp)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1009 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
1010 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1011 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1012 /* 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
1013 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1014 unsigned long mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1015
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1016 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
1017 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1018
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1019 /* 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
1020 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1021 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1022 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1023 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
1024 if (xgcv.foreground == xgcv.background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1025 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1026
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1027 /* 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
1028 if (xgcv.background == s->face->background
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1029 && xgcv.foreground == s->face->foreground)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1030 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1031 xgcv.background = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1032 xgcv.foreground = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1033 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1034
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;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1039
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);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1046
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1047 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
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 /* 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
1053
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1054 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1055 x_set_mouse_face_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1056 struct glyph_string *s;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1057 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1058 int face_id;
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
1059 struct face *face;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1060
35315
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
1061 /* 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
1062 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
1063 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
1064 if (face == NULL)
1f5511b1d5ea (x_set_mouse_face_gc): If the last use mouse face
Gerd Moellmann <gerd@gnu.org>
parents: 35309
diff changeset
1065 face = FACE_FROM_ID (s->f, MOUSE_FACE_ID);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1066
29393
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
1067 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
1068 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
1069 else
3ad9354ade23 (x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents: 28793
diff changeset
1070 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
1071 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
1072 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
1073
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1074 /* 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
1075 if (s->font == s->face->font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1076 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1077 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1078 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1079 /* 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
1080 but font FONT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1081 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1082 unsigned long mask;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1083
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1084 xgcv.background = s->face->background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1085 xgcv.foreground = s->face->foreground;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1086 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
1087 xgcv.font = s->font->fid;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1088 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1089 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1090
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1091 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
1092 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
1093 mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1094 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1095 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
1096 = XCreateGC (s->display, s->window, mask, &xgcv);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1097
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1098 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
1099 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1100
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1101 xassert (s->gc != 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1102 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1103
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1104
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1105 /* 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
1106 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
1107 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
1108
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1109 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1110 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
1111 struct glyph_string *s;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1112 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1113 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1114 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1116
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1117 /* 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
1118 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
1119 pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1120
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1121 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1122 x_set_glyph_string_gc (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1123 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1124 {
30137
4a3808257cf4 (x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents: 30083
diff changeset
1125 PREPARE_FACE_FOR_DISPLAY (s->f, s->face);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1126
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1127 if (s->hl == DRAW_NORMAL_TEXT)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1128 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1129 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1130 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
1131 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1132 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
1133 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1134 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
1135 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
1136 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1137 else if (s->hl == DRAW_CURSOR)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1138 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1139 x_set_cursor_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1140 s->stippled_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1141 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1142 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
1143 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1144 x_set_mouse_face_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1145 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
1146 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1147 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
1148 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1149 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1150 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1151 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
1152 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1153 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1154 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1155 s->gc = s->face->gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1156 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
1157 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1158
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1159 /* GC must have been set. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1160 xassert (s->gc != 0);
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1163
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1164 /* 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
1165 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
1166
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1167 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1168 x_set_glyph_string_clipping (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1169 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1170 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1171 XRectangle r;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
1172 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
1173 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
1174 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1175
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1176
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
1177 /* RIF:
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
1178 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
1179 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
1180
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
1181 static void
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1182 x_compute_glyph_string_overhangs (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1183 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1184 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1185 if (s->cmp == NULL
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1186 && s->first_glyph->type == CHAR_GLYPH)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1187 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1188 XCharStruct cs;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1189 int direction, font_ascent, font_descent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1190 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
1191 &font_ascent, &font_descent, &cs);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1192 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
1193 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
1194 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1195 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1196
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1197
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1198 /* 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
1199
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1200 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1201 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
1202 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1203 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1204 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1205 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1206 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
1207 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
1208 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
1209 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
1210 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1213 /* 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
1214 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
1215 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
1216 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
1217 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
1218
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1219 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1220 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
1221 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1222 int force_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1223 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1224 /* 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
1225 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
1226 if (!s->background_filled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1227 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1228 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
1229
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1230 if (s->stippled_p)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1231 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1232 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1233 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1234 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
1235 s->y + box_line_width,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1236 s->background_width,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1237 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
1238 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1239 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1240 }
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1241 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
1242 || s->font_not_found_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1243 || 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
1244 || force_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1245 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1246 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
1247 s->background_width,
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
1248 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
1249 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1250 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1251 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1252 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1253
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1254
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1255 /* 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
1256
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1257 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1258 x_draw_glyph_string_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1259 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1260 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1261 int i, x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1262
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1263 /* 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
1264 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
1265 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
1266 && 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
1267 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
1268 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1269 x = s->x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1270
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1271 /* 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
1272 loaded. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1273 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
1274 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1275 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
1276 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1277 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
1278 XDrawRectangle (s->display, s->window,
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1279 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
1280 s->height - 1);
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1281 x += g->pixel_width;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1282 }
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 else
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 char *char1b = (char *) s->char2b;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1287 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
1288
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1289 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
1290 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
1291
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1292 /* 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
1293 if (!s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1294 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
1295 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
1296
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1297 /* 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
1298 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
1299 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
1300 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
1301 no chance that characters under a box cursor are invisible. */
65892
41fc0bf568be Rename member for_overlaps_p in struct glyph_string to for_overlaps.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 65764
diff changeset
1302 if (s->for_overlaps
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1303 || (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
1304 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1305 /* 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
1306 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1307 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
1308 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
1309 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1310 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
1311 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
1312 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1313 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1314 {
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1315 if (s->two_byte_p)
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1316 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
1317 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
1318 else
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1319 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
1320 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
1321 }
48383
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1322
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 {
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1325 /* For overstriking (to simulate bold-face), draw the
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1326 characters again shifted to the right by one pixel. */
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1327 if (s->two_byte_p)
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1328 XDrawString16 (s->display, s->window, s->gc, x + 1,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1329 s->ybase - boff, s->char2b, s->nchars);
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1330 else
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1331 XDrawString (s->display, s->window, s->gc, x + 1,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1332 s->ybase - boff, char1b, s->nchars);
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1333 }
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1334 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1335 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1336
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1337 /* 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
1338
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1339 static void
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1340 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
1341 struct glyph_string *s;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1342 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1343 int i, x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1344
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1345 /* 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
1346 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
1347 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
1348 && 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
1349 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
1350 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1351 x = s->x;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1352
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1353 /* 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
1354 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
1355 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
1356 this composition. */
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1357
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1358 /* 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
1359 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
1360 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
1361 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1362 if (s->gidx == 0)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1363 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
1364 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
1365 }
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1366 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1367 {
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
1368 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
1369 {
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1370 XDrawString16 (s->display, s->window, s->gc,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1371 x + s->cmp->offsets[s->gidx * 2],
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1372 s->ybase - s->cmp->offsets[s->gidx * 2 + 1],
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1373 s->char2b + i, 1);
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1374 if (s->face->overstrike)
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1375 XDrawString16 (s->display, s->window, s->gc,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1376 x + s->cmp->offsets[s->gidx * 2] + 1,
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1377 s->ybase - s->cmp->offsets[s->gidx * 2 + 1],
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1378 s->char2b + i, 1);
c44793510100 (x_draw_glyph_string_foreground)
Miles Bader <miles@gnu.org>
parents: 48330
diff changeset
1379 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1380 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1381 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1382
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1383
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1384 #ifdef USE_X_TOOLKIT
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1385
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1386 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
1387 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
1388 XrmValue *, XrmValue *, XtPointer *));
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1389 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
1390 XrmValue *, Cardinal *));
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1391
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1392
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1393 /* 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
1394 cannot be determined. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1395
29749
4235764941b5 (x_frame_of_widget): Add `static' to declaration (for pcc).
Dave Love <fx@gnu.org>
parents: 29744
diff changeset
1396 static struct frame *
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1397 x_frame_of_widget (widget)
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1398 Widget widget;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1399 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1400 struct x_display_info *dpyinfo;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
1401 Lisp_Object tail;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1402 struct frame *f;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1403
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1404 dpyinfo = x_display_info_for_display (XtDisplay (widget));
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1405
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1406 /* 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
1407 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
1408 (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
1409 x_any_window_to_frame. */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1410 while (!XtIsTopLevelShell (widget))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1411 widget = XtParent (widget);
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1412
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1413 /* 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
1414 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
1415 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
1416 if (GC_FRAMEP (XCAR (tail))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1417 && (f = XFRAME (XCAR (tail)),
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1418 (f->output_data.nothing != 1
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1419 && FRAME_X_DISPLAY_INFO (f) == dpyinfo))
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1420 && f->output_data.x->widget == widget)
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1421 return f;
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1422
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1423 abort ();
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1424 }
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1425
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1426
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1427 /* 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
1428 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
1429 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
1430 if successful. This is called from lwlib. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1431
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1432 int
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1433 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
1434 Widget widget;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1435 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1436 XColor *color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1437 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1438 struct frame *f = x_frame_of_widget (widget);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1439 return x_alloc_nearest_color (f, cmap, color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1440 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1441
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1442
31340
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1443 /* 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
1444 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
1445 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
1446 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
1447 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
1448 Value is non-zero if successful. */
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1449
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1450 int
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1451 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
1452 Widget widget;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1453 Display *display;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1454 Colormap cmap;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1455 unsigned long *pixel;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1456 double factor;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1457 int delta;
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1458 {
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1459 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
1460 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
1461 }
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1462
6b2ed557e09c (x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents: 31011
diff changeset
1463
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1464 /* 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
1465 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
1466
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1467 static XtConvertArgRec cvt_string_to_pixel_args[] =
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1468 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1469 {XtWidgetBaseOffset, (XtPointer) XtOffset (Widget, core.screen),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1470 sizeof (Screen *)},
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1471 {XtWidgetBaseOffset, (XtPointer) XtOffset (Widget, core.colormap),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1472 sizeof (Colormap)}
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1473 };
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
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1476 /* 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
1477 cvt_string_to_pixel. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1478
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1479 static Pixel cvt_string_to_pixel_value;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1480
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 /* 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
1483
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1484 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
1485
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1486 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
1487 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
1488 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
1489 in cvt_string_to_pixel_args.
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 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
1492 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
1493
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1494 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
1495 we allocated the color or not.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1496
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1497 Value is True if successful, False otherwise. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1498
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1499 static Boolean
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1500 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
1501 Display *dpy;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1502 XrmValue *args;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1503 Cardinal *nargs;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1504 XrmValue *from, *to;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1505 XtPointer *closure_ret;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1506 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1507 Screen *screen;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1508 Colormap cmap;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1509 Pixel pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1510 String color_name;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1511 XColor color;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1512
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1513 if (*nargs != 2)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1514 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1515 XtAppWarningMsg (XtDisplayToApplicationContext (dpy),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1516 "wrongParameters", "cvt_string_to_pixel",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1517 "XtToolkitError",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1518 "Screen and colormap args required", NULL, NULL);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1519 return False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1520 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1521
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1522 screen = *(Screen **) args[0].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1523 cmap = *(Colormap *) args[1].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1524 color_name = (String) from->addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1525
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1526 if (strcmp (color_name, XtDefaultBackground) == 0)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1527 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1528 *closure_ret = (XtPointer) False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1529 pixel = WhitePixelOfScreen (screen);
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 else if (strcmp (color_name, XtDefaultForeground) == 0)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1532 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1533 *closure_ret = (XtPointer) False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1534 pixel = BlackPixelOfScreen (screen);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1535 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1536 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
1537 && 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
1538 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1539 pixel = color.pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1540 *closure_ret = (XtPointer) True;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1541 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1542 else
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1543 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1544 String params[1];
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1545 Cardinal nparams = 1;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1546
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1547 params[0] = color_name;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1548 XtAppWarningMsg (XtDisplayToApplicationContext (dpy),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1549 "badValue", "cvt_string_to_pixel",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1550 "XtToolkitError", "Invalid color `%s'",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1551 params, &nparams);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1552 return False;
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
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1555 if (to->addr != NULL)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1556 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1557 if (to->size < sizeof (Pixel))
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1558 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1559 to->size = sizeof (Pixel);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1560 return False;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1561 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1562
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1563 *(Pixel *) to->addr = pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1564 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1565 else
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1566 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1567 cvt_string_to_pixel_value = pixel;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1568 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
1569 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1570
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1571 to->size = sizeof (Pixel);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1572 return True;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1573 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1574
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1575
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1576 /* 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
1577 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
1578 for this type of resource via XtSetTypeConverter.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1579
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1580 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
1581
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1582 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
1583 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
1584 in cvt_string_to_pixel.
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1585
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1586 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
1587
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1588 static void
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1589 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
1590 XtAppContext app;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1591 XrmValuePtr to;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1592 XtPointer closure;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1593 XrmValuePtr args;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1594 Cardinal *nargs;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1595 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1596 if (*nargs != 2)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1597 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1598 XtAppWarningMsg (app, "wrongParameters", "cvt_pixel_dtor",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1599 "XtToolkitError",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1600 "Screen and colormap arguments required",
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1601 NULL, NULL);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1602 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1603 else if (closure != NULL)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1604 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1605 /* 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
1606 Screen *screen = *(Screen **) args[0].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1607 Colormap cmap = *(Colormap *) args[1].addr;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1608 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
1609 (Pixel *) to->addr, 1);
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1610 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1611 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1612
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1613
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1614 #endif /* USE_X_TOOLKIT */
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1615
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1616
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1617 /* 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
1618 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
1619 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
1620 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
1621
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1622 static const XColor *
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1623 x_color_cells (dpy, ncells)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1624 Display *dpy;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1625 int *ncells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1626 {
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1627 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
1628
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1629 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
1630 {
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1631 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
1632 int i;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1633
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1634 dpyinfo->ncolor_cells
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1635 = 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
1636 dpyinfo->color_cells
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1637 = (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
1638 * sizeof *dpyinfo->color_cells);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1639
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1640 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
1641 dpyinfo->color_cells[i].pixel = i;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1642
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1643 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
1644 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
1645 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1646
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1647 *ncells = dpyinfo->ncolor_cells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1648 return dpyinfo->color_cells;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1649 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1650
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1651
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1652 /* 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
1653 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
1654
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1655 void
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1656 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
1657 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1658 XColor *colors;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1659 int ncolors;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1660 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1661 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
1662
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1663 if (dpyinfo->color_cells)
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1664 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1665 int i;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1666 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
1667 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1668 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
1669 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
1670 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
1671 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
1672 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1673 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1674 else
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1675 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
1676 }
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1677
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1678
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1679 /* 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
1680 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
1681
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1682 void
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1683 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
1684 struct frame *f;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1685 XColor *color;
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1686 {
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1687 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
1688 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1689
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1690
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1691 /* 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
1692 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
1693 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
1694 allocated. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1695
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1696 static int
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1697 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
1698 Display *dpy;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1699 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1700 XColor *color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1701 {
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1702 int rc;
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1703
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1704 rc = XAllocColor (dpy, cmap, color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1705 if (rc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1706 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1707 /* 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
1708 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
1709 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
1710 color matching with StaticColor visuals. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1711 int nearest, i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1712 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
1713 int ncells;
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1714 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
1715
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1716 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
1717 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1718 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
1719 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
1720 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
1721 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
1722
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1723 if (delta < nearest_delta)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1724 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1725 nearest = i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1726 nearest_delta = delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1727 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1728 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1729
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1730 color->red = cells[nearest].red;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1731 color->green = cells[nearest].green;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1732 color->blue = cells[nearest].blue;
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1733 rc = XAllocColor (dpy, cmap, color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1734 }
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1735 else
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1736 {
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1737 /* 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
1738 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
1739 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
1740 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
1741 XColor *cached_color;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1742
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1743 if (dpyinfo->color_cells
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1744 && (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
1745 (cached_color->red != color->red
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
1746 || cached_color->blue != color->blue
9de33d895c6c (x_alloc_nearest_color): Fix last change to compare
Gerd Moellmann <gerd@gnu.org>
parents: 33062
diff changeset
1747 || cached_color->green != color->green)))
33062
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1748 {
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1749 xfree (dpyinfo->color_cells);
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1750 dpyinfo->color_cells = NULL;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1751 dpyinfo->ncolor_cells = 0;
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1752 }
c236bd0d44c3 (x_alloc_nearest_color): If allocation succeeds, and
Gerd Moellmann <gerd@gnu.org>
parents: 32988
diff changeset
1753 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1754
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1755 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1756 if (rc)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1757 register_color (color->pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1758 #endif /* DEBUG_X_COLORS */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1759
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1760 return rc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1761 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1762
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1763
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1764 /* 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
1765 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
1766 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
1767 allocated. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1768
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1769 int
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1770 x_alloc_nearest_color (f, cmap, color)
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1771 struct frame *f;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1772 Colormap cmap;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1773 XColor *color;
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1774 {
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1775 gamma_correct (f, color);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1776 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
1777 }
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1778
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
1779
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1780 /* 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
1781 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
1782 get color reference counts right. */
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1783
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1784 unsigned long
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1785 x_copy_color (f, pixel)
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1786 struct frame *f;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1787 unsigned long pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1788 {
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1789 XColor color;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1790
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1791 color.pixel = pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1792 BLOCK_INPUT;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1793 x_query_color (f, &color);
28356
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1794 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
1795 UNBLOCK_INPUT;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1796 #ifdef DEBUG_X_COLORS
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1797 register_color (pixel);
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1798 #endif
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1799 return color.pixel;
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1800 }
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1801
c94ec7e56746 (x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 28321
diff changeset
1802
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1803 /* 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
1804 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
1805 get color reference counts right. */
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1806
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1807 unsigned long
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1808 x_copy_dpy_color (dpy, cmap, pixel)
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1809 Display *dpy;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1810 Colormap cmap;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1811 unsigned long pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1812 {
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1813 XColor color;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1814
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1815 color.pixel = pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1816 BLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1817 XQueryColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1818 XAllocColor (dpy, cmap, &color);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1819 UNBLOCK_INPUT;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1820 #ifdef DEBUG_X_COLORS
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1821 register_color (pixel);
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1822 #endif
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1823 return color.pixel;
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1824 }
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1825
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
1826
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1827 /* 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
1828 boosted.
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1829
33449
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1830 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
1831 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
1832 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
1833 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
1834 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
1835
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1836 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
1837 (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
1838 #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
1839
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1840
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1841 /* 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
1842 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
1843 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
1844 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
1845 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
1846 Value is non-zero if successful. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1847
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1848 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1849 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
1850 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1851 Display *display;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1852 Colormap cmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1853 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
1854 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1855 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1856 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1857 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
1858 long bright;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1859 int success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1860
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1861 /* Get RGB color values. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1862 color.pixel = *pixel;
32607
00d2748a616a (x_color_cells, x_query_colors, x_query_color): New
Gerd Moellmann <gerd@gnu.org>
parents: 32513
diff changeset
1863 x_query_color (f, &color);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1864
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1865 /* 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
1866 xassert (factor >= 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1867 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
1868 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
1869 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
1870
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1871 /* Calculate brightness of COLOR. */
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1872 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
1873
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1874 /* 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
1875 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
1876 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
1877 /* 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
1878 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
1879 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1880 /* 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
1881 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
1882 /* The additive adjustment. */
33456
d8d4ecfa24fd (x_alloc_lighter_color): Use real brightness calculation.
Miles Bader <miles@gnu.org>
parents: 33449
diff changeset
1883 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
1884
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1885 if (factor < 1)
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1886 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1887 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
1888 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
1889 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
1890 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1891 else
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1892 {
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1893 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
1894 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
1895 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
1896 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1897 }
41fcaa0b864b (x_alloc_lighter_color): Include an additive component too for dark
Miles Bader <miles@gnu.org>
parents: 33303
diff changeset
1898
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1899 /* Try to allocate the color. */
25529
7ae6423812ae (XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents: 25512
diff changeset
1900 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
1901 if (success_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1902 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1903 if (new.pixel == *pixel)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1904 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1905 /* 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
1906 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
1907 x_free_colors (f, &new.pixel, 1);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1908
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1909 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
1910 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
1911 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
1912 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
1913 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1914 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1915 success_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1916 *pixel = new.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 return success_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1920 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1921
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1922
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1923 /* 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
1924 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
1925 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
1926 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
1927 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
1928 be allocated, use DEFAULT_PIXEL, instead. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1929
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1930 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1931 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
1932 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1933 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
1934 double factor;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1935 int delta;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1936 unsigned long default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1937 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1938 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1939 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
1940 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1941 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1942 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
1943 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
1944 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
1945 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
1946
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1947 xgcv.graphics_exposures = False;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1948 xgcv.line_width = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1949
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1950 /* 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
1951 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
1952 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
1953 if (relief->gc
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1954 && relief->allocated_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1955 {
27962
048184bb751e (x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents: 27857
diff changeset
1956 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
1957 relief->allocated_p = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1958 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1959
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1960 /* Allocate new color. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1961 xgcv.foreground = default_pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1962 pixel = background;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1963 if (dpyinfo->n_planes != 1
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1964 && 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
1965 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1966 relief->allocated_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1967 xgcv.foreground = relief->pixel = pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1968 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1969
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1970 if (relief->gc == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1971 {
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1972 xgcv.stipple = dpyinfo->gray;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1973 mask |= GCStipple;
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1974 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
1975 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1976 else
25091
c3dc74005d22 (x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents: 25085
diff changeset
1977 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
1978 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1979
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1980
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1981 /* 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
1982
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1983 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1984 x_setup_relief_colors (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1985 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1986 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1987 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
1988 unsigned long color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1989
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
1990 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
1991 color = s->face->box_color;
40265
44df655be97a (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
Miles Bader <miles@gnu.org>
parents: 40259
diff changeset
1992 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
1993 && s->img->pixmap
40265
44df655be97a (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
Miles Bader <miles@gnu.org>
parents: 40259
diff changeset
1994 && !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
1995 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
1996 else
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 XGCValues xgcv;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
1999
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2000 /* 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
2001 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
2002 color = xgcv.background;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2003 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2004
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2005 if (di->white_relief.gc == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2006 || color != di->relief_background)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2007 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2008 di->relief_background = color;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2009 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
2010 WHITE_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2011 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
2012 BLACK_PIX_DEFAULT (s->f));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2013 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2014 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2015
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2016
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2017 /* 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
2018 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
2019 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
2020 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
2021 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
2022 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
2023 when drawing. */
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 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2026 x_draw_relief_rect (f, left_x, top_y, right_x, bottom_y, width,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2027 raised_p, top_p, bot_p, left_p, right_p, clip_rect)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
2028 struct frame *f;
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2029 int left_x, top_y, right_x, bottom_y, width;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2030 int top_p, bot_p, 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
2031 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2032 {
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2033 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
2034 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
2035 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2036 GC gc;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2037
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2038 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2039 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
2040 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2041 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
2042 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
2043
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2044 /* Top. */
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2045 if (top_p)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2046 for (i = 0; i < width; ++i)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2047 XDrawLine (dpy, window, gc,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2048 left_x + i * left_p, top_y + i,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2049 right_x + 1 - i * right_p, top_y + i);
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 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
2054 XDrawLine (dpy, window, gc,
37033
fe7885cc9458 (x_draw_relief_rect): Extend left shadow to the
Gerd Moellmann <gerd@gnu.org>
parents: 37031
diff changeset
2055 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
2056
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2057 XSetClipMask (dpy, gc, None);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2058 if (raised_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2059 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
2060 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2061 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
2062 XSetClipRectangles (dpy, gc, 0, 0, clip_rect, 1, Unsorted);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2063
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2064 /* Bottom. */
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2065 if (bot_p)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2066 for (i = 0; i < width; ++i)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2067 XDrawLine (dpy, window, gc,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2068 left_x + i * left_p, bottom_y - i,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2069 right_x + 1 - i * right_p, bottom_y - i);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2070
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2071 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2072 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2073 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
2074 XDrawLine (dpy, window, gc,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2075 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
2076
39474
5f9f7d59fd79 (x_draw_relief_rect): Draw bottom relief 1 pixel more
Gerd Moellmann <gerd@gnu.org>
parents: 39434
diff changeset
2077 XSetClipMask (dpy, gc, None);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2078 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2079
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 /* 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
2082 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
2083 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
2084 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
2085 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
2086 rectangle to use when drawing. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2087
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2088 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2089 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
2090 left_p, right_p, clip_rect)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2091 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
2092 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
2093 XRectangle *clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2094 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2095 XGCValues xgcv;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2096
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2097 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
2098 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
2099 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
2100
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2101 /* Top. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2102 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
2103 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
2104
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2105 /* Left. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2106 if (left_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2107 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
2108 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
2109
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2110 /* Bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2111 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
2112 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
2113
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2114 /* Right. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2115 if (right_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2116 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
2117 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
2118
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2119 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
2120 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2121 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2122
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2123
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2124 /* 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
2125
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2126 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2127 x_draw_glyph_string_box (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2128 struct 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 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
2131 int left_p, right_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2132 struct glyph *last_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2133 XRectangle clip_rect;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2134
59655
369714ad80ed (x_draw_glyph_string_box): Fix last_x for full width rows.
Kim F. Storm <storm@cua.dk>
parents: 59264
diff changeset
2135 last_x = ((s->row->full_width_p && !s->w->pseudo_window_p)
369714ad80ed (x_draw_glyph_string_box): Fix last_x for full width rows.
Kim F. Storm <storm@cua.dk>
parents: 59264
diff changeset
2136 ? WINDOW_RIGHT_EDGE_X (s->w)
369714ad80ed (x_draw_glyph_string_box): Fix last_x for full width rows.
Kim F. Storm <storm@cua.dk>
parents: 59264
diff changeset
2137 : window_box_right (s->w, s->area));
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2138
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2139 /* 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
2140 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
2141 ? s->first_glyph
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2142 : s->first_glyph + s->nchars - 1);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2143
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2144 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
2145 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
2146 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
2147 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
2148 ? last_x - 1
e7722a221c28 (x_draw_glyph_string_box): Don't draw a full-width
Gerd Moellmann <gerd@gnu.org>
parents: 36776
diff changeset
2149 : 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
2150 top_y = s->y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2151 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
2152
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2153 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
2154 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2155 && (s->prev == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2156 || s->prev->hl != s->hl)));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2157 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
2158 || (s->hl == DRAW_MOUSE_FACE
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2159 && (s->next == NULL
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2160 || 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
2161
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2162 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
2163
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2164 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
2165 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
2166 left_p, right_p, &clip_rect);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2167 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2168 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2169 x_setup_relief_colors (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2170 x_draw_relief_rect (s->f, left_x, top_y, right_x, bottom_y,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2171 width, raised_p, 1, 1, left_p, right_p, &clip_rect);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2172 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2173 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2174
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2175
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2176 /* 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
2177
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2178 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2179 x_draw_image_foreground (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2180 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2181 {
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2182 int x = s->x;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2183 int y = s->ybase - image_ascent (s->img, s->face, &s->slice);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2184
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2185 /* 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
2186 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2187 if (s->face->box != FACE_NO_BOX
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2188 && s->first_glyph->left_box_line_p
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2189 && s->slice.x == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2190 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
2191
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2192 /* 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
2193 by that margin. */
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2194 if (s->slice.x == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2195 x += s->img->hmargin;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2196 if (s->slice.y == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2197 y += s->img->vmargin;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2198
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2199 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2200 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2201 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2202 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2203 /* 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
2204 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
2205 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
2206 (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
2207 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2208 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2209 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2210 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2211 XRectangle clip_rect, image_rect, r;
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 xgcv.clip_mask = s->img->mask;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2214 xgcv.clip_x_origin = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2215 xgcv.clip_y_origin = y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2216 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2217 XChangeGC (s->display, s->gc, mask, &xgcv);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2218
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2219 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
2220 image_rect.x = x;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2221 image_rect.y = y;
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2222 image_rect.width = s->slice.width;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2223 image_rect.height = s->slice.height;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2224 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
2225 XCopyArea (s->display, s->img->pixmap, s->window, s->gc,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2226 s->slice.x + r.x - x, s->slice.y + r.y - y,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2227 r.width, r.height, r.x, r.y);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2228 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2229 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2230 {
30653
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2231 XRectangle clip_rect, image_rect, r;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2232
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2233 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
2234 image_rect.x = x;
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2235 image_rect.y = y;
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2236 image_rect.width = s->slice.width;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2237 image_rect.height = s->slice.height;
30653
319c3bad8ada (x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents: 30371
diff changeset
2238 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
2239 XCopyArea (s->display, s->img->pixmap, s->window, s->gc,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2240 s->slice.x + r.x - x, s->slice.y + r.y - y,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2241 r.width, r.height, r.x, r.y);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2242
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2243 /* 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
2244 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
2245 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
2246 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
2247 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
2248 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2249 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
2250 {
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2251 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
2252 if (r < 0) r = -r;
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2253 XDrawRectangle (s->display, s->window, s->gc,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2254 x - r, y - r,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2255 s->slice.width + r*2 - 1,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2256 s->slice.height + r*2 - 1);
45197
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2257 }
24991
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2261 /* 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
2262 XDrawRectangle (s->display, s->window, s->gc, x, y,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2263 s->slice.width - 1, s->slice.height - 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2264 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2265
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2266
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2267 /* 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
2268
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2269 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2270 x_draw_image_relief (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2271 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2272 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2273 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
2274 XRectangle r;
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2275 int x = s->x;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2276 int y = s->ybase - image_ascent (s->img, s->face, &s->slice);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2277
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2278 /* 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
2279 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2280 if (s->face->box != FACE_NO_BOX
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2281 && s->first_glyph->left_box_line_p
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2282 && s->slice.x == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2283 x += abs (s->face->box_line_width);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2284
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2285 /* 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
2286 by that margin. */
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2287 if (s->slice.x == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2288 x += s->img->hmargin;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2289 if (s->slice.y == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2290 y += s->img->vmargin;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2291
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2292 if (s->hl == DRAW_IMAGE_SUNKEN
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2293 || s->hl == DRAW_IMAGE_RAISED)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2294 {
41791
fcab0e888c5c (x_draw_image_relief): Use predefined macro instead of constant when the
Pavel Jan?k <Pavel@Janik.cz>
parents: 41788
diff changeset
2295 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
2296 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
2297 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2298 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2299 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2300 thick = abs (s->img->relief);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2301 raised_p = s->img->relief > 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2302 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2303
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2304 x0 = x - thick;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2305 y0 = y - thick;
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2306 x1 = x + s->slice.width + thick - 1;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2307 y1 = y + s->slice.height + thick - 1;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2308
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2309 x_setup_relief_colors (s);
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2310 get_glyph_string_clip_rect (s, &r);
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2311 x_draw_relief_rect (s->f, x0, y0, x1, y1, thick, raised_p,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2312 s->slice.y == 0,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2313 s->slice.y + s->slice.height == s->img->height,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2314 s->slice.x == 0,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2315 s->slice.x + s->slice.width == s->img->width,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2316 &r);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2317 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2318
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2319
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2320 /* 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
2321
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2322 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2323 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
2324 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2325 Pixmap pixmap;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2326 {
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2327 int x = 0;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2328 int y = s->ybase - s->y - image_ascent (s->img, s->face, &s->slice);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2329
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2330 /* 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
2331 right of that line. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2332 if (s->face->box != FACE_NO_BOX
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2333 && s->first_glyph->left_box_line_p
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2334 && s->slice.x == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2335 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
2336
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2337 /* 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
2338 by that margin. */
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2339 if (s->slice.x == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2340 x += s->img->hmargin;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2341 if (s->slice.y == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2342 y += s->img->vmargin;
24991
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 if (s->img->pixmap)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2345 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2346 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2347 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2348 /* 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
2349 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
2350 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
2351 (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
2352 manually. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2353 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2354 | GCFunction);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2355 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2356
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2357 xgcv.clip_mask = s->img->mask;
56150
52798bcd26d1 * xterm.c (x_draw_image_foreground_1): Subtract slice.x/y from
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 56135
diff changeset
2358 xgcv.clip_x_origin = x - s->slice.x;
52798bcd26d1 * xterm.c (x_draw_image_foreground_1): Subtract slice.x/y from
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 56135
diff changeset
2359 xgcv.clip_y_origin = y - s->slice.y;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2360 xgcv.function = GXcopy;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2361 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
2362
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2363 XCopyArea (s->display, s->img->pixmap, pixmap, s->gc,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2364 s->slice.x, s->slice.y,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2365 s->slice.width, s->slice.height, x, y);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2366 XSetClipMask (s->display, s->gc, None);
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 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2369 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2370 XCopyArea (s->display, s->img->pixmap, pixmap, s->gc,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2371 s->slice.x, s->slice.y,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2372 s->slice.width, s->slice.height, x, y);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2373
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2374 /* 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
2375 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
2376 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
2377 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
2378 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
2379 nothing here for mouse-face. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2380 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
2381 {
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2382 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
2383 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
2384 XDrawRectangle (s->display, s->window, s->gc, x - r, y - r,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2385 s->slice.width + r*2 - 1,
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2386 s->slice.height + r*2 - 1);
45197
0b6da8b7d7ac (x_draw_image_foreground, x_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents: 44974
diff changeset
2387 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2388 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2389 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2390 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2391 /* 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
2392 XDrawRectangle (s->display, pixmap, s->gc, x, y,
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2393 s->slice.width - 1, s->slice.height - 1);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2394 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2395
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2396
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2397 /* 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
2398 give the rectangle to draw. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2399
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2400 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2401 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
2402 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2403 int x, y, w, h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2404 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2405 if (s->stippled_p)
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 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2408 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2409 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
2410 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2411 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2412 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2413 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
2414 }
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
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2417 /* Draw image glyph string S.
24991
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 s->y
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2420 s->x +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2421 | s->face->box
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2422 |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2423 | +-------------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2424 | | s->img->margin
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2425 | |
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2426 | | +-------------------
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2427 | | | the image
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2428
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2429 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2430
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2431 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2432 x_draw_image_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2433 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2434 {
36005
58a1ada9bf57 (x_produce_image_glyph): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents: 35897
diff changeset
2435 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
2436 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
2437 int height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2438 Pixmap pixmap = None;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2439
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2440 height = s->height;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2441 if (s->slice.y == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2442 height -= box_line_vwidth;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2443 if (s->slice.y + s->slice.height >= s->img->height)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2444 height -= box_line_vwidth;
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
2445
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2446 /* 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
2447 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
2448 flickering. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2449 s->stippled_p = s->face->stipple != 0;
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2450 if (height > s->slice.height
35276
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2451 || s->img->hmargin
008aea836cbc (x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents: 35272
diff changeset
2452 || s->img->vmargin
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2453 || s->img->mask
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2454 || s->img->pixmap == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2455 || s->width != s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2456 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2457 if (s->img->mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2458 {
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
2459 /* 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
2460 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
2461 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
2462 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
2463 int depth = DefaultDepthOfScreen (screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2464
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2465 /* 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
2466 pixmap = XCreatePixmap (s->display, s->window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2467 s->background_width,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2468 s->height, depth);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2469
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2470 /* 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
2471 pixmap. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2472 XSetClipMask (s->display, s->gc, None);
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 /* 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
2475 if (s->stippled_p)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2476 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2477 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2478 XSetFillStyle (s->display, s->gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2479 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2480 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
2481 XSetFillStyle (s->display, s->gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2482 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2483 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2484 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2485 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2486 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
2487 &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2488 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
2489 XFillRectangle (s->display, pixmap, s->gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2490 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
2491 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
2492 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2493 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2494 else
55030
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2495 {
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2496 int x = s->x;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2497 int y = s->y;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2498
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2499 if (s->first_glyph->left_box_line_p
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2500 && s->slice.x == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2501 x += box_line_hwidth;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2502
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2503 if (s->slice.y == 0)
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2504 y += box_line_vwidth;
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2505
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2506 x_draw_glyph_string_bg_rect (s, x, y, s->background_width, height);
44eb66585062 (x_draw_relief_rect): Add top_p and bot_p args.
Kim F. Storm <storm@cua.dk>
parents: 54733
diff changeset
2507 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2508
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2509 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2510 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2511
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2512 /* Draw the foreground. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2513 if (pixmap != None)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2514 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2515 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
2516 x_set_glyph_string_clipping (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2517 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
2518 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
2519 XFreePixmap (s->display, pixmap);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2520 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2521 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2522 x_draw_image_foreground (s);
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 /* 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
2525 if (s->img->relief
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2526 || s->hl == DRAW_IMAGE_RAISED
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2527 || s->hl == DRAW_IMAGE_SUNKEN)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2528 x_draw_image_relief (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2529 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2530
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2531
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2532 /* Draw stretch glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2533
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2534 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2535 x_draw_stretch_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2536 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2537 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2538 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
2539 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
2540
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2541 if (s->hl == DRAW_CURSOR
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2542 && !x_stretch_cursor_p)
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 /* 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
2545 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
2546 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
2547
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2548 /* Draw cursor. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2549 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
2550
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2551 /* 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
2552 if (width < s->background_width)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2553 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2554 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
2555 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
2556 XRectangle r;
37922
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2557 GC gc;
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2558
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2559 if (s->row->mouse_face_p
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2560 && cursor_in_mouse_face_p (s->w))
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2561 {
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2562 x_set_mouse_face_gc (s);
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2563 gc = s->gc;
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2564 }
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2565 else
fcd11c3e6341 (cursor_in_mouse_face_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37726
diff changeset
2566 gc = s->face->gc;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2567
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2568 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
2569 XSetClipRectangles (s->display, gc, 0, 0, &r, 1, Unsorted);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2570
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2571 if (s->face->stipple)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2572 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2573 /* Fill background with a stipple pattern. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2574 XSetFillStyle (s->display, gc, FillOpaqueStippled);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2575 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
2576 XSetFillStyle (s->display, gc, FillSolid);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2577 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2578 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2579 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2580 XGCValues xgcv;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2581 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
2582 XSetForeground (s->display, gc, xgcv.background);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2583 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
2584 XSetForeground (s->display, gc, xgcv.foreground);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2585 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2586 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2587 }
37535
6c6b5bd0f257 (x_draw_stretch_glyph_string): Don't draw background
Gerd Moellmann <gerd@gnu.org>
parents: 37525
diff changeset
2588 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
2589 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
2590 s->height);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2591
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2592 s->background_filled_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2593 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2594
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2595
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2596 /* Draw glyph string S. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2597
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2598 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2599 x_draw_glyph_string (s)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2600 struct glyph_string *s;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2601 {
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2602 int relief_drawn_p = 0;
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2603
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2604 /* 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
2605 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
2606 This makes S->next use XDrawString instead of XDrawImageString. */
65892
41fc0bf568be Rename member for_overlaps_p in struct glyph_string to for_overlaps.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 65764
diff changeset
2607 if (s->next && s->right_overhang && !s->for_overlaps)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2608 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2609 xassert (s->next->img == NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2610 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
2611 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
2612 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
2613 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2614
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2615 /* 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
2616 x_set_glyph_string_gc (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2617
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2618 /* 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
2619 glyph string can be drawn over it. */
65892
41fc0bf568be Rename member for_overlaps_p in struct glyph_string to for_overlaps.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 65764
diff changeset
2620 if (!s->for_overlaps
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2621 && 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
2622 && (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
2623 || 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
2624
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2625 {
39950
df00f7799bb7 (x_draw_glyph_string): Restore clipping after
Gerd Moellmann <gerd@gnu.org>
parents: 39922
diff changeset
2626 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
2627 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
2628 x_draw_glyph_string_box (s);
39950
df00f7799bb7 (x_draw_glyph_string): Restore clipping after
Gerd Moellmann <gerd@gnu.org>
parents: 39922
diff changeset
2629 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
2630 relief_drawn_p = 1;
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2631 }
39950
df00f7799bb7 (x_draw_glyph_string): Restore clipping after
Gerd Moellmann <gerd@gnu.org>
parents: 39922
diff changeset
2632 else
df00f7799bb7 (x_draw_glyph_string): Restore clipping after
Gerd Moellmann <gerd@gnu.org>
parents: 39922
diff changeset
2633 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
2634
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2635 switch (s->first_glyph->type)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2636 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2637 case IMAGE_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2638 x_draw_image_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2639 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2640
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2641 case STRETCH_GLYPH:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2642 x_draw_stretch_glyph_string (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2643 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2644
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2645 case CHAR_GLYPH:
65892
41fc0bf568be Rename member for_overlaps_p in struct glyph_string to for_overlaps.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 65764
diff changeset
2646 if (s->for_overlaps)
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2647 s->background_filled_p = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2648 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2649 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
2650 x_draw_glyph_string_foreground (s);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2651 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2652
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2653 case COMPOSITE_GLYPH:
65892
41fc0bf568be Rename member for_overlaps_p in struct glyph_string to for_overlaps.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 65764
diff changeset
2654 if (s->for_overlaps || s->gidx > 0)
26879
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2655 s->background_filled_p = 1;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2656 else
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2657 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
2658 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
2659 break;
b4de7fa9866e (x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents: 26829
diff changeset
2660
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2661 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2662 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2663 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2664
65892
41fc0bf568be Rename member for_overlaps_p in struct glyph_string to for_overlaps.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 65764
diff changeset
2665 if (!s->for_overlaps)
25189
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 /* Draw underline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2668 if (s->face->underline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2669 {
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2670 unsigned long tem, h;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2671 int y;
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2672
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2673 /* 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
2674 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
2675 h = 1;
32945
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2676
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2677 /* 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
2678 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
2679 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
2680 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
2681
1b418a786c41 (x_draw_glyph_string): Treat XA_UNDERLINE_POSITION as a
Gerd Moellmann <gerd@gnu.org>
parents: 32938
diff changeset
2682 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
2683 ROUND(x) = floor (x + 0.5) */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2684
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
2685 if (x_use_underline_position_properties
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
2686 && 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
2687 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
2688 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
2689 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
2690 else
37031
5cb404651755 (expose_window_tree, expose_frame): Don't compute
Gerd Moellmann <gerd@gnu.org>
parents: 36948
diff changeset
2691 y = s->y + s->height - h;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2692
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2693 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
2694 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
2695 s->x, y, s->width, h);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2696 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2697 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2698 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2699 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2700 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
2701 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
2702 s->x, y, s->width, h);
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2703 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2704 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2705 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2706
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2707 /* Draw overline. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2708 if (s->face->overline_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2709 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2710 unsigned long dy = 0, h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2711
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2712 if (s->face->overline_color_defaulted_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2713 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
2714 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2715 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2716 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2717 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2718 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2719 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
2720 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
2721 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2722 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2723 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2724 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2725
25189
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2726 /* Draw strike-through. */
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2727 if (s->face->strike_through_p)
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2728 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2729 unsigned long h = 1;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2730 unsigned long dy = (s->height - h) / 2;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2731
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2732 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
2733 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
2734 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2735 else
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2736 {
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2737 XGCValues xgcv;
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2738 XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2739 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
2740 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
2741 s->width, h);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2742 XSetForeground (s->display, s->gc, xgcv.foreground);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2743 }
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2744 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2745
36800
7a809e9fc67e (x_draw_glyph_string): Draw relief (if any) before
Kenichi Handa <handa@m17n.org>
parents: 36795
diff changeset
2746 /* 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
2747 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
2748 x_draw_glyph_string_box (s);
710445260df6 (x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents: 25150
diff changeset
2749 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2750
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2751 /* Reset clipping. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2752 XSetClipMask (s->display, s->gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2753 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2754
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2755 /* 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
2756
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2757 void
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2758 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
2759 struct frame *f;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2760 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
2761 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2762 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
2763 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
2764 x, y, width, height,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2765 x + shift_by, y);
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
2766 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2767
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2768 /* 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
2769 for X frames. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2770
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2771 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2772 x_delete_glyphs (n)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2773 register int n;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2774 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2775 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2776 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2777
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2778
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2779 /* 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
2780 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
2781
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2782 void
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2783 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
2784 Display *dpy;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2785 Window window;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2786 int x, y;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2787 int width, height;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2788 int exposures;
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2789 {
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2790 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
2791 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
2792 }
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2793
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
2794
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2795 /* 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
2796 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
2797
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2798 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2799 x_clear_frame ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2800 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2801 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2802
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2803 if (updating_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2804 f = updating_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2805 else
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2806 f = SELECTED_FRAME ();
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
2807
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2808 /* 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
2809 longer visible. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2810 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
2811 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
2812 output_cursor.x = -1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2813
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2814 /* 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
2815 follow an explicit cursor_to. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2816 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
2817 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
2818
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
2819 /* 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
2820 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
2821 x_scroll_bar_clear (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
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 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
2824
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2825 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2826 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2827
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2828
6791
7036e4fd549f (dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents: 6767
diff changeset
2829
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2830 /* 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
2831
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2832 /* 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
2833 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
2834
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2835 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2836
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2837
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2838 /* 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
2839 *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
2840
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2841 static int
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2842 timeval_subtract (result, x, y)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2843 struct timeval *result, x, y;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2844 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2845 /* 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
2846 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
2847 if (x.tv_usec < y.tv_usec)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2848 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2849 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
2850 y.tv_usec -= 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2851 y.tv_sec += nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2852 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2853
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2854 if (x.tv_usec - y.tv_usec > 1000000)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2855 {
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2856 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
2857 y.tv_usec += 1000000 * nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2858 y.tv_sec -= nsec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2859 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2860
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2861 /* 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
2862 positive. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2863 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
2864 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
2865
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2866 /* 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
2867 negative. */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2868 return x.tv_sec < y.tv_sec;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2869 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2870
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
2871 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
2872 XTflash (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
2873 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2874 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2875 BLOCK_INPUT;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2876
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 GC gc;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2879
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2880 /* 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
2881 pixels into background pixels. */
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 XGCValues values;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2884
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2885 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
2886 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
2887 ^ f->output_data.x->background_pixel);
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
2888
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
2889 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
2890 GCFunction | GCForeground, &values);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2891 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2892
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2893 {
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2894 /* 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
2895 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
2896 /* 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
2897 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
2898 /* 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
2899 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
2900 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
2901
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2902 int width;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2903
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2904 /* 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
2905 edge it is next to. */
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2906 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
2907 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2908 case vertical_scroll_bar_left:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2909 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
2910 break;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2911
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2912 case vertical_scroll_bar_right:
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2913 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
2914 break;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2915
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2916 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2917 break;
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2918 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2919
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2920 width = flash_right - flash_left;
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2921
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2922 /* 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
2923 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
2924 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2925 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
2926 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2927 (FRAME_INTERNAL_BORDER_WIDTH (f)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2928 + 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
2929 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2930 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
2931 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2932 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2933 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2934 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2935 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2936 else
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2937 /* 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
2938 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
2939 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
2940 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
2941
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2942 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2943
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2944 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2945 struct timeval wakeup;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2946
5362
d1fa597d923d (XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents: 5357
diff changeset
2947 EMACS_GET_TIME (wakeup);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2948
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2949 /* 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
2950 wakeup.tv_usec += 150000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2951 wakeup.tv_sec += (wakeup.tv_usec / 1000000);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2952 wakeup.tv_usec %= 1000000;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2953
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2954 /* 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
2955 available. */
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2956 while (! detect_input_pending ())
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2957 {
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2958 struct timeval current;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2959 struct timeval timeout;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2960
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2961 EMACS_GET_TIME (current);
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2962
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2963 /* 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
2964 if (timeval_subtract (&current, wakeup, current))
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2965 break;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2966
36599
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2967 /* How long `select' should wait. */
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2968 timeout.tv_sec = 0;
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2969 timeout.tv_usec = 10000;
3813a1116259 (XTflash): Make the timeout of select shorter, and call
Gerd Moellmann <gerd@gnu.org>
parents: 36587
diff changeset
2970
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2971 /* 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
2972 select (0, NULL, NULL, NULL, &timeout);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2973 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2974 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
2975
16352
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2976 /* 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
2977 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
2978 {
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2979 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
2980 flash_left,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
2981 (FRAME_INTERNAL_BORDER_WIDTH (f)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
2982 + 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
2983 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2984 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
2985 flash_left,
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2986 (height - flash_height
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2987 - FRAME_INTERNAL_BORDER_WIDTH (f)),
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2988 width, flash_height);
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2989 }
dfe3713f8c75 (XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents: 16330
diff changeset
2990 else
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
2991 /* 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
2992 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
2993 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
2994 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
2995
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
2996 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
2997 x_flush (f);
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2998 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
2999 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
3000
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3001 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3002 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3003
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3004 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
3005
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3006
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3007 /* Make audible bell. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3008
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
3009 void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3010 XTring_bell ()
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3011 {
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3012 struct frame *f = SELECTED_FRAME ();
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3013
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3014 if (FRAME_X_DISPLAY (f))
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3015 {
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
3016 #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
3017 if (visible_bell)
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3018 XTflash (f);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3019 else
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3020 #endif
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3021 {
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3022 BLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3023 XBell (FRAME_X_DISPLAY (f), 0);
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3024 XFlush (FRAME_X_DISPLAY (f));
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3025 UNBLOCK_INPUT;
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3026 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3027 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3028 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3029
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3030
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3031 /* Specify how many text lines, from the top of the window,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3032 should be affected by insert-lines and delete-lines operations.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3033 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
3034 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
3035
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
3036 static void
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3037 XTset_terminal_window (n)
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3038 register int n;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3039 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3040 /* This function intentionally left blank. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3041 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3042
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3043
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3044
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3045 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3046 Line Dance
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 /* 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
3050 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
3051
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3052 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3053 x_ins_del_lines (vpos, n)
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3054 int vpos, n;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3055 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3056 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3057 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3058
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3059
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3060 /* 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
3061
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3062 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3063 x_scroll_run (w, run)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3064 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3065 struct run *run;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3066 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3067 struct frame *f = XFRAME (w->frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3068 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
3069
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3070 /* 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
3071 without mode lines. Include in this box the left and right
04a7db64864b Fringe cleanup.
Kim F. Storm <storm@cua.dk>
parents: 41088
diff changeset
3072 fringe of W. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3073 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
3074
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3075 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
3076 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
3077 bottom_y = y + height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3078
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3079 if (to_y < from_y)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3080 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3081 /* 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
3082 line at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3083 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
3084 height = bottom_y - from_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3085 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3086 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3087 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3088 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3089 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3090 /* 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
3091 at the bottom. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3092 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
3093 height = bottom_y - to_y;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3094 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3095 height = run->height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3096 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3097
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3098 BLOCK_INPUT;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3099
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3100 /* 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
3101 updated_window = w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3102 x_clear_cursor (w);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3103
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3104 XCopyArea (FRAME_X_DISPLAY (f),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3105 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
3106 f->output_data.x->normal_gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3107 x, from_y,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3108 width, height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3109 x, to_y);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3110
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3111 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3112 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3113
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3114
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3115
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3116 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3117 Exposure Events
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3118 ***********************************************************************/
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3119
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3120
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3121 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
3122 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
3123 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3124 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
3125 /* 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
3126 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
3127 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
3128 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
3129 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
3130 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
3131 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
3132 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
3133 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3134 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3135
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3136 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
3137 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
3138 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3139 {
3943
cbdf67dd68d0 * xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents: 3938
diff changeset
3140 /* 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
3141 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
3142 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
3143 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
3144 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
3145 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
3146 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
3147 UNBLOCK_INPUT;
12431
80a5aedfb4c7 (XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents: 12192
diff changeset
3148 x_update_cursor (f, 1);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3149 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3150
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3151 /* The focus has changed. Update the frames as necessary to reflect
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3152 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
3153 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
3154 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
3155 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
3156
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3157 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3158 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
3159 struct x_display_info *dpyinfo;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3160 struct frame *frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3161 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3162 struct frame *old_focus = dpyinfo->x_focus_frame;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3163
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3164 if (frame != dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3165 {
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3166 /* Set this before calling other routines, so that they see
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3167 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
3168 dpyinfo->x_focus_frame = frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3169
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3170 if (old_focus && old_focus->auto_lower)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3171 x_lower_frame (old_focus);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3172
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3173 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3174 selected_frame = frame;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
3175 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
3176 selected_frame);
51048
7ac9c3bea5ea (Fselect_window): Add optional arg `norecord'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50521
diff changeset
3177 Fselect_window (selected_frame->selected_window, Qnil);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3178 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
3179 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3180
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3181 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
3182 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
3183 else
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
3184 pending_autoraise_frame = 0;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3185 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3186
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3187 x_frame_rehighlight (dpyinfo);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3188 }
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3189
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3190 /* 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
3191 If FRAME has focus and there exists more than one frame, puts
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3192 a FOCUS_IN_EVENT into *BUFP. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3193
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3194 static void
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3195 x_focus_changed (type, state, dpyinfo, frame, bufp)
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3196 int type;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3197 int state;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3198 struct x_display_info *dpyinfo;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3199 struct frame *frame;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3200 struct input_event *bufp;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3201 {
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3202 if (type == FocusIn)
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3203 {
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3204 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
3205 {
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3206 x_new_focus_frame (dpyinfo, frame);
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3207 dpyinfo->x_focus_event_frame = frame;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3208
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3209 /* 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
3210 for a switch-frame event we don't need. */
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3211 if (GC_NILP (Vterminal_frame)
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3212 && GC_CONSP (Vframe_list)
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3213 && !GC_NILP (XCDR (Vframe_list)))
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3214 {
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3215 bufp->kind = FOCUS_IN_EVENT;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3216 XSETFRAME (bufp->frame_or_window, frame);
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3217 }
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3218 }
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3219
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3220 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
3221
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3222 #ifdef HAVE_X_I18N
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3223 if (FRAME_XIC (frame))
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3224 XSetICFocus (FRAME_XIC (frame));
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3225 #endif
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3226 }
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3227 else if (type == FocusOut)
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3228 {
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3229 frame->output_data.x->focus_state &= ~state;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3230
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3231 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
3232 {
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3233 dpyinfo->x_focus_event_frame = 0;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3234 x_new_focus_frame (dpyinfo, 0);
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3235 }
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 #ifdef HAVE_X_I18N
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3238 if (FRAME_XIC (frame))
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3239 XUnsetICFocus (FRAME_XIC (frame));
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3240 #endif
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3241 }
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3242 }
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3243
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3244 /* 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
3245 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
3246
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3247 Returns FOCUS_IN_EVENT event in *BUFP. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3248
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3249 static void
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3250 x_detect_focus_change (dpyinfo, event, bufp)
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3251 struct x_display_info *dpyinfo;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3252 XEvent *event;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3253 struct input_event *bufp;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3254 {
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3255 struct frame *frame;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3256
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
3257 frame = x_any_window_to_frame (dpyinfo, event->xany.window);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3258 if (! frame)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3259 return;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3260
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3261 switch (event->type)
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3262 {
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3263 case EnterNotify:
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3264 case LeaveNotify:
53061
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3265 {
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3266 struct frame *focus_frame = dpyinfo->x_focus_event_frame;
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3267 int focus_state
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3268 = focus_frame ? focus_frame->output_data.x->focus_state : 0;
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3269
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3270 if (event->xcrossing.detail != NotifyInferior
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3271 && event->xcrossing.focus
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3272 && ! (focus_state & FOCUS_EXPLICIT))
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3273 x_focus_changed ((event->type == EnterNotify ? FocusIn : FocusOut),
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3274 FOCUS_IMPLICIT,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3275 dpyinfo, frame, bufp);
53061
4835b200fafe * xterm.c (x_detect_focus_change): Do not change focus frame for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53038
diff changeset
3276 }
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3277 break;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3278
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3279 case FocusIn:
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3280 case FocusOut:
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3281 x_focus_changed (event->type,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3282 (event->xfocus.detail == NotifyPointer ?
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3283 FOCUS_IMPLICIT : FOCUS_EXPLICIT),
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3284 dpyinfo, frame, bufp);
46076
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3285 break;
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3286 }
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3287 }
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3288
819af351608b (x_focus_changed): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 45986
diff changeset
3289
10223
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
3290 /* 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
3291
97fc8c6b4a74 (XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents: 9823
diff changeset
3292 void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3293 x_mouse_leave (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3294 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
3295 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3296 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
3297 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3298
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3299 /* 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
3300 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
3301 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
3302
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3303 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
3304 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
3305 the appropriate X display info. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3306
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3307 static void
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3308 XTframe_rehighlight (frame)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3309 struct frame *frame;
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3310 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3311 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
3312 }
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3313
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3314 static void
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3315 x_frame_rehighlight (dpyinfo)
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3316 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
3317 {
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3318 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
3319
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3320 if (dpyinfo->x_focus_frame)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3321 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3322 dpyinfo->x_highlight_frame
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3323 = ((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
3324 ? 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
3325 : dpyinfo->x_focus_frame);
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3326 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
3327 {
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3328 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
3329 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
3330 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3331 }
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3332 else
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3333 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
3334
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
3335 if (dpyinfo->x_highlight_frame != old_highlight)
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3336 {
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3337 if (old_highlight)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3338 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
3339 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
3340 frame_highlight (dpyinfo->x_highlight_frame);
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
3341 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3342 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3343
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3344
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3345
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3346 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3347
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3348 /* 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
3349 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
3350 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
3351 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
3352 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3353 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
3354 KeySym *syms;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3355 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
3356 XModifierKeymap *mods;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3357
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3358 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
3359 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
3360 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
3361 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
3362 dpyinfo->hyper_mod_mask = 0;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3363
2127
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
3364 #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
3365 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
3366 #else
13884
26245345f6f1 (x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents: 13782
diff changeset
3367 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
3368 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
3369 #endif
adaf588e32a6 * xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents: 2064
diff changeset
3370
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3371 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
3372 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
3373 &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
3374 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
3375
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3376 /* 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
3377 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
3378 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3379 int row, col; /* The row and column in the modifier table. */
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3380 int found_alt_or_meta;
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3381
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3382 for (row = 3; row < 8; row++)
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3383 {
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3384 found_alt_or_meta = 0;
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3385 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
3386 {
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3387 KeyCode code = 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
3388
6560
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
3389 /* Zeroes are used for filler. Skip them. */
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
3390 if (code == 0)
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
3391 continue;
a071babfa9ea (x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents: 6521
diff changeset
3392
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3393 /* 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
3394 {
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3395 int code_col;
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3396
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3397 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
3398 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3399 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
3400
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3401 switch (sym)
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3402 {
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3403 case XK_Meta_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3404 case XK_Meta_R:
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3405 found_alt_or_meta = 1;
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3406 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
3407 break;
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3408
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3409 case XK_Alt_L:
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3410 case XK_Alt_R:
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3411 found_alt_or_meta = 1;
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3412 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
3413 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
3414
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
3415 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
3416 case XK_Hyper_R:
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3417 if (!found_alt_or_meta)
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3418 dpyinfo->hyper_mod_mask |= (1 << row);
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3419 code_col = syms_per_code;
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3420 col = mods->max_keypermod;
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
3421 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
3422
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
3423 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
3424 case XK_Super_R:
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3425 if (!found_alt_or_meta)
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3426 dpyinfo->super_mod_mask |= (1 << row);
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3427 code_col = syms_per_code;
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3428 col = mods->max_keypermod;
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3429 break;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
3430
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
3431 case XK_Shift_Lock:
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
3432 /* Ignore this if it's not on the lock modifier. */
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3433 if (!found_alt_or_meta && ((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
3434 dpyinfo->shift_lock_mask = LockMask;
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3435 code_col = syms_per_code;
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3436 col = mods->max_keypermod;
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
3437 break;
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3438 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3439 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3440 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3441 }
57333
3bce830e4b33 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57315
diff changeset
3442 }
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3443 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3444
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3445 /* 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
3446 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
3447 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3448 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
3449 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
3450 }
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3451
2923
c8997402dd6b (x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents: 2882
diff changeset
3452 /* 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
3453 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
3454 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
3455 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3456 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
3457 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3458
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3459 XFree ((char *) syms);
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3460 XFreeModifiermap (mods);
1279
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3461 }
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
3462
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3463 /* 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
3464 Emacs uses. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3465
1530
a7f8a1fe258e * xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents: 1436
diff changeset
3466 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
3467 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
3468 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3469 unsigned int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3470 {
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3471 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
3472 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
3473 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
3474 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
3475 Lisp_Object tem;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3476
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3477 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
3478 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
3479 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
3480 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
3481 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
3482 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
3483 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
3484 if (! EQ (tem, Qnil)) mod_super = XUINT (tem);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3485
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3486
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3487 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
3488 | ((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
3489 | ((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
3490 | ((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
3491 | ((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
3492 | ((state & dpyinfo->hyper_mod_mask) ? mod_hyper : 0));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3493 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3494
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3495 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
3496 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
3497 struct x_display_info *dpyinfo;
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3498 unsigned int state;
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3499 {
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3500 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
3501 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
3502 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
3503 EMACS_UINT mod_super = super_modifier;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3504
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3505 Lisp_Object tem;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3506
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3507 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
3508 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
3509 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
3510 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
3511 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
3512 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
3513 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
3514 if (! EQ (tem, Qnil)) mod_super = XUINT (tem);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3515
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3516
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
3517 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
3518 | ((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
3519 | ((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
3520 | ((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
3521 | ((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
3522 | ((state & mod_meta) ? dpyinfo->meta_mod_mask : 0));
2661
77f1457d000e Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents: 2474
diff changeset
3523 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3524
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3525 /* Convert a keysym to its name. */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3526
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3527 char *
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3528 x_get_keysym_name (keysym)
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3529 KeySym keysym;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3530 {
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3531 char *value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3532
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3533 BLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3534 value = XKeysymToString (keysym);
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3535 UNBLOCK_INPUT;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3536
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3537 return value;
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
3538 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3539
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3540
3585
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
3541
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
3542 /* Mouse clicks and mouse movement. Rah. */
19aab2d09a4d * xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents: 3558
diff changeset
3543
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3544 /* Prepare a mouse-event in *RESULT for placement in the input queue.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3545
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3546 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
3547 the mouse. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3548
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3549 static Lisp_Object
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3550 construct_mouse_click (result, event, f)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3551 struct input_event *result;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3552 XButtonEvent *event;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3553 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3554 {
45803
9484de301252 Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents: 45563
diff changeset
3555 /* 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
3556 otherwise. */
45803
9484de301252 Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents: 45563
diff changeset
3557 result->kind = MOUSE_CLICK_EVENT;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3558 result->code = event->button - Button1;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 642
diff changeset
3559 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
3560 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
3561 event->state)
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3562 | (event->type == ButtonRelease
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3563 ? up_modifier
1324
44215417cf6e * xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents: 1279
diff changeset
3564 : down_modifier));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3565
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3566 XSETINT (result->x, event->x);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3567 XSETINT (result->y, event->y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3568 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
3569 result->arg = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3570 return Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3571 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3572
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3573
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3574 /* Function to report a mouse movement to the mainstream Emacs code.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3575 The input handler calls this.
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3576
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3577 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
3578 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
3579 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
3580 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
3581
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3582 static XMotionEvent last_mouse_motion_event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3583 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
3584
65985
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3585 static void remember_mouse_glyph P_ ((struct frame *, int, int));
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3586
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3587 static void
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3588 note_mouse_movement (frame, event)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
3589 FRAME_PTR frame;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3590 XMotionEvent *event;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3591 {
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3592 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
3593 last_mouse_motion_event = *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3594 XSETFRAME (last_mouse_motion_frame, frame);
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3595
7680
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
3596 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
3597 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3598 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
3599 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
3600 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
3601 }
8212755ff793 (note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents: 7651
diff changeset
3602
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3603 /* 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
3604 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
3605 || 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
3606 || 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
3607 || 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
3608 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3609 frame->mouse_moved = 1;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3610 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
3611 note_mouse_highlight (frame, event->x, event->y);
65985
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3612 /* Remember which glyph we're now on. */
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3613 remember_mouse_glyph (frame, event->x, event->y);
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3614 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3615 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3616
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3617
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3618 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3619 Mouse Face
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3620 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3621
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3622 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3623 redo_mouse_highlight ()
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3624 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3625 if (!NILP (last_mouse_motion_frame)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3626 && 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
3627 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
3628 last_mouse_motion_event.x,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3629 last_mouse_motion_event.y);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3630 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3631
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3632
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3633 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
3634
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3635
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3636 /* 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
3637 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
3638 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
3639 values. */
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3640
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3641 static int
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3642 glyph_rect (f, x, y, rect)
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3643 struct frame *f;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3644 int x, y;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3645 XRectangle *rect;
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3646 {
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3647 Lisp_Object window;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3648 struct window *w;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3649 struct glyph_row *r, *end_row;
66003
eefcdbee90bc (glyph_rect): Return 0 if position is outside text area.
Kim F. Storm <storm@cua.dk>
parents: 65985
diff changeset
3650 enum window_part part;
eefcdbee90bc (glyph_rect): Return 0 if position is outside text area.
Kim F. Storm <storm@cua.dk>
parents: 65985
diff changeset
3651
eefcdbee90bc (glyph_rect): Return 0 if position is outside text area.
Kim F. Storm <storm@cua.dk>
parents: 65985
diff changeset
3652 window = window_from_coordinates (f, x, y, &part, &x, &y, 0);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3653 if (NILP (window))
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3654 return 0;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3655
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3656 w = XWINDOW (window);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3657 r = MATRIX_FIRST_TEXT_ROW (w->current_matrix);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3658 end_row = r + w->current_matrix->nrows - 1;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3659
66003
eefcdbee90bc (glyph_rect): Return 0 if position is outside text area.
Kim F. Storm <storm@cua.dk>
parents: 65985
diff changeset
3660 if (part != ON_TEXT)
eefcdbee90bc (glyph_rect): Return 0 if position is outside text area.
Kim F. Storm <storm@cua.dk>
parents: 65985
diff changeset
3661 return 0;
eefcdbee90bc (glyph_rect): Return 0 if position is outside text area.
Kim F. Storm <storm@cua.dk>
parents: 65985
diff changeset
3662
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3663 for (; r < end_row && r->enabled_p; ++r)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3664 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3665 if (r->y >= y)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3666 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3667 struct glyph *g = r->glyphs[TEXT_AREA];
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3668 struct glyph *end = g + r->used[TEXT_AREA];
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3669 int gx = r->x;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3670 while (g < end && gx < x)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3671 gx += g->pixel_width, ++g;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3672 if (g < end)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3673 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3674 rect->width = g->pixel_width;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3675 rect->height = r->height;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3676 rect->x = WINDOW_TO_FRAME_PIXEL_X (w, gx);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3677 rect->y = WINDOW_TO_FRAME_PIXEL_Y (w, r->y);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3678 return 1;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3679 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3680 break;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3681 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3682 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3683
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
3684 return 0;
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3685 }
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3686
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3687
65985
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3688 /* Remember which glyph the mouse is over.
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3689 */
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3690 static void
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3691 remember_mouse_glyph (f1, win_x, win_y)
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3692 FRAME_PTR f1;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3693 int win_x, win_y;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3694 {
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3695 int width, height, gx, gy;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3696
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3697 /* Try getting the rectangle of the actual glyph. */
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3698 if (!glyph_rect (f1, win_x, win_y, &last_mouse_glyph))
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3699 {
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3700 /* If there is no glyph under the mouse, then we divide the screen
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3701 into a grid of the smallest glyph in the frame, and use that
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3702 as our "glyph". */
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3703 width = FRAME_SMALLEST_CHAR_WIDTH (f1);
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3704 height = FRAME_SMALLEST_FONT_HEIGHT (f1);
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3705 gx = win_x;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3706 gy = win_y;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3707
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3708 /* Arrange for the division in FRAME_PIXEL_X_TO_COL etc. to
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3709 round down even for negative values. */
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3710 if (gx < 0)
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3711 gx -= width - 1;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3712 if (gy < 0)
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3713 gy -= height - 1;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3714
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3715 gx = gx / width * width;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3716 gy = gy / width * width;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3717
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3718 last_mouse_glyph.width = width;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3719 last_mouse_glyph.height = height;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3720 last_mouse_glyph.x = gx;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3721 last_mouse_glyph.y = gy;
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3722 }
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3723 }
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3724
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3725
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3726 /* Return the current position of the mouse.
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3727 *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
3728
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3729 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
3730 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
3731 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
3732 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
3733
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3734 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
3735 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
3736 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
3737
36492
da77079d6981 (glyph_rect): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 36475
diff changeset
3738 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
3739 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
3740
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
3741 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
3742
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3743 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
3744 movement. */
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3745
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3746 static void
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
3747 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
3748 FRAME_PTR *fp;
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
3749 int insist;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3750 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3751 enum scroll_bar_part *part;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3752 Lisp_Object *x, *y;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
3753 unsigned long *time;
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3754 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
3755 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
3756
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3757 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3758
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
3759 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
3760 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
3761 else
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3762 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3763 Window root;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3764 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
3765
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3766 Window dummy_window;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3767 int dummy;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3768
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3769 Lisp_Object frame, tail;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3770
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3771 /* 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
3772 FOR_EACH_FRAME (tail, frame)
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3773 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
3774 XFRAME (frame)->mouse_moved = 0;
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
3775
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3776 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
3777
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3778 /* 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
3779 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
3780 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
3781
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3782 /* 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
3783 &root,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3784
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3785 /* 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
3786 a different screen. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3787 &dummy_window,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3788
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3789 /* The position on that root window. */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3790 &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
3791
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3792 /* 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
3793 &dummy, &dummy,
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3794
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3795 /* 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
3796 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
3797 (unsigned int *) &dummy);
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3798
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3799 /* 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
3800 containing the pointer. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3801 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3802 Window win, child;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3803 int win_x, win_y;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3804 int parent_x = 0, parent_y = 0;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
3805 int count;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3806
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3807 win = root;
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3808
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
3809 /* 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
3810 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
3811 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
3812
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
3813 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
3814
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3815 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
3816 && 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
3817 {
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3818 /* 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
3819 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
3820 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
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 /* From-window, to-window. */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3823 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
3824
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3825 /* 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
3826 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
3827
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3828 /* Child of win. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3829 &child);
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3830 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
3831 }
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3832 else
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3833 {
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3834 while (1)
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3835 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
3836 XTranslateCoordinates (FRAME_X_DISPLAY (*fp),
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3837
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3838 /* From-window, to-window. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3839 root, win,
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3840
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3841 /* From-position, to-position. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3842 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
3843
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3844 /* Child of win. */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3845 &child);
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3846
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
3847 if (child == None || child == win)
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3848 break;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3849
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3850 win = child;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3851 parent_x = win_x;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3852 parent_y = win_y;
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3853 }
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3854
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3855 /* Now we know that:
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3856 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
3857 (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
3858 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
3859 (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
3860 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
3861 (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
3862 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
3863 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
3864 never use them in that case.) */
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3865
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3866 /* 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
3867 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
3868
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3869 #ifdef USE_X_TOOLKIT
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3870 /* 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
3871 on the frame. */
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3872 if (f1 != NULL
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3873 && f1->output_data.x->menubar_widget
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3874 && 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
3875 f1 = NULL;
8702e88a1669 (XTmouse_position) [USE_X_TOOLKIT]: When the mouse
Gerd Moellmann <gerd@gnu.org>
parents: 33958
diff changeset
3876 #endif /* USE_X_TOOLKIT */
5228
c094c1df2e87 (XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents: 5156
diff changeset
3877 }
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
3878
11436
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
3879 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
3880 f1 = 0;
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
3881
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
3882 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
3883
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3884 /* 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
3885 if (! f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3886 {
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
3887 struct scroll_bar *bar;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
3888
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
3889 bar = x_window_to_scroll_bar (FRAME_X_DISPLAY (*fp), win);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3890
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3891 if (bar)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3892 {
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
3893 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
3894 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
3895 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
3896 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3897 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3898
20180
bfbf6a2939a3 (XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents: 19447
diff changeset
3899 if (f1 == 0 && insist > 0)
25682
f8543a6d88ca (XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
3900 f1 = SELECTED_FRAME ();
11122
ce63fb361ae9 (XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents: 11015
diff changeset
3901
3669
fd4187a96445 (XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents: 3639
diff changeset
3902 if (f1)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3903 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3904 /* 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
3905 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
3906 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
3907 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
3908 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
3909 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
3910 the frame are divided into. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3911
65985
42e5365826f1 (remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents: 65892
diff changeset
3912 remember_mouse_glyph (f1, win_x, win_y);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3913
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3914 *bar_window = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3915 *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
3916 *fp = f1;
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
3917 XSETINT (*x, win_x);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
3918 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
3919 *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
3920 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
3921 }
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3922 }
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3923
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3924 UNBLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3925 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3926
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3927
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
3928
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3929 /***********************************************************************
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3930 Scroll bars
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3931 ***********************************************************************/
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
3932
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3933 /* Scroll bar support. */
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3934
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
3935 /* Given an X window ID and a DISPLAY, find the struct scroll_bar which
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
3936 manages it.
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3937 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
3938 bits. */
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
3939
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3940 static struct scroll_bar *
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
3941 x_window_to_scroll_bar (display, window_id)
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
3942 Display *display;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3943 Window window_id;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3944 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3945 Lisp_Object tail;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3946
57901
cdbca26f9090 * xterm.c (x_window_to_scroll_bar): Only call
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57633
diff changeset
3947 #if defined (USE_GTK) && defined (USE_TOOLKIT_SCROLL_BARS)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
3948 window_id = (Window) xg_get_scroll_id_for_window (display, window_id);
57901
cdbca26f9090 * xterm.c (x_window_to_scroll_bar): Only call
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57633
diff changeset
3949 #endif /* USE_GTK && USE_TOOLKIT_SCROLL_BARS */
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
3950
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3951 for (tail = Vframe_list;
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3952 XGCTYPE (tail) == Lisp_Cons;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
3953 tail = XCDR (tail))
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3954 {
6521
a975c5944916 (x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6413
diff changeset
3955 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
3956
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
3957 frame = XCAR (tail);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3958 /* 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
3959 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
3960 abort ();
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3961
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3962 /* 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
3963 right window ID. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3964 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
3965 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
3966 /* 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
3967 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
3968 ! GC_NILP (bar) || (bar = condemned,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3969 condemned = Qnil,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3970 ! 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
3971 bar = XSCROLL_BAR (bar)->next)
53083
bf86de5f6d07 * xterm.c (x_window_to_scroll_bar): Move check of display to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53069
diff changeset
3972 if (SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)) == window_id &&
bf86de5f6d07 * xterm.c (x_window_to_scroll_bar): Move check of display to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53069
diff changeset
3973 FRAME_X_DISPLAY (XFRAME (frame)) == display)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
3974 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
3975 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3976
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3977 return 0;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3978 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
3979
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
3980
39671
45d46b88cdd1 USE_LUCID can be defined iff USE_X_TOOLKIT is defined.
Pavel Jan?k <Pavel@Janik.cz>
parents: 39618
diff changeset
3981 #if defined USE_LUCID
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3982
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3983 /* 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
3984 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
3985
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3986 static Widget
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3987 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
3988 Window window;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3989 {
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3990 Lisp_Object tail;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
3991
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3992 for (tail = Vframe_list;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3993 XGCTYPE (tail) == Lisp_Cons;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3994 tail = XCDR (tail))
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3995 {
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3996 Lisp_Object frame = XCAR (tail);
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3997 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
3998
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
3999 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
4000 return menu_bar;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
4001 }
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
4002
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
4003 return NULL;
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
4004 }
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
4005
39671
45d46b88cdd1 USE_LUCID can be defined iff USE_X_TOOLKIT is defined.
Pavel Jan?k <Pavel@Janik.cz>
parents: 39618
diff changeset
4006 #endif /* USE_LUCID */
37525
3ae3b09f76a1 (x_window_to_menu_bar) [USE_LUCID]: New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37212
diff changeset
4007
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4008
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4009 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4010 Toolkit scroll bars
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4011 ************************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4012
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
4013 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4014
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4015 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
4016 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
4017 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
4018 struct scroll_bar *));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4019 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
4020 int, int, int));
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4021
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4022
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4023 /* 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
4024 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
4025
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4026 static Lisp_Object window_being_scrolled;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4027
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4028 /* 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
4029
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4030 static int last_scroll_bar_part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4031
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4032 /* 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
4033 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
4034
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4035 #ifndef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4036 /* Id of action hook installed for scroll bars. */
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4037
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4038 static XtActionHookId action_hook_id;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4039
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4040 static Boolean xaw3d_arrow_scroll;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4041
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4042 /* 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
4043 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
4044 to avoid jerkyness. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4045
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4046 static Boolean xaw3d_pick_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4047
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4048 /* 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
4049 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
4050 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
4051 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
4052
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4053 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4054 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
4055 num_params)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4056 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4057 XtPointer client_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4058 String action_name;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4059 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4060 String *params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4061 Cardinal *num_params;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4062 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4063 int scroll_bar_p;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4064 char *end_action;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4065
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4066 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4067 scroll_bar_p = XmIsScrollBar (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4068 end_action = "Release";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4069 #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
4070 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4071 end_action = "EndScroll";
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4072 #endif /* USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4073
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4074 if (scroll_bar_p
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4075 && strcmp (action_name, end_action) == 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4076 && WINDOWP (window_being_scrolled))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4077 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4078 struct window *w;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4079
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4080 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
4081 scroll_bar_end_scroll, 0, 0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4082 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
4083
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4084 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
4085 {
f139cd7e1d62 (xt_action_hook): Unset dragging so the reset does take place.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50326
diff changeset
4086 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
4087 /* 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
4088 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
4089 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4090 window_being_scrolled = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4091 last_scroll_bar_part = -1;
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4092
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4093 /* Xt timeouts no longer needed. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4094 toolkit_scroll_bar_interaction = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4095 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4096 }
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4097 #endif /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4098
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4099 /* 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
4100 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
4101
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4102 static struct window **scroll_bar_windows;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4103 static int scroll_bar_windows_size;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4104
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4105
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4106 /* 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
4107 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
4108 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
4109 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
4110
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4111 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4112 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
4113 Lisp_Object window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4114 int part, portion, whole;
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 XEvent event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4117 XClientMessageEvent *ev = (XClientMessageEvent *) &event;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4118 struct window *w = XWINDOW (window);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4119 struct frame *f = XFRAME (w->frame);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4120 int i;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4121
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4122 BLOCK_INPUT;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4123
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4124 /* 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
4125 ev->type = ClientMessage;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4126 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
4127 ev->display = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4128 ev->window = FRAME_X_WINDOW (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4129 ev->format = 32;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4130
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4131 /* 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
4132 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
4133 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
4134 into that array in the event. */
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4135 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
4136 if (scroll_bar_windows[i] == NULL)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4137 break;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4138
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4139 if (i == scroll_bar_windows_size)
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4140 {
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4141 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
4142 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
4143 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
4144
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4145 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
4146 nbytes);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4147 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
4148 scroll_bar_windows_size = new_size;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4149 }
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4150
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4151 scroll_bar_windows[i] = w;
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4152 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
4153 ev->data.l[1] = (long) part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4154 ev->data.l[2] = (long) 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4155 ev->data.l[3] = (long) portion;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4156 ev->data.l[4] = (long) whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4157
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4158 /* Make Xt timeouts work while the scroll bar is active. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4159 toolkit_scroll_bar_interaction = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
4160
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4161 /* 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
4162 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
4163 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
4164 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
4165 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4166 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4167
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4168
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4169 /* 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
4170 in *IEVENT. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4171
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4172 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4173 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
4174 XEvent *event;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4175 struct input_event *ievent;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4176 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4177 XClientMessageEvent *ev = (XClientMessageEvent *) event;
29717
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
4178 Lisp_Object window;
acaa36b47f50 fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents: 29619
diff changeset
4179 struct frame *f;
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4180 struct window *w;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4181
33643
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4182 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
4183 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
4184
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4185 XSETWINDOW (window, w);
5c2be00ed2ba (scroll_bar_windows, scroll_bar_windows_size): New
Gerd Moellmann <gerd@gnu.org>
parents: 33606
diff changeset
4186 f = XFRAME (w->frame);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4187
45803
9484de301252 Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents: 45563
diff changeset
4188 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
4189 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
4190 ievent->arg = Qnil;
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4191 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4192 ievent->timestamp = CurrentTime;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4193 #else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4194 ievent->timestamp = XtLastTimestampProcessed (FRAME_X_DISPLAY (f));
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4195 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4196 ievent->part = ev->data.l[1];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4197 ievent->code = ev->data.l[2];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4198 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
4199 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
4200 ievent->modifiers = 0;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4201 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4202
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4203
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4204 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4205
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4206 /* 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
4207
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4208 #define XM_SB_MAX 10000000
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4209
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4210
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4211 /* 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
4212 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
4213 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
4214
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4215 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4216 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
4217 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4218 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4219 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4220 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
4221 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4222 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
4223
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4224 switch (cs->reason)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4225 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4226 case XmCR_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4227 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4228 part = scroll_bar_up_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4229 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4230
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4231 case XmCR_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4232 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4233 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4234 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4235
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4236 case XmCR_PAGE_DECREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4237 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4238 part = scroll_bar_above_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4239 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4240
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4241 case XmCR_PAGE_INCREMENT:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4242 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4243 part = scroll_bar_below_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4244 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4245
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4246 case XmCR_TO_TOP:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4247 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4248 part = scroll_bar_to_top;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4249 break;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4250
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4251 case XmCR_TO_BOTTOM:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4252 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4253 part = scroll_bar_to_bottom;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4254 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4255
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4256 case XmCR_DRAG:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4257 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4258 int slider_size;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4259
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4260 /* Get the slider size. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4261 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4262 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4263 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4264
50326
d63b3eeca844 (xm_scroll_callback): Undo a tiny bit of the previous change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50324
diff changeset
4265 whole = XM_SB_MAX - slider_size;
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4266 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
4267 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
4268 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
4269 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4270 break;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4271
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4272 case XmCR_VALUE_CHANGED:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4273 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4274 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4275
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4276 if (part >= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4277 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4278 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4279 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4280 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
4281 }
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
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4284
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4285 #else /* !USE_MOTIF, i.e. Xaw or GTK */
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4286 #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
4287 /* 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
4288 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
4289
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4290 static void
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4291 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
4292 GtkRange *widget;
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4293 gpointer data;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4294 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4295 struct scroll_bar *bar = (struct scroll_bar *) data;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4296 gdouble previous;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4297 gdouble position;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4298 gdouble *p;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4299 int diff;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4300
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4301 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
4302 GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_range_get_adjustment (widget));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4303
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4304 position = gtk_adjustment_get_value (adj);
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4305
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4306 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
4307 if (! p)
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4308 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4309 p = (gdouble*) xmalloc (sizeof (gdouble));
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4310 *p = XG_SB_MIN;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4311 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
4312 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4313
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4314 previous = *p;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4315 *p = position;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4316
58985
0395e55b4aa7 * xterm.c (xg_scroll_callback): Update XG_LAST_SB_DATA before
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 58891
diff changeset
4317 if (xg_ignore_gtk_scrollbar) return;
0395e55b4aa7 * xterm.c (xg_scroll_callback): Update XG_LAST_SB_DATA before
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 58891
diff changeset
4318
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4319 diff = (int) (position - previous);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4320
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4321 if (diff == (int) adj->step_increment)
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4322 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4323 part = scroll_bar_down_arrow;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4324 bar->dragging = Qnil;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4325 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4326 else if (-diff == (int) adj->step_increment)
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4327 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4328 part = scroll_bar_up_arrow;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4329 bar->dragging = Qnil;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4330 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4331 else if (diff == (int) adj->page_increment)
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4332 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4333 part = scroll_bar_below_handle;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4334 bar->dragging = Qnil;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4335 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4336 else if (-diff == (int) adj->page_increment)
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4337 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4338 part = scroll_bar_above_handle;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4339 bar->dragging = Qnil;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4340 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4341 else
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4342 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4343 part = scroll_bar_handle;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4344 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
4345 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
4346 bar->dragging = make_number ((int)portion);
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4347 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
4348
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4349 if (part >= 0)
59655
369714ad80ed (x_draw_glyph_string_box): Fix last_x for full width rows.
Kim F. Storm <storm@cua.dk>
parents: 59264
diff changeset
4350 {
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4351 window_being_scrolled = bar->window;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4352 last_scroll_bar_part = part;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4353 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
4354 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4355 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4356
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4357 #else /* not USE_GTK */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4358
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4359 /* 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
4360 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
4361 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
4362 the thumb is. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4363
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4364 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4365 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
4366 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4367 XtPointer client_data, call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4368 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4369 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
4370 float top = *(float *) call_data;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4371 float shown;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4372 int whole, portion, height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4373 int part;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4374
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4375 /* 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
4376 BLOCK_INPUT;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4377 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
4378 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4379
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4380 whole = 10000000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4381 portion = shown < 1 ? top * whole : 0;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4382
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4383 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
4384 /* 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
4385 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
4386 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
4387 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
4388 bottom). */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4389 part = scroll_bar_down_arrow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4390 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4391 part = scroll_bar_handle;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4392
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4393 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4394 bar->dragging = make_number (portion);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4395 last_scroll_bar_part = part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4396 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
4397 }
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
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4400 /* 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
4401 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
4402 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
4403 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
4404 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
4405 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
4406 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
4407
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4408 static void
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4409 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
4410 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4411 XtPointer client_data, call_data;
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 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
4414 /* The position really is stored cast to a pointer. */
cffd13ef1a1d (XTread_socket): Fix last change.
Dave Love <fx@gnu.org>
parents: 48085
diff changeset
4415 int position = (long) call_data;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4416 Dimension height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4417 int part;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4418
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4419 /* 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
4420 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4421 XtVaGetValues (widget, XtNheight, &height, NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4422 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4423
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4424 if (abs (position) >= height)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4425 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
4426
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4427 /* If Xaw3d was compiled with ARROW_SCROLLBAR,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4428 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
4429 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
4430 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
4431 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4432 part = scroll_bar_move_ratio;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4433
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4434 window_being_scrolled = bar->window;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4435 bar->dragging = Qnil;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4436 last_scroll_bar_part = part;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4437 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
4438 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4439
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4440 #endif /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4441 #endif /* not USE_MOTIF */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4442
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4443 #define SCROLL_BAR_NAME "verticalScrollBar"
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4444
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4445 /* 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
4446 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
4447
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4448 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4449 static void
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4450 x_create_toolkit_scroll_bar (f, bar)
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4451 struct frame *f;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4452 struct scroll_bar *bar;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4453 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4454 char *scroll_bar_name = SCROLL_BAR_NAME;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4455
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4456 BLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4457 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
4458 scroll_bar_name);
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4459 UNBLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4460 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4461
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4462 #else /* not USE_GTK */
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4463
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4464 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4465 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
4466 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4467 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4468 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4469 Window xwindow;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4470 Widget widget;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4471 Arg av[20];
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4472 int ac = 0;
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4473 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
4474 unsigned long pixel;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4475
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4476 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4477
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4478 #ifdef USE_MOTIF
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4479 /* Set resources. Create the widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4480 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4481 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
4482 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
4483 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4484 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
4485 XtSetArg (av[ac], XmNincrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4486 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4487
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4488 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
4489 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4490 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4491 XtSetArg (av[ac], XmNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4492 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4493 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4494
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4495 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
4496 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4497 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4498 XtSetArg (av[ac], XmNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4499 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4500 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4501
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4502 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
4503 scroll_bar_name, av, ac);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4504
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4505 /* 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
4506 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4507 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4508 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4509 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4510 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4511 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4512 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4513 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4514 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4515 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4516 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4517 (XtPointer) bar);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4518 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4519 (XtPointer) bar);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4520
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4521 /* 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
4522 XtRealizeWidget (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4523
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4524 /* 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
4525 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
4526 XDefineCursor (XtDisplay (widget), XtWindow (widget),
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4527 f->output_data.x->nontext_cursor);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4528
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4529 #else /* !USE_MOTIF i.e. use Xaw */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4530
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4531 /* 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
4532 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
4533 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
4534 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
4535 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4536 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac;
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4537 /* For smoother scrolling with Xaw3d -sm */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4538 /* XtSetArg (av[ac], XtNpickTop, True); ++ac; */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4539
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4540 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
4541 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4542 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4543 XtSetArg (av[ac], XtNforeground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4544 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4545 }
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 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
4548 if (pixel != -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4549 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4550 XtSetArg (av[ac], XtNbackground, pixel);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4551 ++ac;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4552 }
39618
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4553
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4554 /* 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
4555
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4556 /* 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
4557 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
4558 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4559 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
4560 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
4561 &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
4562 pixel = -1;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4563 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
4564 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4565 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
4566 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4567 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
4568 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
4569 &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
4570 pixel = -1;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4571 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
4572 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4573
61181
3b4e4d883374 Include ThreeD.h for XtNbeNiceToColormap.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60135
diff changeset
4574 #ifdef XtNbeNiceToColormap
39618
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4575 /* 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
4576 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
4577 || 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
4578 /* 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
4579 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
4580 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4581 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
4582 ++ac;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4583 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4584 else
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4585 /* 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
4586 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
4587 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
4588 {
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4589 /* 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
4590 the shadows. */
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4591 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
4592 ++ac;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4593
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4594 /* 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
4595 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
4596 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
4597 {
61181
3b4e4d883374 Include ThreeD.h for XtNbeNiceToColormap.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60135
diff changeset
4598 XtSetArg (av[ac], XtNtopShadowPixel, pixel);
39618
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4599 ++ac;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4600 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4601 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
4602 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
4603 {
61181
3b4e4d883374 Include ThreeD.h for XtNbeNiceToColormap.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60135
diff changeset
4604 XtSetArg (av[ac], XtNbottomShadowPixel, pixel);
39618
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4605 ++ac;
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4606 }
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4607 }
61181
3b4e4d883374 Include ThreeD.h for XtNbeNiceToColormap.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 60135
diff changeset
4608 #endif
39618
6d60a3a33839 (x_create_toolkit_scroll_bar): Try to allocate colors for the shadows,
Miles Bader <miles@gnu.org>
parents: 39586
diff changeset
4609
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4610 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4611 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
4612
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4613 {
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4614 char *initial = "";
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4615 char *val = initial;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4616 XtVaGetValues (widget, XtNscrollVCursor, (XtPointer) &val,
63103
e37d71ba7c6e (x_create_toolkit_scroll_bar): Use XtNarrowScrollbars if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62979
diff changeset
4617 #ifdef XtNarrowScrollbars
e37d71ba7c6e (x_create_toolkit_scroll_bar): Use XtNarrowScrollbars if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62979
diff changeset
4618 XtNarrowScrollbars, (XtPointer) &xaw3d_arrow_scroll,
e37d71ba7c6e (x_create_toolkit_scroll_bar): Use XtNarrowScrollbars if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62979
diff changeset
4619 #endif
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4620 XtNpickTop, (XtPointer) &xaw3d_pick_top, NULL);
63103
e37d71ba7c6e (x_create_toolkit_scroll_bar): Use XtNarrowScrollbars if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62979
diff changeset
4621 if (xaw3d_arrow_scroll || val == initial)
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4622 { /* ARROW_SCROLL */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4623 xaw3d_arrow_scroll = True;
63103
e37d71ba7c6e (x_create_toolkit_scroll_bar): Use XtNarrowScrollbars if available.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 62979
diff changeset
4624 /* Isn't that just a personal preference ? --Stef */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4625 XtVaSetValues (widget, XtNcursorName, "top_left_arrow", NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4626 }
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4627 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4628
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4629 /* Define callbacks. */
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4630 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
4631 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
4632 (XtPointer) bar);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4633
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4634 /* 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
4635 XtRealizeWidget (widget);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4636
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4637 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4638
46814
f7dd9a44324f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 46707
diff changeset
4639 /* 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
4640 finishes interacting with a scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4641 if (action_hook_id == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4642 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
4643
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4644 /* 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
4645 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
4646 xwindow = XtWindow (widget);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4647 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
4648
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4649 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4650 }
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4651 #endif /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4652
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4653
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4654 /* 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
4655 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
4656
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4657 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4658 static void
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4659 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
4660 struct scroll_bar *bar;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4661 int portion, position, whole;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4662 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4663 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
4664 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4665
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4666 #else /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4667 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4668 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
4669 struct scroll_bar *bar;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4670 int portion, position, whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4671 {
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
4672 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
4673 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
4674 float top, shown;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4675
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4676 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
4677
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4678 #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
4679
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4680 /* 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
4681 `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
4682 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
4683 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
4684 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
4685 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
4686 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
4687 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
4688 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
4689 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
4690 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
4691 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
4692 /* 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
4693 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
4694 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
4695
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4696 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
4697 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
4698 else
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4699 {
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4700 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
4701 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
4702 }
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4703
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4704 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
4705 {
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4706 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
4707
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4708 /* 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
4709 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
4710 value. */
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4711 size = shown * XM_SB_MAX;
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
4712 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
4713 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
4714
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4715 /* 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
4716 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
4717 value = min (value, XM_SB_MAX - size);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4718
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4719 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
4720 }
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
4721 #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
4722
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4723 if (whole == 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4724 top = 0, shown = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4725 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4726 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4727 top = (float) position / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4728 shown = (float) portion / whole;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4729 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4730
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4731 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4732 float old_top, old_shown;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4733 Dimension height;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4734 XtVaGetValues (widget,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4735 XtNtopOfThumb, &old_top,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4736 XtNshown, &old_shown,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4737 XtNheight, &height,
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4738 NULL);
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4739
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4740 /* Massage the top+shown values. */
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4741 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
4742 top = max (0, min (1, top));
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4743 else
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4744 top = old_top;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4745 /* 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
4746 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
4747
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4748 /* 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
4749 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
4750 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
4751 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
4752 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4753 if (NILP (bar->dragging))
25101
6b42357f28f9 (x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents: 25091
diff changeset
4754 XawScrollbarSetThumb (widget, top, shown);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4755 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4756 {
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4757 /* 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
4758 if (!xaw3d_pick_top)
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4759 shown = min (shown, old_shown);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4760
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4761 XawScrollbarSetThumb (widget, top, shown);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4762 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4763 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4764 }
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
4765 #endif /* !USE_MOTIF */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4766
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4767 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4768 }
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4769 #endif /* not USE_GTK */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4770
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4771 #endif /* USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4772
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4773
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4774
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4775 /************************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4776 Scroll bars, general
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4777 ************************************************************************/
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4778
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4779 /* Create a 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
4780 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
4781 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
4782 scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4783
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4784 static struct scroll_bar *
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4785 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
4786 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4787 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
4788 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4789 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
4790 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
4791 = 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
4792
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4793 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4794
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
4795 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4796 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
4797 #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
4798 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4799 XSetWindowAttributes a;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4800 unsigned long mask;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4801 Window window;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4802
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4803 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
4804 if (a.background_pixel == -1)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4805 a.background_pixel = f->output_data.x->background_pixel;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4806
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4807 a.event_mask = (ButtonPressMask | ButtonReleaseMask
1793
cf4c3f01ddb9 * xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents: 1787
diff changeset
4808 | ButtonMotionMask | PointerMotionHintMask
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4809 | ExposureMask);
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
4810 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
4811
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
4812 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
4813
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4814 /* 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
4815 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
4816 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
4817 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
4818 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
4819 left, top, width,
e2da1b3f3d94 (x_scroll_bar_create): Check for width and height > 0.
Gerd Moellmann <gerd@gnu.org>
parents: 40514
diff changeset
4820 window_box_height (w), False);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4821
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4822 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
4823 /* Position and size of scroll bar. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4824 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4825 top,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4826 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
4827 height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4828 /* Border width, depth, class, and visual. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4829 0,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4830 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4831 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4832 CopyFromParent,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4833 /* Attributes. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4834 mask, &a);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4835 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
4836 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4837 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4838
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4839 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
4840 XSETINT (bar->top, top);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4841 XSETINT (bar->left, left);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4842 XSETINT (bar->width, width);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4843 XSETINT (bar->height, height);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4844 XSETINT (bar->start, 0);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4845 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
4846 bar->dragging = Qnil;
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 /* 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
4849 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
4850 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
4851 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
4852 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
4853 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
4854
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4855 /* Map the window/widget. */
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
4856 #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
4857 {
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4858 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4859 xg_update_scrollbar_pos (f,
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4860 SCROLL_BAR_X_WINDOW (bar),
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4861 top,
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4862 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4863 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
57598
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
4864 max (height, 1));
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4865 xg_show_scroll_bar (SCROLL_BAR_X_WINDOW (bar));
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4866 #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
4867 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
4868 XtConfigureWidget (scroll_bar,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4869 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
4870 top,
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4871 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
4872 max (height, 1), 0);
488c4787ec0a (XTset_vertical_scroll_bar): Don't clear a zero height
Gerd Moellmann <gerd@gnu.org>
parents: 36442
diff changeset
4873 XtMapWidget (scroll_bar);
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
4874 #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
4875 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4876 #else /* not USE_TOOLKIT_SCROLL_BARS */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
4877 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
4878 #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
4879
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4880 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4881 return bar;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4882 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4883
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4884
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4885 /* Draw BAR's handle in the proper position.
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
4886
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4887 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
4888 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
4889 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
4890 events.)
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4891
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4892 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
4893 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
4894 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
4895 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
4896 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
4897
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4898 #ifndef USE_TOOLKIT_SCROLL_BARS
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4899
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4900 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4901 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
4902 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
4903 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
4904 int rebuild;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4905 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4906 int dragging = ! NILP (bar->dragging);
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4907 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
4908 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
4909 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
4910
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4911 /* 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
4912 if (! rebuild
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4913 && 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
4914 && 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
4915 return;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4916
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4917 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4918
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4919 {
16251
ec1b1ae37295 Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents: 16220
diff changeset
4920 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
4921 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
4922 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
4923
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4924 /* 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
4925 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
4926 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4927 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
4928
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4929 if (start < 0)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4930 start = 0;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4931 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
4932 start = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4933 end = start + length;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4934
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4935 if (end < start)
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4936 end = start;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4937 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
4938 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4939 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4940
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4941 /* 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
4942 XSETINT (bar->start, start);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
4943 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
4944
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4945 /* 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
4946 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
4947 end = top_range;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4948
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4949 /* 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
4950 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
4951 that many pixels tall. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4952 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
4953
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4954 /* 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
4955 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
4956 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
4957 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
4958 /* 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
4959 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
4960 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
4961 inside_width, start,
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
4962 False);
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4963
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4964 /* 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
4965 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
4966 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4967 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
4968
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4969 /* 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
4970 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
4971 /* x, y, width, height */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4972 VERTICAL_SCROLL_BAR_LEFT_BORDER,
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
4973 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
4974 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
4975
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4976 /* 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
4977 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
4978 XSetForeground (FRAME_X_DISPLAY (f), gc,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4979 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
4980
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4981 /* 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
4982 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
4983 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
4984 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
4985 /* 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
4986 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
4987 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
4988 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
4989 False);
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
4990
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4991 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4992
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
4993 UNBLOCK_INPUT;
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4994 }
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4995
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
4996 #endif /* !USE_TOOLKIT_SCROLL_BARS */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4997
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
4998 /* 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
4999 nil. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5000
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5001 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5002 x_scroll_bar_remove (bar)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5003 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
5004 {
33606
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
5005 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
5006 BLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5007
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
5008 #ifdef USE_TOOLKIT_SCROLL_BARS
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5009 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5010 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
5011 #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
5012 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
5013 #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
5014 #else
01f87b0ff56f (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
Gerd Moellmann <gerd@gnu.org>
parents: 33456
diff changeset
5015 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
5016 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5017
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5018 /* 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
5019 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
5020
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5021 UNBLOCK_INPUT;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5022 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5023
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5024
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5025 /* 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
5026 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
5027 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
5028 create one. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5029
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5030 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5031 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
5032 struct window *w;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5033 int portion, whole, position;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5034 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5035 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
5036 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
5037 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
5038 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
5039
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5040 /* Get window dimensions. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5041 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
5042 top = window_y;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5043 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
5044 height = window_height;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5045
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5046 /* 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
5047 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
5048
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5049 /* 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
5050 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
5051 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
5052 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
5053 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5054 sb_width = width;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5055
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5056 /* 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
5057 #ifdef USE_TOOLKIT_SCROLL_BARS
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5058 if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
57315
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5059 sb_left = (left +
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5060 (WINDOW_RIGHTMOST_P (w)
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5061 ? width - sb_width - (width - sb_width) / 2
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5062 : 0));
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5063 else
57315
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5064 sb_left = (left +
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5065 (WINDOW_LEFTMOST_P (w)
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5066 ? (width - sb_width) / 2
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5067 : width - sb_width));
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5068 #else
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5069 if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5070 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
5071 else
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5072 sb_left = left;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5073 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5074
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5075 /* 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
5076 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
5077 {
40610
e2da1b3f3d94 (x_scroll_bar_create): Check for width and height > 0.
Gerd Moellmann <gerd@gnu.org>
parents: 40514
diff changeset
5078 if (width > 0 && height > 0)
40257
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
5079 {
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
5080 BLOCK_INPUT;
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
5081 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
5082 left, top, width, height, False);
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
5083 UNBLOCK_INPUT;
98531a716f48 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40248
diff changeset
5084 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5085
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5086 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
5087 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5088 else
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5089 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5090 /* 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
5091 unsigned int mask = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5092
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5093 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
5094
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5095 BLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5096
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5097 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
5098 mask |= CWX;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5099 if (top != XINT (bar->top))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5100 mask |= CWY;
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5101 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
5102 mask |= CWWidth;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5103 if (height != XINT (bar->height))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5104 mask |= CWHeight;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5105
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5106 #ifdef USE_TOOLKIT_SCROLL_BARS
25269
621067279f19 (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25191
diff changeset
5107
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5108 /* Move/size the scroll bar widget. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5109 if (mask)
57315
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5110 {
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5111 /* Since toolkit scroll bars are smaller than the space reserved
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5112 for them on the frame, we have to clear "under" them. */
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5113 if (width > 0 && height > 0)
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5114 x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5115 left, top, width, height, False);
57598
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5116 #ifdef USE_GTK
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5117 xg_update_scrollbar_pos (f,
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5118 SCROLL_BAR_X_WINDOW (bar),
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5119 top,
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5120 sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5121 sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM *2,
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5122 max (height, 1));
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5123 #else /* not USE_GTK */
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5124 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
5125 sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5126 top,
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5127 sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5128 max (height, 1), 0);
57598
5a8bd30665f2 * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57454
diff changeset
5129 #endif /* not USE_GTK */
57315
0d912ccf6554 (XTset_vertical_scroll_bar): Improve handling of scroll
Kim F. Storm <storm@cua.dk>
parents: 57144
diff changeset
5130 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5131 #else /* not USE_TOOLKIT_SCROLL_BARS */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5132
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5133 /* 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
5134 VERTICAL_SCROLL_BAR_WIDTH_TRIM. */
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
5135 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM)
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
5136 {
35581
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5137 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
5138 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
5139 height, False);
3a46a6389078 (x_after_update_window_line): Don't clear if frame's
Gerd Moellmann <gerd@gnu.org>
parents: 35568
diff changeset
5140 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
5141 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
5142 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
5143 height, False);
25633
ddf2e1fef00b (XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents: 25546
diff changeset
5144 }
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5145
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5146 /* 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
5147 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
5148 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
5149 example. */
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5150 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5151 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
5152 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
5153 if (rest > 0 && height > 0)
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5154 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5155 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
5156 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
5157 left + area_width - rest, top,
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5158 rest, height, False);
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5159 else
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5160 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
5161 left, top, rest, height, False);
c1762ce8905b (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 40303
diff changeset
5162 }
36880
f9243c6624b0 (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 36824
diff changeset
5163 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5164
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5165 /* Move/size the scroll bar window. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5166 if (mask)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5167 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5168 XWindowChanges wc;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5169
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5170 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
5171 wc.y = top;
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5172 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
5173 wc.height = height;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5174 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
5175 mask, &wc);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5176 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5177
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5178 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5179
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5180 /* Remember new settings. */
25512
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5181 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
5182 XSETINT (bar->top, top);
8d013f20532c (x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents: 25465
diff changeset
5183 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
5184 XSETINT (bar->height, height);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5185
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5186 UNBLOCK_INPUT;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5187 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5188
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
5189 #ifdef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5190 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
5191 #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
5192 /* 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
5193 dragged. */
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5194 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
5195 {
25541
be975dcf4a0c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents: 25529
diff changeset
5196 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
5197
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5198 if (whole == 0)
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5199 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
5200 else
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5201 {
3686
910ea1d66bfd * xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents: 3683
diff changeset
5202 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
5203 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
5204 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
5205 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5206 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5207 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5208
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5209 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
5210 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5211
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5212
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5213 /* 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
5214 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
5215 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
5216 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
5217 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
5218 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
5219 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
5220
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5221 /* 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
5222 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
5223 `*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
5224
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5225 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5226 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
5227 FRAME_PTR frame;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5228 {
13205
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5229 /* 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
5230 while (! NILP (FRAME_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5231 {
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5232 Lisp_Object bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5233 bar = FRAME_SCROLL_BARS (frame);
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5234 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
5235 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
5236 XSCROLL_BAR (bar)->prev = Qnil;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5237 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame)))
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5238 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
5239 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar;
8eac10febc8e (x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12966
diff changeset
5240 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5241 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5242
33303
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5243
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5244 /* 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
5245 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
5246
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5247 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5248 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
5249 struct window *window;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5250 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5251 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
5252 struct frame *f;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5253
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5254 /* 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
5255 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
5256 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5257
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5258 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
5259
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5260 /* 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
5261 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
5262 if (NILP (bar->prev))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5263 {
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5264 /* 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
5265 the lists. */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5266 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
5267 /* 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
5268 return;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5269 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
5270 window->vertical_scroll_bar))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5271 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
5272 else
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5273 /* 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
5274 one or the other! */
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5275 abort ();
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5276 }
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5277 else
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5278 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
5279
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5280 if (! NILP (bar->next))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5281 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
5282
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5283 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
5284 bar->prev = Qnil;
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5285 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
5286 if (! NILP (bar->next))
1dc1953987a7 (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]: Map the
Gerd Moellmann <gerd@gnu.org>
parents: 33289
diff changeset
5287 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
5288 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5289
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5290 /* 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
5291 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
5292
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5293 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5294 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
5295 FRAME_PTR f;
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5296 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5297 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
5298
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5299 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
5300
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5301 /* 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
5302 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
5303 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
5304
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5305 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
5306 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5307 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
5308
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5309 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
5310
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5311 next = b->next;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5312 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
5313 }
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5314
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5315 /* 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
5316 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
5317 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5318
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5319
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
5320 #ifndef USE_TOOLKIT_SCROLL_BARS
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5321 /* 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
5322 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
5323
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5324 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
5325 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5326
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5327 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5328 x_scroll_bar_expose (bar, event)
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5329 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
5330 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5331 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5332 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
5333 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
5334 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
5335 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
5336
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5337 BLOCK_INPUT;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5338
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5339 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
5340
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5341 /* 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
5342 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
5343
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5344 /* 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
5345 0, 0,
16301
a02555b4b2b9 (x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents: 16251
diff changeset
5346 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
5347 XINT (bar->height) - 1);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5348
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5349 UNBLOCK_INPUT;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5350
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
5351 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5352 #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
5353
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5354 /* 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
5355 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
5356
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5357 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
5358 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5359
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
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 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5362 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
5363 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
5364 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5365 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
5366 {
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5367 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
5368 abort ();
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5369
45803
9484de301252 Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents: 45563
diff changeset
5370 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
5371 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
5372 emacs_event->modifiers
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
5373 = (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
5374 (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
5375 event->xbutton.state)
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5376 | (event->type == ButtonRelease
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5377 ? up_modifier
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5378 : down_modifier));
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5379 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
5380 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
5381 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
5382 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5383 #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
5384 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
5385 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
5386 = 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
5387 #endif
10287
2e96f9f98276 (x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents: 10274
diff changeset
5388 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
5389 = 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
5390 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
5391
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5392 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
5393 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
5394
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5395 if (y < XINT (bar->start))
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5396 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
5397 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
5398 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
5399 else
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5400 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
5401
5440f00480e6 * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2923
diff changeset
5402 /* 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
5403 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
5404 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
5405 #if 0
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5406 /* 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
5407 holding it. */
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5408 if (event->type == ButtonPress
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5409 && 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
5410 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
5411 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5412
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
5413 #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
5414 /* 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
5415 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
5416 && ! NILP (bar->dragging))
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5417 {
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5418 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
5419 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
5420
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5421 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
5422 bar->dragging = Qnil;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5423 }
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
5424 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5425
2958
3124e6244d1a * xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents: 2953
diff changeset
5426 /* 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
5427 #if 0
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
5428 /* 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
5429 the handle. */
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5430 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
5431 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
5432 else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5433 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
5434 #else
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5435 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
5436 #endif
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5437
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5438 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
5439 }
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5440 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5441
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
5442 #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
5443
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5444 /* 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
5445
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5446 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
5447 mark bits. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5448
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5449 static void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5450 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
5451 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
5452 XEvent *event;
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5453 {
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5454 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame);
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5455
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5456 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
5457
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5458 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
5459 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
5460
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5461 /* 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
5462 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
5463 {
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5464 /* 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
5465 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
5466
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5467 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
5468 {
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5469 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
5470
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5471 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
5472 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5473 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5474 }
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5475
25716
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
5476 #endif /* !USE_TOOLKIT_SCROLL_BARS */
e2d5cd96727b (x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents: 25692
diff changeset
5477
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5478 /* 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
5479 on the scroll bar. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5480
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5481 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
5482 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
5483 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
5484 Lisp_Object *bar_window;
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5485 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
5486 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
5487 unsigned long *time;
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5488 {
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5489 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
5490 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
5491 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
5492 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
5493 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
5494 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
5495 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
5496
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5497 BLOCK_INPUT;
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5498
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5499 /* 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
5500 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
5501 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
5502
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5503 /* 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
5504 &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
5505 &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
5506
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5507 /* 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
5508 &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
5509
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5510 /* 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
5511 &dummy_mask))
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
5512 ;
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5513 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5514 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5515 #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
5516 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
5517 = 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
5518 #endif
2982
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5519 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
5520 = 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
5521
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5522 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
5523
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5524 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
5525 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
5526
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5527 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
5528 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
5529 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
5530 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
5531
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
5532 *fp = f;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
5533 *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
5534
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5535 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
5536 *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
5537 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
5538 *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
5539 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
5540 *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
5541 else
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5542 *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
5543
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5544 XSETINT (*x, win_y);
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
5545 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
5546
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
5547 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
5548 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
5549 }
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5550
44ed08628516 * xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents: 2977
diff changeset
5551 *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
5552
1803
5752a95053f2 * xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents: 1793
diff changeset
5553 UNBLOCK_INPUT;
1787
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5554 }
5e245540d06f Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents: 1739
diff changeset
5555
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5556
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5557 /* 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
5558 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
5559 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
5560 redraw them. */
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5561
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
5562 void
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
5563 x_scroll_bar_clear (f)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5564 FRAME_PTR f;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5565 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5566 #ifndef USE_TOOLKIT_SCROLL_BARS
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5567 Lisp_Object bar;
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
5568
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
5569 /* 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
5570 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
5571 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
5572 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
5573 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
5574 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
5575 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
5576 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
5577 0, 0, 0, 0, True);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5578 #endif /* not USE_TOOLKIT_SCROLL_BARS */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5579 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5580
8353
525e990ca9d2 (x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 8291
diff changeset
5581
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
5582 /* The main X event-reading loop - XTread_socket. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5583
43479
4cedb4e5510e (enter_timestamp): Put in #if 0 to prevent warning.
Pavel Jan?k <Pavel@Janik.cz>
parents: 43369
diff changeset
5584 #if 0
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5585 /* 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
5586 but we have to put it out here, since static variables within functions
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5587 sometimes don't work. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5588
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5589 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
5590 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5591
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5592 /* 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
5593 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
5594 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
5595 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
5596
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5597 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
5598 given for enter_timestamp, above. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5599
1436
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5600 static XComposeStatus compose_status;
e7c5faab6571 * xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents: 1389
diff changeset
5601
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
5602 /* Record the last 100 characters stored
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
5603 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
5604
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5605 static int temp_index;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5606 static short temp_buffer[100];
2064
092ea2e7316e (XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents: 2047
diff changeset
5607
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5608 #define STORE_KEYSYM_FOR_DEBUG(keysym) \
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5609 if (temp_index == sizeof temp_buffer / sizeof (short)) \
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5610 temp_index = 0; \
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5611 temp_buffer[temp_index++] = (keysym)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5612
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
5613 /* 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
5614 on a particular display. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5615
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
5616 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
5617
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5618 /* 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
5619 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
5620 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
5621 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
5622
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5623 static struct x_display_info *next_noop_dpyinfo;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
5624
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5625 #define SET_SAVED_MENU_EVENT(size) \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5626 do \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5627 { \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5628 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
5629 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
5630 = (XEvent *) xmalloc (sizeof (XEvent)); \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5631 bcopy (&event, f->output_data.x->saved_menu_event, size); \
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5632 inev.ie.kind = MENU_BAR_ACTIVATE_EVENT; \
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5633 XSETFRAME (inev.ie.frame_or_window, f); \
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5634 } \
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5635 while (0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
5636
15711
099dc465c948 (SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents: 15639
diff changeset
5637 #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
5638 #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
5639
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5640
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5641 enum
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5642 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5643 X_EVENT_NORMAL,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5644 X_EVENT_GOTO_OUT,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5645 X_EVENT_DROP
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5646 };
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5647
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5648 /* 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
5649 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
5650 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
5651
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5652 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
5653 this event further.
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5654 Returns zero if event is wasn't filtered. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
5655
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5656 #ifdef HAVE_X_I18N
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5657 static int
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5658 x_filter_event (dpyinfo, event)
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5659 struct x_display_info *dpyinfo;
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5660 XEvent *event;
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 /* 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
5663 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
5664 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
5665 was created. */
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5666
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5667 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
5668 event->xclient.window);
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5669
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5670 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
5671 }
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5672 #endif
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5673
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5674 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5675 static int current_count;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5676 static int current_finish;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5677 static struct input_event *current_hold_quit;
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5678
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5679 /* 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
5680 It is invoked before the XEvent is translated to a GdkEvent,
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5681 so we have a chance to act on the event before GTK. */
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5682 static GdkFilterReturn
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5683 event_handler_gdk (gxev, ev, data)
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5684 GdkXEvent *gxev;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5685 GdkEvent *ev;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5686 gpointer data;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5687 {
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5688 XEvent *xev = (XEvent *) gxev;
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5689
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5690 if (current_count >= 0)
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5691 {
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5692 struct x_display_info *dpyinfo;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5693
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5694 dpyinfo = x_display_info_for_display (xev->xany.display);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5695
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5696 #ifdef HAVE_X_I18N
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5697 /* 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
5698 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
5699 so we do it here. */
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5700 if (xev->type == KeyPress || xev->type == KeyRelease)
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5701 if (dpyinfo && x_filter_event (dpyinfo, xev))
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5702 return GDK_FILTER_REMOVE;
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5703 #endif
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5704
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5705 if (! dpyinfo)
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5706 current_finish = X_EVENT_NORMAL;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5707 else
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5708 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5709 current_count +=
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
5710 handle_one_xevent (dpyinfo, xev, &current_finish,
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5711 current_hold_quit);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5712 }
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5713 }
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
5714 else
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
5715 current_finish = x_dispatch_event (xev, xev->xany.display);
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5716
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5717 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
5718 return GDK_FILTER_REMOVE;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5719
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5720 return GDK_FILTER_CONTINUE;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5721 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5722 #endif /* USE_GTK */
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5723
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
5724
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5725 /* Handles the XEvent EVENT on display DPYINFO.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
5726
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5727 *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
5728 *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
5729 *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
5730
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5731 We return the number of characters stored into the buffer. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
5732
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5733 static int
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5734 handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5735 struct x_display_info *dpyinfo;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5736 XEvent *eventp;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5737 int *finish;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5738 struct input_event *hold_quit;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5739 {
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5740 union {
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5741 struct input_event ie;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5742 struct selection_input_event sie;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5743 } inev;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5744 int count = 0;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5745 int do_help = 0;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5746 int nbytes = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5747 struct frame *f;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5748 struct coding_system coding;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5749 XEvent event = *eventp;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5750
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5751 *finish = X_EVENT_NORMAL;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
5752
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5753 EVENT_INIT (inev.ie);
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5754 inev.ie.kind = NO_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5755 inev.ie.arg = Qnil;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5756
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5757 switch (event.type)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5758 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5759 case ClientMessage:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5760 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5761 if (event.xclient.message_type
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5762 == dpyinfo->Xatom_wm_protocols
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5763 && event.xclient.format == 32)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5764 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5765 if (event.xclient.data.l[0]
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5766 == dpyinfo->Xatom_wm_take_focus)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5767 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5768 /* Use x_any_window_to_frame because this
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5769 could be the shell widget window
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5770 if the frame has no title bar. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5771 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
5772 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5773 /* Not quite sure this is needed -pd */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5774 if (f && FRAME_XIC (f))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5775 XSetICFocus (FRAME_XIC (f));
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5776 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5777 #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
5778 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
5779 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
5780 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
5781 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
5782 needed.
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5783
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5784 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
5785 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
5786 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
5787 below can generate additional FocusIn events which confuse
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5788 Emacs. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5789
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5790 /* 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
5791 XSetInputFocus explicitly. But not if f is null,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5792 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
5793 if (f)
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 Display *d = event.xclient.display;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5796 /* 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
5797 iconified by a window manager such as GWM. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5798 int count = x_catch_errors (d);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5799 XSetInputFocus (d, event.xclient.window,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5800 /* The ICCCM says this is
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5801 the only valid choice. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5802 RevertToParent,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5803 event.xclient.data.l[1]);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5804 /* This is needed to detect the error
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5805 if there is an error. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5806 XSync (d, False);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5807 x_uncatch_errors (d, count);
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 /* Not certain about handling scroll bars here */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5810 #endif /* 0 */
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5811 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5812 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5813
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5814 if (event.xclient.data.l[0]
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5815 == dpyinfo->Xatom_wm_save_yourself)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5816 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5817 /* Save state modify the WM_COMMAND property to
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5818 something which can reinstate us. This notifies
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5819 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
5820 PropertyNotify. Can restart processing when
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5821 a keyboard or mouse event arrives. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5822 /* 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
5823 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
5824 session manager and one for this. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5825 #ifdef HAVE_X_SM
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5826 if (! x_session_have_connection ())
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5827 #endif
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5828 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5829 f = x_top_window_to_frame (dpyinfo,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5830 event.xclient.window);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5831 /* 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
5832 for a single Emacs process. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5833 if (f == SELECTED_FRAME ())
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5834 XSetCommand (FRAME_X_DISPLAY (f),
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5835 event.xclient.window,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5836 initial_argv, initial_argc);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5837 else if (f)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5838 XSetCommand (FRAME_X_DISPLAY (f),
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5839 event.xclient.window,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5840 0, 0);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5841 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5842 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5843 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5844
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5845 if (event.xclient.data.l[0]
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5846 == dpyinfo->Xatom_wm_delete_window)
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5847 {
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5848 f = x_any_window_to_frame (dpyinfo,
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5849 event.xclient.window);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5850 if (!f)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5851 goto OTHER; /* May be a dialog that is to be removed */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5852
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5853 inev.ie.kind = DELETE_WINDOW_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5854 XSETFRAME (inev.ie.frame_or_window, f);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5855 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5856 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5857
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5858 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5859 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5860
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5861 if (event.xclient.message_type
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5862 == dpyinfo->Xatom_wm_configure_denied)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5863 {
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5864 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5865 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5866
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5867 if (event.xclient.message_type
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5868 == dpyinfo->Xatom_wm_window_moved)
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5869 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5870 int new_x, new_y;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5871 f = x_window_to_frame (dpyinfo, event.xclient.window);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5872
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5873 new_x = event.xclient.data.s[0];
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5874 new_y = event.xclient.data.s[1];
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 if (f)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5877 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5878 f->left_pos = new_x;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5879 f->top_pos = new_y;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5880 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5881 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5882 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5883
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5884 #ifdef HACK_EDITRES
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5885 if (event.xclient.message_type
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5886 == dpyinfo->Xatom_editres)
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5887 {
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5888 f = x_any_window_to_frame (dpyinfo, event.xclient.window);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5889 _XEditResCheckMessages (f->output_data.x->widget, NULL,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5890 &event, NULL);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5891 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5892 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5893 #endif /* HACK_EDITRES */
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5894
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5895 if ((event.xclient.message_type
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5896 == dpyinfo->Xatom_DONE)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5897 || (event.xclient.message_type
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5898 == dpyinfo->Xatom_PAGE))
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5899 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5900 /* Ghostview job completed. Kill it. We could
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5901 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
5902 currently never do because we are interested in
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5903 images, only, which should have 1 page. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5904 Pixmap pixmap = (Pixmap) event.xclient.data.l[1];
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5905 f = x_window_to_frame (dpyinfo, event.xclient.window);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5906 x_kill_gs_process (pixmap, f);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5907 expose_frame (f, 0, 0, 0, 0);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5908 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5909 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5910
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5911 #ifdef USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5912 /* Scroll bar callbacks send a ClientMessage from which
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5913 we construct an input_event. */
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5914 if (event.xclient.message_type
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5915 == dpyinfo->Xatom_Scrollbar)
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5916 {
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5917 x_scroll_bar_to_input_event (&event, &inev.ie);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5918 *finish = X_EVENT_GOTO_OUT;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5919 goto done;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5920 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5921 #endif /* USE_TOOLKIT_SCROLL_BARS */
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5922
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5923 f = x_any_window_to_frame (dpyinfo, event.xclient.window);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5924
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5925 if (!f)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5926 goto OTHER;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5927
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5928 if (x_handle_dnd_message (f, &event.xclient, dpyinfo, &inev.ie))
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
5929 *finish = X_EVENT_DROP;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5930 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5931 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5932
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5933 case SelectionNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5934 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5935 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
5936 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5937 #endif /* not USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5938 x_handle_selection_notify (&event.xselection);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5939 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5940
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5941 case SelectionClear: /* Someone has grabbed ownership. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5942 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5943 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
5944 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5945 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5946 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5947 XSelectionClearEvent *eventp = (XSelectionClearEvent *) &event;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5948
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5949 inev.ie.kind = SELECTION_CLEAR_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5950 SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5951 SELECTION_EVENT_SELECTION (&inev.sie) = eventp->selection;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5952 SELECTION_EVENT_TIME (&inev.sie) = eventp->time;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5953 inev.ie.frame_or_window = Qnil;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5954 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5955 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5956
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5957 case SelectionRequest: /* Someone wants our selection. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5958 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5959 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
5960 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5961 #endif /* USE_X_TOOLKIT */
57953
95edcd1fae73 * xterm.c (handle_one_xevent): Don't queue X selection events
Kim F. Storm <storm@cua.dk>
parents: 57901
diff changeset
5962 {
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5963 XSelectionRequestEvent *eventp
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5964 = (XSelectionRequestEvent *) &event;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5965
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5966 inev.ie.kind = SELECTION_REQUEST_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5967 SELECTION_EVENT_DISPLAY (&inev.sie) = eventp->display;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5968 SELECTION_EVENT_REQUESTOR (&inev.sie) = eventp->requestor;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5969 SELECTION_EVENT_SELECTION (&inev.sie) = eventp->selection;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5970 SELECTION_EVENT_TARGET (&inev.sie) = eventp->target;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5971 SELECTION_EVENT_PROPERTY (&inev.sie) = eventp->property;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5972 SELECTION_EVENT_TIME (&inev.sie) = eventp->time;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
5973 inev.ie.frame_or_window = Qnil;
57953
95edcd1fae73 * xterm.c (handle_one_xevent): Don't queue X selection events
Kim F. Storm <storm@cua.dk>
parents: 57901
diff changeset
5974 }
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5975 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5976
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5977 case PropertyNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5978 #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
5979 PropertyNotify used as an ACK in incremental selection
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5980 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
5981 #if defined USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5982 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
5983 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5984 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5985 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5986 x_handle_property_notify (&event.xproperty);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5987 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5988
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5989 case ReparentNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5990 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
5991 if (f)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5992 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5993 int x, y;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
5994 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
5995 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
5996 f->left_pos = x;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
5997 f->top_pos = y;
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
5998
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
5999 /* Perhaps reparented due to a WM restart. Reset this. */
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
6000 FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_UNKNOWN;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6001 }
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
6002 goto OTHER;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6003
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6004 case Expose:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6005 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
6006 if (f)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6007 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6008 x_check_fullscreen (f);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6009
59264
b7ebbcf3b120 * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 59206
diff changeset
6010 #ifdef USE_GTK
b7ebbcf3b120 * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 59206
diff changeset
6011 /* This seems to be needed for GTK 2.6. */
b7ebbcf3b120 * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 59206
diff changeset
6012 x_clear_area (event.xexpose.display,
b7ebbcf3b120 * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 59206
diff changeset
6013 event.xexpose.window,
b7ebbcf3b120 * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 59206
diff changeset
6014 event.xexpose.x, event.xexpose.y,
b7ebbcf3b120 * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 59206
diff changeset
6015 event.xexpose.width, event.xexpose.height,
b7ebbcf3b120 * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 59206
diff changeset
6016 FALSE);
b7ebbcf3b120 * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 59206
diff changeset
6017 #endif
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6018 if (f->async_visible == 0)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6019 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6020 f->async_visible = 1;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6021 f->async_iconified = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6022 f->output_data.x->has_been_visible = 1;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6023 SET_FRAME_GARBAGED (f);
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 else
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6026 expose_frame (f,
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6027 event.xexpose.x, event.xexpose.y,
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6028 event.xexpose.width, event.xexpose.height);
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 else
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 #ifndef USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6033 struct scroll_bar *bar;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6034 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6035 #if defined USE_LUCID
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6036 /* 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
6037 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
6038 to them. Recognize this case separately. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6039 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6040 Widget widget
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6041 = x_window_to_menu_bar (event.xexpose.window);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6042 if (widget)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6043 xlwmenu_redisplay (widget);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6044 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6045 #endif /* USE_LUCID */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6046
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6047 #ifdef USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6048 /* Dispatch event to the widget. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6049 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6050 #else /* not USE_TOOLKIT_SCROLL_BARS */
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
6051 bar = x_window_to_scroll_bar (event.xexpose.display,
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
6052 event.xexpose.window);
49117
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 if (bar)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6055 x_scroll_bar_expose (bar, &event);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6056 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6057 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6058 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6059 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6060 #endif /* not USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6061 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6062 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6063
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6064 case GraphicsExpose: /* This occurs when an XCopyArea's
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6065 source area was obscured or not
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6066 available. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6067 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
6068 if (f)
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 expose_frame (f,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6071 event.xgraphicsexpose.x, event.xgraphicsexpose.y,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6072 event.xgraphicsexpose.width,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6073 event.xgraphicsexpose.height);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6074 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6075 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6076 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6077 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6078 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6079 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6080
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6081 case NoExpose: /* This occurs when an XCopyArea's
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6082 source area was completely
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6083 available. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6084 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6085
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6086 case UnmapNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6087 /* 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
6088 if (event.xmap.window == tip_window)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6089 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6090 tip_window = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6091 redo_mouse_highlight ();
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6092 }
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 = 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
6095 if (f) /* F may no longer exist if
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6096 the frame was deleted. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6097 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6098 /* While a frame is unmapped, display generation is
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6099 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
6100 display that won't ever be seen. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6101 f->async_visible = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6102 /* 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
6103 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
6104 was previously visible, than now it is iconified.
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6105 But x_make_frame_invisible clears both
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6106 the visible flag and the iconified flag;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6107 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
6108 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
6109 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6110 f->async_iconified = 1;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6111
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6112 inev.ie.kind = ICONIFY_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6113 XSETFRAME (inev.ie.frame_or_window, f);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6114 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6115 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6116 goto OTHER;
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 case MapNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6119 if (event.xmap.window == tip_window)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6120 /* The tooltip has been drawn already. Avoid
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6121 the SET_FRAME_GARBAGED below. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6122 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6123
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6124 /* 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
6125 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
6126 frame is visible. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6127 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
6128 if (f)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6129 {
56729
e6e0caa7ec87 Rename wait_reading_process_input to wait_reading_process_output.
Kim F. Storm <storm@cua.dk>
parents: 56297
diff changeset
6130 /* wait_reading_process_output will notice this and update
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6131 the frame's display structures.
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6132 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
6133 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
6134 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
6135 (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
6136 if (! f->async_iconified)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6137 SET_FRAME_GARBAGED (f);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6138
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6139 f->async_visible = 1;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6140 f->async_iconified = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6141 f->output_data.x->has_been_visible = 1;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6142
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6143 if (f->iconified)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6144 {
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6145 inev.ie.kind = DEICONIFY_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6146 XSETFRAME (inev.ie.frame_or_window, f);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6147 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6148 else if (! NILP (Vframe_list)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6149 && ! NILP (XCDR (Vframe_list)))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6150 /* Force a redisplay sooner or later
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6151 to update the frame titles
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6152 in case this is the second frame. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6153 record_asynch_buffer_change ();
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6154 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6155 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6156
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6157 case KeyPress:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6158
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6159 ignore_next_mouse_click_timeout = 0;
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6160
49326
f5372eee5041 *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49322
diff changeset
6161 #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
6162 /* Dispatch KeyPress events when in menu. */
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6163 if (popup_activated ())
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6164 goto OTHER;
49326
f5372eee5041 *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49322
diff changeset
6165 #endif
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6166
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6167 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
6168
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6169 if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6170 {
54733
edff9ce01ed0 (handle_one_xevent): Set mouse_face_hidden after clearing highlight.
Kim F. Storm <storm@cua.dk>
parents: 54651
diff changeset
6171 clear_mouse_face (dpyinfo);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6172 dpyinfo->mouse_face_hidden = 1;
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
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6175 #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
6176 if (f == 0)
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 /* Scroll bars consume key events, but we want
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6179 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
6180 Widget widget = XtWindowToWidget (dpyinfo->display,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6181 event.xkey.window);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6182 if (widget && XmIsScrollBar (widget))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6183 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6184 widget = XtParent (widget);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6185 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
6186 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6187 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6188 #endif /* USE_MOTIF and USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6189
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6190 if (f != 0)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6191 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6192 KeySym keysym, orig_keysym;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6193 /* 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
6194 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
6195 his Emacs hang.
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6196
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6197 It seems that some version of XmbLookupString has
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6198 a bug of not returning XBufferOverflow in
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6199 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
6200 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
6201 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
6202 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
6203 approximation. -- 2000.8.10 handa@etl.go.jp */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6204 unsigned char copy_buffer[513];
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6205 unsigned char *copy_bufptr = copy_buffer;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6206 int copy_bufsiz = sizeof (copy_buffer);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6207 int modifiers;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6208 Lisp_Object coding_system = Qlatin_1;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6209 Lisp_Object c;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6210
54451
66000dbe48c9 * xterm.c (handle_one_xevent): Do not pass key press events to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 54185
diff changeset
6211 #ifdef USE_GTK
66000dbe48c9 * xterm.c (handle_one_xevent): Do not pass key press events to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 54185
diff changeset
6212 /* Don't pass keys to GTK. A Tab will shift focus to the
66000dbe48c9 * xterm.c (handle_one_xevent): Do not pass key press events to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 54185
diff changeset
6213 tool bar in GTK 2.4. Keys will still go to menus and
66000dbe48c9 * xterm.c (handle_one_xevent): Do not pass key press events to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 54185
diff changeset
6214 dialogs because in that case popup_activated is TRUE
66000dbe48c9 * xterm.c (handle_one_xevent): Do not pass key press events to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 54185
diff changeset
6215 (see above). */
66000dbe48c9 * xterm.c (handle_one_xevent): Do not pass key press events to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 54185
diff changeset
6216 *finish = X_EVENT_DROP;
66000dbe48c9 * xterm.c (handle_one_xevent): Do not pass key press events to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 54185
diff changeset
6217 #endif
66000dbe48c9 * xterm.c (handle_one_xevent): Do not pass key press events to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 54185
diff changeset
6218
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6219 event.xkey.state
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6220 |= 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
6221 extra_keyboard_modifiers);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6222 modifiers = event.xkey.state;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6223
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6224 /* This will have to go some day... */
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 /* make_lispy_event turns chars into control chars.
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6227 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
6228 event.xkey.state &= ~ControlMask;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6229 event.xkey.state &= ~(dpyinfo->meta_mod_mask
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6230 | dpyinfo->super_mod_mask
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6231 | dpyinfo->hyper_mod_mask
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6232 | dpyinfo->alt_mod_mask);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6233
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6234 /* In case Meta is ComposeCharacter,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6235 clear its status. According to Markus Ehrnsperger
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6236 Markus.Ehrnsperger@lehrstuhl-bross.physik.uni-muenchen.de
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6237 this enables ComposeCharacter to work whether or
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6238 not it is combined with Meta. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6239 if (modifiers & dpyinfo->meta_mod_mask)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6240 bzero (&compose_status, sizeof (compose_status));
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 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6243 if (FRAME_XIC (f))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6244 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6245 Status status_return;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6246
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6247 coding_system = Vlocale_coding_system;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6248 nbytes = XmbLookupString (FRAME_XIC (f),
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6249 &event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6250 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6251 &status_return);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6252 if (status_return == XBufferOverflow)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6253 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6254 copy_bufsiz = nbytes + 1;
65764
375ab086d366 * image.c (slurp_file, xbm_read_bitmap_data): Cast to the correct
Dan Nicolaescu <dann@ics.uci.edu>
parents: 65716
diff changeset
6255 copy_bufptr = (unsigned char *) alloca (copy_bufsiz);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6256 nbytes = XmbLookupString (FRAME_XIC (f),
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6257 &event.xkey, 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 /* 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
6262 #if 0 && defined X_HAVE_UTF8_STRING
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6263 else if (status_return == XLookupKeySym)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6264 { /* Try again but with utf-8. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6265 coding_system = Qutf_8;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6266 nbytes = Xutf8LookupString (FRAME_XIC (f),
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6267 &event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6268 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6269 &status_return);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6270 if (status_return == XBufferOverflow)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6271 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6272 copy_bufsiz = nbytes + 1;
65764
375ab086d366 * image.c (slurp_file, xbm_read_bitmap_data): Cast to the correct
Dan Nicolaescu <dann@ics.uci.edu>
parents: 65716
diff changeset
6273 copy_bufptr = (unsigned char *) alloca (copy_bufsiz);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6274 nbytes = Xutf8LookupString (FRAME_XIC (f),
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6275 &event.xkey,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6276 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 &status_return);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6279 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6280 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6281 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6282
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6283 if (status_return == XLookupNone)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6284 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6285 else if (status_return == XLookupChars)
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 keysym = NoSymbol;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6288 modifiers = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6289 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6290 else if (status_return != XLookupKeySym
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6291 && status_return != XLookupBoth)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6292 abort ();
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6293 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6294 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6295 nbytes = XLookupString (&event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6296 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6297 &compose_status);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6298 #else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6299 nbytes = XLookupString (&event.xkey, copy_bufptr,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6300 copy_bufsiz, &keysym,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6301 &compose_status);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6302 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6303
53596
e3e8f1dcc895 * xterm.c (handle_one_xevent): Don't handle characters that are part
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53336
diff changeset
6304 /* If not using XIM/XIC, and a compose sequence is in progress,
e3e8f1dcc895 * xterm.c (handle_one_xevent): Don't handle characters that are part
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53336
diff changeset
6305 we break here. Otherwise, chars_matched is always 0. */
e3e8f1dcc895 * xterm.c (handle_one_xevent): Don't handle characters that are part
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53336
diff changeset
6306 if (compose_status.chars_matched > 0 && nbytes == 0)
e3e8f1dcc895 * xterm.c (handle_one_xevent): Don't handle characters that are part
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53336
diff changeset
6307 break;
e3e8f1dcc895 * xterm.c (handle_one_xevent): Don't handle characters that are part
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53336
diff changeset
6308
63886
577b0b13e4de * xterm.c (handle_one_xevent): bzero compose_status when nbytes
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 63879
diff changeset
6309 bzero (&compose_status, sizeof (compose_status));
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6310 orig_keysym = keysym;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6311
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6312 /* Common for all keysym input events. */
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6313 XSETFRAME (inev.ie.frame_or_window, f);
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6314 inev.ie.modifiers
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6315 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), modifiers);
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6316 inev.ie.timestamp = event.xkey.time;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6317
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6318 /* First deal with keysyms which have defined
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6319 translations to characters. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6320 if (keysym >= 32 && keysym < 128)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6321 /* Avoid explicitly decoding each ASCII character. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6322 {
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6323 inev.ie.kind = ASCII_KEYSTROKE_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6324 inev.ie.code = keysym;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6325 goto done_keysym;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6326 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6327
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6328 /* Now non-ASCII. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6329 if (HASH_TABLE_P (Vx_keysym_table)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6330 && (NATNUMP (c = Fgethash (make_number (keysym),
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6331 Vx_keysym_table,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6332 Qnil))))
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6333 {
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6334 inev.ie.kind = (SINGLE_BYTE_CHAR_P (XFASTINT (c))
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6335 ? ASCII_KEYSTROKE_EVENT
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6336 : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6337 inev.ie.code = XFASTINT (c);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6338 goto done_keysym;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6339 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6340
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6341 /* Random non-modifier sorts of keysyms. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6342 if (((keysym >= XK_BackSpace && keysym <= XK_Escape)
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6343 || keysym == XK_Delete
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6344 #ifdef XK_ISO_Left_Tab
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6345 || (keysym >= XK_ISO_Left_Tab
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6346 && keysym <= XK_ISO_Enter)
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 || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6349 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6350 #ifdef HPUX
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6351 /* This recognizes the "extended function
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6352 keys". It seems there's no cleaner way.
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6353 Test IsModifierKey to avoid handling
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6354 mode_switch incorrectly. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6355 || ((unsigned) (keysym) >= XK_Select
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6356 && (unsigned)(keysym) < XK_KP_Space)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6357 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6358 #ifdef XK_dead_circumflex
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6359 || orig_keysym == XK_dead_circumflex
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6360 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6361 #ifdef XK_dead_grave
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6362 || orig_keysym == XK_dead_grave
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6363 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6364 #ifdef XK_dead_tilde
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6365 || orig_keysym == XK_dead_tilde
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6366 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6367 #ifdef XK_dead_diaeresis
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6368 || orig_keysym == XK_dead_diaeresis
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6369 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6370 #ifdef XK_dead_macron
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6371 || orig_keysym == XK_dead_macron
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6372 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6373 #ifdef XK_dead_degree
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6374 || orig_keysym == XK_dead_degree
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6375 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6376 #ifdef XK_dead_acute
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6377 || orig_keysym == XK_dead_acute
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6378 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6379 #ifdef XK_dead_cedilla
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6380 || orig_keysym == XK_dead_cedilla
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6381 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6382 #ifdef XK_dead_breve
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6383 || orig_keysym == XK_dead_breve
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6384 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6385 #ifdef XK_dead_ogonek
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6386 || orig_keysym == XK_dead_ogonek
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6387 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6388 #ifdef XK_dead_caron
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6389 || orig_keysym == XK_dead_caron
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6390 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6391 #ifdef XK_dead_doubleacute
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6392 || orig_keysym == XK_dead_doubleacute
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_dead_abovedot
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6395 || orig_keysym == XK_dead_abovedot
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 || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6398 || IsFunctionKey (keysym) /* 0xffbe <= x < 0xffe1 */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6399 /* Any "vendor-specific" key is ok. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6400 || (orig_keysym & (1 << 28))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6401 || (keysym != NoSymbol && nbytes == 0))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6402 && ! (IsModifierKey (orig_keysym)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6403 #ifndef HAVE_X11R5
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6404 #ifdef XK_Mode_switch
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6405 || ((unsigned)(orig_keysym) == XK_Mode_switch)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6406 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6407 #ifdef XK_Num_Lock
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6408 || ((unsigned)(orig_keysym) == XK_Num_Lock)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6409 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6410 #endif /* not HAVE_X11R5 */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6411 /* The symbols from XK_ISO_Lock
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6412 to XK_ISO_Last_Group_Lock
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6413 don't have real modifiers but
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6414 should be treated similarly to
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6415 Mode_switch by Emacs. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6416 #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
6417 || ((unsigned)(orig_keysym)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6418 >= XK_ISO_Lock
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6419 && (unsigned)(orig_keysym)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6420 <= XK_ISO_Last_Group_Lock)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6421 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6422 ))
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6423 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6424 STORE_KEYSYM_FOR_DEBUG (keysym);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6425 /* make_lispy_event will convert this to a symbolic
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6426 key. */
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6427 inev.ie.kind = NON_ASCII_KEYSTROKE_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6428 inev.ie.code = keysym;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6429 goto done_keysym;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6430 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6431
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6432 { /* Raw bytes, not keysym. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6433 register int i;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6434 register int c;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6435 int nchars, len;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6436
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6437 /* The input should be decoded with `coding_system'
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6438 which depends on which X*LookupString function
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6439 we used just above and the locale. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6440 setup_coding_system (coding_system, &coding);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6441 coding.src_multibyte = 0;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6442 coding.dst_multibyte = 1;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6443 /* The input is converted to events, thus we can't
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6444 handle composition. Anyway, there's no XIM that
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6445 gives us composition information. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6446 coding.composing = COMPOSITION_DISABLED;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6447
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6448 for (i = 0; i < nbytes; i++)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6449 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6450 STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6451 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6452
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6453 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6454 /* Decode the input data. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6455 int require;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6456 unsigned char *p;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6457
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6458 require = decoding_buffer_size (&coding, nbytes);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6459 p = (unsigned char *) alloca (require);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6460 coding.mode |= CODING_MODE_LAST_BLOCK;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6461 /* We explicitly disable composition handling because
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6462 key data should not contain any composition sequence. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6463 coding.composing = COMPOSITION_DISABLED;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6464 decode_coding (&coding, copy_bufptr, p, nbytes, require);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6465 nbytes = coding.produced;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6466 nchars = coding.produced_char;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6467 copy_bufptr = p;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6468 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6469
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6470 /* Convert the input data to a sequence of
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6471 character events. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6472 for (i = 0; i < nbytes; i += len)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6473 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6474 if (nchars == nbytes)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6475 c = copy_bufptr[i], len = 1;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6476 else
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6477 c = STRING_CHAR_AND_LENGTH (copy_bufptr + i,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6478 nbytes - i, len);
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6479 inev.ie.kind = (SINGLE_BYTE_CHAR_P (c)
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6480 ? ASCII_KEYSTROKE_EVENT
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6481 : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6482 inev.ie.code = c;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6483 kbd_buffer_store_event_hold (&inev.ie, hold_quit);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6484 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6485
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6486 /* Previous code updated count by nchars rather than nbytes,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6487 but that seems bogus to me. ++kfs */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6488 count += nbytes;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6489
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6490 inev.ie.kind = NO_EVENT; /* Already stored above. */
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6491
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6492 if (keysym == NoSymbol)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6493 break;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6494 }
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6495 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6496 done_keysym:
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6497 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6498 /* Don't dispatch this event since XtDispatchEvent calls
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6499 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
6500 client. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6501 break;
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 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6504 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6505
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6506 case KeyRelease:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6507 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6508 /* Don't dispatch this event since XtDispatchEvent calls
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6509 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
6510 client. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6511 break;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6512 #else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6513 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6514 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6515
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6516 case EnterNotify:
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6517 x_detect_focus_change (dpyinfo, &event, &inev.ie);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6518
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6519 f = x_any_window_to_frame (dpyinfo, event.xcrossing.window);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6520
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6521 if (f && x_mouse_click_focus_ignore_position)
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6522 ignore_next_mouse_click_timeout = event.xmotion.time + 200;
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6523
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6524 #if 0
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6525 if (event.xcrossing.focus)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6526 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6527 /* Avoid nasty pop/raise loops. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6528 if (f && (!(f->auto_raise)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6529 || !(f->auto_lower)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6530 || (event.xcrossing.time - enter_timestamp) > 500))
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6531 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6532 x_new_focus_frame (dpyinfo, f);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6533 enter_timestamp = event.xcrossing.time;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6534 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6535 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6536 else if (f == dpyinfo->x_focus_frame)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6537 x_new_focus_frame (dpyinfo, 0);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6538 #endif
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6539
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6540 /* EnterNotify counts as mouse movement,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6541 so update things that depend on mouse position. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6542 if (f && !f->output_data.x->hourglass_p)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6543 note_mouse_movement (f, &event.xmotion);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6544 goto OTHER;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6545
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6546 case FocusIn:
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6547 x_detect_focus_change (dpyinfo, &event, &inev.ie);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6548 goto OTHER;
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 case LeaveNotify:
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6551 x_detect_focus_change (dpyinfo, &event, &inev.ie);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6552
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6553 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
6554 if (f)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6555 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6556 if (f == dpyinfo->mouse_face_mouse_frame)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6557 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6558 /* 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
6559 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
6560 clear_mouse_face (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6561 dpyinfo->mouse_face_mouse_frame = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6562 }
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 /* 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
6565 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
6566 Otherwise, the startup message is cleared when
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6567 the mouse leaves the frame. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6568 if (any_help_event_p)
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6569 do_help = -1;
49117
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 goto OTHER;
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 case FocusOut:
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6574 x_detect_focus_change (dpyinfo, &event, &inev.ie);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6575 goto OTHER;
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 case MotionNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6578 {
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6579 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
6580 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
6581 help_echo_pos = -1;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6582
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6583 if (dpyinfo->grabbed && last_mouse_frame
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6584 && FRAME_LIVE_P (last_mouse_frame))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6585 f = last_mouse_frame;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6586 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6587 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
6588
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6589 if (dpyinfo->mouse_face_hidden)
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 dpyinfo->mouse_face_hidden = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6592 clear_mouse_face (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6593 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6594
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6595 if (f)
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
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6598 /* Generate SELECT_WINDOW_EVENTs when needed. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6599 if (mouse_autoselect_window)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6600 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6601 Lisp_Object window;
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 window = window_from_coordinates (f,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6604 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
6605 0, 0, 0, 0);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6606
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6607 /* 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
6608 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
6609 will be selected iff it is active. */
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
6610 if (WINDOWP (window)
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6611 && !EQ (window, last_window)
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6612 && !EQ (window, selected_window))
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6613 {
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6614 inev.ie.kind = SELECT_WINDOW_EVENT;
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6615 inev.ie.frame_or_window = window;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6616 }
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 last_window=window;
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 note_mouse_movement (f, &event.xmotion);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6621 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6622 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6623 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6624 #ifndef USE_TOOLKIT_SCROLL_BARS
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6625 struct scroll_bar *bar
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
6626 = x_window_to_scroll_bar (event.xmotion.display,
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
6627 event.xmotion.window);
49117
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 if (bar)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6630 x_scroll_bar_note_movement (bar, &event);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6631 #endif /* USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6632
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6633 /* 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
6634 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
6635 clear_mouse_face (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6636 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6637
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6638 /* 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
6639 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
6640 if (!NILP (help_echo_string)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6641 || !NILP (previous_help_echo_string))
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6642 do_help = 1;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6643 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6644 }
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 case ConfigureNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6647 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
6648 if (f)
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 #ifndef USE_X_TOOLKIT
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6651 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6652 xg_resize_widgets (f, event.xconfigure.width,
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6653 event.xconfigure.height);
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6654 #else /* not USE_GTK */
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6655 /* 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
6656 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
6657 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
6658 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
6659 int dont_resize
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6660 = ((f->want_fullscreen & FULLSCREEN_WAIT)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6661 && f->new_text_cols != 0);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6662 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
6663 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
6664
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6665 if (dont_resize)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6666 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6667
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6668 /* In the toolkit version, change_frame_size
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6669 is called by the code that handles resizing
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6670 of the EmacsFrame widget. */
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 /* 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
6673 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
6674 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
6675 if (columns != FRAME_COLS (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6676 || rows != FRAME_LINES (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6677 || 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
6678 || event.xconfigure.height != FRAME_PIXEL_HEIGHT (f))
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6679 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6680 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
6681 SET_FRAME_GARBAGED (f);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6682 cancel_mouse_face (f);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6683 }
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6684 #endif /* not USE_GTK */
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6685 #endif
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6686
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6687 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
6688 FRAME_PIXEL_HEIGHT (f) = event.xconfigure.height;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6689
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6690 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6691 /* GTK creates windows but doesn't map them.
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6692 Only get real positions and check fullscreen when mapped. */
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6693 if (FRAME_GTK_OUTER_WIDGET (f)
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6694 && 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
6695 #endif
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6696 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6697 /* 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
6698 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
6699 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
6700
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
6701 x_check_expected_move (f);
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6702 if (f->want_fullscreen & FULLSCREEN_WAIT)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6703 f->want_fullscreen &= ~(FULLSCREEN_WAIT|FULLSCREEN_BOTH);
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6704 }
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6705
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6706 #ifdef HAVE_X_I18N
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6707 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
6708 xic_set_statusarea (f);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6709 #endif
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 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
6712 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6713 /* 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
6714 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
6715 f->win_gravity = NorthWestGravity;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6716 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
6717 }
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 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6720
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6721 case ButtonRelease:
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6722 case ButtonPress:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6723 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6724 /* 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
6725 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
6726 int tool_bar_p = 0;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6727
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6728 bzero (&compose_status, sizeof (compose_status));
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6729
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6730 if (dpyinfo->grabbed
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6731 && last_mouse_frame
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6732 && FRAME_LIVE_P (last_mouse_frame))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6733 f = last_mouse_frame;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6734 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6735 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
6736
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6737 if (f)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6738 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6739 /* Is this in the tool-bar? */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6740 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
6741 && 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
6742 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6743 Lisp_Object window;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6744 int x = event.xbutton.x;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6745 int y = event.xbutton.y;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6746
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6747 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
6748 if (EQ (window, f->tool_bar_window))
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6749 {
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6750 if (event.xbutton.type == ButtonPress)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6751 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
6752 else
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6753 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
6754 x_x_to_emacs_modifiers (dpyinfo,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6755 event.xbutton.state));
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
6756 tool_bar_p = 1;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6757 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6758 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6759
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6760 if (!tool_bar_p)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6761 if (!dpyinfo->x_focus_frame
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6762 || f == dpyinfo->x_focus_frame)
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6763 {
49326
f5372eee5041 *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49322
diff changeset
6764 #if defined (USE_X_TOOLKIT) || defined (USE_GTK)
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6765 if (! popup_activated ())
49326
f5372eee5041 *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49322
diff changeset
6766 #endif
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6767 {
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6768 if (ignore_next_mouse_click_timeout)
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6769 {
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6770 if (event.type == ButtonPress
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6771 && (int)(event.xbutton.time - ignore_next_mouse_click_timeout) > 0)
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6772 {
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6773 ignore_next_mouse_click_timeout = 0;
65716
b7f757757288 (handle_one_xevent): Refer to union field to match the type
Dan Nicolaescu <dann@ics.uci.edu>
parents: 65713
diff changeset
6774 construct_mouse_click (&inev.ie, &event.xbutton, f);
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6775 }
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6776 if (event.type == ButtonRelease)
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6777 ignore_next_mouse_click_timeout = 0;
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6778 }
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6779 else
65716
b7f757757288 (handle_one_xevent): Refer to union field to match the type
Dan Nicolaescu <dann@ics.uci.edu>
parents: 65713
diff changeset
6780 construct_mouse_click (&inev.ie, &event.xbutton, f);
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6781 }
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6782 }
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6783 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6784 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6785 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6786 struct scroll_bar *bar
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
6787 = x_window_to_scroll_bar (event.xbutton.display,
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
6788 event.xbutton.window);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6789
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6790 #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
6791 /* 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
6792 scroll bars. */
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6793 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
6794 {
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6795 x_scroll_bar_handle_click (bar, &event, &inev.ie);
50064
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6796 *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
6797 }
40170697bff1 Implement Ctrl-Mouse-2 (split vertically) for toolkit scrollbars
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 50056
diff changeset
6798 #else /* not USE_TOOLKIT_SCROLL_BARS */
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6799 if (bar)
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6800 x_scroll_bar_handle_click (bar, &event, &inev.ie);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6801 #endif /* not USE_TOOLKIT_SCROLL_BARS */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6802 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6803
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6804 if (event.type == ButtonPress)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6805 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6806 dpyinfo->grabbed |= (1 << event.xbutton.button);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6807 last_mouse_frame = f;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6808
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6809 if (!tool_bar_p)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6810 last_tool_bar_item = -1;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6811 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6812 else
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6813 dpyinfo->grabbed &= ~(1 << event.xbutton.button);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6814
62979
c79b5010b654 (handle_one_xevent): Also ignore mouse motion just
Kim F. Storm <storm@cua.dk>
parents: 62799
diff changeset
6815 /* Ignore any mouse motion that happened before this event;
c79b5010b654 (handle_one_xevent): Also ignore mouse motion just
Kim F. Storm <storm@cua.dk>
parents: 62799
diff changeset
6816 any subsequent mouse-movement Emacs events should reflect
c79b5010b654 (handle_one_xevent): Also ignore mouse motion just
Kim F. Storm <storm@cua.dk>
parents: 62799
diff changeset
6817 only motion after the ButtonPress/Release. */
c79b5010b654 (handle_one_xevent): Also ignore mouse motion just
Kim F. Storm <storm@cua.dk>
parents: 62799
diff changeset
6818 if (f != 0)
c79b5010b654 (handle_one_xevent): Also ignore mouse motion just
Kim F. Storm <storm@cua.dk>
parents: 62799
diff changeset
6819 f->mouse_moved = 0;
c79b5010b654 (handle_one_xevent): Also ignore mouse motion just
Kim F. Storm <storm@cua.dk>
parents: 62799
diff changeset
6820
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6821 #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
6822 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
6823 /* For a down-event in the menu bar,
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6824 don't pass it to Xt right now.
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6825 Instead, save it away
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6826 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
6827 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
6828 if (
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6829 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6830 ! popup_activated ()
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6831 &&
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6832 #endif
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6833 f && event.type == ButtonPress
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6834 /* 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
6835 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
6836 && event.xbutton.x >= 0
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
6837 && event.xbutton.x < FRAME_PIXEL_WIDTH (f)
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6838 && event.xbutton.y >= 0
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6839 && 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
6840 && event.xbutton.same_screen)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6841 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6842 SET_SAVED_BUTTON_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6843 XSETFRAME (last_mouse_press_frame, f);
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6844 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6845 *finish = X_EVENT_DROP;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6846 #endif
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6847 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6848 else if (event.type == ButtonPress)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6849 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6850 last_mouse_press_frame = Qnil;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6851 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6852 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6853
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6854 #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
6855 but I am trying to be cautious. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6856 else if (event.type == ButtonRelease)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6857 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6858 if (!NILP (last_mouse_press_frame))
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 f = XFRAME (last_mouse_press_frame);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6861 if (f->output_data.x)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6862 SET_SAVED_BUTTON_EVENT;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6863 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6864 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6865 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6866 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6867 #endif /* USE_MOTIF */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6868 else
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6869 goto OTHER;
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
6870 #endif /* USE_X_TOOLKIT || USE_GTK */
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6871 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6872 break;
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 case CirculateNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6875 goto OTHER;
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 case CirculateRequest:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6878 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6879
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6880 case VisibilityNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6881 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6882
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6883 case MappingNotify:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6884 /* Someone has changed the keyboard mapping - update the
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6885 local cache. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6886 switch (event.xmapping.request)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6887 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6888 case MappingModifier:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6889 x_find_modifier_meanings (dpyinfo);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6890 /* This is meant to fall through. */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6891 case MappingKeyboard:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6892 XRefreshKeyboardMapping (&event.xmapping);
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6893 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6894 goto OTHER;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6895
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6896 default:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6897 OTHER:
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6898 #ifdef USE_X_TOOLKIT
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6899 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
6900 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
6901 XtDispatchEvent (&event);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6902 UNBLOCK_INPUT;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6903 #endif /* USE_X_TOOLKIT */
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6904 break;
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
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6907 done:
60135
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6908 if (inev.ie.kind != NO_EVENT)
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6909 {
c3fe3363f1c7 (handle_one_xevent): Use union of struct input_event and
Andreas Schwab <schwab@suse.de>
parents: 59893
diff changeset
6910 kbd_buffer_store_event_hold (&inev.ie, hold_quit);
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6911 count++;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6912 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6913
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6914 if (do_help
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6915 && !(hold_quit && hold_quit->kind != NO_EVENT))
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6916 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6917 Lisp_Object frame;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6918
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6919 if (f)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6920 XSETFRAME (frame, f);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6921 else
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6922 frame = Qnil;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6923
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6924 if (do_help > 0)
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6925 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6926 any_help_event_p = 1;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6927 gen_help_event (help_echo_string, frame, help_echo_window,
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6928 help_echo_object, help_echo_pos);
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
6929 }
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6930 else
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6931 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6932 help_echo_string = Qnil;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6933 gen_help_event (Qnil, frame, Qnil, Qnil, 0);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6934 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6935 count++;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6936 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6937
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6938 *eventp = event;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6939 return count;
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
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6942
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6943 /* Handles the XEvent EVENT on display DISPLAY.
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6944 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
6945 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
6946
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6947 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
6948 int
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6949 x_dispatch_event (event, display)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6950 XEvent *event;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6951 Display *display;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6952 {
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6953 struct x_display_info *dpyinfo;
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6954 int finish = X_EVENT_NORMAL;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
6955
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
6956 dpyinfo = x_display_info_for_display (display);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
6957
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6958 if (dpyinfo)
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6959 handle_one_xevent (dpyinfo, event, &finish, 0);
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6960
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
6961 return finish;
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6962 }
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6963
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
6964
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6965 /* Read events coming from the X server.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6966 This routine is called by the SIGIO handler.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6967 We return as soon as there are no more events to be read.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6968
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6969 We return the number of characters stored into the buffer,
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6970 thus pretending to be `read'.
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6971
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6972 EXPECTED is nonzero if the caller knows input is available. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6973
43884
eb248012bf4a (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>: Use a fixed-size
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43839
diff changeset
6974 static int
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6975 XTread_socket (sd, expected, hold_quit)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6976 register int sd;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6977 int expected;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
6978 struct input_event *hold_quit;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6979 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6980 int count = 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6981 XEvent event;
3938
83d870a52936 * xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents: 3924
diff changeset
6982 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
6983 struct x_display_info *dpyinfo;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6984
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
6985 if (interrupt_input_blocked)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6986 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
6987 interrupt_input_pending = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6988 return -1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6989 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6990
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2353
diff changeset
6991 interrupt_input_pending = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6992 BLOCK_INPUT;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
6993
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
6994 /* 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
6995 input_signal_count++;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
6996
30083
998d20abc885 (XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents: 30050
diff changeset
6997 ++handling_signal;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
6998
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
6999 /* 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
7000 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
7001 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
7002 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7003 #if 0 /* This ought to be unnecessary; let's verify it. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7004 #ifdef FIOSNBIO
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7005 /* 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
7006 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
7007 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
7008 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
7009 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
7010 #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
7011 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7012
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7013 #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
7014 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
7015 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
7016 for X connections. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7017 #ifndef SIGIO
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7018 #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
7019 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
7020 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7021 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
7022 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
7023 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
7024 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
7025 }
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7026 #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
7027 #endif /* SIGIO */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7028 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7029
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7030 /* 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
7031 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
7032 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7033 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
7034 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
7035 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7036
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
7037 #ifdef HAVE_X_SM
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7038 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7039 struct input_event inev;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7040 BLOCK_INPUT;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7041 /* We don't need to EVENT_INIT (inev) here, as
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7042 x_session_check_input copies an entire input_event. */
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7043 if (x_session_check_input (&inev))
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7044 {
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7045 kbd_buffer_store_event_hold (&inev, hold_quit);
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7046 count++;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7047 }
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7048 UNBLOCK_INPUT;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7049 }
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
7050 #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
7051
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7052 #ifndef USE_GTK
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7053 while (XPending (dpyinfo->display))
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7054 {
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7055 int finish;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
7056
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7057 XNextEvent (dpyinfo->display, &event);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7058
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
7059 #ifdef HAVE_X_I18N
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
7060 /* 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
7061 if (x_filter_event (dpyinfo, &event))
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
7062 break;
15973
6ad9e8fee494 (XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents: 15928
diff changeset
7063 #endif
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7064 event_found = 1;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7065
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7066 count += handle_one_xevent (dpyinfo, &event, &finish, hold_quit);
49117
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7067
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7068 if (finish == X_EVENT_GOTO_OUT)
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7069 goto out;
f8288cd7d1cd *** empty log message ***
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49054
diff changeset
7070 }
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7071 #endif /* not USE_GTK */
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7072 }
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7073
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7074 #ifdef USE_GTK
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7075
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7076 /* For GTK we must use the GTK event loop. But XEvents gets passed
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7077 to our filter function above, and then to the big event switch.
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7078 We use a bunch of globals to communicate with our filter function,
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7079 that is kind of ugly, but it works.
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7080
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7081 There is no way to do one display at the time, GTK just does events
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7082 from all displays. */
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7083
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7084 while (gtk_events_pending ())
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7085 {
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7086 current_count = count;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7087 current_hold_quit = hold_quit;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7088
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7089 gtk_main_iteration ();
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7090
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7091 count = current_count;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7092 current_count = -1;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7093 current_hold_quit = 0;
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7094
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7095 if (current_finish == X_EVENT_GOTO_OUT)
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7096 break;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7097 }
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
7098 #endif /* USE_GTK */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7099
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7100 out:;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7101
8485
6e4b40c80021 (XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents: 8437
diff changeset
7102 /* 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
7103 when the window is destroyed. Detect that. (1994.) */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7104 if (! event_found)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7105 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7106 /* 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
7107 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
7108 B. Bretthauer, 1994 */
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7109 x_noop_count++;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7110 if (x_noop_count >= 100)
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7111 {
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7112 x_noop_count=0;
12657
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7113
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7114 if (next_noop_dpyinfo == 0)
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7115 next_noop_dpyinfo = x_display_list;
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7116
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7117 XNoOp (next_noop_dpyinfo->display);
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7118
05b7a5d25df6 (next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12530
diff changeset
7119 /* 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
7120 next_noop_dpyinfo = next_noop_dpyinfo->next;
7916
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7121 }
50e9e0c8806a (x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7905
diff changeset
7122 }
5753
eb44ecad5557 (XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents: 5740
diff changeset
7123
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7124 /* 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
7125 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
7126 /* ??? 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
7127 if (pending_autoraise_frame)
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
7128 {
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
7129 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
7130 pending_autoraise_frame = 0;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
7131 }
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
7132
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7133 --handling_signal;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7134 UNBLOCK_INPUT;
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
7135
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7136 return count;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7137 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7138
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7139
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7140
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7141
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7142 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7143 Text Cursor
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7144 ***********************************************************************/
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7145
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7146 /* 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
7147 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
7148
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7149 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
7150 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
7151 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
7152
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7153 static void
58403
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7154 x_clip_to_row (w, row, area, gc)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7155 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7156 struct glyph_row *row;
58403
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7157 int area;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7158 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7159 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7160 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
7161 XRectangle clip_rect;
58403
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7162 int window_x, window_y, window_width;
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7163
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7164 window_box (w, area, &window_x, &window_y, &window_width, 0);
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7165
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7166 clip_rect.x = window_x;
59750
06038cdb686a (x_clip_to_row): Ensure y >= 0.
Kim F. Storm <storm@cua.dk>
parents: 59745
diff changeset
7167 clip_rect.y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, row->y));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7168 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
7169 clip_rect.width = window_width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7170 clip_rect.height = row->visible_height;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7171
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7172 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
7173 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7174
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7175
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7176 /* 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
7177
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7178 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7179 x_draw_hollow_cursor (w, row)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7180 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7181 struct glyph_row *row;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7182 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7183 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
7184 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
7185 Display *dpy = FRAME_X_DISPLAY (f);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7186 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
7187 XGCValues xgcv;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7188 struct glyph *cursor_glyph;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7189 GC gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7190
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7191 /* 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
7192 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
7193 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
7194 if (cursor_glyph == NULL)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7195 return;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7196
59750
06038cdb686a (x_clip_to_row): Ensure y >= 0.
Kim F. Storm <storm@cua.dk>
parents: 59745
diff changeset
7197 /* Compute frame-relative coordinates for phys cursor. */
53336
9a1b69cfa7be (Qface, Qmouse_face): Remove unused externs.
Kim F. Storm <storm@cua.dk>
parents: 53083
diff changeset
7198 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
59750
06038cdb686a (x_clip_to_row): Ensure y >= 0.
Kim F. Storm <storm@cua.dk>
parents: 59745
diff changeset
7199 y = get_phys_cursor_geometry (w, row, cursor_glyph, &h);
06038cdb686a (x_clip_to_row): Ensure y >= 0.
Kim F. Storm <storm@cua.dk>
parents: 59745
diff changeset
7200 wd = w->phys_cursor_width;
53336
9a1b69cfa7be (Qface, Qmouse_face): Remove unused externs.
Kim F. Storm <storm@cua.dk>
parents: 53083
diff changeset
7201
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7202 /* 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
7203 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
7204 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
7205 if (dpyinfo->scratch_cursor_gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7206 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
7207 else
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7208 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
7209 GCForeground, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7210 gc = dpyinfo->scratch_cursor_gc;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7211
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7212 /* Set clipping, draw the rectangle, and reset clipping again. */
58403
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7213 x_clip_to_row (w, row, TEXT_AREA, gc);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7214 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
7215 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7216 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7217
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7218
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7219 /* 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
7220
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7221 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
7222 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
7223 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
7224 --gerd. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7225
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7226 static void
44690
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7227 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
7228 struct window *w;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7229 struct glyph_row *row;
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
7230 int width;
44690
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7231 enum text_cursor_kinds kind;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7232 {
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7233 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
7234 struct glyph *cursor_glyph;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7235
30742
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7236 /* 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
7237 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
7238 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
7239 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
7240 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
7241 return;
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7242
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7243 /* 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
7244 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
7245 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
7246 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
7247 {
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7248 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
7249 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
7250 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
7251 }
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7252 else
e25bfc3f618c (x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents: 30700
diff changeset
7253 {
41073
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7254 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
7255 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
7256 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
7257 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
7258 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
7259 XGCValues xgcv;
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7260
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7261 /* 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
7262 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
7263 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
7264 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
7265 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
7266 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
7267 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
7268 else
3dafa2c81609 (x_draw_bar_cursor): If the background color of the
Gerd Moellmann <gerd@gnu.org>
parents: 40957
diff changeset
7269 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
7270 xgcv.graphics_exposures = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7271
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7272 if (gc)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7273 XChangeGC (dpy, gc, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7274 else
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7275 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7276 gc = XCreateGC (dpy, window, mask, &xgcv);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7277 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
7278 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7279
28321
fc0a61d81fc5 (x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents: 28307
diff changeset
7280 if (width < 0)
47143
264271f9ab24 (x_specified_cursor_type): Remove prototype.
Kim F. Storm <storm@cua.dk>
parents: 47057
diff changeset
7281 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
7282 width = min (cursor_glyph->pixel_width, width);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7283
44774
f2158eb57017 (x_draw_hollow_cursor, x_draw_bar_cursor)
Gerd Moellmann <gerd@gnu.org>
parents: 44763
diff changeset
7284 w->phys_cursor_width = width;
58403
c936fa56eb60 (x_clip_to_row): Add area arg. Callers changed.
Kim F. Storm <storm@cua.dk>
parents: 57953
diff changeset
7285 x_clip_to_row (w, row, TEXT_AREA, gc);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7286
44690
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7287 if (kind == BAR_CURSOR)
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7288 XFillRectangle (dpy, window, gc,
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7289 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
7290 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
7291 width, row->height);
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7292 else
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7293 XFillRectangle (dpy, window, gc,
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7294 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
7295 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
7296 row->height - width),
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7297 cursor_glyph->pixel_width,
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7298 width);
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7299
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7300 XSetClipMask (dpy, gc, None);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7301 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7302 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7303
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7304
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7305 /* 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
7306
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7307 static void
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7308 x_define_frame_cursor (f, cursor)
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7309 struct frame *f;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7310 Cursor cursor;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7311 {
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7312 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
7313 }
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7314
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7315
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7316 /* 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
7317
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7318 static void
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7319 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
7320 struct frame *f;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7321 int x, y, width, height;
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7322 {
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7323 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
7324 x, y, width, height, False);
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7325 }
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7326
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7327
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7328 /* RIF: Draw cursor on window W. */
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7329
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7330 static void
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7331 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
7332 struct window *w;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7333 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
7334 int x, y;
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7335 int cursor_type, cursor_width;
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7336 int on_p, active_p;
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7337 {
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7338 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
7339
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7340 if (on_p)
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7341 {
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7342 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
7343 w->phys_cursor_on_p = 1;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7344
53609
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
7345 if (glyph_row->exact_window_width_line_p
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
7346 && w->phys_cursor.hpos >= glyph_row->used[TEXT_AREA])
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
7347 {
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
7348 glyph_row->cursor_in_fringe_p = 1;
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
7349 draw_fringe_bitmap (w, glyph_row, 0);
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
7350 }
0bb1ce3944cd (x_update_window_end): Call draw_window_fringes.
Kim F. Storm <storm@cua.dk>
parents: 53596
diff changeset
7351 else
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7352 switch (cursor_type)
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7353 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7354 case HOLLOW_BOX_CURSOR:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7355 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
7356 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7357
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7358 case FILLED_BOX_CURSOR:
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
7359 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
7360 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7361
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7362 case BAR_CURSOR:
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7363 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
7364 break;
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7365
8826cd76618a (x_draw_bar_cursor): New argument KIND; callers changed.
Eli Zaretskii <eliz@gnu.org>
parents: 44626
diff changeset
7366 case HBAR_CURSOR:
50243
3fb54e5a7201 (struct redisplay_interface): Add active_p argument to
Kim F. Storm <storm@cua.dk>
parents: 50237
diff changeset
7367 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
7368 break;
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 case NO_CURSOR:
44814
06d704d7ed94 (x_display_and_set_cursor): Set phys_cursor_width to
Gerd Moellmann <gerd@gnu.org>
parents: 44805
diff changeset
7371 w->phys_cursor_width = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7372 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7373
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7374 default:
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7375 abort ();
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7376 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7377
27619
1d5c785bca99 * xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents: 27542
diff changeset
7378 #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
7379 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
7380 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
7381 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
7382 #endif
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7383 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7384
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7385 #ifndef XFlush
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7386 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
7387 XFlush (FRAME_X_DISPLAY (f));
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7388 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7389 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7390
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7391
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7392 /* Icons. */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7393
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
7394 /* Make the x-window of frame F use the gnu icon bitmap. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7395
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7396 int
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7397 x_bitmap_icon (f, file)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7398 struct frame *f;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7399 Lisp_Object file;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7400 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7401 int bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7402
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7403 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7404 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7405
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
7406 /* 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
7407 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
7408 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
7409 f->output_data.x->icon_bitmap = 0;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7410
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
7411 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
7412 {
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
7413 #ifdef USE_GTK
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7414 /* Use gtk_window_set_icon_from_file () if available,
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
7415 It's not restricted to bitmaps */
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7416 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
7417 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
7418 #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
7419 bitmap_id = x_create_bitmap_from_file (f, file);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7420 x_create_bitmap_mask (f, bitmap_id);
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
7421 }
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
7422 else
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
7423 {
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
7424 /* 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
7425 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
7426 {
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
7427 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
7428 = 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
7429 gnu_width, gnu_height);
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7430 x_create_bitmap_mask (f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id);
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
7431 }
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
7432
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
7433 /* 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
7434 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
7435 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
7436 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
7437 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
7438
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
7439 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
7440 }
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
7441
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
7442 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
7443 f->output_data.x->icon_bitmap = bitmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7444
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7445 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7446 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7447
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7448
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7449 /* 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
7450 Use ICON_NAME as the text. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7451
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7452 int
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7453 x_text_icon (f, icon_name)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7454 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7455 char *icon_name;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7456 {
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7457 if (FRAME_X_WINDOW (f) == 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7458 return 1;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7459
12074
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7460 #ifdef HAVE_X11R4
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7461 {
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7462 XTextProperty text;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7463 text.value = (unsigned char *) icon_name;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7464 text.encoding = XA_STRING;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7465 text.format = 8;
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7466 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
7467 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
7468 }
111aadc2521a (x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents: 12000
diff changeset
7469 #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
7470 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
7471 #endif /* not HAVE_X11R4 */
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7472
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
7473 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
7474 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
7475 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
7476 x_wm_set_icon_pixmap (f, 0);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7477
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7478 return 0;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7479 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7480
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7481 #define X_ERROR_MESSAGE_SIZE 200
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7482
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7483 /* If non-nil, this should be a string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7484 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
7485
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7486 static Lisp_Object x_error_message_string;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7487
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7488 /* 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
7489 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
7490 x_catch_errors is in effect. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7491
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7492 static void
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7493 x_error_catcher (display, error)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7494 Display *display;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7495 XErrorEvent *error;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7496 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7497 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
7498 SDATA (x_error_message_string),
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7499 X_ERROR_MESSAGE_SIZE);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7500 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7501
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7502 /* 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
7503 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
7504 operating on.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7505
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7506 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
7507 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
7508 stored in x_error_message_string.
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7509
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7510 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
7511 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
7512
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7513 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
7514
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7515 void x_check_errors ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7516 static Lisp_Object x_catch_errors_unwind ();
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7517
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7518 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7519 x_catch_errors (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7520 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7521 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46159
diff changeset
7522 int count = SPECPDL_INDEX ();
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7523
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7524 /* 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
7525 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7526
49054
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7527 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
7528 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
7529 x_error_message_string));
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7530
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7531 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
7532 SSET (x_error_message_string, 0, 0);
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7533
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7534 return count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7535 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7536
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7537 /* 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
7538
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7539 static Lisp_Object
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7540 x_catch_errors_unwind (old_val)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7541 Lisp_Object old_val;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7542 {
56782
1dac05def6d8 * xterm.c (x_catch_errors_unwind): Do not XSync if display has closed.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
7543 Lisp_Object first = XCAR (old_val);
1dac05def6d8 * xterm.c (x_catch_errors_unwind): Do not XSync if display has closed.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
7544 Display *dpy = XSAVE_VALUE (first)->pointer;
1dac05def6d8 * xterm.c (x_catch_errors_unwind): Do not XSync if display has closed.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
7545
1dac05def6d8 * xterm.c (x_catch_errors_unwind): Do not XSync if display has closed.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
7546 /* The display may have been closed before this function is called.
1dac05def6d8 * xterm.c (x_catch_errors_unwind): Do not XSync if display has closed.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
7547 Check if it is still open before calling XSync. */
1dac05def6d8 * xterm.c (x_catch_errors_unwind): Do not XSync if display has closed.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
7548 if (x_display_info_for_display (dpy) != 0)
57953
95edcd1fae73 * xterm.c (handle_one_xevent): Don't queue X selection events
Kim F. Storm <storm@cua.dk>
parents: 57901
diff changeset
7549 {
95edcd1fae73 * xterm.c (handle_one_xevent): Don't queue X selection events
Kim F. Storm <storm@cua.dk>
parents: 57901
diff changeset
7550 BLOCK_INPUT;
95edcd1fae73 * xterm.c (handle_one_xevent): Don't queue X selection events
Kim F. Storm <storm@cua.dk>
parents: 57901
diff changeset
7551 XSync (dpy, False);
95edcd1fae73 * xterm.c (handle_one_xevent): Don't queue X selection events
Kim F. Storm <storm@cua.dk>
parents: 57901
diff changeset
7552 UNBLOCK_INPUT;
95edcd1fae73 * xterm.c (handle_one_xevent): Don't queue X selection events
Kim F. Storm <storm@cua.dk>
parents: 57901
diff changeset
7553 }
49054
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7554
6b6ac8aa78d2 (x_catch_errors): Save dpy using make_save_value.
Richard M. Stallman <rms@gnu.org>
parents: 48383
diff changeset
7555 x_error_message_string = XCDR (old_val);
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7556 return Qnil;
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
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7559 /* 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
7560 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
7561 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
7562
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7563 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7564 x_check_errors (dpy, format)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7565 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7566 char *format;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7567 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7568 /* 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
7569 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7570
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7571 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
7572 error (format, SDATA (x_error_message_string));
17607
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
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7575 /* 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
7576 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
7577
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7578 int
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7579 x_had_errors_p (dpy)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7580 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7581 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7582 /* 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
7583 XSync (dpy, False);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7584
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7585 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
7586 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7587
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7588 /* 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
7589
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7590 void
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7591 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
7592 Display *dpy;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7593 {
46435
278371336b60 * xterm.c (x_catch_errors, x_clear_errors): Use SSET.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
7594 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
7595 }
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
7596
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7597 /* 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
7598 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
7599 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
7600 the corresponding call to x_catch_errors. */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7601
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7602 void
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7603 x_uncatch_errors (dpy, count)
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7604 Display *dpy;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7605 int count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7606 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7607 unbind_to (count, Qnil);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7608 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7609
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7610 #if 0
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7611 static unsigned int x_wire_count;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7612 x_trace_wire ()
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 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
7615 }
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7616 #endif /* ! 0 */
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
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7619 /* 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
7620 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
7621 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
7622 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
7623 which will do the appropriate cleanup for us. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7624
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7625 static SIGTYPE
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7626 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
7627 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
7628 {
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7629 #ifdef USG
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7630 /* USG systems forget handlers when they are used;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7631 must reestablish each time */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7632 signal (signalnum, x_connection_signal);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7633 #endif /* USG */
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7634 }
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7635
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
7636
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7637 /************************************************************************
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7638 Handling X errors
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7639 ************************************************************************/
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7640
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7641 /* 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
7642
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7643 static char *error_msg;
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7644
40370
712d604d52eb Fix typo in a comment.
Pavel Jan?k <Pavel@Janik.cz>
parents: 40329
diff changeset
7645 /* 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
7646 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
7647 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
7648
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7649 static void
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7650 x_fatal_error_signal ()
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7651 {
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7652 fprintf (stderr, "%s\n", error_msg);
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7653 exit (70);
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7654 }
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7655
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7656 /* 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
7657 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
7658
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
7659 static SIGTYPE
34673
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
7660 x_connection_closed (dpy, error_message)
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
7661 Display *dpy;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7662 char *error_message;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
7663 {
34673
77cda2c018e5 (x_connection_closed): Prevent being called recursively
Gerd Moellmann <gerd@gnu.org>
parents: 34621
diff changeset
7664 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
7665 Lisp_Object frame, tail;
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7666 int count;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7667
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7668 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
7669 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
7670 handling_signal = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7671
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7672 /* 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
7673 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
7674 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
7675 the original message here. */
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7676 count = x_catch_errors (dpy);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7677
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7678 /* 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
7679 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
7680 events from the display. As a consequence, a sequence of
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7681
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7682 M-x make-frame-on-display RET :1 RET
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7683 ...kill the new frame, so that we get an IO error...
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7684 M-x make-frame-on-display RET :1 RET
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7685
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7686 will indefinitely wait in Xt for events for display `:1', opened
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7687 in the first class to make-frame-on-display.
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7688
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7689 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
7690 OpenWindows in certain situations. I suspect that is a bug
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7691 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
7692
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
7693 #ifdef USE_X_TOOLKIT
35309
cb7e1d7b6b67 (x_connection_closed) [USE_X_TOOLKIT]: If
Gerd Moellmann <gerd@gnu.org>
parents: 35276
diff changeset
7694 /* 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
7695 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
7696 if (dpyinfo)
39586
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 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
7699 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
7700 XtCloseDisplay (dpy);
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7701 fatal_error_signal_hook = NULL;
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7702 }
17825
281d99590839 (dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents: 17720
diff changeset
7703 #endif
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7704
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7705 #ifdef USE_GTK
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7706 if (dpyinfo)
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7707 xg_display_close (dpyinfo->display);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7708 #endif
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
7709
34213
029e36bf4993 Close the display.
Gerd Moellmann <gerd@gnu.org>
parents: 34210
diff changeset
7710 /* 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
7711 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
7712 dpyinfo->display = 0;
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
7713
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7714 /* 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
7715 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
7716 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
7717 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7718 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
7719 minibuf_frame
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7720 = 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
7721 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7722 && FRAME_X_P (XFRAME (minibuf_frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7723 && ! EQ (frame, minibuf_frame)
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7724 && 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
7725 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
7726 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7727
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7728 /* 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
7729 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
7730 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
7731 FOR_EACH_FRAME (tail, frame)
10921
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7732 if (FRAME_X_P (XFRAME (frame))
bf33c9179a6b (x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents: 10755
diff changeset
7733 && 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
7734 {
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
7735 /* 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
7736 trying to find a replacement. */
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
7737 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
7738 Fdelete_frame (frame, Qt);
0d37c1e81c0d (x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents: 11901
diff changeset
7739 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7740
13727
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
7741 if (dpyinfo)
9eb09adbcb38 (x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents: 13633
diff changeset
7742 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
7743
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7744 x_uncatch_errors (dpy, count);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7745
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7746 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
7747 {
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7748 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
7749 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
7750 exit (70);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7751 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7752
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7753 /* 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
7754 #ifdef SIGIO
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7755 sigunblock (sigmask (SIGIO));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7756 #endif
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7757 sigunblock (sigmask (SIGALRM));
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7758 TOTALLY_UNBLOCK_INPUT;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7759
15526
926ef4afc174 (x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents: 15521
diff changeset
7760 clear_waiting_for_input ();
39586
2ca67ed01cd8 (XTread_socket): Return a non_ascii_keystroke for
Gerd Moellmann <gerd@gnu.org>
parents: 39474
diff changeset
7761 error ("%s", error_msg);
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7762 }
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7763
59745
2177d96b9c08 (x_error_quitter): Add a prototype. Make it static again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59725
diff changeset
7764 /* We specifically use it before defining it, so that gcc doesn't inline it,
2177d96b9c08 (x_error_quitter): Add a prototype. Make it static again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59725
diff changeset
7765 otherwise gdb doesn't know how to properly put a breakpoint on it. */
2177d96b9c08 (x_error_quitter): Add a prototype. Make it static again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59725
diff changeset
7766 static void x_error_quitter (Display *display, XErrorEvent *error);
2177d96b9c08 (x_error_quitter): Add a prototype. Make it static again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59725
diff changeset
7767
59725
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7768 /* This is the first-level handler for X protocol errors.
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7769 It calls x_error_quitter or x_error_catcher. */
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7770
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7771 static int
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7772 x_error_handler (display, error)
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7773 Display *display;
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7774 XErrorEvent *error;
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7775 {
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7776 if (! NILP (x_error_message_string))
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7777 x_error_catcher (display, error);
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7778 else
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7779 x_error_quitter (display, error);
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7780 return 0;
a8fd332cc484 (x_error_quitter): No longer static, and moved after x_error_handler.
Richard M. Stallman <rms@gnu.org>
parents: 59655
diff changeset
7781 }
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 555
diff changeset
7782
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7783 /* 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
7784 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
7785 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
7786
59893
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7787 /* .gdbinit puts a breakpoint here, so make sure it is not inlined. */
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7788
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7789 #if __GNUC__ >= 3 /* On GCC 3.0 we might get a warning. */
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7790 #define NO_INLINE __attribute__((noinline))
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7791 #else
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7792 #define NO_INLINE
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7793 #endif
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7794
62217
49a8b890e7a5 (noinclude): Add #undef.
Richard M. Stallman <rms@gnu.org>
parents: 61181
diff changeset
7795 /* Some versions of GNU/Linux define noinline in their headers. */
49a8b890e7a5 (noinclude): Add #undef.
Richard M. Stallman <rms@gnu.org>
parents: 61181
diff changeset
7796
62218
52a6e4267841 Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 62217
diff changeset
7797 #ifdef noinline
52a6e4267841 Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 62217
diff changeset
7798 #undef noinline
62217
49a8b890e7a5 (noinclude): Add #undef.
Richard M. Stallman <rms@gnu.org>
parents: 61181
diff changeset
7799 #endif
49a8b890e7a5 (noinclude): Add #undef.
Richard M. Stallman <rms@gnu.org>
parents: 61181
diff changeset
7800
59893
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7801 /* On older GCC versions, just putting x_error_quitter
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7802 after x_error_handler prevents inlining into the former. */
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7803
c7a28d8cfff9 (x_error_quitter): On GCC 3 and up, specify noinline.
Richard M. Stallman <rms@gnu.org>
parents: 59750
diff changeset
7804 static void NO_INLINE
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7805 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
7806 Display *display;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7807 XErrorEvent *error;
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7808 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7809 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
7810
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
7811 /* 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
7812 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
7813
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7814 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
7815 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
7816 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
7817 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
7818 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
7819
34956
c26b7651dd9f (x_connection_closed): Catch X errors around all
Gerd Moellmann <gerd@gnu.org>
parents: 34949
diff changeset
7820
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7821 /* 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
7822 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
7823 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
7824
1875
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
7825 static int
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
7826 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
7827 Display *display;
f569bc4e9b8f * xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents: 1841
diff changeset
7828 {
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7829 char buf[256];
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7830
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7831 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
7832 x_connection_closed (display, buf);
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
7833 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
7834 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
7835
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
7836 /* 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
7837
8291
9c6ddd14996b (struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents: 8279
diff changeset
7838 /* 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
7839 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
7840 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
7841 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
7842
3076
e3b3c67cf203 Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents: 3066
diff changeset
7843 Lisp_Object
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7844 x_new_font (f, fontname)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7845 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7846 register char *fontname;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7847 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7848 struct font_info *fontp
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
7849 = 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
7850
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7851 if (!fontp)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7852 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7853
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7854 FRAME_FONT (f) = (XFontStruct *) (fontp->font);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7855 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
7856 FRAME_FONTSET (f) = -1;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7857
59206
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
7858 FRAME_COLUMN_WIDTH (f) = fontp->average_width;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
7859 FRAME_SPACE_WIDTH (f) = fontp->space_width;
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7860 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
7861
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
7862 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
7863
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
7864 /* 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
7865 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
7866 {
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7867 int wid = FRAME_COLUMN_WIDTH (f);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7868 FRAME_CONFIG_SCROLL_BAR_COLS (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7869 = (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
7870 }
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
7871 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
7872 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7873 int wid = FRAME_COLUMN_WIDTH (f);
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7874 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
7875 }
9167
8ad448b29c1c (x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents: 9101
diff changeset
7876
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
7877 /* 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
7878 if (FRAME_X_WINDOW (f) != 0)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7879 {
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
7880 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
7881 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
7882 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
7883 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
7884 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
7885 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
7886
5ad77d538e08 (x_new_font): Don't change a tooltip's size.
Gerd Moellmann <gerd@gnu.org>
parents: 35487
diff changeset
7887 /* 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
7888 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
7889 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
7890 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
7891 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
7892 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7893
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7894 return build_string (fontp->full_name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7895 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7896
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7897 /* 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
7898 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
7899 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
7900 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
7901
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7902 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7903 x_new_fontset (f, fontsetname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7904 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7905 char *fontsetname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7906 {
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
7907 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
7908 Lisp_Object result;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7909
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7910 if (fontset < 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7911 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7912
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
7913 if (FRAME_FONTSET (f) == fontset)
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
7914 /* 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
7915 to do. */
28231
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
7916 return fontset_name (fontset);
076ed36c3101 Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents: 28183
diff changeset
7917
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
7918 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
7919
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7920 if (!STRINGP (result))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7921 /* Can't load ASCII font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7922 return Qnil;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7923
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7924 /* 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
7925 FRAME_FONTSET (f) = fontset;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7926
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7927 #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
7928 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
7929 && (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
7930 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
7931 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7932
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
7933 return build_string (fontsetname);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7934 }
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7935
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7936
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7937 /***********************************************************************
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7938 X Input Methods
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7939 ***********************************************************************/
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7940
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7941 #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
7942
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7943 #ifdef HAVE_X11R6
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7944
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7945 /* 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
7946 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
7947 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
7948
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7949 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7950 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
7951 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7952 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7953 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7954 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7955 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
7956 Lisp_Object frame, tail;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7957
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7958 BLOCK_INPUT;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7959
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7960 /* 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
7961 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
7962 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7963 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
7964 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
7965 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7966 FRAME_XIC (f) = NULL;
57633
ead4249849ac * xterm.h (x_output): New member `xic_base_fontname'.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 57598
diff changeset
7967 xic_free_xfontset (f);
27500
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 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
7970
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7971 /* 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
7972 dpyinfo->xim = NULL;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7973 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
7974 UNBLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7975 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7976
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7977 #endif /* HAVE_X11R6 */
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7978
48085
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
7979 #ifdef HAVE_X11R6
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
7980 /* This isn't prototyped in OSF 5.0 or 5.1a. */
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
7981 extern char *XSetIMValues P_ ((XIM, ...));
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
7982 #endif
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
7983
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7984 /* 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
7985 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
7986
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7987 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7988 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
7989 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
7990 char *resource_name;
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 XIM xim;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
7993
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
7994 #ifdef HAVE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
7995 if (use_xim)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
7996 {
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
7997 xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
7998 EMACS_CLASS);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
7999 dpyinfo->xim = xim;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8000
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8001 if (xim)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8002 {
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8003 #ifdef HAVE_X11R6
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8004 XIMCallback destroy;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8005 #endif
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8006
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8007 /* Get supported styles and XIM values. */
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8008 XGetIMValues (xim, XNQueryInputStyle, &dpyinfo->xim_styles, NULL);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8009
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8010 #ifdef HAVE_X11R6
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8011 destroy.callback = xim_destroy_callback;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8012 destroy.client_data = (XPointer)dpyinfo;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8013 XSetIMValues (xim, XNDestroyCallback, &destroy, NULL);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8014 #endif
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8015 }
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8016 }
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8017
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8018 else
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8019 #endif /* HAVE_XIM */
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8020 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
8021 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8022
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8023
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8024 #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
8025
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8026 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
8027 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8028 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
8029 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8030 };
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8031
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8032 /* 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
8033 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
8034 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
8035 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
8036
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8037 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8038 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
8039 Display *display;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8040 XPointer client_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8041 XPointer call_data;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8042 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8043 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
8044 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
8045
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8046 /* 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
8047 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8048 return;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8049
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8050 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
8051
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8052 /* 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
8053 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
8054 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
8055 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8056 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
8057
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8058 BLOCK_INPUT;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8059 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
8060 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8061 struct frame *f = XFRAME (frame);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8062
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8063 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
8064 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
8065 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8066 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
8067 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
8068 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
8069 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
8070 {
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8071 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
8072 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
8073 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8074 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8075 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8076
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8077 UNBLOCK_INPUT;
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 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8080
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8081 #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
8082
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8083
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8084 /* 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
8085 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
8086 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
8087 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
8088
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8089 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8090 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
8091 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
8092 char *resource_name;
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8093 {
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8094 #ifdef HAVE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8095 if (use_xim)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8096 {
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8097 #ifdef HAVE_X11R6_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8098 struct xim_inst_t *xim_inst;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8099 int len;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8100
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8101 dpyinfo->xim = NULL;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8102 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
8103 xim_inst->dpyinfo = dpyinfo;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8104 len = strlen (resource_name);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8105 xim_inst->resource_name = (char *) xmalloc (len + 1);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8106 bcopy (resource_name, xim_inst->resource_name, len + 1);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8107 XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8108 resource_name, EMACS_CLASS,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8109 xim_instantiate_callback,
51649
fab11a57338c (xim_initialize): Use XRegisterIMInstantiateCallback_arg6.
Dave Love <fx@gnu.org>
parents: 51576
diff changeset
8110 /* This is XPointer in XFree86
fab11a57338c (xim_initialize): Use XRegisterIMInstantiateCallback_arg6.
Dave Love <fx@gnu.org>
parents: 51576
diff changeset
8111 but (XPointer *) on Tru64, at
fab11a57338c (xim_initialize): Use XRegisterIMInstantiateCallback_arg6.
Dave Love <fx@gnu.org>
parents: 51576
diff changeset
8112 least, hence the configure test. */
51953
610a102ed36c (xim_initialize): Redo 6/24 change.
Richard M. Stallman <rms@gnu.org>
parents: 51897
diff changeset
8113 (XRegisterIMInstantiateCallback_arg6) xim_inst);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8114 #else /* not HAVE_X11R6_XIM */
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8115 dpyinfo->xim = NULL;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8116 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
8117 #endif /* not HAVE_X11R6_XIM */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8118
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8119 }
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8120 else
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8121 #endif /* HAVE_XIM */
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8122 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
8123 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8124
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8125
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8126 /* 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
8127
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8128 static void
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8129 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
8130 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
8131 {
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8132 #ifdef HAVE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8133 if (use_xim)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8134 {
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8135 #ifdef HAVE_X11R6_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8136 if (dpyinfo->display)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8137 XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8138 NULL, EMACS_CLASS,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8139 xim_instantiate_callback, NULL);
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8140 #endif /* not HAVE_X11R6_XIM */
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8141 if (dpyinfo->display)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8142 XCloseIM (dpyinfo->xim);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8143 dpyinfo->xim = NULL;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8144 XFree (dpyinfo->xim_styles);
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
8145 }
52076
039e1c55561e (xim_open_dpy, xim_initialize, xim_close_dpy):
Richard M. Stallman <rms@gnu.org>
parents: 51953
diff changeset
8146 #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
8147 }
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8148
28142
156c32f18198 (xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents: 28139
diff changeset
8149 #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
8150
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
8151
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8152
14826
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
8153 /* Calculate the absolute position in frame F
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
8154 from its current recorded position values and gravity. */
eec0abb31126 Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents: 14801
diff changeset
8155
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8156 void
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
8157 x_calc_absolute_position (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8158 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8159 {
4630
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
8160 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
8161 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
8162
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8163 /* 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
8164 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
8165 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
8166 return;
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8167
4630
70247ce8b381 (x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents: 4493
diff changeset
8168 /* 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
8169 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
8170 if (flags & XNegative)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8171 f->left_pos = (FRAME_X_DISPLAY_INFO (f)->width
58891
75cac0943699 * xterm.c (x_calc_absolute_position): Don't subtract outer_pixel_diff
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 58403
diff changeset
8172 - FRAME_PIXEL_WIDTH (f) + f->left_pos);
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8173
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8174 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8175 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
8176
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8177 #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
8178 /* 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
8179 `-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
8180
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8181 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
8182 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
8183 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
8184 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
8185 is right, though.
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8186
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8187 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
8188 2000-12-01, gerd. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8189
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8190 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
8191 #endif
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8192
7262
68fc80bf10df (x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents: 7210
diff changeset
8193 if (flags & YNegative)
58891
75cac0943699 * xterm.c (x_calc_absolute_position): Don't subtract outer_pixel_diff
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 58403
diff changeset
8194 f->top_pos = (FRAME_X_DISPLAY_INFO (f)->height - height + f->top_pos);
34099
06ab9f74a16b (x_calc_absolute_position): Don't subtract menubar's
Gerd Moellmann <gerd@gnu.org>
parents: 34066
diff changeset
8195 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8196
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8197 /* 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
8198 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
8199 so the flags should correspond. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8200 f->size_hint_flags &= ~ (XNegative | YNegative);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8201 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8202
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8203 /* 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
8204 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
8205 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
8206 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
8207 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
8208
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8209 void
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
8210 x_set_offset (f, xoff, yoff, change_gravity)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8211 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8212 register int xoff, yoff;
6934
e0ab4f59004e (dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents: 6883
diff changeset
8213 int change_gravity;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8214 {
11901
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
8215 int modified_top, modified_left;
8ecc60a02138 (x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents: 11896
diff changeset
8216
11988
a1ce6f699967 (x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents: 11953
diff changeset
8217 if (change_gravity > 0)
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8218 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8219 f->top_pos = yoff;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8220 f->left_pos = xoff;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8221 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
8222 if (xoff < 0)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8223 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
8224 if (yoff < 0)
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8225 f->size_hint_flags |= YNegative;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8226 f->win_gravity = NorthWestGravity;
7409
fe56a02838ba (x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents: 7346
diff changeset
8227 }
7264
a701bffa0f9d (x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents: 7262
diff changeset
8228 x_calc_absolute_position (f);
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
8229
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8230 BLOCK_INPUT;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
8231 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
8232
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8233 modified_left = f->left_pos;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8234 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
8235
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8236 if (FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_A)
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8237 {
52754
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8238 /* Some WMs (twm, wmaker at least) has an offset that is smaller
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8239 than the WM decorations. So we use the calculated offset instead
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8240 of the WM decoration sizes here (x/y_pixels_outer_diff). */
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8241 modified_left += FRAME_X_OUTPUT (f)->move_offset_left;
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8242 modified_top += FRAME_X_OUTPUT (f)->move_offset_top;
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8243 }
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8244
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8245 XMoveWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8246 modified_left, modified_top);
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8247
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8248 if (FRAME_VISIBLE_P (f)
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8249 && FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN)
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8250 {
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8251 FRAME_X_OUTPUT (f)->check_expected_move = 1;
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8252 FRAME_X_OUTPUT (f)->expected_top = f->top_pos;
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8253 FRAME_X_OUTPUT (f)->expected_left = f->left_pos;
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8254 }
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8255
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8256 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8257 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8258
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8259 /* 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
8260 If so needed, resize the frame. */
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8261 static void
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8262 x_check_fullscreen (f)
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8263 struct frame *f;
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8264 {
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8265 if (f->want_fullscreen & FULLSCREEN_BOTH)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8266 {
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8267 int width, height, ign;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8268
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8269 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
8270
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8271 x_fullscreen_adjust (f, &width, &height, &ign, &ign);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8272
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8273 /* 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
8274 when setting WM manager hints.
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8275 If the frame is visible already, the position is checked by
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8276 x_check_expected_move. */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8277 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
8278 {
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8279 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
8280 SET_FRAME_GARBAGED (f);
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8281 cancel_mouse_face (f);
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8282
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8283 /* 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
8284 f->want_fullscreen |= FULLSCREEN_WAIT;
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8285 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8286 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8287 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8288
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8289 /* If frame parameters are set after the frame is mapped, we need to move
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8290 the window.
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8291 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
8292 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
8293 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
8294 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
8295 static void
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8296 x_check_expected_move (f)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8297 struct frame *f;
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8298 {
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8299 if (FRAME_X_OUTPUT (f)->check_expected_move)
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8300 {
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8301 int expect_top = FRAME_X_OUTPUT (f)->expected_top;
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8302 int expect_left = FRAME_X_OUTPUT (f)->expected_left;
52754
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8303
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8304 if (expect_top != f->top_pos || expect_left != f->left_pos)
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8305 {
52754
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8306 FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_A;
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8307 FRAME_X_OUTPUT (f)->move_offset_left = expect_left - f->left_pos;
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8308 FRAME_X_OUTPUT (f)->move_offset_top = expect_top - f->top_pos;
d08832a11cfd * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52753
diff changeset
8309
58891
75cac0943699 * xterm.c (x_calc_absolute_position): Don't subtract outer_pixel_diff
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 58403
diff changeset
8310 f->left_pos = expect_left;
75cac0943699 * xterm.c (x_calc_absolute_position): Don't subtract outer_pixel_diff
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 58403
diff changeset
8311 f->top_pos = expect_top;
75cac0943699 * xterm.c (x_calc_absolute_position): Don't subtract outer_pixel_diff
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 58403
diff changeset
8312 x_set_offset (f, expect_left, expect_top, 0);
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8313 }
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8314 else if (FRAME_X_DISPLAY_INFO (f)->wm_type == X_WMTYPE_UNKNOWN)
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8315 FRAME_X_DISPLAY_INFO (f)->wm_type = X_WMTYPE_B;
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8316
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8317 /* Just do this once */
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
8318 FRAME_X_OUTPUT (f)->check_expected_move = 0;
42717
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8319 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8320 }
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8321
839386cf6e9b (x_check_fullscreen, x_check_fullscreen_move)
Eli Zaretskii <eliz@gnu.org>
parents: 42688
diff changeset
8322
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8323 /* 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
8324 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
8325 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
8326 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
8327
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8328 static void
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8329 x_set_window_size_1 (f, change_gravity, cols, rows)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8330 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
8331 int change_gravity;
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8332 int cols, rows;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8333 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8334 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
8335
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8336 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
8337 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
8338 = (!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
8339 ? 0
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8340 : 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
8341 ? FRAME_CONFIG_SCROLL_BAR_WIDTH (f)
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8342 : (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
8343
50097
ee703213acfa Remove generic fringe code.
Kim F. Storm <storm@cua.dk>
parents: 50064
diff changeset
8344 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
8345
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8346 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
8347 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
8348
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8349 f->win_gravity = NorthWestGravity;
11915
e2ab839155e1 (XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents: 11904
diff changeset
8350 x_wm_set_size_hint (f, (long) 0, 0);
8781
98741404d3e0 Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents: 8724
diff changeset
8351
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8352 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
8353 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
8354 pixelwidth, pixelheight);
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8355
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8356 /* 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
8357 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
8358 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
8359 ConfigureNotify event gets here.
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8360
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8361 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
8362 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
8363 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
8364 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
8365 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
8366
1c02364724aa (x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents: 25101
diff changeset
8367 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
8368 a BLOCK_INPUT. */
25360
2f3ad0a21be5 Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents: 25328
diff changeset
8369 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
8370 FRAME_PIXEL_WIDTH (f) = pixelwidth;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8371 FRAME_PIXEL_HEIGHT (f) = pixelheight;
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
8372
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8373 /* 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
8374 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
8375 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
8376 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
8377 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
8378
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8379 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
8380 }
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8381
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8382
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8383 /* 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
8384 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
8385 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
8386 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
8387
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8388 void
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8389 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
8390 struct frame *f;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8391 int change_gravity;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8392 int cols, rows;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8393 {
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8394 BLOCK_INPUT;
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8395
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8396 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8397 if (FRAME_GTK_WIDGET (f))
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8398 xg_frame_set_char_size (f, cols, rows);
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8399 else
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8400 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
8401 #elif USE_X_TOOLKIT
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8402
36442
7fda58b1a204 (x_set_window_size): Don't use `None' with widgets; use
Gerd Moellmann <gerd@gnu.org>
parents: 36251
diff changeset
8403 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
8404 {
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8405 /* 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
8406 call to XtSetValues within EmacsFrameSetCharSize.
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8407 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
8408 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
8409 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
8410 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
8411 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
8412 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
8413 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
8414 }
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8415 else
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8416 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
8417
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8418 #else /* not USE_X_TOOLKIT */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8419
35487
e92d3f50f8b8 (x_set_window_size_1): New function extracted from
Gerd Moellmann <gerd@gnu.org>
parents: 35393
diff changeset
8420 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
8421
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8422 #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
8423
7651
1569a13efdcd (x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents: 7602
diff changeset
8424 /* 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
8425 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
8426
14692
e93656946a8c (x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents: 14557
diff changeset
8427 /* 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
8428 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
8429 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
8430 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
8431 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
8432
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8433 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8434 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8435
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8436 /* Mouse warping. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8437
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8438 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8439 x_set_mouse_position (f, x, y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8440 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8441 int x, y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8442 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8443 int pix_x, pix_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8444
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8445 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
8446 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
8447
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8448 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
8449 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
8450
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
8451 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
8452 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
8453
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8454 BLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8455
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8456 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
8457 0, 0, 0, 0, pix_x, pix_y);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8458 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8459 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8460
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8461 /* 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
8462
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8463 void
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8464 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
8465 struct frame *f;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8466 int pix_x, pix_y;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8467 {
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8468 BLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8469
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8470 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
8471 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
8472 UNBLOCK_INPUT;
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8473 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8474
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8475 /* focus shifting, raising and lowering. */
7026
55f9a506180d (x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7001
diff changeset
8476
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8477 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8478 x_focus_on_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8479 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8480 {
5156
fd78458b8c43 (XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents: 5018
diff changeset
8481 #if 0 /* This proves to be unpleasant. */
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8482 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
8483 #endif
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
8484 #if 0
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
8485 /* 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
8486 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
8487 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
8488 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8489 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
8490 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8491 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8492
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8493 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8494 x_unfocus_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8495 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8496 {
369
7f92840f8be4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 313
diff changeset
8497 #if 0
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8498 /* 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
8499 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
8500 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot,
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8501 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
8502 #endif /* ! 0 */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8503 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8504
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8505 /* Raise frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8506
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8507 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8508 x_raise_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8509 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8510 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
8511 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8512 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8513 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
8514 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
8515 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8516 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8517 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8518 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8519
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8520 /* Lower frame F. */
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8521
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8522 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8523 x_lower_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8524 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8525 {
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
8526 if (f->async_visible)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8527 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8528 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
8529 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
8530 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8531 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8532 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8533 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8534
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8535 static void
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
8536 XTframe_raise_lower (f, raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8537 FRAME_PTR f;
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
8538 int raise_flag;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8539 {
14411
bac274f178b0 (XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents: 14305
diff changeset
8540 if (raise_flag)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8541 x_raise_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8542 else
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8543 x_lower_frame (f);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
8544 }
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8545
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8546 /* Change of visibility. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8547
12192
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
diff changeset
8548 /* 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
8549 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
8550 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
8551 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
8552 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
8553 finishes with it. */
1b571a7992b0 (x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents: 12189
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_make_frame_visible (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 {
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8559 Lisp_Object type;
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8560 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
8561 int retry_count = 2;
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8562
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8563 retry:
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8564
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8565 BLOCK_INPUT;
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8566
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8567 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8568 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8569 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
8570
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8571 if (! FRAME_VISIBLE_P (f))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8572 {
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8573 /* 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
8574 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
8575 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
8576 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
8577 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
8578 && ! 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
8579 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
8580
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8581 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
8582
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8583 if (! EQ (Vx_no_window_manager, Qt))
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8584 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
8585 #ifdef USE_X_TOOLKIT
7167
2fa74c48e4e5 (x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents: 7128
diff changeset
8586 /* 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
8587 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
8588 #else /* not USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8589 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8590 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
8591 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
8592 #else
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
8593 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
8594 #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
8595 #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
8596 #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
8597 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
8598 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
8599 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
8600 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
8601 #endif
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8602 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8603
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8604 XFlush (FRAME_X_DISPLAY (f));
429
10b1795f3ae9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 398
diff changeset
8605
7959
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
8606 /* 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
8607 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
8608 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
8609 {
224440646fa7 (make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents: 7935
diff changeset
8610 Lisp_Object frame;
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8611 int count;
18528
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
8612 /* 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
8613 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
8614 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
8615 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
8616
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8617 original_left = f->left_pos;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
8618 original_top = f->top_pos;
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8619
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8620 /* This must come after we set COUNT. */
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8621 UNBLOCK_INPUT;
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8622
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
8623 /* 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
8624
18008
d25d2472df51 (XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents: 17963
diff changeset
8625 /* 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
8626 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
8627 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
8628 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
8629
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
8630 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
8631 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
8632 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
8633
18630
3e414b9da546 (x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents: 18528
diff changeset
8634 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
8635 && f->win_gravity == NorthWestGravity
18528
73f4d9258f04 (x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents: 18347
diff changeset
8636 && previously_visible)
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8637 {
22907
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
8638 Drawable rootw;
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
8639 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
8640 unsigned int width, height, border, depth;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8641
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8642 BLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8643
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8644 /* 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
8645 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
8646 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
8647 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
8648 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
8649 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
8650 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
8651 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
8652 &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
8653
43e290c6fb19 (x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents: 22773
diff changeset
8654 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
8655 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
8656 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
8657
17963
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8658 UNBLOCK_INPUT;
b77c13e71ba3 (XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents: 17953
diff changeset
8659 }
17953
96a51be54a7e (x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents: 17877
diff changeset
8660
9338
873508897cc2 (x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents: 9337
diff changeset
8661 XSETFRAME (frame, f);
9337
7b933936a676 (input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 9232
diff changeset
8662
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8663 /* 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
8664 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
8665 MapNotify at all.. */
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8666 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
8667 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
8668 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8669 /* 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
8670 x_sync (f);
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8671
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8672 /* 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
8673 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
8674 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
8675 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
8676 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
8677 probably a bug. */
8682
42f95b1368ea (x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents: 8652
diff changeset
8678 if (input_polling_used ())
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
8679 {
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8680 /* 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
8681 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
8682 handler reset it. */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
8683 extern void poll_for_input_1 P_ ((void));
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8684 int old_poll_suppress_count = poll_suppress_count;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8685 poll_suppress_count = 1;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8686 poll_for_input_1 ();
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
8687 poll_suppress_count = old_poll_suppress_count;
8652
c2c1a477ddd5 Include keyboard.h.
Richard M. Stallman <rms@gnu.org>
parents: 8634
diff changeset
8688 }
27040
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8689
900a02429efa (x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents: 27000
diff changeset
8690 /* 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
8691 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
8692 }
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8693
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8694 /* 2000-09-28: In
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8695
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8696 (let ((f (selected-frame)))
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8697 (iconify-frame f)
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8698 (raise-frame f))
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8699
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8700 the frame is not raised with various window managers on
51093
2c04067bcdc0 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 51048
diff changeset
8701 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
8702 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
8703 Mapping the widget a second time works. */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
8704
31948
a6e9ef37895d (x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents: 31864
diff changeset
8705 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
8706 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
8707 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8708 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8709
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8710 /* Change from mapped state to withdrawn state. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8711
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8712 /* Make the frame visible (mapped and not iconified). */
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8713
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8714 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8715 x_make_frame_invisible (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8716 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8717 {
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8718 Window window;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8719
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8720 /* 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
8721 window = FRAME_OUTER_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8722
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
8723 /* 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
8724 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
8725 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
8726
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
8727 #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
8728 if (! f->async_visible && ! f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8729 return;
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
8730 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8731
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8732 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
8733
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
8734 /* 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
8735 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
8736 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
8737 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
8738 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
8739 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
8740
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8741 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8742 if (FRAME_GTK_OUTER_WIDGET (f))
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8743 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
8744 else
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8745 #endif
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8746 {
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8747 #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
8748
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8749 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
8750 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
8751 {
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8752 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
8753 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
8754 }
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8755 #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
8756
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8757 /* Tell the window manager what we're going to do. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8758 if (! EQ (Vx_no_window_manager, Qt))
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8759 {
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8760 XEvent unmap;
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8761
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8762 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
8763 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
8764 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
8765 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
8766 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
8767 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
8768 False,
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8769 SubstructureRedirectMaskSubstructureNotifyMask,
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8770 &unmap))
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8771 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8772 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
8773 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
8774 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8775 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8776
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8777 /* 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
8778 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
8779 #endif /* ! defined (HAVE_X11R4) */
50324
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8780 }
d9a401f2769d (take_vertical_position_into_account): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50270
diff changeset
8781
6983
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
8782 /* 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
8783 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
8784 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
8785 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
8786 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
8787 f->visible = 0;
b18e5c09d7c3 (XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents: 6941
diff changeset
8788 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
8789 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
8790 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
8791
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8792 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
8793
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8794 UNBLOCK_INPUT;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8795 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8796
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8797 /* Change window state from mapped to iconified. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8798
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8799 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8800 x_iconify_frame (f)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8801 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8802 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8803 int result;
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8804 Lisp_Object type;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8805
3284
a47979ffad1e (XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents: 3282
diff changeset
8806 /* 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
8807 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
8808 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
8809
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
8810 if (f->async_iconified)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8811 return;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8812
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
8813 BLOCK_INPUT;
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
8814
13627
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
8815 FRAME_SAMPLE_VISIBILITY (f);
8873aa3451dd (XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents: 13598
diff changeset
8816
9565
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8817 type = x_icon_type (f);
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8818 if (!NILP (type))
255d98c7cd67 (dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents: 9542
diff changeset
8819 x_bitmap_icon (f, type);
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
8820
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8821 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8822 if (FRAME_GTK_OUTER_WIDGET (f))
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8823 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8824 if (! FRAME_VISIBLE_P (f))
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8825 gtk_widget_show_all (FRAME_GTK_OUTER_WIDGET (f));
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8826
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8827 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
8828 f->iconified = 1;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8829 f->visible = 1;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8830 f->async_iconified = 1;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8831 f->async_visible = 0;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8832 UNBLOCK_INPUT;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8833 return;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8834 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8835 #endif
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8836
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8837 #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
8838
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8839 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
8840 {
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8841 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
8842 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
8843 /* 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
8844 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
8845 /* 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
8846 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
8847 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
8848 f->iconified = 1;
16753
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
8849 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
8850 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
8851 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
8852 UNBLOCK_INPUT;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8853 return;
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8854 }
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8855
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8856 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
8857 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
8858 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
8859 UNBLOCK_INPUT;
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8860
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8861 if (!result)
7602
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
8862 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
8863
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8864 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
8865 f->async_visible = 0;
ab63a77c3a23 (x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents: 16491
diff changeset
8866
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
8867
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
8868 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
8869 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
8870 UNBLOCK_INPUT;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8871 #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
8872
7738
a810335742bb (x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents: 7706
diff changeset
8873 /* 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
8874 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
8875 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
8876 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
8877
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8878 /* 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
8879 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
8880
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8881 /* 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
8882 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
8883 {
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8884 XEvent message;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8885
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
8886 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
8887 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
8888 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
8889 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
8890 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
8891
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8892 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
8893 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
8894 False,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8895 SubstructureRedirectMask | SubstructureNotifyMask,
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8896 &message))
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8897 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8898 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
8899 error ("Can't notify window manager of iconification");
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8900 }
1020
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8901 }
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8902
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
8903 /* 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
8904 IconicState. */
7c2565dd644c * xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents: 976
diff changeset
8905 x_wm_set_window_state (f, IconicState);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8906
4304
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
8907 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
8908 {
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
8909 /* 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
8910 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
8911 }
b5014da888a8 (x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents: 4277
diff changeset
8912
1658
452ba03935d7 * xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents: 1530
diff changeset
8913 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
8914 f->async_visible = 0;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8915
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
8916 XFlush (FRAME_X_DISPLAY (f));
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8917 UNBLOCK_INPUT;
5740
48da4ed089e9 (x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents: 5737
diff changeset
8918 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8919 }
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
8920
12172
58ce63f11008 (x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents: 12079
diff changeset
8921
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
8922 /* 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
8923
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
8924 void
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
8925 x_free_frame_resources (f)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
8926 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8927 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
8928 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
8929 Lisp_Object bar;
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8930 struct scroll_bar *b;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
8931
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8932 BLOCK_INPUT;
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
8933
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
8934 /* 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
8935 commands to the X server. */
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
8936 if (dpyinfo->display)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
8937 {
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
8938 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
8939 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
8940
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8941 #ifdef USE_X_TOOLKIT
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8942 /* 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
8943 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
8944 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
8945 toolkit scroll bars. */
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8946 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
8947 {
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8948 b = XSCROLL_BAR (bar);
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8949 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
8950 }
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8951 #endif
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8952
14830
34db919835d3 (x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents: 14826
diff changeset
8953 #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
8954 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
8955 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
8956 #endif
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8957
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
8958 #ifdef USE_X_TOOLKIT
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
8959 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
8960 {
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
8961 XtDestroyWidget (f->output_data.x->widget);
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
8962 f->output_data.x->widget = NULL;
5c27e50f91d1 (x_free_frame_resources) [USE_X_TOOLKIT]: Set
Gerd Moellmann <gerd@gnu.org>
parents: 37153
diff changeset
8963 }
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8964 /* 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
8965 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
8966 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
8967 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
8968
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
8969 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
8970 #else /* !USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8971
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8972 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8973 /* In the GTK version, tooltips are normal X
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8974 frames. We must check and free both types. */
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8975 if (FRAME_GTK_OUTER_WIDGET (f))
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8976 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8977 gtk_widget_destroy (FRAME_GTK_OUTER_WIDGET (f));
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8978 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
8979 FRAME_GTK_OUTER_WIDGET (f) = 0;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8980 }
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
8981 #endif /* USE_GTK */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
8982
41837
ca8e9acfffca (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
Eli Zaretskii <eliz@gnu.org>
parents: 41791
diff changeset
8983 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
8984 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
8985 #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
8986
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
8987 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
8988 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
8989 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
8990 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
8991 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
8992 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
8993
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
8994 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
8995 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
8996 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
8997 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
8998 #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
8999 /* 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
9000 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
9001 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
9002 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
9003 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
9004 #endif /* USE_TOOLKIT_SCROLL_BARS */
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9005 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
9006 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
9007 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
9008 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
9009
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9010 if (FRAME_FACE_CACHE (f))
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9011 free_frame_faces (f);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9012
34318
d302f6935ff8 (x_destroy_window): Call x_free_gcs so that
Gerd Moellmann <gerd@gnu.org>
parents: 34250
diff changeset
9013 x_free_gcs (f);
14489
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
9014 XFlush (FRAME_X_DISPLAY (f));
9bc700f13f97 (x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents: 14411
diff changeset
9015 }
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9016
17575
3f073536c09a Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17574
diff changeset
9017 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
9018 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
9019
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9020 xfree (f->output_data.x);
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9021 f->output_data.x = NULL;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9022
11536
c4d3218acd7e (x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents: 11436
diff changeset
9023 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
9024 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
9025 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
9026 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
9027 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
9028 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
9029
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9030 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
9031 {
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9032 dpyinfo->mouse_face_beg_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9033 = dpyinfo->mouse_face_beg_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9034 dpyinfo->mouse_face_end_row
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9035 = dpyinfo->mouse_face_end_col = -1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
9036 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
9037 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
9038 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
9039 }
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9040
1810
bf618128d973 * xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents: 1803
diff changeset
9041 UNBLOCK_INPUT;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9042 }
34526
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9043
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9044
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9045 /* Destroy the X window of frame F. */
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9046
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9047 void
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9048 x_destroy_window (f)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9049 struct frame *f;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9050 {
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9051 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
9052
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9053 /* 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
9054 commands to the X server. */
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9055 if (dpyinfo->display != 0)
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9056 x_free_frame_resources (f);
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9057
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9058 dpyinfo->reference_count--;
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9059 }
0da25e792d3e (x_free_frame_resources): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34511
diff changeset
9060
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9061
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9062 /* Setting window manager hints. */
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
9063
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9064 /* 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
9065 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
9066 that the window now has.
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9067 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
9068 flag (this is useful when FLAGS is 0).
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9069 The GTK version is in gtkutils.c */
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9070
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9071 #ifndef USE_GTK
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9072 void
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9073 x_wm_set_size_hint (f, flags, user_position)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9074 struct frame *f;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9075 long flags;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9076 int user_position;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9077 {
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9078 XSizeHints size_hints;
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9079
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9080 #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
9081 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
9082 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
9083 Dimension widget_width, widget_height;
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9084 #endif
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
9085
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9086 Window window = FRAME_OUTER_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9087
7187
ca0102511d80 (x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents: 7169
diff changeset
9088 /* 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
9089 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9090
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9091 size_hints.x = f->left_pos;
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9092 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
9093
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
9094 #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
9095 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
9096 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
9097 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
9098 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
9099 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
9100 #else /* not USE_X_TOOLKIT */
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9101 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
9102 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
9103 #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
9104
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9105 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
9106 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
9107 size_hints.max_width
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9108 = 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
9109 size_hints.max_height
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9110 = 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
9111
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9112 /* Calculate the base and minimum sizes.
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9113
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9114 (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
9115 Instead we copy the values that the widgets are using, below.) */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9116 #ifndef USE_X_TOOLKIT
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
9117 {
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
9118 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
9119 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
9120
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9121 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
9122 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
9123
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9124 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
9125
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9126 /* 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
9127 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
9128 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
9129 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
9130 zero-row, zero-column frame.
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9131
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9132 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
9133 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
9134 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
9135
cd3d59155bf7 * xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents: 1077
diff changeset
9136 #ifdef HAVE_X11R4
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9137 size_hints.flags |= PBaseSize;
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9138 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
9139 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
9140 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
9141 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
9142 #else
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9143 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
9144 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
9145 #endif
976
cbdfc337ec8f * xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents: 786
diff changeset
9146 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9147
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9148 /* 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
9149 if (flags)
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9150 {
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9151 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9152 goto no_read;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9153 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9154 #endif /* not USE_X_TOOLKIT */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9155
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9156 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9157 XSizeHints hints; /* Sometimes I hate X Windows... */
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9158 long supplied_return;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9159 int value;
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9160
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9161 #ifdef HAVE_X11R4
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9162 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints,
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9163 &supplied_return);
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9164 #else
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9165 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints);
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9166 #endif
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9167
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9168 #ifdef USE_X_TOOLKIT
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9169 size_hints.base_height = hints.base_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9170 size_hints.base_width = hints.base_width;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9171 size_hints.min_height = hints.min_height;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9172 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
9173 #endif
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
9174
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9175 if (flags)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9176 size_hints.flags |= flags;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9177 else
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9178 {
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9179 if (value == 0)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9180 hints.flags = 0;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9181 if (hints.flags & PSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9182 size_hints.flags |= PSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9183 if (hints.flags & PPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9184 size_hints.flags |= PPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9185 if (hints.flags & USPosition)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9186 size_hints.flags |= USPosition;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9187 if (hints.flags & USSize)
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9188 size_hints.flags |= USSize;
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9189 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9190 }
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9191
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9192 #ifndef USE_X_TOOLKIT
12189
09033eb62d7e Include widget.h.
Karl Heuer <kwzh@gnu.org>
parents: 12172
diff changeset
9193 no_read:
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9194 #endif
6883
77ceede38423 (x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents: 6791
diff changeset
9195
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9196 #ifdef PWinGravity
51213
791af636af55 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 51129
diff changeset
9197 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
9198 size_hints.flags |= PWinGravity;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9199
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9200 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
9201 {
7210
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9202 size_hints.flags &= ~ PPosition;
682ff6213c36 (x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents: 7187
diff changeset
9203 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
9204 }
4777
21ed9c9bb210 (w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents: 4696
diff changeset
9205 #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
9206
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
9207 #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
9208 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
9209 #else
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
9210 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
9211 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9212 }
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9213 #endif /* not USE_GTK */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9214
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9215 /* Used for IconicState or NormalState */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9216
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9217 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9218 x_wm_set_window_state (f, state)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9219 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9220 int state;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9221 {
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
9222 #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
9223 Arg al[1];
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
9224
136819b017fc (x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents: 7508
diff changeset
9225 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
9226 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
9227 #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
9228 Window window = FRAME_X_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9229
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9230 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
9231 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
9232
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9233 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
9234 #endif /* not USE_X_TOOLKIT */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9235 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9236
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9237 void
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
9238 x_wm_set_icon_pixmap (f, pixmap_id)
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9239 struct frame *f;
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
9240 int pixmap_id;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9241 {
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
9242 Pixmap icon_pixmap, icon_mask;
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9243
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9244 #ifndef USE_X_TOOLKIT
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
9245 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
9246 #endif
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9247
9542
f8b7a65a94bc (x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents: 9537
diff changeset
9248 if (pixmap_id > 0)
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9249 {
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9250 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
9251 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
9252 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
9253 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
9254 }
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
9255 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
9256 {
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
9257 /* 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
9258 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
9259 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
9260 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
9261 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
9262 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
9263 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
9264 #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
9265 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
9266 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
9267 #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
9268 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
9269 #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
9270 }
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9271
64937
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9272
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9273 #ifdef USE_GTK
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9274 {
65007
eac979ad3f3b * xterm.c (x_wm_set_icon_pixmap): Move GTK specific code to
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64937
diff changeset
9275 xg_set_frame_icon (f, icon_pixmap, icon_mask);
64937
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9276 return;
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9277 }
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9278
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9279 #elif defined (USE_X_TOOLKIT) /* same as in x_wm_set_window_state. */
15117
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9280
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9281 {
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9282 Arg al[1];
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9283 XtSetArg (al[0], XtNiconPixmap, icon_pixmap);
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9284 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
9285 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
9286 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
9287 }
21673af29c32 [USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents: 15080
diff changeset
9288
64937
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9289 #else /* not USE_X_TOOLKIT && not USE_GTK */
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9290
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
9291 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
9292 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
9293
64937
9ac98d57e0e7 * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 64770
diff changeset
9294 #endif /* not USE_X_TOOLKIT && not USE_GTK */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9295 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9296
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
9297 void
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9298 x_wm_set_icon_position (f, icon_x, icon_y)
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
9299 struct frame *f;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9300 int icon_x, icon_y;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9301 {
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
9302 Window window = FRAME_OUTER_WINDOW (f);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9303
12667
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9304 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
9305 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
9306 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
9307
a3466dad7d6d Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents: 12657
diff changeset
9308 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9309 }
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9310
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9311
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9312 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9313 Fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9314 ***********************************************************************/
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9315
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9316 /* 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
9317
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9318 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9319 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
9320 FRAME_PTR f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9321 int font_idx;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9322 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9323 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
9324 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9325
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9326
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9327 /* 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
9328
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9329 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
9330 to be listed.
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9331
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9332 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
9333
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9334 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
9335 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
9336 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
9337
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9338 Lisp_Object
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9339 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
9340 struct frame *f;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9341 Lisp_Object pattern;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9342 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9343 int maxnames;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9344 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9345 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
9346 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
9347 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
9348 = 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
9349 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
9350 int try_XLoadQueryFont = 0;
24633
c7d905dca6ba (x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 24618
diff changeset
9351 int count;
53038
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9352 int allow_auto_scaled_font = 0;
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9353
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9354 if (size < 0)
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9355 {
53038
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9356 allow_auto_scaled_font = 1;
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9357 size = 0;
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9358 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9359
19447
34099ec680df (x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents: 19276
diff changeset
9360 patterns = Fassoc (pattern, Valternate_fontname_alist);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9361 if (NILP (patterns))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9362 patterns = Fcons (pattern, Qnil);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9363
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9364 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
9365 /* 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
9366 try_XLoadQueryFont = 1;
19062
9cc02044117d (x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents: 19060
diff changeset
9367
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9368 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
9369 {
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9370 int num_fonts;
29600
a377acd06ea8 (x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 29536
diff changeset
9371 char **names = NULL;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9372
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9373 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
9374 /* 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
9375 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
9376 ((((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
9377 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
9378 key = Fcons (Fcons (pattern, make_number (maxnames)),
53038
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9379 allow_auto_scaled_font ? Qt : Qnil);
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9380 list = Fassoc (key, tem);
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9381 if (!NILP (list))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9382 {
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9383 list = Fcdr_safe (list);
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9384 /* 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
9385 goto label_cached;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9386 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9387
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9388 /* 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
9389
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9390 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9391 count = x_catch_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9392
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9393 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
9394 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9395 XFontStruct *font;
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9396 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
9397
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
9398 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
9399 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
9400 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9401 /* 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
9402 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
9403 font = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9404 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9405 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9406
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9407 if (font
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9408 && 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
9409 {
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9410 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
9411 int len = strlen (name);
22530
6d2e22a16952 (x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents: 22522
diff changeset
9412 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
9413
23095
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9414 /* 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
9415 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
9416 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
9417 if (len == 0)
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9418 try_XLoadQueryFont = 0;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9419 else
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9420 {
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9421 num_fonts = 1;
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9422 names = (char **) alloca (sizeof (char *));
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9423 /* 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
9424 simple var. */
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9425 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
9426 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
9427 XFree (name);
4e83e072cd97 (x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents: 23037
diff changeset
9428 }
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9429 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9430 else
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9431 try_XLoadQueryFont = 0;
22943
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
9432
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
9433 if (font)
5493321d4526 (x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 22907
diff changeset
9434 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
9435 }
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9436
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9437 if (!try_XLoadQueryFont)
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9438 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9439 /* 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
9440 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
9441 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
9442 {
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
9443 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
9444
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
9445 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
9446 {
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
9447 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
9448 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
9449 {
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
9450 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
9451 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
9452 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
9453 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
9454 }
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
9455 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
9456 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
9457 }
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
9458 }
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
9459 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
9460 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
9461 &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
9462
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9463 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
9464 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9465 /* 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
9466 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
9467 names = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9468 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9469 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9470 }
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 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9473 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9474
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9475 if (names)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9476 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9477 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9478
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9479 /* 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
9480 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
9481 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
9482 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9483 int width = 0;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9484 char *p = names[i];
53038
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9485 int average_width = -1, resx = 0, dashes = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9486
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9487 /* Count the number of dashes in NAMES[I]. If there are
53038
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9488 14 dashes, the field value following 9th dash
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9489 (RESOLUTION_X) is nonzero, and the field value
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9490 following 12th dash (AVERAGE_WIDTH) is 0, this is a
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9491 auto-scaled font which is usually too ugly to be used
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9492 for editing. Let's ignore it. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9493 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9494 if (*p++ == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9495 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9496 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9497 if (dashes == 7) /* PIXEL_SIZE field */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9498 width = atoi (p);
53038
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9499 else if (dashes == 9)
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9500 resx = atoi (p);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9501 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
9502 average_width = atoi (p);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9503 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9504
53038
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9505 if (allow_auto_scaled_font
ea521a9007e2 (x_list_fonts): Fix excluding of auto-scaled fonts.
Kenichi Handa <handa@m17n.org>
parents: 53021
diff changeset
9506 || dashes < 14 || average_width != 0 || resx == 0)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9507 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9508 tem = build_string (names[i]);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9509 if (NILP (Fassoc (tem, list)))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9510 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9511 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
9512 && ((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
9513 (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
9514 >= 0))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9515 /* 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
9516 width of this font. */
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9517 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
9518 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9519 /* 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
9520 list = Fcons (Fcons (tem, Qnil), list);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9521 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9522 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9523 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9524
22503
104e277d77d3 (x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents: 22400
diff changeset
9525 if (!try_XLoadQueryFont)
38246
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9526 {
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9527 BLOCK_INPUT;
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9528 XFreeFontNames (names);
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9529 UNBLOCK_INPUT;
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9530 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9531 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9532
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9533 /* 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
9534 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
9535 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
9536
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9537 label_cached:
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9538 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
9539
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9540 newlist = second_best = Qnil;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9541 /* 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
9542 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
9543 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9544 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
9545
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9546 tem = XCAR (list);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9547
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9548 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
9549 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9550 if (!size)
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9551 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9552 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
9553 continue;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9554 }
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9555
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9556 if (!INTEGERP (XCDR (tem)))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9557 {
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9558 /* 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
9559 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
9560 XFontStruct *thisinfo;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9561
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9562 BLOCK_INPUT;
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9563 count = x_catch_errors (dpy);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9564 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
9565 SDATA (XCAR (tem)));
24618
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9566 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
9567 {
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9568 /* 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
9569 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
9570 thisinfo = NULL;
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9571 x_clear_errors (dpy);
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9572 }
b18f51ec1b6c Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24561
diff changeset
9573 x_uncatch_errors (dpy, count);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9574 UNBLOCK_INPUT;
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 if (thisinfo)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9577 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9578 XSETCDR (tem,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9579 (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
9580 ? 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
9581 : 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
9582 BLOCK_INPUT;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9583 XFreeFont (dpy, thisinfo);
38246
b93fb0eb254d (x_list_fonts): Make sure XFreeFont is called
Gerd Moellmann <gerd@gnu.org>
parents: 38094
diff changeset
9584 UNBLOCK_INPUT;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9585 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9586 else
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9587 /* 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
9588 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
9589 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
9590 XSETCDR (tem, make_number (0));
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9591 }
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9592
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9593 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
9594 if (found_size == size)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9595 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
9596 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
9597 {
19060
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9598 if (NILP (second_best))
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9599 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
9600 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
9601 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9602 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
9603 || 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
9604 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
9605 }
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9606 else
7b362a9bf8e9 (x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents: 19027
diff changeset
9607 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9608 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
9609 && 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
9610 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
9611 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9612 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9613 }
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9614 if (!NILP (newlist))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9615 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9616 else if (!NILP (second_best))
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9617 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9618 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
9619 break;
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9620 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9621 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9622
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9623 return newlist;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9624 }
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9625
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9626
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9627 #if GLYPH_DEBUG
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9628
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9629 /* 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
9630 font table. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9631
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9632 static void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9633 x_check_font (f, font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9634 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9635 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9636 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9637 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9638 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
9639
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9640 xassert (font != NULL);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9641
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9642 for (i = 0; i < dpyinfo->n_fonts; i++)
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9643 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
9644 && font == dpyinfo->font_table[i].font)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9645 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9646
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9647 xassert (i < dpyinfo->n_fonts);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9648 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9649
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9650 #endif /* GLYPH_DEBUG != 0 */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9651
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9652 /* 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
9653 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
9654 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
9655 "-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
9656 have font->min_bounds.width == 0. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9657
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9658 static INLINE void
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9659 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
9660 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9661 int *w, *h;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9662 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9663 *h = FONT_HEIGHT (font);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9664 *w = font->min_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9665
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9666 /* 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
9667 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
9668 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
9669 if (*w <= 0)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9670 *w = font->max_bounds.width;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9671 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9672
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9673
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9674 /* 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
9675 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
9676 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
9677 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
9678 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
9679
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9680 static int
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9681 x_compute_min_glyph_bounds (f)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9682 struct frame *f;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9683 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9684 int i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9685 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
9686 XFontStruct *font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9687 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
9688 int old_height = dpyinfo->smallest_font_height;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9689
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9690 dpyinfo->smallest_font_height = 100000;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9691 dpyinfo->smallest_char_width = 100000;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9692
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9693 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
9694 if (dpyinfo->font_table[i].name)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9695 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9696 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
9697 int w, h;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9698
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9699 font = (XFontStruct *) fontp->font;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9700 xassert (font != (XFontStruct *) ~0);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9701 x_font_min_bounds (font, &w, &h);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9702
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9703 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
9704 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
9705 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9706
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9707 xassert (dpyinfo->smallest_char_width > 0
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9708 && dpyinfo->smallest_font_height > 0);
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 return (dpyinfo->n_fonts == 1
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9711 || dpyinfo->smallest_char_width < old_width
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9712 || dpyinfo->smallest_font_height < old_height);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9713 }
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
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9716 /* 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
9717 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
9718 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
9719 If loading is failed, return NULL. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9720
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9721 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9722 x_load_font (f, fontname, size)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9723 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9724 register char *fontname;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9725 int size;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9726 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9727 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
9728 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
9729 int count;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9730
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9731 /* 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
9732 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
9733 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
9734 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
9735
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9736 if (!NILP (font_names))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9737 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9738 Lisp_Object tail;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9739 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9740
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9741 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
9742 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
9743 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9744 && (!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
9745 SDATA (XCAR (tail)))
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9746 || !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
9747 SDATA (XCAR (tail)))))
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9748 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9749 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9750
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9751 /* 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
9752 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9753 char *full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9754 XFontStruct *font;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9755 struct font_info *fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9756 unsigned long value;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9757 int i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9758
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9759 /* 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
9760 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
9761 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
9762 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
9763 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
9764 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
9765 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
9766
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9767 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
9768 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
9769 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
9770 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
9771 {
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
9772 /* 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
9773 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
9774 font = NULL;
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
9775 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
9776 }
d4ee4399e999 (x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents: 24224
diff changeset
9777 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
9778 UNBLOCK_INPUT;
17194
ae76b2a59dcc (dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents: 17178
diff changeset
9779 if (!font)
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9780 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9781
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9782 /* 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
9783 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
9784 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
9785 break;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9786
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9787 /* 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
9788 if (i == dpyinfo->n_fonts
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9789 && 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
9790 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9791 int sz;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9792 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
9793 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
9794 dpyinfo->font_table
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9795 = (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
9796 }
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9797
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9798 fontp = dpyinfo->font_table + i;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9799 if (i == dpyinfo->n_fonts)
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9800 ++dpyinfo->n_fonts;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9801
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9802 /* 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
9803 BLOCK_INPUT;
52730
7535333d9c75 (x_load_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 52728
diff changeset
9804 bzero (fontp, sizeof (*fontp));
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9805 fontp->font = font;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9806 fontp->font_idx = i;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9807 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
9808 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
9809
59206
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9810 if (font->min_bounds.width == font->max_bounds.width)
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9811 {
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9812 /* Fixed width font. */
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9813 fontp->average_width = fontp->space_width = font->min_bounds.width;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9814 }
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9815 else
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9816 {
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9817 XChar2b char2b;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9818 XCharStruct *pcm;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9819
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9820 char2b.byte1 = 0x00, char2b.byte2 = 0x20;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9821 pcm = x_per_char_metric (font, &char2b, 0);
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9822 if (pcm)
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9823 fontp->space_width = pcm->width;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9824 else
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9825 fontp->space_width = FONT_WIDTH (font);
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9826
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9827 fontp->average_width
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9828 = (XGetFontProperty (font, dpyinfo->Xatom_AVERAGE_WIDTH, &value)
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9829 ? (long) value / 10 : 0);
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9830 if (fontp->average_width < 0)
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9831 fontp->average_width = - fontp->average_width;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9832 if (fontp->average_width == 0)
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9833 {
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9834 if (pcm)
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9835 {
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9836 int width = pcm->width;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9837 for (char2b.byte2 = 33; char2b.byte2 <= 126; char2b.byte2++)
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9838 if ((pcm = x_per_char_metric (font, &char2b, 0)) != NULL)
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9839 width += pcm->width;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9840 fontp->average_width = width / 95;
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9841 }
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9842 else
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9843 fontp->average_width = FONT_WIDTH (font);
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9844 }
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9845 }
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
9846
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9847 /* 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
9848 full_name = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9849 if (XGetFontProperty (font, XA_FONT, &value))
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9850 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9851 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
9852 char *p = name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9853 int dashes = 0;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9854
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9855 /* 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
9856 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
9857 so don't use it.
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9858 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
9859 stored in them. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9860 while (*p)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9861 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9862 if (*p == '-')
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9863 dashes++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9864 p++;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9865 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9866
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9867 if (dashes >= 13)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9868 {
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9869 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
9870 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
9871 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9872
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9873 XFree (name);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9874 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
9875
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9876 if (full_name != 0)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9877 fontp->full_name = full_name;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9878 else
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9879 fontp->full_name = fontp->name;
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 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
9882 fontp->height = FONT_HEIGHT (font);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9883
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9884 if (NILP (font_names))
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9885 {
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9886 /* 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
9887 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
9888 the cache for x_list_fonts. */
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9889 Lisp_Object lispy_name = build_string (fontname);
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9890 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
9891 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
9892 Qnil);
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9893
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9894 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
9895 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
9896 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
9897 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
9898 Qnil)),
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9899 XCDR (dpyinfo->name_list_element)));
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9900 if (full_name)
35367
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9901 {
68000d773920 (x_list_fonts): Allow scalable fonts if SIZE is < 0,
Gerd Moellmann <gerd@gnu.org>
parents: 35315
diff changeset
9902 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
9903 Qnil);
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9904 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
9905 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
9906 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
9907 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
9908 Qnil)),
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
9909 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
9910 }
18347
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9911 }
b7024f44f5d2 (dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18191
diff changeset
9912
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9913 /* 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
9914 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
9915 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
9916 (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
9917 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
9918 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
9919 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
9920 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
9921 fontp->encoding[1]
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9922 = (font->max_byte1 == 0
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9923 /* 1-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9924 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9925 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9926 ? 0 /* 0x20..0x7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9927 : 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
9928 : 1) /* 0xA0..0xFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9929 /* 2-byte font */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9930 : (font->min_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9931 ? (font->max_byte1 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9932 ? (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9933 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9934 ? 0 /* 0x2020..0x7F7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9935 : 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
9936 : 3) /* 0x20A0..0x7FFF */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9937 : 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
9938 : (font->min_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9939 ? (font->max_char_or_byte2 < 0x80
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9940 ? 2 /* 0xA020..0xFF7F */
18057
07e0112aa8f5 (x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents: 18008
diff changeset
9941 : 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
9942 : 1))); /* 0xA0A0..0xFFFF */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9943
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9944 fontp->baseline_offset
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9945 = (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
9946 ? (long) value : 0);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9947 fontp->relative_compose
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9948 = (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
9949 ? (long) value : 0);
17103
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
9950 fontp->default_ascent
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
9951 = (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
9952 ? (long) value : 0);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9953
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9954 /* 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
9955 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
9956 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
9957 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
9958 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
9959 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
9960 UNBLOCK_INPUT;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9961 return fontp;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9962 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9963 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9964
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9965
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9966 /* 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
9967 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
9968
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9969 struct font_info *
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9970 x_query_font (f, fontname)
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9971 struct frame *f;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9972 register char *fontname;
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 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
9975 int i;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9976
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9977 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
9978 if (dpyinfo->font_table[i].name
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9979 && (!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
9980 || !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
9981 return (dpyinfo->font_table + i);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9982 return NULL;
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9983 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
9984
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9985
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
9986 /* 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
9987 `encoder' of the structure. */
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
9988
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
9989 void
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
9990 x_find_ccl_program (fontp)
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
9991 struct font_info *fontp;
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
9992 {
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
9993 Lisp_Object list, elt;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
9994
31694
97c48afc4c5a (x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents: 31614
diff changeset
9995 elt = Qnil;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9996 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
9997 {
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
9998 elt = XCAR (list);
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
9999 if (CONSP (elt)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10000 && STRINGP (XCAR (elt))
32640
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
10001 && ((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
10002 >= 0)
9adbb2160f48 (x_find_ccl_program): Check also fontp->full_name.
Kenichi Handa <handa@m17n.org>
parents: 32607
diff changeset
10003 || (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
10004 >= 0)))
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10005 break;
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10006 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10007
25068
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10008 if (! NILP (list))
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10009 {
25085
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
10010 struct ccl_program *ccl
23813e3a69b8 (x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents: 25083
diff changeset
10011 = (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
10012
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10013 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
10014 xfree (ccl);
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10015 else
0d081383b5b8 (x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents: 24991
diff changeset
10016 fontp->font_encoder = ccl;
21548
5d1f1ba38043 (x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
10017 }
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
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10020
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10021
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10022 /***********************************************************************
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10023 Initialization
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10024 ***********************************************************************/
1720
4f5e3ac5d822 * frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents: 1658
diff changeset
10025
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10026 #ifdef USE_X_TOOLKIT
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10027 static XrmOptionDescRec emacs_options[] = {
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10028 {"-geometry", ".geometry", XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10029 {"-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
10030
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10031 {"-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
10032 XrmoptionSepArg, NULL},
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10033 {"-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
10034
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10035 {"-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
10036 {"-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
10037 {"-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
10038 {"-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
10039 {"-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
10040 {"-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
10041 {"-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
10042 };
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10043 #endif /* USE_X_TOOLKIT */
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10044
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10045 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
10046
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10047 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10048 /* 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
10049 the screen number from the server number. */
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10050 static int
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10051 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
10052 const char *name1, *name2;
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10053 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10054 int seen_colon = 0;
46479
4729f849c572 (same_x_server): String pointer args now point to
Ken Raeburn <raeburn@raeburn.org>
parents: 46435
diff changeset
10055 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
10056 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
10057 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
10058
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10059 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
10060 && 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
10061 length_until_period++;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10062
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10063 /* 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
10064 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
10065 name1 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10066 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
10067 name2 += 4;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10068 /* 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
10069 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
10070 && name1[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10071 name1 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10072 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
10073 && name2[system_name_length] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10074 name2 += system_name_length;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10075 /* 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
10076 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
10077 && name1[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10078 name1 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10079 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
10080 && name2[length_until_period] == ':')
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10081 name2 += length_until_period;
1f8d4cb55bd6 (same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents: 23925
diff changeset
10082
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10083 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10084 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10085 if (*name1 == ':')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10086 seen_colon++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10087 if (seen_colon && *name1 == '.')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10088 return 1;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10089 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10090 return (seen_colon
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10091 && (*name1 == '.' || *name1 == '\0')
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10092 && (*name2 == '.' || *name2 == '\0'));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10093 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10094 #endif
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10095
52387
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10096 /* 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
10097 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
10098 to 5. */
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10099 static void
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10100 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
10101 unsigned long mask;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10102 int *bits;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10103 int *offset;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10104 {
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10105 int nr = 0;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10106 int off = 0;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10107
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10108 while (!(mask & 1))
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10109 {
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10110 off++;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10111 mask >>= 1;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10112 }
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10113
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10114 while (mask & 1)
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10115 {
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10116 nr++;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10117 mask >>= 1;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10118 }
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10119
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10120 *offset = off;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10121 *bits = nr;
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10122 }
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10123
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10124 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
10125 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
10126 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
10127 char *xrm_option;
10e818a0248a (x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents: 7738
diff changeset
10128 char *resource_name;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10129 {
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10130 int connection;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10131 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
10132 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
10133 XrmDatabase xrdb;
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10134
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10135 BLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10136
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10137 if (!x_initialized)
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10138 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10139 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
10140 ++x_initialized;
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10141 }
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10142
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10143 #ifdef USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10144 {
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10145 #define NUM_ARGV 10
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10146 int argc;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10147 char *argv[NUM_ARGV];
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10148 char **argv2 = argv;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10149 GdkAtom atom;
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10150
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10151 if (x_initialized++ > 1)
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10152 {
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10153 /* Opening another display. If xg_display_open returns less
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10154 than zero, we are probably on GTK 2.0, which can only handle
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10155 one display. GTK 2.2 or later can handle more than one. */
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10156 if (xg_display_open (SDATA (display_name), &dpy) < 0)
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10157 error ("Sorry, this version of GTK can only handle one display");
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10158 }
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10159 else
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10160 {
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10161 for (argc = 0; argc < NUM_ARGV; ++argc)
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10162 argv[argc] = 0;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10163
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10164 argc = 0;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10165 argv[argc++] = initial_argv[0];
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10166
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10167 if (! NILP (display_name))
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10168 {
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10169 argv[argc++] = "--display";
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10170 argv[argc++] = SDATA (display_name);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10171 }
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10172
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10173 argv[argc++] = "--name";
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10174 argv[argc++] = resource_name;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49434
diff changeset
10175
49434
a4d0ee33dcce Fix input methods for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49326
diff changeset
10176 #ifdef HAVE_X11R5
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10177 XSetLocaleModifiers ("");
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10178 #endif
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10179
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10180 gtk_init (&argc, &argv2);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10181
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10182 /* gtk_init does set_locale. We must fix locale after calling it. */
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10183 fixup_locale ();
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10184 xg_initialize ();
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10185
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10186 dpy = GDK_DISPLAY ();
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10187
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10188 /* NULL window -> events for all windows go to our function */
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10189 gdk_window_add_filter (NULL, event_handler_gdk, NULL);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10190
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10191 /* Load our own gtkrc if it exists. */
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10192 {
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10193 struct gcpro gcpro1, gcpro2;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10194 char *file = "~/.emacs.d/gtkrc";
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10195 Lisp_Object s, abs_file;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10196
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10197 GCPRO2 (s, abs_file);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10198 s = make_string (file, strlen (file));
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10199 abs_file = Fexpand_file_name (s, Qnil);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10200
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10201 if (! NILP (abs_file) && !NILP (Ffile_readable_p (abs_file)))
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10202 gtk_rc_parse (SDATA (abs_file));
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10203
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10204 UNGCPRO;
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10205 }
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10206
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10207 XSetErrorHandler (x_error_handler);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10208 XSetIOErrorHandler (x_io_error_quitter);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10209 }
49322
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 #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
10212 #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
10213 /* 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
10214 errors with X11R5:
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10215 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
10216 on protocol request 18skiloaf.
9829d3c035f2 (x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents: 11375
diff changeset
10217 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
10218 #ifdef HAVE_X11XTR6
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10219 XtSetLanguageProc (NULL, NULL, NULL);
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10220 #endif
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10221
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10222 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10223 int argc = 0;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10224 char *argv[3];
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10225
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10226 argv[0] = "";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10227 argc = 1;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10228 if (xrm_option)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10229 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10230 argv[argc++] = "-xrm";
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10231 argv[argc++] = xrm_option;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10232 }
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
10233 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
10234 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
10235 resource_name, EMACS_CLASS,
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10236 emacs_options, XtNumber (emacs_options),
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10237 &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
10238 turn_on_atimers (1);
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
10239
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
10240 #ifdef HAVE_X11XTR6
14963
6ac4f300f9b4 Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents: 14946
diff changeset
10241 /* 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
10242 fixup_locale ();
12530
c2b2449231c2 [HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents: 12494
diff changeset
10243 #endif
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10244 }
5672
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10245
cbc4229c1f90 (x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents: 5362
diff changeset
10246 #else /* not USE_X_TOOLKIT */
9446
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10247 #ifdef HAVE_X11R5
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10248 XSetLocaleModifiers ("");
be58ba7c209d (x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents: 9340
diff changeset
10249 #endif
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
10250 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
10251 #endif /* not USE_X_TOOLKIT */
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10252 #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
10253
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10254 /* Detect failure. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10255 if (dpy == 0)
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10256 {
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10257 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10258 return 0;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10259 }
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10260
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10261 /* 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
10262
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10263 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
10264 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
10265
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10266 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10267 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10268 struct x_display_info *share;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10269 Lisp_Object tail;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10270
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10271 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
10272 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
10273 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
10274 SDATA (display_name)))
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10275 break;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10276 if (share)
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10277 dpyinfo->kboard = share->kboard;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10278 else
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10279 {
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10280 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10281 init_kboard (dpyinfo->kboard);
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10282 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10283 {
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10284 char *vendor = ServerVendor (dpy);
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
10285 UNBLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10286 dpyinfo->kboard->Vsystem_key_alist
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10287 = call1 (Qvendor_specific_keysyms,
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10288 build_string (vendor ? vendor : ""));
28307
1d4a11a5f39d (x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents: 28281
diff changeset
10289 BLOCK_INPUT;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10290 }
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10291
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10292 dpyinfo->kboard->next_kboard = all_kboards;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10293 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
10294 /* 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
10295 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
10296 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
10297 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
10298 current_kboard = dpyinfo->kboard;
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10299 }
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10300 dpyinfo->kboard->reference_count++;
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10301 }
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10302 #endif
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10303
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10304 /* 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
10305 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
10306 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
10307
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10308 /* 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
10309 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
10310 x_display_name_list);
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10311 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
10312
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10313 dpyinfo->display = dpy;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10314
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10315 #if 0
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10316 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
10317 #endif /* ! 0 */
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10318
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10319 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
10320 = (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
10321 + 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
10322 + 2);
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10323 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
10324 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
10325
74ae34a80f94 * xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents: 1127
diff changeset
10326 /* 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
10327 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
10328
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
10329 /* Get the scroll bar cursor. */
53069
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10330 #ifdef USE_GTK
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10331 /* We must create a GTK cursor, it is required for GTK widgets. */
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10332 dpyinfo->xg_cursor = xg_create_default_cursor (dpyinfo->display);
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10333 #endif /* USE_GTK */
1218a42792ea Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 53061
diff changeset
10334
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10335 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
10336 = 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
10337
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10338 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
10339 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
10340 #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
10341 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
10342 #else
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10343 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
10344 #endif
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
10345 /* 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
10346 all versions. */
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10347 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
10348
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10349 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
10350 DefaultScreen (dpyinfo->display));
27991
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10351 select_visual (dpyinfo);
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
10352 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
10353 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
10354 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
10355 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
10356 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
10357 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
10358 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
10359 dpyinfo->icon_bitmap_id = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10360 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
10361 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
10362 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
10363 dpyinfo->bitmaps = 0;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10364 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
10365 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
10366 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
10367 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
10368 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
10369 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
10370 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
10371 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
10372 dpyinfo->mouse_face_window = Qnil;
36587
d9bb01d5dbbb (note_mouse_highlight): Call mouse_face_overlay_overlaps
Gerd Moellmann <gerd@gnu.org>
parents: 36555
diff changeset
10373 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
10374 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
10375 dpyinfo->mouse_face_defer = 0;
43369
493438ba5e2c (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43343
diff changeset
10376 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
10377 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
10378 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
10379 dpyinfo->x_highlight_frame = 0;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10380 dpyinfo->image_cache = make_image_cache ();
52752
751a01f97570 Make (modify-frame-parameters nil '((top . 0))) work for all types
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52730
diff changeset
10381 dpyinfo->wm_type = X_WMTYPE_UNKNOWN;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10382
52387
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10383 /* 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
10384 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
10385 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
10386
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10387 if (dpyinfo->visual->class == TrueColor)
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10388 {
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10389 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
10390 &dpyinfo->red_bits, &dpyinfo->red_offset);
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10391 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
10392 &dpyinfo->blue_bits, &dpyinfo->blue_offset);
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10393 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
10394 &dpyinfo->green_bits, &dpyinfo->green_offset);
2415f47f227a Fix pixel calculation for TrueVisuals.
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52298
diff changeset
10395 }
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10396
27985
4ba445af210b (x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents: 27974
diff changeset
10397 /* 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
10398 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
10399 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10400 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
10401 {
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10402 Lisp_Object value;
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10403 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
10404 build_string ("privateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10405 build_string ("PrivateColormap"),
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10406 Qnil, Qnil);
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10407 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
10408 && (!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
10409 || !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
10410 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
10411 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10412 }
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10413 else
cf10555b8ce0 (x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents: 27985
diff changeset
10414 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
10415 dpyinfo->visual, AllocNone);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10416
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10417 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10418 int screen_number = XScreenNumberOfScreen (dpyinfo->screen);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10419 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
10420 double mm = DisplayHeightMM (dpyinfo->display, screen_number);
57144
1b899494bbe2 (x_term_init): Work around a bug in some X servers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56782
diff changeset
10421 /* Mac OS X 10.3's Xserver sometimes reports 0.0mm. */
1b899494bbe2 (x_term_init): Work around a bug in some X servers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56782
diff changeset
10422 dpyinfo->resy = (mm < 1) ? 100 : pixels * 25.4 / mm;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10423 pixels = DisplayWidth (dpyinfo->display, screen_number);
57144
1b899494bbe2 (x_term_init): Work around a bug in some X servers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56782
diff changeset
10424 /* Mac OS X 10.3's Xserver sometimes reports 0.0mm. */
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10425 mm = DisplayWidthMM (dpyinfo->display, screen_number);
57144
1b899494bbe2 (x_term_init): Work around a bug in some X servers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 56782
diff changeset
10426 dpyinfo->resx = (mm < 1) ? 100 : pixels * 25.4 / mm;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10427 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10428
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10429 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
10430 = 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
10431 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
10432 = 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
10433 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
10434 = 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
10435 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
10436 = 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
10437 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
10438 = 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
10439 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
10440 = 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
10441 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
10442 = 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
10443 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
10444 = 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
10445 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
10446 = 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
10447 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
10448 = 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
10449 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
10450 = 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
10451 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
10452 = XInternAtom (dpyinfo->display, "TEXT", False);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10453 dpyinfo->Xatom_COMPOUND_TEXT
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10454 = 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
10455 dpyinfo->Xatom_UTF8_STRING
9c2b3f9ec15a (x_term_init): Initialize dpyinfo->Xatom_UTF8_STRING.
Kenichi Handa <handa@m17n.org>
parents: 46814
diff changeset
10456 = 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
10457 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
10458 = 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
10459 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
10460 = 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
10461 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
10462 = 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
10463 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
10464 = 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
10465 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
10466 = 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
10467 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
10468 = 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
10469 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
10470 = 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
10471 /* For properties of font. */
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10472 dpyinfo->Xatom_PIXEL_SIZE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10473 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False);
59206
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
10474 dpyinfo->Xatom_AVERAGE_WIDTH
77ba45776c58 (x_new_font): Set FRAME_COLUMN_WIDTH to
Kenichi Handa <handa@m17n.org>
parents: 58985
diff changeset
10475 = XInternAtom (dpyinfo->display, "AVERAGE_WIDTH", False);
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10476 dpyinfo->Xatom_MULE_BASELINE_OFFSET
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10477 = 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
10478 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10479 = 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
10480 dpyinfo->Xatom_MULE_DEFAULT_ASCENT
7cde34a6424e (dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents: 17050
diff changeset
10481 = 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
10482
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10483 /* Ghostscript support. */
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10484 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
10485 dpyinfo->Xatom_DONE = XInternAtom (dpyinfo->display, "DONE", False);
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10486
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10487 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
10488 False);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10489
11162
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
10490 dpyinfo->cut_buffers_initialized = 0;
95b70c82ec51 (x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents: 11122
diff changeset
10491
9654
41681efe1086 Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents: 9577
diff changeset
10492 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
10493 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
10494
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10495 {
18705
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
10496 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
10497
c4f2eab8e736 (x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents: 18646
diff changeset
10498 null_bits[0] = 0x00;
17050
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10499
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10500 dpyinfo->null_pixel
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10501 = 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
10502 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
10503 1);
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10504 }
1e5fa2dc98cf Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16898
diff changeset
10505
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10506 {
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10507 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
10508 extern char *gray_bitmap_bits;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10509 dpyinfo->gray
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10510 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10511 gray_bitmap_bits,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10512 gray_bitmap_width, gray_bitmap_height,
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10513 (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
10514 }
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10515
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10516 #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
10517 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
10518 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10519
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
10520 #ifdef subprocesses
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
10521 /* 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
10522 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
10523 add_keyboard_wait_descriptor (connection);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9565
diff changeset
10524 #endif
1052
b8defcaf1b61 * xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents: 1020
diff changeset
10525
4147
c6657758fb6f * xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents: 3951
diff changeset
10526 #ifndef F_SETOWN_BUG
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10527 #ifdef F_SETOWN
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10528 #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
10529 /* 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
10530 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
10531 #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
10532 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
10533 #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
10534 #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
10535 #endif /* F_SETOWN_BUG */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10536
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10537 #ifdef SIGIO
11994
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
10538 if (interrupt_input)
b4dd8ca308dd (x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents: 11988
diff changeset
10539 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
10540 #endif /* ! defined (SIGIO) */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10541
15904
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10542 #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
10543 #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
10544 /* 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
10545 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
10546 {
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10547 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
10548 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
10549 Font font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10550 int count;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10551
15904
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10552 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
10553 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
10554 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
10555 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
10556 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
10557 to.addr = (XPointer)&font;
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10558 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
10559 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
10560 abort ();
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10561 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
10562 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15");
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10563 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
10564 }
a31cfab57f69 (x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents: 15808
diff changeset
10565 #endif
19021
6f150e46a5fd (x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents: 18996
diff changeset
10566 #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
10567
28139
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10568 /* See if we should run in synchronous mode. This is useful
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10569 for debugging X code. */
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10570 {
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10571 Lisp_Object value;
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10572 value = display_x_get_resource (dpyinfo,
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10573 build_string ("synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10574 build_string ("Synchronous"),
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10575 Qnil, Qnil);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10576 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
10577 && (!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
10578 || !strcmp (SDATA (value), "on")))
28139
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10579 XSynchronize (dpyinfo->display, True);
fb1a89235280 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 28030
diff changeset
10580 }
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
10581
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10582 {
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10583 Lisp_Object value;
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10584 value = display_x_get_resource (dpyinfo,
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10585 build_string ("useXIM"),
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10586 build_string ("UseXIM"),
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10587 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
10588 #ifdef USE_XIM
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10589 if (STRINGP (value)
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10590 && (!strcmp (XSTRING (value)->data, "false")
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10591 || !strcmp (XSTRING (value)->data, "off")))
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10592 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
10593 #else
7003a80a49ec (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
Kim F. Storm <storm@cua.dk>
parents: 51823
diff changeset
10594 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
10595 && (!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
10596 || !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
10597 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
10598 #endif
51129
e9be5c94117e (use_xim): Initialize.
Dave Love <fx@gnu.org>
parents: 51093
diff changeset
10599 }
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10600
52298
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10601 #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
10602 /* 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
10603 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
10604 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
10605 #endif
1a4bd2bec861 Create and initialize a client leader window so session management
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52258
diff changeset
10606
11997
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10607 UNBLOCK_INPUT;
50c7c05fc301 (x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents: 11994
diff changeset
10608
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10609 return dpyinfo;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10610 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10611
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10612 /* 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
10613 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
10614
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10615 void
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10616 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
10617 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
10618 {
52753
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10619 int i;
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10620
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10621 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
10622
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10623 /* 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
10624 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
10625 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
10626 && 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
10627 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
10628 else
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10629 {
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10630 Lisp_Object tail;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10631
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10632 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
10633 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
10634 {
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10635 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
10636 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 39950
diff changeset
10637 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
10638 break;
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10639 }
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 25633
diff changeset
10640 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
10641 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10642 }
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10643
27524
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
10644 if (next_noop_dpyinfo == dpyinfo)
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
10645 next_noop_dpyinfo = dpyinfo->next;
67501e6e8b34 (x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents: 27500
diff changeset
10646
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10647 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
10648 x_display_list = dpyinfo->next;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10649 else
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10650 {
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10651 struct x_display_info *tail;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10652
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10653 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
10654 if (tail->next == dpyinfo)
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10655 tail->next = tail->next->next;
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10656 }
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10657
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
10658 #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
10659 #ifndef AIX /* On AIX, XCloseDisplay calls this. */
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10660 XrmDestroyDatabase (dpyinfo->xrdb);
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10661 #endif
12771
6f07c79d9a05 (x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 12750
diff changeset
10662 #endif
11015
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10663 #ifdef MULTI_KBOARD
3a2547424010 (get_perdisplay): Deleted.
Karl Heuer <kwzh@gnu.org>
parents: 10921
diff changeset
10664 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
10665 delete_kboard (dpyinfo->kboard);
10652
f6a41cb94a75 [MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents: 10634
diff changeset
10666 #endif
27500
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10667 #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
10668 if (dpyinfo->xim)
d33b4becc3ca (x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents: 27428
diff changeset
10669 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
10670 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10671
52753
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10672 /* Free the font names in the font table. */
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10673 for (i = 0; i < dpyinfo->n_fonts; i++)
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10674 if (dpyinfo->font_table[i].name)
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10675 {
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10676 if (dpyinfo->font_table[i].name != dpyinfo->font_table[i].full_name)
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10677 xfree (dpyinfo->font_table[i].full_name);
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10678 xfree (dpyinfo->font_table[i].name);
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10679 }
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10680
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10681 if (dpyinfo->font_table->font_encoder)
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
diff changeset
10682 xfree (dpyinfo->font_table->font_encoder);
551e8ebadb62 Fix memory leaks (from YAMAMOTO Mitsuharu)
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 52752
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,
57454
926582f79d3b (x_redisplay_interface): Fix flush_display_optional.
Kim F. Storm <storm@cua.dk>
parents: 57373
diff changeset
10730 #ifdef 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,
53888
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
10739 0, /* define_fringe_bitmap */
57b27e42bf9e (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
Kim F. Storm <storm@cua.dk>
parents: 53785
diff changeset
10740 0, /* destroy_fringe_bitmap */
50151
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
10741 x_per_char_metric,
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
10742 x_encode_char,
0e12b5894d99 Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50130
diff changeset
10743 x_compute_glyph_string_overhangs,
50237
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10744 x_draw_glyph_string,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10745 x_define_frame_cursor,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10746 x_clear_frame_area,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10747 x_draw_window_cursor,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10748 x_draw_vertical_window_border,
160bd7db88a1 * xterm.c: Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 50177
diff changeset
10749 x_shift_glyphs_for_insert
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10750 };
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10751
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
10752 void
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10753 x_initialize ()
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10754 {
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10755 rif = &x_redisplay_interface;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10756
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10757 clear_frame_hook = x_clear_frame;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10758 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
10759 delete_glyphs_hook = x_delete_glyphs;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10760 ring_bell_hook = XTring_bell;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10761 reset_terminal_modes_hook = XTreset_terminal_modes;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10762 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
10763 update_begin_hook = x_update_begin;
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10764 update_end_hook = x_update_end;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10765 set_terminal_window_hook = XTset_terminal_window;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10766 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
10767 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
10768 mouse_position_hook = XTmouse_position;
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10769 frame_rehighlight_hook = XTframe_rehighlight;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1810
diff changeset
10770 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
10771 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
10772 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
10773 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
10774 judge_scroll_bars_hook = XTjudge_scroll_bars;
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10775
771
538c0bcb418e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 756
diff changeset
10776 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
10777 char_ins_del_ok = 1;
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10778 line_ins_del_ok = 1; /* we'll just blt 'em */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10779 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
10780 memory_below_frame = 0; /* we don't remember what scrolls
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10781 off the bottom */
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10782 baud_rate = 19200;
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10783
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10784 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
10785 last_tool_bar_item = -1;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10786 any_help_event_p = 0;
54651
ee25175db902 (x_initialize): Initialize ignore_next_mouse_click_timeout.
Kim F. Storm <storm@cua.dk>
parents: 54650
diff changeset
10787 ignore_next_mouse_click_timeout = 0;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10788
54173
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
10789 #ifdef USE_GTK
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
10790 current_count = -1;
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
10791 #endif
03cb01738926 (x_focus_changed, x_detect_focus_change): Remove
Kim F. Storm <storm@cua.dk>
parents: 53933
diff changeset
10792
4476
e7de1b007447 (x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents: 4304
diff changeset
10793 /* 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
10794 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
10795
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10796 #ifdef USE_X_TOOLKIT
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10797 XtToolkitInitialize ();
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10798
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10799 Xt_app_con = XtCreateApplicationContext ();
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10800
37143
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10801 /* 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
10802 Emacs' color allocation infrastructure. */
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10803 XtAppSetTypeConverter (Xt_app_con,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10804 XtRString, XtRPixel, cvt_string_to_pixel,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10805 cvt_string_to_pixel_args,
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10806 XtNumber (cvt_string_to_pixel_args),
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10807 XtCacheByDisplay, cvt_pixel_dtor);
187f754d89cc (x_alloc_nearest_color_1): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 37033
diff changeset
10808
12494
bfbe2490dbf0 (x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents: 12431
diff changeset
10809 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources);
27428
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10810
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10811 /* Install an asynchronous timer that processes Xt timeout events
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10812 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
10813 timeouts internally, for example the LessTif menu bar, or the
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10814 Xaw3d scroll bar. When Xt timouts aren't processed, these
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10815 widgets don't behave normally. */
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10816 {
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10817 EMACS_TIME interval;
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10818 EMACS_SET_SECS_USECS (interval, 0, 100000);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10819 start_atimer (ATIMER_CONTINUOUS, interval, x_process_timeouts, 0);
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10820 }
c8b20597f0fd (toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents: 27040
diff changeset
10821 #endif
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10822
34066
2482c17f546e Test USE_TOOLKIT_SCROLL_BARS everywhere with #ifdef and
Gerd Moellmann <gerd@gnu.org>
parents: 34030
diff changeset
10823 #ifdef USE_TOOLKIT_SCROLL_BARS
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10824 #ifndef USE_GTK
26789
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
10825 xaw3d_arrow_scroll = False;
03a6016a38bf (#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26633
diff changeset
10826 xaw3d_pick_top = True;
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10827 #endif
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10828 #endif
9741
bd9d06e542c6 (x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents: 9704
diff changeset
10829
9537
f025140f7ff7 (stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents: 9526
diff changeset
10830 /* 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
10831 original error handler. */
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10832 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
10833 XSetIOErrorHandler (x_io_error_quitter);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10834
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10835 /* Disable Window Change signals; they are handled by X events. */
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10836 #ifdef SIGWINCH
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10837 signal (SIGWINCH, SIG_DFL);
44763
f6ac4d8b01cd Fix misleading comment after #endif.
Pavel Jan?k <Pavel@Janik.cz>
parents: 44708
diff changeset
10838 #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
10839
10743
6977bff3ff38 (x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents: 10652
diff changeset
10840 signal (SIGPIPE, x_connection_signal);
286
8a40ab4a424f Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10841 }
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10842
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10843
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10844 void
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10845 syms_of_xterm ()
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10846 {
17607
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10847 staticpro (&x_error_message_string);
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10848 x_error_message_string = Qnil;
251e103f2d53 (XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents: 17575
diff changeset
10849
9704
39b34bbe59c9 (x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents: 9654
diff changeset
10850 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
10851 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
10852
1993
645d96bd3daf Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents: 1935
diff changeset
10853 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
10854 last_mouse_scroll_bar = Qnil;
11807
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10855
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10856 staticpro (&Qvendor_specific_keysyms);
73fb6570f718 (Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents: 11610
diff changeset
10857 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
10858
44626
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10859 staticpro (&Qutf_8);
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10860 Qutf_8 = intern ("utf-8");
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10861 staticpro (&Qlatin_1);
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10862 Qlatin_1 = intern ("latin-1");
404f74d6dc4a (Qlatin_1, Qutf_8): New vars.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44533
diff changeset
10863
15803
f214673e68a8 (XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents: 15794
diff changeset
10864 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
10865 last_mouse_press_frame = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10866
37153
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
10867 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
10868 &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
10869 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
10870 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
10871 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
10872 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
10873 x_use_underline_position_properties = 1;
3799cab1815b (x_use_underline_position_properties): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37143
diff changeset
10874
54650
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10875 DEFVAR_BOOL ("x-mouse-click-focus-ignore-position",
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10876 &x_mouse_click_focus_ignore_position,
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10877 doc: /* Non-nil means that a mouse click to focus a frame does not move point.
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10878 This variable is only used when the window manager requires that you
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10879 click on a frame to select it (give it focus). In that case, a value
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10880 of nil, means that the selected window and cursor position changes to
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10881 reflect the mouse click position, while a non-nil value means that the
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10882 selected window or cursor position is preserved. */);
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10883 x_mouse_click_focus_ignore_position = 0;
9dc8330eda34 (x_mouse_click_focus_ignore_position): New var.
Kim F. Storm <storm@cua.dk>
parents: 54451
diff changeset
10884
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39973
diff changeset
10885 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
10886 doc: /* What X toolkit scroll bars Emacs uses.
39914
91951fb5b9e5 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39821
diff changeset
10887 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
10888 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
10889 #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
10890 #ifdef USE_MOTIF
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10891 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
10892 #elif defined HAVE_XAW3D
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10893 Vx_toolkit_scroll_bars = intern ("xaw3d");
49322
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10894 #elif USE_GTK
2cbb0b823e83 GTK version
Jan Dj?rv <jan.h.d@swipnet.se>
parents: 49117
diff changeset
10895 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
10896 #else
34869
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10897 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
10898 #endif
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10899 #else
1d671133e618 (syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents: 34673
diff changeset
10900 Vx_toolkit_scroll_bars = Qnil;
24991
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10901 #endif
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10902
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10903 staticpro (&last_mouse_motion_frame);
53d428012caf Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents: 24941
diff changeset
10904 last_mouse_motion_frame = 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 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
10907 Qalt = intern ("alt");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10908 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
10909 Qhyper = intern ("hyper");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10910 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
10911 Qmeta = intern ("meta");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10912 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
10913 Qsuper = intern ("super");
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10914 Fput (Qsuper, Qmodifier_value, make_number (super_modifier));
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10915
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10916 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
10917 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
10918 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
10919 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
10920 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
10921 Vx_alt_keysym = Qnil;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10922
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10923 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
10924 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
10925 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
10926 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
10927 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
10928 Vx_hyper_keysym = Qnil;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10929
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10930 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
10931 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
10932 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
10933 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
10934 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
10935 Vx_meta_keysym = Qnil;
47942
080b4586492b Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 47766
diff changeset
10936
43302
2f479ac769e1 (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
Kai Gro?johann <kgrossjo@eu.uu.net>
parents: 42996
diff changeset
10937 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
10938 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
10939 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
10940 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
10941 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
10942 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
10943
48085
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10944 DEFVAR_LISP ("x-keysym-table", &Vx_keysym_table,
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10945 doc: /* Hash table of character codes indexed by X keysym codes. */);
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10946 Vx_keysym_table = make_hash_table (Qeql, make_number (900),
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10947 make_float (DEFAULT_REHASH_SIZE),
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10948 make_float (DEFAULT_REHASH_THRESHOLD),
1c06bf924a62 (Qeql): Declare.
Dave Love <fx@gnu.org>
parents: 48025
diff changeset
10949 Qnil, Qnil, Qnil);
395
b5cc63711808 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 369
diff changeset
10950 }
14694
41de9b2640a1 (X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 14692
diff changeset
10951
39096
6d69f5cca0cf Comment fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39094
diff changeset
10952 #endif /* HAVE_X_WINDOWS */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52387
diff changeset
10953
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52387
diff changeset
10954 /* arch-tag: 6d4e4cb7-abc1-4302-9585-d84dcfb09d0f
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52387
diff changeset
10955 (do not change this comment) */