Mercurial > emacs
annotate src/xterm.c @ 7916:50e9e0c8806a
(x_noop_count): New variable.
(x_term_init) [X_IO_BUG]: Init it.
(XTread_socket) [X_IO_BUG]: Don't do XNoOp every time, just 1 in 100.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 15 Jun 1994 20:15:59 +0000 |
parents | cbc288be9c89 |
children | f15e1a058e93 |
rev | line source |
---|---|
286 | 1 /* X Communication module for terminals which understand the X protocol. |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2 Copyright (C) 1989, 1993, 1994 Free Software Foundation, Inc. |
286 | 3 |
4 This file is part of GNU Emacs. | |
5 | |
6 GNU Emacs is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
621 | 8 the Free Software Foundation; either version 2, or (at your option) |
286 | 9 any later version. |
10 | |
11 GNU Emacs is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
19 | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
20 /* 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
|
21 |
2977
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
22 /* 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
|
23 /* On HP-UX 8.0 signal.h loses if it comes after config.h. */ |
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
24 /* 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
|
25 #include <signal.h> |
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
26 |
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4683
diff
changeset
|
27 #include <config.h> |
286 | 28 |
7902
22b9aaaf0302
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7870
diff
changeset
|
29 #include <stdio.h> |
22b9aaaf0302
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7870
diff
changeset
|
30 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
31 /* Need syssignal.h for various externs and definitions that may be required |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
32 by some configurations for calls to signal later in this source file. */ |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
33 #include "syssignal.h" |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
34 |
286 | 35 #ifdef HAVE_X_WINDOWS |
36 | |
37 #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
|
38 #include "blockinput.h" |
286 | 39 |
40 /* This may include sys/types.h, and that somehow loses | |
41 if this is not done before the other system files. */ | |
42 #include "xterm.h" | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
43 #include <X11/cursorfont.h> |
286 | 44 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
45 #ifndef USG |
286 | 46 /* Load sys/types.h if not already loaded. |
47 In some systems loading it twice is suicidal. */ | |
48 #ifndef makedev | |
49 #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
|
50 #endif /* makedev */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
51 #endif /* USG */ |
286 | 52 |
53 #ifdef BSD | |
54 #include <sys/ioctl.h> | |
55 #include <strings.h> | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
56 #else /* ! defined (BSD) */ |
2353
ec8d40776ff1
* xterm.c [VMS]: Don't #include <sys/termio.h> and <string.h>.
Jim Blandy <jimb@redhat.com>
parents:
2285
diff
changeset
|
57 #ifndef VMS |
286 | 58 #include <string.h> |
2353
ec8d40776ff1
* xterm.c [VMS]: Don't #include <sys/termio.h> and <string.h>.
Jim Blandy <jimb@redhat.com>
parents:
2285
diff
changeset
|
59 #endif |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
60 #endif /* ! defined (BSD) */ |
286 | 61 |
3355
e0c2e8a2ef75
(XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents:
3284
diff
changeset
|
62 #include "systty.h" |
555 | 63 #include "systime.h" |
286 | 64 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
65 #ifndef INCLUDED_FCNTL |
286 | 66 #include <fcntl.h> |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
67 #endif |
286 | 68 #include <ctype.h> |
69 #include <errno.h> | |
70 #include <setjmp.h> | |
71 #include <sys/stat.h> | |
72 #include <sys/param.h> | |
73 | |
74 #include "dispextern.h" | |
75 #include "termhooks.h" | |
76 #include "termopts.h" | |
77 #include "termchar.h" | |
78 #if 0 | |
79 #include "sink.h" | |
80 #include "sinkmask.h" | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
81 #endif /* ! 0 */ |
286 | 82 #include "gnu.h" |
771 | 83 #include "frame.h" |
286 | 84 #include "disptab.h" |
85 #include "buffer.h" | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
86 #include "window.h" |
286 | 87 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
88 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
89 extern XtAppContext Xt_app_con; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
90 extern Widget Xt_app_shell; |
5898
105c99071e9b
(x_destroy_window) [USE_X_TOOLKIT]: Call free_frame_menubar.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5872
diff
changeset
|
91 extern void free_frame_menubar (); |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
92 extern void _XEditResCheckMessages (); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
93 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
94 |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
95 #ifndef USE_X_TOOLKIT |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
96 #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
|
97 #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
|
98 #endif |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
99 |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
100 #ifdef USE_X_TOOLKIT |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
101 #ifndef XtNinitialState |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
102 #define XtNinitialState "initialState" |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
103 #endif |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
104 #endif |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
105 |
286 | 106 #ifdef HAVE_X11 |
107 #define XMapWindow XMapRaised /* Raise them when mapping. */ | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
108 #else /* ! defined (HAVE_X11) */ |
286 | 109 #include <X/Xkeyboard.h> |
110 /*#include <X/Xproto.h> */ | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
111 #endif /* ! defined (HAVE_X11) */ |
286 | 112 |
3924
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
113 #ifdef FD_SET |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
114 /* We could get this from param.h, but better not to depend on finding that. |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
115 And better not to risk that it might define other symbols used in this |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
116 file. */ |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
117 #ifdef FD_SETSIZE |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
118 #define MAXDESC FD_SETSIZE |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
119 #else |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
120 #define MAXDESC 64 |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
121 #endif |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
122 #define SELECT_TYPE fd_set |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
123 #else /* no FD_SET */ |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
124 #define MAXDESC 32 |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
125 #define SELECT_TYPE int |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
126 |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
127 /* Define the macros to access a single-int bitmap of descriptors. */ |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
128 #define FD_SET(n, p) (*(p) |= (1 << (n))) |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
129 #define FD_CLR(n, p) (*(p) &= ~(1 << (n))) |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
130 #define FD_ISSET(n, p) (*(p) & (1 << (n))) |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
131 #define FD_ZERO(p) (*(p) = 0) |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
132 #endif /* no FD_SET */ |
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
133 |
286 | 134 /* For sending Meta-characters. Do we need this? */ |
135 #define METABIT 0200 | |
136 | |
137 #define min(a,b) ((a)<(b) ? (a) : (b)) | |
138 #define max(a,b) ((a)>(b) ? (a) : (b)) | |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
139 |
286 | 140 /* Nonzero means we must reprint all windows |
141 because 1) we received an ExposeWindow event | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
142 or 2) we received too many ExposeRegion events to record. |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
143 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
144 This is never needed under X11. */ |
286 | 145 static int expose_all_windows; |
146 | |
147 /* Nonzero means we must reprint all icon windows. */ | |
148 | |
149 static int expose_all_icons; | |
150 | |
151 #ifndef HAVE_X11 | |
152 /* ExposeRegion events, when received, are copied into this queue | |
153 for later processing. */ | |
154 | |
155 static struct event_queue x_expose_queue; | |
156 | |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
157 /* ButtonPress and ButtonReleased events, when received, |
286 | 158 are copied into this queue for later processing. */ |
159 | |
160 struct event_queue x_mouse_queue; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
161 #endif /* HAVE_X11 */ |
286 | 162 |
163 #if defined (SIGIO) && defined (FIONREAD) | |
164 int BLOCK_INPUT_mask; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
165 #endif /* ! defined (SIGIO) && defined (FIONREAD) */ |
286 | 166 |
167 /* The id of a bitmap used for icon windows. | |
168 One such map is shared by all Emacs icon windows. | |
169 This is zero if we have not yet had a need to create the bitmap. */ | |
170 | |
171 static Bitmap icon_bitmap; | |
172 | |
173 /* Font used for text icons. */ | |
174 | |
175 static FONT_TYPE *icon_font_info; | |
176 | |
177 /* Stuff for dealing with the main icon title. */ | |
178 | |
7905
cbc288be9c89
(x_term_init): Don't call get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7902
diff
changeset
|
179 extern Lisp_Object Vcommand_line_args, Vsystem_name; |
cbc288be9c89
(x_term_init): Don't call get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7902
diff
changeset
|
180 char *x_id_name; |
286 | 181 |
7870
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
182 /* Initial values of argv and argc. */ |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
183 extern char **initial_argv; |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
184 extern int initial_argc; |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
185 |
286 | 186 /* This is the X connection that we are using. */ |
187 | |
188 Display *x_current_display; | |
189 | |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
190 /* The cursor to use for vertical scroll bars on x_current_display. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
191 static Cursor x_vertical_scroll_bar_cursor; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
192 |
2474
86c8a6e08fd4
Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents:
2468
diff
changeset
|
193 /* Frame being updated by update_frame. This is declared in term.c. |
2468
35aa32e1a003
* xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents:
2439
diff
changeset
|
194 This is set by update_begin and looked at by all the |
286 | 195 XT functions. It is zero while not inside an update. |
771 | 196 In that case, the XT functions assume that `selected_frame' |
197 is the frame to apply to. */ | |
2468
35aa32e1a003
* xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents:
2439
diff
changeset
|
198 extern struct frame *updating_frame; |
771 | 199 |
200 /* The frame (if any) which has the X window that has keyboard focus. | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
201 Zero if none. This is examined by Ffocus_frame in frame.c. Note |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
202 that a mere EnterNotify event can set this; if you need to know the |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
203 last frame specified in a FocusIn or FocusOut event, use |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
204 x_focus_event_frame. */ |
771 | 205 struct frame *x_focus_frame; |
206 | |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
207 /* This is a frame waiting to be autoraised, within XTread_socket. */ |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
208 struct frame *pending_autoraise_frame; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
209 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
210 /* The last frame mentioned in a FocusIn or FocusOut event. This is |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
211 separate from x_focus_frame, because whether or not LeaveNotify |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
212 events cause us to lose focus depends on whether or not we have |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
213 received a FocusIn event for it. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
214 struct frame *x_focus_event_frame; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
215 |
771 | 216 /* The frame which currently has the visual highlight, and should get |
217 keyboard input (other sorts of input have the frame encoded in the | |
218 event). It points to the X focus frame's selected window's | |
219 frame. It differs from x_focus_frame when we're using a global | |
369 | 220 minibuffer. */ |
771 | 221 static struct frame *x_highlight_frame; |
369 | 222 |
286 | 223 /* From .Xdefaults, the value of "emacs.WarpMouse". If non-zero, |
771 | 224 mouse is moved to inside of frame when frame is de-iconified. */ |
286 | 225 |
226 static int warp_mouse_on_deiconify; | |
227 | |
228 /* During an update, maximum vpos for ins/del line operations to affect. */ | |
229 | |
230 static int flexlines; | |
231 | |
232 /* During an update, nonzero if chars output now should be highlighted. */ | |
233 | |
234 static int highlight; | |
235 | |
236 /* Nominal cursor position -- where to draw output. | |
237 During an update, these are different from the cursor-box position. */ | |
238 | |
239 static int curs_x; | |
240 static int curs_y; | |
241 | |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
242 /* Mouse movement. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
243 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
244 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
|
245 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
|
246 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
|
247 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
|
248 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
|
249 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
|
250 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
|
251 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
|
252 tracking is on, and I suspect only negligibly worse when tracking |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
253 is off. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
254 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
255 The silly O'Reilly & Associates Nutshell guides barely document |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
256 pointer motion hints at all (I think you have to infer how they |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
257 work from an example), and the description of XQueryPointer doesn't |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
258 mention that calling it causes you to get another motion hint from |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
259 the server, which is very important. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
260 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
261 /* Where the mouse was last time we reported a mouse event. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
262 static FRAME_PTR last_mouse_frame; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
263 static XRectangle last_mouse_glyph; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
264 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
265 /* 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
|
266 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
267 If the last X motion event occurred in a scroll bar, we set this |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
268 so XTmouse_position can know whether to report a scroll bar motion or |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
269 an ordinary motion. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
270 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
271 If the last X motion event didn't occur in a scroll bar, we set this |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
272 to Qnil, to tell XTmouse_position to return an ordinary motion event. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
273 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
|
274 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
275 /* Record which buttons are currently pressed. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
276 unsigned int x_mouse_grabbed; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
277 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
278 /* 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
|
279 return the time associated with the position it returns, but there |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
280 doesn't seem to be any way to wrest the timestamp from the server |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
281 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
|
282 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
|
283 it's somewhat accurate. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
284 static Time last_mouse_movement_time; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
285 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
286 /* These variables describe the range of text currently shown |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
287 in its mouse-face, together with the window they apply to. |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
288 As long as the mouse stays within this range, we need not |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
289 redraw anything on its account. */ |
7283
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
290 static int mouse_face_beg_row, mouse_face_beg_col; |
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
291 static int mouse_face_end_row, mouse_face_end_col; |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
292 static int mouse_face_past_end; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
293 static Lisp_Object mouse_face_window; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
294 static int mouse_face_face_id; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
295 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
296 /* 1 if a mouse motion event came and we didn't handle it right away because |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
297 gc was in progress. */ |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
298 static int mouse_face_deferred_gc; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
299 |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
300 /* FRAME and X, Y position of mouse when last checked for |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
301 highlighting. X and Y can be negative or out of range for the frame. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
302 static FRAME_PTR mouse_face_mouse_frame; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
303 static int mouse_face_mouse_x, mouse_face_mouse_y; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
304 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
305 /* Nonzero means defer mouse-motion highlighting. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
306 static int mouse_face_defer; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
307 |
286 | 308 #ifdef HAVE_X11 |
309 /* `t' if a mouse button is depressed. */ | |
310 | |
311 extern Lisp_Object Vmouse_depressed; | |
312 | |
313 /* Tells if a window manager is present or not. */ | |
314 | |
315 extern Lisp_Object Vx_no_window_manager; | |
316 | |
317 /* Timestamp that we requested selection data was made. */ | |
318 extern Time requestor_time; | |
319 | |
320 /* ID of the window requesting selection data. */ | |
321 extern Window requestor_window; | |
322 | |
323 /* Nonzero enables some debugging for the X interface code. */ | |
324 extern int _Xdebug; | |
325 | |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
326 extern Lisp_Object Qface, Qmouse_face; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
327 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
328 #else /* ! defined (HAVE_X11) */ |
286 | 329 |
330 /* Bit patterns for the mouse cursor. */ | |
331 | |
332 short MouseCursor[] = { | |
333 0x0000, 0x0008, 0x0018, 0x0038, | |
334 0x0078, 0x00f8, 0x01f8, 0x03f8, | |
335 0x07f8, 0x00f8, 0x00d8, 0x0188, | |
336 0x0180, 0x0300, 0x0300, 0x0000}; | |
337 | |
338 short MouseMask[] = { | |
339 0x000c, 0x001c, 0x003c, 0x007c, | |
340 0x00fc, 0x01fc, 0x03fc, 0x07fc, | |
341 0x0ffc, 0x0ffc, 0x01fc, 0x03dc, | |
342 0x03cc, 0x0780, 0x0780, 0x0300}; | |
343 | |
344 static short grey_bits[] = { | |
345 0x0005, 0x000a, 0x0005, 0x000a}; | |
346 | |
347 static Pixmap GreyPixmap = 0; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
348 #endif /* ! defined (HAVE_X11) */ |
286 | 349 |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
350 #ifdef X_IO_BUG |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
351 static int x_noop_count; |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
352 #endif |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
353 |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
354 |
286 | 355 /* From time to time we get info on an Emacs window, here. */ |
356 | |
357 static WINDOWINFO_TYPE windowinfo; | |
358 | |
359 extern int errno; | |
360 | |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
361 /* A mask of extra modifier bits to put into every keyboard char. */ |
1841
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
362 extern int extra_keyboard_modifiers; |
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
363 |
286 | 364 extern Display *XOpenDisplay (); |
365 extern Window XCreateWindow (); | |
366 | |
367 extern Cursor XCreateCursor (); | |
368 extern FONT_TYPE *XOpenFont (); | |
369 | |
370 static void flashback (); | |
4277
c3fbb9249f5b
(redraw_previous_char): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4244
diff
changeset
|
371 static void redraw_previous_char (); |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
372 static void redraw_following_char (); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
373 static unsigned int x_x_to_emacs_modifiers (); |
286 | 374 |
7282
2bc4929691e9
(show_mouse_face): Fix test for cursor in highlighted area.
Karl Heuer <kwzh@gnu.org>
parents:
7264
diff
changeset
|
375 static int fast_find_position (); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
376 static void note_mouse_highlight (); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
377 static void clear_mouse_face (); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
378 static void show_mouse_face (); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
379 |
286 | 380 #ifndef HAVE_X11 |
381 static void dumpqueue (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
382 #endif /* HAVE_X11 */ |
286 | 383 |
384 void dumpborder (); | |
621 | 385 static int XTcursor_to (); |
386 static int XTclear_end_of_line (); | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
387 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
388 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
389 /* Starting and ending updates. |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
390 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
391 These hooks are called by update_frame at the beginning and end |
771 | 392 of a frame update. We record in `updating_frame' the identity |
393 of the frame being updated, so that the XT... functions do not | |
394 need to take a frame as argument. Most of the XT... functions | |
286 | 395 should never be called except during an update, the only exceptions |
4277
c3fbb9249f5b
(redraw_previous_char): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4244
diff
changeset
|
396 being XTcursor_to, XTwrite_glyphs and XTreassert_line_highlight. */ |
286 | 397 |
398 extern int mouse_track_top, mouse_track_left, mouse_track_width; | |
399 | |
400 static | |
771 | 401 XTupdate_begin (f) |
402 struct frame *f; | |
286 | 403 { |
404 int mask; | |
405 | |
771 | 406 if (f == 0) |
286 | 407 abort (); |
408 | |
771 | 409 flexlines = f->height; |
286 | 410 highlight = 0; |
411 | |
412 BLOCK_INPUT; | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
413 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
414 if (f == mouse_face_mouse_frame) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
415 { |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
416 /* Don't do highlighting for mouse motion during the update. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
417 mouse_face_defer = 1; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
418 if (!NILP (mouse_face_window)) |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
419 { |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
420 int firstline, lastline, i; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
421 struct window *w = XWINDOW (mouse_face_window); |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
422 |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
423 /* Find the first, and the last+1, lines affected by redisplay. */ |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
424 for (firstline = 0; firstline < f->height; firstline++) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
425 if (FRAME_DESIRED_GLYPHS (f)->enable[firstline]) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
426 break; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
427 |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
428 lastline = f->height; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
429 for (i = f->height - 1; i >= 0; i--) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
430 { |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
431 if (FRAME_DESIRED_GLYPHS (f)->enable[i]) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
432 break; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
433 else |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
434 lastline = i; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
435 } |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
436 |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
437 /* Can we tell that this update does not affect the window |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
438 where the mouse highlight is? If so, no need to turn off. */ |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
439 if (! (firstline > (XFASTINT (w->top) + window_internal_height (w)) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
440 || lastline < XFASTINT (w->top))) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
441 /* Otherwise turn off the mouse highlight now. */ |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
442 clear_mouse_face (); |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
443 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
444 } |
286 | 445 #ifndef HAVE_X11 |
446 dumpqueue (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
447 #endif /* HAVE_X11 */ |
286 | 448 UNBLOCK_INPUT; |
449 } | |
450 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
451 #ifndef HAVE_X11 |
286 | 452 static void x_do_pending_expose (); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
453 #endif |
286 | 454 |
455 static | |
771 | 456 XTupdate_end (f) |
457 struct frame *f; | |
286 | 458 { |
459 int mask; | |
460 | |
461 BLOCK_INPUT; | |
462 #ifndef HAVE_X11 | |
463 dumpqueue (); | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
464 x_do_pending_expose (); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
465 #endif /* HAVE_X11 */ |
286 | 466 |
771 | 467 x_display_cursor (f, 1); |
468 | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
469 if (f == mouse_face_mouse_frame) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
470 mouse_face_defer = 0; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
471 #if 0 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
472 /* This fails in the case of having updated only the echo area |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
473 if we have switched buffers. In that case, FRAME_CURRENT_GLYPHS |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
474 has no relation to the current contents, and its charstarts |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
475 have no relation to the contents of the window-buffer. |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
476 I don't know a clean way to check |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
477 for that case. window_end_valid isn't set up yet. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
478 if (f == mouse_face_mouse_frame) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
479 note_mouse_highlight (f, mouse_face_mouse_x, mouse_face_mouse_y); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
480 #endif |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
481 |
286 | 482 XFlushQueue (); |
483 UNBLOCK_INPUT; | |
484 } | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
485 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
486 /* This is called after a redisplay on frame F. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
487 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
488 static |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
489 XTframe_up_to_date (f) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
490 FRAME_PTR f; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
491 { |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
492 if (mouse_face_deferred_gc || f == mouse_face_mouse_frame) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
493 { |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
494 note_mouse_highlight (mouse_face_mouse_frame, |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
495 mouse_face_mouse_x, mouse_face_mouse_y); |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
496 mouse_face_deferred_gc = 0; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
497 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
498 } |
286 | 499 |
500 /* External interface to control of standout mode. | |
501 Call this when about to modify line at position VPOS | |
502 and not change whether it is highlighted. */ | |
503 | |
504 XTreassert_line_highlight (new, vpos) | |
505 int new, vpos; | |
506 { | |
507 highlight = new; | |
508 } | |
509 | |
510 /* Call this when about to modify line at position VPOS | |
511 and change whether it is highlighted. */ | |
512 | |
513 static | |
514 XTchange_line_highlight (new_highlight, vpos, first_unused_hpos) | |
515 int new_highlight, vpos, first_unused_hpos; | |
516 { | |
517 highlight = new_highlight; | |
518 XTcursor_to (vpos, 0); | |
771 | 519 XTclear_end_of_line (updating_frame->width); |
286 | 520 } |
521 | |
522 /* This is used when starting Emacs and when restarting after suspend. | |
523 When starting Emacs, no X window is mapped. And nothing must be done | |
524 to Emacs's own window if it is suspended (though that rarely happens). */ | |
525 | |
526 static | |
527 XTset_terminal_modes () | |
528 { | |
529 } | |
530 | |
531 /* This is called when exiting or suspending Emacs. | |
532 Exiting will make the X-windows go away, and suspending | |
533 requires no action. */ | |
534 | |
535 static | |
536 XTreset_terminal_modes () | |
537 { | |
771 | 538 /* XTclear_frame (); */ |
286 | 539 } |
540 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
541 /* Set the nominal cursor position of the frame. |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
542 This is where display update commands will take effect. |
286 | 543 This does not affect the place where the cursor-box is displayed. */ |
544 | |
621 | 545 static int |
286 | 546 XTcursor_to (row, col) |
547 register int row, col; | |
548 { | |
549 int mask; | |
550 int orow = row; | |
551 | |
552 curs_x = col; | |
553 curs_y = row; | |
554 | |
771 | 555 if (updating_frame == 0) |
286 | 556 { |
557 BLOCK_INPUT; | |
771 | 558 x_display_cursor (selected_frame, 1); |
286 | 559 XFlushQueue (); |
560 UNBLOCK_INPUT; | |
561 } | |
562 } | |
563 | |
564 /* Display a sequence of N glyphs found at GP. | |
565 WINDOW is the x-window to output to. LEFT and TOP are starting coords. | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
566 HL is 1 if this text is highlighted, 2 if the cursor is on it, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
567 3 if should appear in its mouse-face. |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
568 JUST_FOREGROUND if 1 means draw only the foreground; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
569 don't alter the background. |
286 | 570 |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
571 FONT is the default font to use (for glyphs whose font-code is 0). |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
572 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
573 Since the display generation code is responsible for calling |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
574 compute_char_face and compute_glyph_face on everything it puts in |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
575 the display structure, we can assume that the face code on each |
3883
b9e5a869b33e
Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents:
3839
diff
changeset
|
576 glyph is a valid index into FRAME_COMPUTED_FACES (f), and the one |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
577 to which we can actually apply intern_face. |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
578 Call this function with input blocked. */ |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
579 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
580 #if 1 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
581 /* This is the multi-face code. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
582 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
583 static void |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
584 dumpglyphs (f, left, top, gp, n, hl, just_foreground) |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
585 struct frame *f; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
586 int left, top; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
587 register GLYPH *gp; /* Points to first GLYPH. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
588 register int n; /* Number of glyphs to display. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
589 int hl; |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
590 int just_foreground; |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
591 { |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
592 /* Holds characters to be displayed. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
593 char *buf = (char *) alloca (f->width * sizeof (*buf)); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
594 register char *cp; /* Steps through buf[]. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
595 register int tlen = GLYPH_TABLE_LENGTH; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
596 register Lisp_Object *tbase = GLYPH_TABLE_BASE; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
597 Window window = FRAME_X_WINDOW (f); |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
598 int orig_left = left; |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
599 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
600 while (n > 0) |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
601 { |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
602 /* Get the face-code of the next GLYPH. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
603 int cf, len; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
604 int g = *gp; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
605 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
606 GLYPH_FOLLOW_ALIASES (tbase, tlen, g); |
6413
6eb1a3cf0371
(dumpglyphs): Use the fast macros.
Karl Heuer <kwzh@gnu.org>
parents:
6356
diff
changeset
|
607 cf = FAST_GLYPH_FACE (g); |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
608 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
609 /* Find the run of consecutive glyphs with the same face-code. |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
610 Extract their character codes into BUF. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
611 cp = buf; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
612 while (n > 0) |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
613 { |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
614 g = *gp; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
615 GLYPH_FOLLOW_ALIASES (tbase, tlen, g); |
6413
6eb1a3cf0371
(dumpglyphs): Use the fast macros.
Karl Heuer <kwzh@gnu.org>
parents:
6356
diff
changeset
|
616 if (FAST_GLYPH_FACE (g) != cf) |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
617 break; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
618 |
6413
6eb1a3cf0371
(dumpglyphs): Use the fast macros.
Karl Heuer <kwzh@gnu.org>
parents:
6356
diff
changeset
|
619 *cp++ = FAST_GLYPH_CHAR (g); |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
620 --n; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
621 ++gp; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
622 } |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
623 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
624 /* LEN gets the length of the run. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
625 len = cp - buf; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
626 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
627 /* Now output this run of chars, with the font and pixel values |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
628 determined by the face code CF. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
629 { |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
630 struct face *face = FRAME_DEFAULT_FACE (f); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
631 FONT_TYPE *font = FACE_FONT (face); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
632 GC gc = FACE_GC (face); |
2840
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
633 int gc_temporary = 0; |
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
634 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
635 /* HL = 3 means use a mouse face previously chosen. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
636 if (hl == 3) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
637 cf = mouse_face_face_id; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
638 |
2840
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
639 /* First look at the face of the text itself. */ |
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
640 if (cf != 0) |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
641 { |
5719
d3074ff90741
(dumpglyphs): Don't crash for invalid face code.
Richard M. Stallman <rms@gnu.org>
parents:
5686
diff
changeset
|
642 /* It's possible for the display table to specify |
d3074ff90741
(dumpglyphs): Don't crash for invalid face code.
Richard M. Stallman <rms@gnu.org>
parents:
5686
diff
changeset
|
643 a face code that is out of range. Use 0 in that case. */ |
3883
b9e5a869b33e
Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents:
3839
diff
changeset
|
644 if (cf < 0 || cf >= FRAME_N_COMPUTED_FACES (f) |
b9e5a869b33e
Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents:
3839
diff
changeset
|
645 || FRAME_COMPUTED_FACES (f) [cf] == 0) |
5719
d3074ff90741
(dumpglyphs): Don't crash for invalid face code.
Richard M. Stallman <rms@gnu.org>
parents:
5686
diff
changeset
|
646 cf = 0; |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
647 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
648 if (cf == 1) |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
649 face = FRAME_MODE_LINE_FACE (f); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
650 else |
3883
b9e5a869b33e
Separate parameter faces (those created and modified by the user)
Jim Blandy <jimb@redhat.com>
parents:
3839
diff
changeset
|
651 face = intern_face (f, FRAME_COMPUTED_FACES (f) [cf]); |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
652 font = FACE_FONT (face); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
653 gc = FACE_GC (face); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
654 } |
2785
55e9c556bbf8
* xterm.c (dumpglyphs): Give the cursor higher priority than the
Jim Blandy <jimb@redhat.com>
parents:
2732
diff
changeset
|
655 |
55e9c556bbf8
* xterm.c (dumpglyphs): Give the cursor higher priority than the
Jim Blandy <jimb@redhat.com>
parents:
2732
diff
changeset
|
656 /* Then comes the distinction between modeline and normal text. */ |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
657 else if (hl == 0) |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
658 ; |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
659 else if (hl == 1) |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
660 { |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
661 face = FRAME_MODE_LINE_FACE (f); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
662 font = FACE_FONT (face); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
663 gc = FACE_GC (face); |
2840
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
664 } |
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
665 |
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
666 #define FACE_DEFAULT (~0) |
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
667 |
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
668 /* Now override that if the cursor's on this character. */ |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
669 if (hl == 2) |
2840
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
670 { |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
671 if (!face->font |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
672 || (int) face->font == FACE_DEFAULT) |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
673 { |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
674 gc = f->display.x->cursor_gc; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
675 } |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
676 /* Cursor on non-default face: must merge. */ |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
677 else |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
678 { |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
679 XGCValues xgcv; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
680 unsigned long mask; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
681 |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
682 xgcv.background = f->display.x->cursor_pixel; |
5987
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
683 if (face == FRAME_DEFAULT_FACE (f)) |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
684 xgcv.foreground = f->display.x->cursor_foreground_pixel; |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
685 else |
7469
24b292242269
(dumpglyphs): For cursor foreground, try the
Richard M. Stallman <rms@gnu.org>
parents:
7415
diff
changeset
|
686 xgcv.foreground = face->background; |
5987
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
687 /* If the glyph would be invisible, |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
688 try a different foreground. */ |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
689 if (xgcv.foreground == xgcv.background) |
7469
24b292242269
(dumpglyphs): For cursor foreground, try the
Richard M. Stallman <rms@gnu.org>
parents:
7415
diff
changeset
|
690 xgcv.foreground = face->foreground; |
5987
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
691 if (xgcv.foreground == xgcv.background) |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
692 xgcv.foreground = f->display.x->cursor_foreground_pixel; |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
693 if (xgcv.foreground == xgcv.background) |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
694 xgcv.foreground = face->foreground; |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
695 /* Make sure the cursor is distinct from text in this face. */ |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
696 if (xgcv.background == face->background |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
697 && xgcv.foreground == face->foreground) |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
698 { |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
699 xgcv.background = face->foreground; |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
700 xgcv.foreground = face->background; |
040bdc2fec7c
(dumpglyphs): Try various alternatives for foreground color
Richard M. Stallman <rms@gnu.org>
parents:
5986
diff
changeset
|
701 } |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
702 xgcv.font = face->font->fid; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
703 xgcv.graphics_exposures = 0; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
704 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
705 gc = XCreateGC (x_current_display, FRAME_X_WINDOW (f), |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
706 mask, &xgcv); |
2840
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
707 #if 0 |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
708 if (face->stipple && face->stipple != FACE_DEFAULT) |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
709 XSetStipple (x_current_display, gc, face->stipple); |
2840
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
710 #endif |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
711 gc_temporary = 1; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
712 } |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
713 } |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
714 |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
715 if ((int) font == FACE_DEFAULT) |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
716 font = f->display.x->font; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
717 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
718 if (just_foreground) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
719 XDrawString (x_current_display, window, gc, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
720 left, top + FONT_BASE (font), buf, len); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
721 else |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
722 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
723 XDrawImageString (x_current_display, window, gc, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
724 left, top + FONT_BASE (font), buf, len); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
725 /* Clear the rest of the line's height. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
726 if (f->display.x->line_height != FONT_HEIGHT (font)) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
727 XClearArea (x_current_display, window, left, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
728 top + FONT_HEIGHT (font), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
729 FONT_WIDTH (font) * len, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
730 /* This is how many pixels of height |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
731 we have to clear. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
732 f->display.x->line_height - FONT_HEIGHT (font), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
733 False); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
734 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
735 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
736 #if 0 /* Doesn't work, because it uses FRAME_CURRENT_GLYPHS, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
737 which often is not up to date yet. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
738 if (!just_foreground) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
739 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
740 if (left == orig_left) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
741 redraw_previous_char (f, PIXEL_TO_CHAR_COL (f, left), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
742 PIXEL_TO_CHAR_ROW (f, top), hl == 1); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
743 if (n == 0) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
744 redraw_following_char (f, PIXEL_TO_CHAR_COL (f, left + len * FONT_WIDTH (font)), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
745 PIXEL_TO_CHAR_ROW (f, top), hl == 1); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
746 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
747 #endif |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
748 |
2840
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
749 if (gc_temporary) |
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
750 XFreeGC (x_current_display, gc); |
12299f73584e
(dumpglyphs): Create a temporary merged gc
Richard M. Stallman <rms@gnu.org>
parents:
2785
diff
changeset
|
751 |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
752 /* We should probably check for XA_UNDERLINE_POSITION and |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
753 XA_UNDERLINE_THICKNESS properties on the font, but let's |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
754 just get the thing working, and come back to that. */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
755 { |
2785
55e9c556bbf8
* xterm.c (dumpglyphs): Give the cursor higher priority than the
Jim Blandy <jimb@redhat.com>
parents:
2732
diff
changeset
|
756 int underline_position = 1; |
55e9c556bbf8
* xterm.c (dumpglyphs): Give the cursor higher priority than the
Jim Blandy <jimb@redhat.com>
parents:
2732
diff
changeset
|
757 |
55e9c556bbf8
* xterm.c (dumpglyphs): Give the cursor higher priority than the
Jim Blandy <jimb@redhat.com>
parents:
2732
diff
changeset
|
758 if (font->descent <= underline_position) |
55e9c556bbf8
* xterm.c (dumpglyphs): Give the cursor higher priority than the
Jim Blandy <jimb@redhat.com>
parents:
2732
diff
changeset
|
759 underline_position = font->descent - 1; |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
760 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
761 if (face->underline) |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
762 XFillRectangle (x_current_display, FRAME_X_WINDOW (f), |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
763 FACE_GC (face), |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
764 left, (top |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
765 + FONT_BASE (font) |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
766 + underline_position), |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
767 len * FONT_WIDTH (font), 1); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
768 } |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
769 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
770 left += len * FONT_WIDTH (font); |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
771 } |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
772 } |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
773 } |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
774 #endif /* 1 */ |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
775 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
776 #if 0 |
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
777 /* This is the old single-face code. */ |
286 | 778 |
779 static void | |
771 | 780 dumpglyphs (f, left, top, gp, n, hl, font) |
781 struct frame *f; | |
286 | 782 int left, top; |
783 register GLYPH *gp; /* Points to first GLYPH. */ | |
784 register int n; /* Number of glyphs to display. */ | |
785 int hl; | |
786 FONT_TYPE *font; | |
787 { | |
788 register int len; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
789 Window window = FRAME_X_WINDOW (f); |
771 | 790 GC drawing_gc = (hl == 2 ? f->display.x->cursor_gc |
791 : (hl ? f->display.x->reverse_gc | |
792 : f->display.x->normal_gc)); | |
286 | 793 |
313 | 794 if (sizeof (GLYPH) == sizeof (XChar2b)) |
795 XDrawImageString16 (x_current_display, window, drawing_gc, | |
796 left, top + FONT_BASE (font), (XChar2b *) gp, n); | |
797 else if (sizeof (GLYPH) == sizeof (unsigned char)) | |
798 XDrawImageString (x_current_display, window, drawing_gc, | |
799 left, top + FONT_BASE (font), (char *) gp, n); | |
800 else | |
801 /* What size of glyph ARE you using? And does X have a function to | |
802 draw them? */ | |
803 abort (); | |
286 | 804 } |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
805 #endif |
286 | 806 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
807 /* Output some text at the nominal frame cursor position. |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
808 Advance the cursor over the text. |
286 | 809 Output LEN glyphs at START. |
810 | |
811 `highlight', set up by XTreassert_line_highlight or XTchange_line_highlight, | |
812 controls the pixel values used for foreground and background. */ | |
813 | |
814 static | |
815 XTwrite_glyphs (start, len) | |
816 register GLYPH *start; | |
817 int len; | |
818 { | |
819 register int temp_length; | |
820 int mask; | |
771 | 821 struct frame *f; |
286 | 822 |
823 BLOCK_INPUT; | |
824 | |
771 | 825 f = updating_frame; |
826 if (f == 0) | |
286 | 827 { |
771 | 828 f = selected_frame; |
286 | 829 /* If not within an update, |
771 | 830 output at the frame's visible cursor. */ |
831 curs_x = f->cursor_x; | |
832 curs_y = f->cursor_y; | |
286 | 833 } |
834 | |
771 | 835 dumpglyphs (f, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
836 CHAR_TO_PIXEL_COL (f, curs_x), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
837 CHAR_TO_PIXEL_ROW (f, curs_y), |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
838 start, len, highlight, 0); |
429 | 839 |
840 /* If we drew on top of the cursor, note that it is turned off. */ | |
771 | 841 if (curs_y == f->phys_cursor_y |
842 && curs_x <= f->phys_cursor_x | |
843 && curs_x + len > f->phys_cursor_x) | |
844 f->phys_cursor_x = -1; | |
286 | 845 |
771 | 846 if (updating_frame == 0) |
286 | 847 { |
771 | 848 f->cursor_x += len; |
849 x_display_cursor (f, 1); | |
850 f->cursor_x -= len; | |
286 | 851 } |
852 else | |
853 curs_x += len; | |
854 | |
855 UNBLOCK_INPUT; | |
856 } | |
857 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
858 /* Clear to the end of the line. |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
859 Erase the current text line from the nominal cursor position (inclusive) |
286 | 860 to column FIRST_UNUSED (exclusive). The idea is that everything |
861 from FIRST_UNUSED onward is already erased. */ | |
862 | |
621 | 863 static int |
286 | 864 XTclear_end_of_line (first_unused) |
865 register int first_unused; | |
866 { | |
771 | 867 struct frame *f = updating_frame; |
286 | 868 int mask; |
869 | |
771 | 870 if (f == 0) |
286 | 871 abort (); |
872 | |
771 | 873 if (curs_y < 0 || curs_y >= f->height) |
286 | 874 return; |
875 if (first_unused <= 0) | |
876 return; | |
877 | |
771 | 878 if (first_unused >= f->width) |
879 first_unused = f->width; | |
286 | 880 |
881 BLOCK_INPUT; | |
882 | |
429 | 883 /* Notice if the cursor will be cleared by this operation. */ |
771 | 884 if (curs_y == f->phys_cursor_y |
885 && curs_x <= f->phys_cursor_x | |
886 && f->phys_cursor_x < first_unused) | |
887 f->phys_cursor_x = -1; | |
286 | 888 |
889 #ifdef HAVE_X11 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
890 XClearArea (x_current_display, FRAME_X_WINDOW (f), |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
891 CHAR_TO_PIXEL_COL (f, curs_x), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
892 CHAR_TO_PIXEL_ROW (f, curs_y), |
771 | 893 FONT_WIDTH (f->display.x->font) * (first_unused - curs_x), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
894 f->display.x->line_height, False); |
4277
c3fbb9249f5b
(redraw_previous_char): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4244
diff
changeset
|
895 #if 0 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
896 redraw_previous_char (f, curs_x, curs_y, highlight); |
4277
c3fbb9249f5b
(redraw_previous_char): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4244
diff
changeset
|
897 #endif |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
898 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
899 XPixSet (FRAME_X_WINDOW (f), |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
900 CHAR_TO_PIXEL_COL (f, curs_x), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
901 CHAR_TO_PIXEL_ROW (f, curs_y), |
771 | 902 FONT_WIDTH (f->display.x->font) * (first_unused - curs_x), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
903 f->display.x->line_height, |
771 | 904 f->display.x->background_pixel); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
905 #endif /* ! defined (HAVE_X11) */ |
286 | 906 |
907 UNBLOCK_INPUT; | |
908 } | |
909 | |
910 static | |
771 | 911 XTclear_frame () |
286 | 912 { |
913 int mask; | |
771 | 914 struct frame *f = updating_frame; |
915 | |
916 if (f == 0) | |
917 f = selected_frame; | |
918 | |
919 f->phys_cursor_x = -1; /* Cursor not visible. */ | |
286 | 920 curs_x = 0; /* Nominal cursor position is top left. */ |
921 curs_y = 0; | |
922 | |
923 BLOCK_INPUT; | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
924 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
925 XClear (FRAME_X_WINDOW (f)); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
926 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
927 /* 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
|
928 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
|
929 x_scroll_bar_clear (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
930 |
286 | 931 #ifndef HAVE_X11 |
771 | 932 dumpborder (f, 0); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
933 #endif /* HAVE_X11 */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
934 |
286 | 935 XFlushQueue (); |
936 UNBLOCK_INPUT; | |
937 } | |
938 | |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
939 #if 0 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
940 /* This currently does not work because FRAME_CURRENT_GLYPHS doesn't |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
941 always contain the right glyphs to use. |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
942 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
943 It also needs to be changed to look at the details of the font and |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
944 see whether there is really overlap, and do nothing when there is |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
945 not. This can use font_char_overlap_left and font_char_overlap_right, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
946 but just how to use them is not clear. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
947 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
948 /* Erase the character (if any) at the position just before X, Y in frame F, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
949 then redraw it and the character before it. |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
950 This is necessary when we erase starting at X, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
951 in case the character after X overlaps into the one before X. |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
952 Call this function with input blocked. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
953 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
954 static void |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
955 redraw_previous_char (f, x, y, highlight_flag) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
956 FRAME_PTR f; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
957 int x, y; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
958 int highlight_flag; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
959 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
960 /* Erase the character before the new ones, in case |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
961 what was here before overlaps it. |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
962 Reoutput that character, and the previous character |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
963 (in case the previous character overlaps it). */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
964 if (x > 0) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
965 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
966 int start_x = x - 2; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
967 if (start_x < 0) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
968 start_x = 0; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
969 XClearArea (x_current_display, FRAME_X_WINDOW (f), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
970 CHAR_TO_PIXEL_COL (f, x - 1), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
971 CHAR_TO_PIXEL_ROW (f, y), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
972 FONT_WIDTH (f->display.x->font), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
973 f->display.x->line_height, False); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
974 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
975 dumpglyphs (f, CHAR_TO_PIXEL_COL (f, start_x), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
976 CHAR_TO_PIXEL_ROW (f, y), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
977 &FRAME_CURRENT_GLYPHS (f)->glyphs[y][start_x], |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
978 x - start_x, highlight_flag, 1); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
979 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
980 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
981 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
982 /* Erase the character (if any) at the position X, Y in frame F, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
983 then redraw it and the character after it. |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
984 This is necessary when we erase endng at X, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
985 in case the character after X overlaps into the one before X. |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
986 Call this function with input blocked. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
987 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
988 static void |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
989 redraw_following_char (f, x, y, highlight_flag) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
990 FRAME_PTR f; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
991 int x, y; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
992 int highlight_flag; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
993 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
994 int limit = FRAME_CURRENT_GLYPHS (f)->used[y]; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
995 /* Erase the character after the new ones, in case |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
996 what was here before overlaps it. |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
997 Reoutput that character, and the following character |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
998 (in case the following character overlaps it). */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
999 if (x < limit |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1000 && FRAME_CURRENT_GLYPHS (f)->glyphs[y][x] != SPACEGLYPH) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1001 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1002 int end_x = x + 2; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1003 if (end_x > limit) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1004 end_x = limit; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1005 XClearArea (x_current_display, FRAME_X_WINDOW (f), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1006 CHAR_TO_PIXEL_COL (f, x), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1007 CHAR_TO_PIXEL_ROW (f, y), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1008 FONT_WIDTH (f->display.x->font), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1009 f->display.x->line_height, False); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1010 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1011 dumpglyphs (f, CHAR_TO_PIXEL_COL (f, x), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1012 CHAR_TO_PIXEL_ROW (f, y), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1013 &FRAME_CURRENT_GLYPHS (f)->glyphs[y][x], |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1014 end_x - x, highlight_flag, 1); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1015 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1016 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1017 #endif /* 0 */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1018 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1019 #if 0 /* Not in use yet */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1020 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1021 /* Return 1 if character C in font F extends past its left edge. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1022 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1023 static int |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1024 font_char_overlap_left (font, c) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1025 XFontStruct *font; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1026 int c; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1027 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1028 XCharStruct *s; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1029 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1030 /* Find the bounding-box info for C. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1031 if (font->per_char == 0) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1032 s = &font->max_bounds; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1033 else |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1034 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1035 int rowlen = font->max_char_or_byte2 - font->min_char_or_byte2 + 1; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1036 int row, within; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1037 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1038 /* Decode char into row number (byte 1) and code within row (byte 2). */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1039 row = c >> 8; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1040 within = c & 0177; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1041 if (!(within >= font->min_char_or_byte2 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1042 && within <= font->max_char_or_byte2 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1043 && row >= font->min_byte1 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1044 && row <= font->max_byte1)) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1045 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1046 /* If char is out of range, try the font's default char instead. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1047 c = font->default_char; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1048 row = c >> (INTBITS - 8); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1049 within = c & 0177; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1050 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1051 if (!(within >= font->min_char_or_byte2 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1052 && within <= font->max_char_or_byte2 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1053 && row >= font->min_byte1 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1054 && row <= font->max_byte1)) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1055 /* Still out of range means this char does not overlap. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1056 return 0; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1057 else |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1058 /* We found the info for this char. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1059 s = (font->per_char + (within - font->min_char_or_byte2) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1060 + row * rowlen); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1061 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1062 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1063 return (s && s->lbearing < 0); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1064 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1065 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1066 /* Return 1 if character C in font F extends past its right edge. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1067 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1068 static int |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1069 font_char_overlap_right (font, c) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1070 XFontStruct *font; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1071 int c; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1072 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1073 XCharStruct *s; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1074 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1075 /* Find the bounding-box info for C. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1076 if (font->per_char == 0) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1077 s = &font->max_bounds; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1078 else |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1079 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1080 int rowlen = font->max_char_or_byte2 - font->min_char_or_byte2 + 1; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1081 int row, within; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1082 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1083 /* Decode char into row number (byte 1) and code within row (byte 2). */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1084 row = c >> 8; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1085 within = c & 0177; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1086 if (!(within >= font->min_char_or_byte2 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1087 && within <= font->max_char_or_byte2 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1088 && row >= font->min_byte1 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1089 && row <= font->max_byte1)) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1090 { |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1091 /* If char is out of range, try the font's default char instead. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1092 c = font->default_char; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1093 row = c >> (INTBITS - 8); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1094 within = c & 0177; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1095 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1096 if (!(within >= font->min_char_or_byte2 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1097 && within <= font->max_char_or_byte2 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1098 && row >= font->min_byte1 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1099 && row <= font->max_byte1)) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1100 /* Still out of range means this char does not overlap. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1101 return 0; |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1102 else |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1103 /* We found the info for this char. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1104 s = (font->per_char + (within - font->min_char_or_byte2) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1105 + row * rowlen); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1106 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1107 |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1108 return (s && s->rbearing >= s->width); |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1109 } |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1110 #endif /* 0 */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1111 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1112 /* 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
|
1113 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1114 /* We use the select system call to do the waiting, so we have to make sure |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3585
diff
changeset
|
1115 it's available. If it isn't, we just won't do visual bells. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1116 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1117 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1118 /* Subtract the `struct timeval' values X and Y, |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1119 storing the result in RESULT. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1120 Return 1 if the difference is negative, otherwise 0. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1121 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1122 static int |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1123 timeval_subtract (result, x, y) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1124 struct timeval *result, x, y; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1125 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1126 /* Perform the carry for the later subtraction by updating y. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1127 This is safer because on some systems |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1128 the tv_sec member is unsigned. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1129 if (x.tv_usec < y.tv_usec) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1130 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1131 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
|
1132 y.tv_usec -= 1000000 * nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1133 y.tv_sec += nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1134 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1135 if (x.tv_usec - y.tv_usec > 1000000) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1136 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1137 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
|
1138 y.tv_usec += 1000000 * nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1139 y.tv_sec -= nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1140 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1141 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1142 /* Compute the time remaining to wait. tv_usec is certainly positive. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1143 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
|
1144 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
|
1145 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1146 /* Return indication of whether the result should be considered negative. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1147 return x.tv_sec < y.tv_sec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1148 } |
286 | 1149 |
771 | 1150 XTflash (f) |
1151 struct frame *f; | |
286 | 1152 { |
1153 BLOCK_INPUT; | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1154 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1155 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1156 GC gc; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1157 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1158 /* Create a GC that will use the GXxor function to flip foreground pixels |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1159 into background pixels. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1160 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1161 XGCValues values; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1162 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1163 values.function = GXxor; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1164 values.foreground = (f->display.x->foreground_pixel |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1165 ^ f->display.x->background_pixel); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1166 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1167 gc = XCreateGC (x_current_display, FRAME_X_WINDOW (f), |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1168 GCFunction | GCForeground, &values); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1169 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1170 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1171 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1172 int width = PIXEL_WIDTH (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1173 int height = PIXEL_HEIGHT (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1174 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1175 XFillRectangle (x_current_display, FRAME_X_WINDOW (f), gc, |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1176 width/4, height/4, width/2, height/2); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1177 XFlush (x_current_display); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1178 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1179 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1180 struct timeval wakeup, now; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1181 |
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
1182 EMACS_GET_TIME (wakeup); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1183 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1184 /* 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
|
1185 wakeup.tv_usec += 150000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1186 wakeup.tv_sec += (wakeup.tv_usec / 1000000); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1187 wakeup.tv_usec %= 1000000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1188 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1189 /* Keep waiting until past the time wakeup. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1190 while (1) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1191 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1192 struct timeval timeout; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1193 |
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
1194 EMACS_GET_TIME (timeout); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1195 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1196 /* In effect, timeout = wakeup - timeout. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1197 Break if result would be negative. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1198 if (timeval_subtract (&timeout, wakeup, timeout)) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1199 break; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1200 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1201 /* Try to wait that long--but we might wake up sooner. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1202 select (0, 0, 0, 0, &timeout); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1203 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1204 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1205 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1206 XFillRectangle (x_current_display, FRAME_X_WINDOW (f), gc, |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1207 width/4, height/4, width/2, height/2); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1208 XFreeGC (x_current_display, gc); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1209 XFlush (x_current_display); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1210 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1211 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1212 |
286 | 1213 UNBLOCK_INPUT; |
1214 } | |
1215 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1216 #endif |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1217 |
286 | 1218 |
1219 /* Make audible bell. */ | |
1220 | |
1221 #ifdef HAVE_X11 | |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
1222 #define XRINGBELL XBell (x_current_display, 0) |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1223 #else /* ! defined (HAVE_X11) */ |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
1224 #define XRINGBELL XFeep (0); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1225 #endif /* ! defined (HAVE_X11) */ |
286 | 1226 |
1227 XTring_bell () | |
1228 { | |
3243
48d20a0b229a
(XTring_bell): Do nothing if x_current_connection is 0.
Richard M. Stallman <rms@gnu.org>
parents:
3218
diff
changeset
|
1229 if (x_current_display == 0) |
48d20a0b229a
(XTring_bell): Do nothing if x_current_connection is 0.
Richard M. Stallman <rms@gnu.org>
parents:
3218
diff
changeset
|
1230 return; |
48d20a0b229a
(XTring_bell): Do nothing if x_current_connection is 0.
Richard M. Stallman <rms@gnu.org>
parents:
3218
diff
changeset
|
1231 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1232 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) |
286 | 1233 if (visible_bell) |
771 | 1234 XTflash (selected_frame); |
286 | 1235 else |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
1236 #endif |
286 | 1237 { |
1238 BLOCK_INPUT; | |
1239 XRINGBELL; | |
1240 XFlushQueue (); | |
1241 UNBLOCK_INPUT; | |
1242 } | |
1243 } | |
1244 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1245 /* Insert and delete character. |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1246 These are not supposed to be used because we are supposed to turn |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1247 off the feature of using them. */ |
286 | 1248 |
1249 static | |
1250 XTinsert_glyphs (start, len) | |
1251 register char *start; | |
1252 register int len; | |
1253 { | |
1254 abort (); | |
1255 } | |
1256 | |
1257 static | |
1258 XTdelete_glyphs (n) | |
1259 register int n; | |
1260 { | |
1261 abort (); | |
1262 } | |
1263 | |
1264 /* Specify how many text lines, from the top of the window, | |
1265 should be affected by insert-lines and delete-lines operations. | |
1266 This, and those operations, are used only within an update | |
1267 that is bounded by calls to XTupdate_begin and XTupdate_end. */ | |
1268 | |
1269 static | |
1270 XTset_terminal_window (n) | |
1271 register int n; | |
1272 { | |
771 | 1273 if (updating_frame == 0) |
286 | 1274 abort (); |
1275 | |
771 | 1276 if ((n <= 0) || (n > updating_frame->height)) |
1277 flexlines = updating_frame->height; | |
286 | 1278 else |
1279 flexlines = n; | |
1280 } | |
1281 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1282 /* Perform an insert-lines operation. |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1283 Insert N lines at a vertical position curs_y. */ |
286 | 1284 |
1285 static void | |
1286 stufflines (n) | |
1287 register int n; | |
1288 { | |
1289 register int topregion, bottomregion; | |
1290 register int length, newtop, mask; | |
771 | 1291 register struct frame *f = updating_frame; |
1292 int intborder = f->display.x->internal_border_width; | |
286 | 1293 |
1294 if (curs_y >= flexlines) | |
1295 return; | |
1296 | |
1297 topregion = curs_y; | |
1298 bottomregion = flexlines - (n + 1); | |
1299 newtop = topregion + n; | |
1300 length = (bottomregion - topregion) + 1; | |
1301 | |
1302 #ifndef HAVE_X11 | |
1303 dumpqueue (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1304 #endif /* HAVE_X11 */ |
286 | 1305 |
1306 if ((length > 0) && (newtop <= flexlines)) | |
1307 { | |
1308 #ifdef HAVE_X11 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1309 XCopyArea (x_current_display, FRAME_X_WINDOW (f), |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1310 FRAME_X_WINDOW (f), f->display.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
|
1311 intborder, CHAR_TO_PIXEL_ROW (f, topregion), |
771 | 1312 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1313 length * f->display.x->line_height, intborder, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1314 CHAR_TO_PIXEL_ROW (f, newtop)); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1315 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1316 XMoveArea (FRAME_X_WINDOW (f), |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1317 intborder, CHAR_TO_PIXEL_ROW (f, topregion), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1318 intborder, CHAR_TO_PIXEL_ROW (f, newtop), |
771 | 1319 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1320 length * f->display.x->line_height); |
286 | 1321 /* Now we must process any ExposeRegion events that occur |
1322 if the area being copied from is obscured. | |
1323 We can't let it wait because further i/d operations | |
1324 may want to copy this area to another area. */ | |
1325 x_read_exposes (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1326 #endif /* ! defined (HAVE_X11) */ |
286 | 1327 } |
1328 | |
1329 newtop = min (newtop, (flexlines - 1)); | |
1330 length = newtop - topregion; | |
1331 if (length > 0) | |
1332 { | |
1333 #ifdef HAVE_X11 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1334 XClearArea (x_current_display, FRAME_X_WINDOW (f), intborder, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1335 CHAR_TO_PIXEL_ROW (f, topregion), |
771 | 1336 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1337 n * f->display.x->line_height, False); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1338 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1339 XPixSet (FRAME_X_WINDOW (f), |
286 | 1340 intborder, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1341 CHAR_TO_PIXEL_ROW (f, topregion), |
771 | 1342 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1343 n * f->display.x->line_height, |
771 | 1344 f->display.x->background_pixel); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1345 #endif /* ! defined (HAVE_X11) */ |
286 | 1346 } |
1347 } | |
1348 | |
1349 /* Perform a delete-lines operation, deleting N lines | |
1350 at a vertical position curs_y. */ | |
1351 | |
1352 static void | |
1353 scraplines (n) | |
1354 register int n; | |
1355 { | |
1356 int mask; | |
771 | 1357 register struct frame *f = updating_frame; |
1358 int intborder = f->display.x->internal_border_width; | |
286 | 1359 |
1360 if (curs_y >= flexlines) | |
1361 return; | |
1362 | |
1363 #ifndef HAVE_X11 | |
1364 dumpqueue (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1365 #endif /* HAVE_X11 */ |
286 | 1366 |
1367 if ((curs_y + n) >= flexlines) | |
1368 { | |
1369 if (flexlines >= (curs_y + 1)) | |
1370 { | |
1371 #ifdef HAVE_X11 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1372 XClearArea (x_current_display, FRAME_X_WINDOW (f), intborder, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1373 CHAR_TO_PIXEL_ROW (f, curs_y), |
771 | 1374 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1375 (flexlines - curs_y) * f->display.x->line_height, False); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1376 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1377 XPixSet (FRAME_X_WINDOW (f), |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1378 intborder, CHAR_TO_PIXEL_ROW (f, curs_y), |
771 | 1379 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1380 (flexlines - curs_y) * f->display.x->line_height, |
771 | 1381 f->display.x->background_pixel); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1382 #endif /* ! defined (HAVE_X11) */ |
286 | 1383 } |
1384 } | |
1385 else | |
1386 { | |
1387 #ifdef HAVE_X11 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1388 XCopyArea (x_current_display, FRAME_X_WINDOW (f), |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1389 FRAME_X_WINDOW (f), f->display.x->normal_gc, |
286 | 1390 intborder, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1391 CHAR_TO_PIXEL_ROW (f, curs_y + n), |
771 | 1392 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1393 (flexlines - (curs_y + n)) * f->display.x->line_height, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1394 intborder, CHAR_TO_PIXEL_ROW (f, curs_y)); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1395 XClearArea (x_current_display, FRAME_X_WINDOW (f), |
286 | 1396 intborder, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1397 CHAR_TO_PIXEL_ROW (f, flexlines - n), |
771 | 1398 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1399 n * f->display.x->line_height, False); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1400 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1401 XMoveArea (FRAME_X_WINDOW (f), |
286 | 1402 intborder, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1403 CHAR_TO_PIXEL_ROW (f, curs_y + n), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1404 intborder, CHAR_TO_PIXEL_ROW (f, curs_y), |
771 | 1405 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1406 (flexlines - (curs_y + n)) * f->display.x->line_height); |
286 | 1407 /* Now we must process any ExposeRegion events that occur |
1408 if the area being copied from is obscured. | |
1409 We can't let it wait because further i/d operations | |
1410 may want to copy this area to another area. */ | |
1411 x_read_exposes (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1412 XPixSet (FRAME_X_WINDOW (f), intborder, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1413 CHAR_TO_PIXEL_ROW (f, flexlines - n), |
771 | 1414 f->width * FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1415 n * f->display.x->line_height, f->display.x->background_pixel); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1416 #endif /* ! defined (HAVE_X11) */ |
286 | 1417 } |
1418 } | |
1419 | |
1420 /* Perform an insert-lines or delete-lines operation, | |
1421 inserting N lines or deleting -N lines at vertical position VPOS. */ | |
1422 | |
1423 XTins_del_lines (vpos, n) | |
1424 int vpos, n; | |
1425 { | |
771 | 1426 if (updating_frame == 0) |
286 | 1427 abort (); |
1428 | |
429 | 1429 /* Hide the cursor. */ |
771 | 1430 x_display_cursor (updating_frame, 0); |
286 | 1431 |
1432 XTcursor_to (vpos, 0); | |
1433 | |
1434 BLOCK_INPUT; | |
1435 if (n >= 0) | |
1436 stufflines (n); | |
1437 else | |
1438 scraplines (-n); | |
1439 XFlushQueue (); | |
1440 UNBLOCK_INPUT; | |
1441 } | |
1442 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1443 /* Support routines for exposure events. */ |
286 | 1444 static void clear_cursor (); |
1445 | |
771 | 1446 /* Output into a rectangle of an X-window (for frame F) |
1447 the characters in f->phys_lines that overlap that rectangle. | |
286 | 1448 TOP and LEFT are the position of the upper left corner of the rectangle. |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
1449 ROWS and COLS are the size of the rectangle. |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
1450 Call this function with input blocked. */ |
286 | 1451 |
1452 static void | |
771 | 1453 dumprectangle (f, left, top, cols, rows) |
1454 struct frame *f; | |
286 | 1455 register int left, top, cols, rows; |
1456 { | |
771 | 1457 register struct frame_glyphs *active_frame = FRAME_CURRENT_GLYPHS (f); |
286 | 1458 int cursor_cleared = 0; |
1459 int bottom, right; | |
1460 register int y; | |
1461 | |
771 | 1462 if (FRAME_GARBAGED_P (f)) |
286 | 1463 return; |
1464 | |
1465 /* Express rectangle as four edges, instead of position-and-size. */ | |
1466 bottom = top + rows; | |
1467 right = left + cols; | |
1468 | |
1469 #ifndef HAVE_X11 /* Window manger does this for X11. */ | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1470 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1471 int intborder = f->display.x->internal_border_width; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1472 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1473 /* If the rectangle includes any of the internal border area, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1474 redisplay the border emphasis. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1475 if (top < intborder || left < intborder |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1476 || bottom > intborder + f->height * f->display.x->line_height |
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1477 || right > intborder + f->width * f->display.x->line_height) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1478 dumpborder (f, 0); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1479 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
1480 #endif /* not HAVE_X11 Window manger does this for X11. */ |
286 | 1481 |
1482 /* Convert rectangle edges in pixels to edges in chars. | |
1483 Round down for left and top, up for right and bottom. */ | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1484 top = PIXEL_TO_CHAR_ROW (f, top); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1485 left = PIXEL_TO_CHAR_COL (f, left); |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1486 bottom += (f->display.x->line_height - 1); |
771 | 1487 right += (FONT_WIDTH (f->display.x->font) - 1); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1488 bottom = PIXEL_TO_CHAR_ROW (f, bottom); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1489 right = PIXEL_TO_CHAR_COL (f, right); |
286 | 1490 |
1491 /* Clip the rectangle to what can be visible. */ | |
1492 if (left < 0) | |
1493 left = 0; | |
1494 if (top < 0) | |
1495 top = 0; | |
771 | 1496 if (right > f->width) |
1497 right = f->width; | |
1498 if (bottom > f->height) | |
1499 bottom = f->height; | |
286 | 1500 |
1501 /* Get size in chars of the rectangle. */ | |
1502 cols = right - left; | |
1503 rows = bottom - top; | |
1504 | |
1505 /* If rectangle has zero area, return. */ | |
1506 if (rows <= 0) return; | |
1507 if (cols <= 0) return; | |
1508 | |
1509 /* Turn off the cursor if it is in the rectangle. | |
1510 We will turn it back on afterward. */ | |
771 | 1511 if ((f->phys_cursor_x >= left) && (f->phys_cursor_x < right) |
1512 && (f->phys_cursor_y >= top) && (f->phys_cursor_y < bottom)) | |
286 | 1513 { |
771 | 1514 clear_cursor (f); |
286 | 1515 cursor_cleared = 1; |
1516 } | |
1517 | |
1518 /* Display the text in the rectangle, one text line at a time. */ | |
1519 | |
1520 for (y = top; y < bottom; y++) | |
1521 { | |
771 | 1522 GLYPH *line = &active_frame->glyphs[y][left]; |
1523 | |
1524 if (! active_frame->enable[y] || left > active_frame->used[y]) | |
286 | 1525 continue; |
1526 | |
771 | 1527 dumpglyphs (f, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1528 CHAR_TO_PIXEL_COL (f, left), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1529 CHAR_TO_PIXEL_ROW (f, y), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
1530 line, min (cols, active_frame->used[y] - left), |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
1531 active_frame->highlight[y], 0); |
286 | 1532 } |
1533 | |
1534 /* Turn the cursor on if we turned it off. */ | |
1535 | |
1536 if (cursor_cleared) | |
771 | 1537 x_display_cursor (f, 1); |
286 | 1538 } |
1539 | |
1540 #ifndef HAVE_X11 | |
1541 /* Process all queued ExposeRegion events. */ | |
1542 | |
1543 static void | |
1544 dumpqueue () | |
1545 { | |
1546 register int i; | |
1547 XExposeRegionEvent r; | |
1548 | |
1549 while (dequeue_event (&r, &x_expose_queue)) | |
1550 { | |
771 | 1551 struct frame *f = x_window_to_frame (r.window); |
1552 if (f->display.x->icon_desc == r.window) | |
1553 refreshicon (f); | |
286 | 1554 else |
771 | 1555 dumprectangle (f, r.x, r.y, r.width, r.height); |
286 | 1556 } |
1557 XFlushQueue (); | |
1558 } | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1559 #endif /* HAVE_X11 */ |
286 | 1560 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1561 /* Process all expose events that are pending, for X10. |
771 | 1562 Redraws the cursor if necessary on any frame that |
1563 is not in the process of being updated with update_frame. */ | |
286 | 1564 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1565 #ifndef HAVE_X11 |
286 | 1566 static void |
1567 x_do_pending_expose () | |
1568 { | |
1569 int mask; | |
771 | 1570 struct frame *f; |
1571 Lisp_Object tail, frame; | |
286 | 1572 |
1573 if (expose_all_windows) | |
1574 { | |
1575 expose_all_windows = 0; | |
771 | 1576 for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr) |
286 | 1577 { |
1578 register int temp_width, temp_height; | |
1579 int intborder; | |
1580 | |
771 | 1581 frame = XCONS (tail)->car; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
1582 if (XGCTYPE (frame) != Lisp_Frame) |
286 | 1583 continue; |
771 | 1584 f = XFRAME (frame); |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
1585 if (! FRAME_X_P (f)) |
286 | 1586 continue; |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
1587 if (!f->async_visible) |
286 | 1588 continue; |
771 | 1589 if (!f->display.x->needs_exposure) |
286 | 1590 continue; |
1591 | |
771 | 1592 intborder = f->display.x->internal_border_width; |
1593 | |
1594 clear_cursor (f); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1595 XGetWindowInfo (FRAME_X_WINDOW (f), &windowinfo); |
286 | 1596 temp_width = ((windowinfo.width - 2 * intborder |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
1597 - f->display.x->v_scroll_bar_width) |
771 | 1598 / FONT_WIDTH (f->display.x->font)); |
286 | 1599 temp_height = ((windowinfo.height- 2 * intborder |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
1600 - f->display.x->h_scroll_bar_height) |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1601 / f->display.x->line_height); |
771 | 1602 if (temp_width != f->width || temp_height != f->height) |
286 | 1603 { |
771 | 1604 change_frame_size (f, max (1, temp_height), |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
1605 max (1, temp_width), 0, 1); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
1606 x_resize_scroll_bars (f); |
286 | 1607 } |
771 | 1608 f->display.x->left_pos = windowinfo.x; |
1609 f->display.x->top_pos = windowinfo.y; | |
1610 dumprectangle (f, 0, 0, PIXEL_WIDTH (f), PIXEL_HEIGHT (f)); | |
286 | 1611 #if 0 |
771 | 1612 dumpborder (f, 0); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1613 #endif /* ! 0 */ |
771 | 1614 f->display.x->needs_exposure = 0; |
1615 if (updating_frame != f) | |
1616 x_display_cursor (f, 1); | |
286 | 1617 XFlushQueue (); |
1618 } | |
1619 } | |
1620 else | |
1621 /* Handle any individual-rectangle expose events queued | |
1622 for various windows. */ | |
1623 #ifdef HAVE_X11 | |
1624 ; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1625 #else /* ! defined (HAVE_X11) */ |
286 | 1626 dumpqueue (); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1627 #endif /* ! defined (HAVE_X11) */ |
286 | 1628 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1629 #endif |
286 | 1630 |
1631 #ifdef HAVE_X11 | |
1632 static void | |
771 | 1633 frame_highlight (frame) |
1634 struct frame *frame; | |
286 | 1635 { |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
1636 /* 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
|
1637 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
|
1638 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
|
1639 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
|
1640 BLOCK_INPUT; |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
1641 XSetWindowBorder (x_current_display, FRAME_X_WINDOW (frame), |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
1642 frame->display.x->border_pixel); |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
1643 UNBLOCK_INPUT; |
771 | 1644 x_display_cursor (frame, 1); |
286 | 1645 } |
1646 | |
1647 static void | |
771 | 1648 frame_unhighlight (frame) |
1649 struct frame *frame; | |
286 | 1650 { |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
1651 /* 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
|
1652 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
|
1653 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
|
1654 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
|
1655 BLOCK_INPUT; |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
1656 XSetWindowBorderPixmap (x_current_display, FRAME_X_WINDOW (frame), |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
1657 frame->display.x->border_tile); |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
1658 UNBLOCK_INPUT; |
771 | 1659 x_display_cursor (frame, 1); |
286 | 1660 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1661 #else /* ! defined (HAVE_X11) */ |
771 | 1662 /* Dump the border-emphasis of frame F. |
1663 If F is selected, this is a lining of the same color as the border, | |
286 | 1664 just within the border, occupying a portion of the internal border. |
771 | 1665 If F is not selected, it is background in the same place. |
286 | 1666 If ALWAYS is 0, don't bother explicitly drawing if it's background. |
1667 | |
771 | 1668 ALWAYS = 1 is used when a frame becomes selected or deselected. |
286 | 1669 In that case, we also turn the cursor off and on again |
1670 so it will appear in the proper shape (solid if selected; else hollow.) */ | |
1671 | |
1672 static void | |
771 | 1673 dumpborder (f, always) |
1674 struct frame *f; | |
286 | 1675 int always; |
1676 { | |
771 | 1677 int thickness = f->display.x->internal_border_width / 2; |
1678 int width = PIXEL_WIDTH (f); | |
1679 int height = PIXEL_HEIGHT (f); | |
286 | 1680 int pixel; |
1681 | |
771 | 1682 if (f != selected_frame) |
286 | 1683 { |
1684 if (!always) | |
1685 return; | |
1686 | |
771 | 1687 pixel = f->display.x->background_pixel; |
286 | 1688 } |
1689 else | |
1690 { | |
771 | 1691 pixel = f->display.x->border_pixel; |
286 | 1692 } |
1693 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1694 XPixSet (FRAME_X_WINDOW (f), 0, 0, width, thickness, pixel); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1695 XPixSet (FRAME_X_WINDOW (f), 0, 0, thickness, height, pixel); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1696 XPixSet (FRAME_X_WINDOW (f), 0, height - thickness, width, |
286 | 1697 thickness, pixel); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1698 XPixSet (FRAME_X_WINDOW (f), width - thickness, 0, thickness, |
286 | 1699 height, pixel); |
1700 | |
1701 if (always) | |
771 | 1702 x_display_cursor (f, 1); |
286 | 1703 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
1704 #endif /* ! defined (HAVE_X11) */ |
286 | 1705 |
771 | 1706 static void XTframe_rehighlight (); |
1707 | |
1708 /* The focus has changed. Update the frames as necessary to reflect | |
1709 the new situation. Note that we can't change the selected frame | |
286 | 1710 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
|
1711 Each event gets marked with the frame in which it occurred, so the |
369 | 1712 lisp code can tell when the switch took place by examining the events. */ |
1713 | |
1714 static void | |
771 | 1715 x_new_focus_frame (frame) |
1716 struct frame *frame; | |
286 | 1717 { |
771 | 1718 struct frame *old_focus = x_focus_frame; |
286 | 1719 int events_enqueued = 0; |
1720 | |
771 | 1721 if (frame != x_focus_frame) |
286 | 1722 { |
369 | 1723 /* Set this before calling other routines, so that they see |
771 | 1724 the correct value of x_focus_frame. */ |
1725 x_focus_frame = frame; | |
369 | 1726 |
1727 if (old_focus && old_focus->auto_lower) | |
771 | 1728 x_lower_frame (old_focus); |
286 | 1729 |
1730 #if 0 | |
771 | 1731 selected_frame = frame; |
1732 XSET (XWINDOW (selected_frame->selected_window)->frame, | |
1733 Lisp_Frame, selected_frame); | |
1734 Fselect_window (selected_frame->selected_window); | |
1735 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
|
1736 #endif /* ! 0 */ |
286 | 1737 |
771 | 1738 if (x_focus_frame && x_focus_frame->auto_raise) |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
1739 pending_autoraise_frame = x_focus_frame; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
1740 else |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
1741 pending_autoraise_frame = 0; |
369 | 1742 } |
1743 | |
771 | 1744 XTframe_rehighlight (); |
369 | 1745 } |
1746 | |
1747 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1748 /* 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
|
1749 another frame (this happens when a frame uses a surrogate |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1750 minibuffer frame). Shift the highlight as appropriate. */ |
369 | 1751 static void |
771 | 1752 XTframe_rehighlight () |
369 | 1753 { |
771 | 1754 struct frame *old_highlight = x_highlight_frame; |
1755 | |
1756 if (x_focus_frame) | |
286 | 1757 { |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1758 x_highlight_frame = |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
1759 ((XGCTYPE (FRAME_FOCUS_FRAME (x_focus_frame)) == Lisp_Frame) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1760 ? XFRAME (FRAME_FOCUS_FRAME (x_focus_frame)) |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1761 : x_focus_frame); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1762 if (! FRAME_LIVE_P (x_highlight_frame)) |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1763 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1764 FRAME_FOCUS_FRAME (x_focus_frame) = Qnil; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1765 x_highlight_frame = x_focus_frame; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
1766 } |
286 | 1767 } |
369 | 1768 else |
771 | 1769 x_highlight_frame = 0; |
1770 | |
1771 if (x_highlight_frame != old_highlight) | |
369 | 1772 { |
1773 if (old_highlight) | |
771 | 1774 frame_unhighlight (old_highlight); |
1775 if (x_highlight_frame) | |
1776 frame_highlight (x_highlight_frame); | |
369 | 1777 } |
286 | 1778 } |
1779 | |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1780 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */ |
286 | 1781 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1782 /* Which modifier keys are on which modifier bits? |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1783 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1784 With each keystroke, X returns eight bits indicating which modifier |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1785 keys were held down when the key was pressed. The interpretation |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1786 of the top five modifier bits depends on what keys are attached |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1787 to them. If the Meta_L and Meta_R keysyms are on mod5, then mod5 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1788 is the meta bit. |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1789 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1790 x_meta_mod_mask is a mask containing the bits used for the meta key. |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1791 It may have more than one bit set, if more than one modifier bit |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1792 has meta keys on it. Basically, if EVENT is a KeyPress event, |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1793 the meta key is pressed if (EVENT.state & x_meta_mod_mask) != 0. |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1794 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1795 x_shift_lock_mask is LockMask if the XK_Shift_Lock keysym is on the |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1796 lock modifier bit, or zero otherwise. Non-alphabetic keys should |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1797 only be affected by the lock modifier bit if XK_Shift_Lock is in |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1798 use; XK_Caps_Lock should only affect alphabetic keys. With this |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1799 arrangement, the lock modifier should shift the character if |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1800 (EVENT.state & x_shift_lock_mask) != 0. */ |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1801 static int x_meta_mod_mask, x_shift_lock_mask; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1802 |
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
|
1803 /* These are like x_meta_mod_mask, but for different modifiers. */ |
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
|
1804 static int x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask; |
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
|
1805 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1806 /* 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
|
1807 static void |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1808 x_find_modifier_meanings () |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1809 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1810 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
|
1811 KeySym *syms; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1812 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
|
1813 XModifierKeymap *mods; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1814 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1815 x_meta_mod_mask = 0; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1816 x_shift_lock_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
|
1817 x_alt_mod_mask = 0; |
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
|
1818 x_super_mod_mask = 0; |
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
|
1819 x_hyper_mod_mask = 0; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1820 |
2127
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
1821 #ifdef HAVE_X11R4 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1822 XDisplayKeycodes (x_current_display, &min_code, &max_code); |
2127
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
1823 #else |
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
1824 min_code = x_current_display->min_keycode; |
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
1825 max_code = x_current_display->max_keycode; |
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
1826 #endif |
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
1827 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1828 syms = XGetKeyboardMapping (x_current_display, |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1829 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
|
1830 &syms_per_code); |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1831 mods = XGetModifierMapping (x_current_display); |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1832 |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1833 /* Scan the modifier table to see which modifier bits the Meta and |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1834 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
|
1835 { |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1836 int row, col; /* The row and column in the modifier table. */ |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1837 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1838 for (row = 3; row < 8; row++) |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1839 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
|
1840 { |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1841 KeyCode code = |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1842 mods->modifiermap[(row * 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
|
1843 |
6560
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
1844 /* Zeroes are used for filler. Skip them. */ |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
1845 if (code == 0) |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
1846 continue; |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
1847 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1848 /* 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
|
1849 { |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1850 int code_col; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1851 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1852 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
|
1853 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1854 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
|
1855 |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1856 switch (sym) |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1857 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1858 case XK_Meta_L: |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1859 case XK_Meta_R: |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1860 x_meta_mod_mask |= (1 << row); |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1861 break; |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1862 |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1863 case XK_Alt_L: |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1864 case XK_Alt_R: |
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
|
1865 x_alt_mod_mask |= (1 << row); |
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
|
1866 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
|
1867 |
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
|
1868 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
|
1869 case XK_Hyper_R: |
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
|
1870 x_hyper_mod_mask |= (1 << row); |
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
|
1871 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
|
1872 |
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
|
1873 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
|
1874 case XK_Super_R: |
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
|
1875 x_super_mod_mask |= (1 << row); |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1876 break; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1877 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1878 case XK_Shift_Lock: |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1879 /* Ignore this if it's not on the lock modifier. */ |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1880 if ((1 << row) == LockMask) |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1881 x_shift_lock_mask = LockMask; |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1882 break; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1883 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1884 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1885 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1886 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1887 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1888 |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1889 /* If we couldn't find any meta keys, accept any alt keys as meta keys. */ |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1890 if (! x_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
|
1891 { |
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
|
1892 x_meta_mod_mask = x_alt_mod_mask; |
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
|
1893 x_alt_mod_mask = 0; |
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
|
1894 } |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1895 |
2923
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
1896 /* 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
|
1897 make them just meta, not alt. */ |
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
1898 if (x_alt_mod_mask & x_meta_mod_mask) |
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
1899 { |
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
1900 x_alt_mod_mask &= ~x_meta_mod_mask; |
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
1901 } |
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
1902 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1903 XFree ((char *) syms); |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
1904 XFreeModifiermap (mods); |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1905 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
1906 |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1907 /* 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
|
1908 Emacs uses. */ |
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
1909 static unsigned int |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1910 x_x_to_emacs_modifiers (state) |
286 | 1911 unsigned int state; |
1912 { | |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1913 return ( ((state & (ShiftMask | x_shift_lock_mask)) ? shift_modifier : 0) |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
1914 | ((state & ControlMask) ? ctrl_modifier : 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
|
1915 | ((state & x_meta_mod_mask) ? meta_modifier : 0) |
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
|
1916 | ((state & x_alt_mod_mask) ? alt_modifier : 0) |
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
|
1917 | ((state & x_super_mod_mask) ? super_modifier : 0) |
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
|
1918 | ((state & x_hyper_mod_mask) ? hyper_modifier : 0)); |
286 | 1919 } |
1920 | |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1921 static unsigned int |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1922 x_emacs_to_x_modifiers (state) |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1923 unsigned int state; |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1924 { |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1925 return ( ((state & alt_modifier) ? x_alt_mod_mask : 0) |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1926 | ((state & super_modifier) ? x_super_mod_mask : 0) |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1927 | ((state & hyper_modifier) ? x_hyper_mod_mask : 0) |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1928 | ((state & shift_modifier) ? ShiftMask : 0) |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1929 | ((state & ctrl_modifier) ? ControlMask : 0) |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1930 | ((state & meta_modifier) ? x_meta_mod_mask : 0)); |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
1931 } |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1932 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1933 /* Mouse clicks and mouse movement. Rah. */ |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1934 #ifdef HAVE_X11 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1935 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1936 /* Given a pixel position (PIX_X, PIX_Y) on the frame F, return |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1937 glyph co-ordinates in (*X, *Y). Set *BOUNDS to the rectangle |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1938 that the glyph at X, Y occupies, if BOUNDS != 0. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1939 If NOCLIP is nonzero, do not force the value into range. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1940 |
6023
67aa546e4ff1
(construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
6022
diff
changeset
|
1941 void |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1942 pixel_to_glyph_coords (f, pix_x, pix_y, x, y, bounds, noclip) |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1943 FRAME_PTR f; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1944 register int pix_x, pix_y; |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1945 register int *x, *y; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1946 XRectangle *bounds; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1947 int noclip; |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1948 { |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1949 /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to round down |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1950 even for negative values. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1951 if (pix_x < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1952 pix_x -= FONT_WIDTH ((f)->display.x->font) - 1; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1953 if (pix_y < 0) |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1954 pix_y -= (f)->display.x->line_height - 1; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1955 |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1956 pix_x = PIXEL_TO_CHAR_COL (f, pix_x); |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1957 pix_y = PIXEL_TO_CHAR_ROW (f, pix_y); |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1958 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1959 if (bounds) |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1960 { |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1961 bounds->width = FONT_WIDTH (f->display.x->font); |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
1962 bounds->height = f->display.x->line_height; |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1963 bounds->x = CHAR_TO_PIXEL_COL (f, pix_x); |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1964 bounds->y = CHAR_TO_PIXEL_ROW (f, pix_y); |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1965 } |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1966 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1967 if (!noclip) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1968 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1969 if (pix_x < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1970 pix_x = 0; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1971 else if (pix_x > f->width) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1972 pix_x = f->width; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1973 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1974 if (pix_y < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1975 pix_y = 0; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1976 else if (pix_y > f->height) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1977 pix_y = f->height; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
1978 } |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1979 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1980 *x = pix_x; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1981 *y = pix_y; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1982 } |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
1983 |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1984 void |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1985 glyph_to_pixel_coords (f, x, y, pix_x, pix_y) |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1986 FRAME_PTR f; |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1987 register int x, y; |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1988 register int *pix_x, *pix_y; |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1989 { |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1990 *pix_x = CHAR_TO_PIXEL_COL (f, x); |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1991 *pix_y = CHAR_TO_PIXEL_ROW (f, y); |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1992 } |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
1993 |
286 | 1994 /* Prepare a mouse-event in *RESULT for placement in the input queue. |
1995 | |
1996 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
|
1997 the mouse. */ |
286 | 1998 |
1999 static Lisp_Object | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2000 construct_mouse_click (result, event, f) |
286 | 2001 struct input_event *result; |
2002 XButtonEvent *event; | |
771 | 2003 struct frame *f; |
286 | 2004 { |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2005 /* Make the event type no_event; we'll change that when we decide |
286 | 2006 otherwise. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2007 result->kind = mouse_click; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2008 result->code = event->button - Button1; |
708 | 2009 result->timestamp = event->time; |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
2010 result->modifiers = (x_x_to_emacs_modifiers (event->state) |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
2011 | (event->type == ButtonRelease |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
2012 ? up_modifier |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
2013 : down_modifier)); |
286 | 2014 |
2015 /* Notice if the mouse is still grabbed. */ | |
2016 if (event->type == ButtonPress) | |
2017 { | |
2018 if (! x_mouse_grabbed) | |
2019 Vmouse_depressed = Qt; | |
429 | 2020 x_mouse_grabbed |= (1 << event->button); |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2021 last_mouse_frame = f; |
286 | 2022 } |
2023 else if (event->type == ButtonRelease) | |
2024 { | |
429 | 2025 x_mouse_grabbed &= ~(1 << event->button); |
286 | 2026 if (!x_mouse_grabbed) |
2027 Vmouse_depressed = Qnil; | |
2028 } | |
2029 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2030 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2031 int row, column; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2032 |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
2033 #if 0 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2034 pixel_to_glyph_coords (f, event->x, event->y, &column, &row, NULL, 0); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2035 XFASTINT (result->x) = column; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2036 XFASTINT (result->y) = row; |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
2037 #endif |
6626
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2038 XSET (result->x, Lisp_Int, event->x); |
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2039 XSET (result->y, Lisp_Int, event->y); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2040 XSET (result->frame_or_window, Lisp_Frame, f); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2041 } |
286 | 2042 } |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2043 |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2044 /* Prepare a menu-event in *RESULT for placement in the input queue. */ |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2045 |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2046 static Lisp_Object |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2047 construct_menu_click (result, event, f) |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2048 struct input_event *result; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2049 XButtonEvent *event; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2050 struct frame *f; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2051 { |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2052 /* Make the event type no_event; we'll change that when we decide |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2053 otherwise. */ |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2054 result->kind = mouse_click; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2055 XSET (result->code, Lisp_Int, event->button - Button1); |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2056 result->timestamp = event->time; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2057 result->modifiers = (x_x_to_emacs_modifiers (event->state) |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2058 | (event->type == ButtonRelease |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2059 ? up_modifier |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2060 : down_modifier)); |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2061 |
6626
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2062 XSET (result->x, Lisp_Int, event->x); |
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2063 XSET (result->y, Lisp_Int, -1); |
6023
67aa546e4ff1
(construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
6022
diff
changeset
|
2064 XSET (result->frame_or_window, Lisp_Frame, f); |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
2065 } |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2066 |
429 | 2067 /* Function to report a mouse movement to the mainstream Emacs code. |
2068 The input handler calls this. | |
2069 | |
2070 We have received a mouse movement event, which is given in *event. | |
2071 If the mouse is over a different glyph than it was last time, tell | |
2072 the mainstream emacs code by setting mouse_moved. If not, ask for | |
2073 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
|
2074 |
429 | 2075 static void |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2076 note_mouse_movement (frame, event) |
771 | 2077 FRAME_PTR frame; |
429 | 2078 XMotionEvent *event; |
2079 | |
2080 { | |
732 | 2081 last_mouse_movement_time = event->time; |
2082 | |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2083 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
|
2084 { |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2085 mouse_moved = 1; |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2086 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
|
2087 |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2088 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
|
2089 |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2090 /* Ask for another mouse motion event. */ |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2091 { |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2092 int dummy; |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2093 |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2094 XQueryPointer (event->display, FRAME_X_WINDOW (frame), |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2095 (Window *) &dummy, (Window *) &dummy, |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2096 &dummy, &dummy, &dummy, &dummy, |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2097 (unsigned int *) &dummy); |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2098 } |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2099 } |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2100 |
429 | 2101 /* 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
|
2102 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
|
2103 || 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
|
2104 || 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
|
2105 || 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
|
2106 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2107 mouse_moved = 1; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2108 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
|
2109 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2110 note_mouse_highlight (frame, event->x, event->y); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2111 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2112 /* Ask for another mouse motion event. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2113 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2114 int dummy; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2115 |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2116 XQueryPointer (event->display, FRAME_X_WINDOW (frame), |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2117 (Window *) &dummy, (Window *) &dummy, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2118 &dummy, &dummy, &dummy, &dummy, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2119 (unsigned int *) &dummy); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2120 } |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2121 } |
429 | 2122 else |
2123 { | |
2124 /* It's on the same glyph. Call XQueryPointer so we'll get an | |
2125 event the next time the mouse moves and we can see if it's | |
2126 *still* on the same glyph. */ | |
2127 int dummy; | |
2128 | |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2129 XQueryPointer (event->display, FRAME_X_WINDOW (frame), |
429 | 2130 (Window *) &dummy, (Window *) &dummy, |
2131 &dummy, &dummy, &dummy, &dummy, | |
2132 (unsigned int *) &dummy); | |
2133 } | |
2134 } | |
2135 | |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2136 /* This is used for debugging, to turn off note_mouse_highlight. */ |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2137 static int disable_mouse_highlight; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2138 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2139 /* Take proper action when the mouse has moved to position X, Y on frame F |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2140 as regards highlighting characters that have mouse-face properties. |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2141 Also dehighlighting chars where the mouse was before. |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2142 X and Y can be negative or out of range. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2143 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2144 static void |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2145 note_mouse_highlight (f, x, y) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2146 FRAME_PTR f; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2147 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2148 int row, column, portion; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2149 XRectangle new_glyph; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2150 Lisp_Object window; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2151 struct window *w; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2152 |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2153 if (disable_mouse_highlight) |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2154 return; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2155 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2156 mouse_face_mouse_x = x; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2157 mouse_face_mouse_y = y; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2158 mouse_face_mouse_frame = f; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2159 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2160 if (mouse_face_defer) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2161 return; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2162 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2163 if (gc_in_progress) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2164 { |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2165 mouse_face_deferred_gc = 1; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2166 return; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2167 } |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2168 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2169 /* Find out which glyph the mouse is on. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2170 pixel_to_glyph_coords (f, x, y, &column, &row, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2171 &new_glyph, x_mouse_grabbed); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2172 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2173 /* Which window is that in? */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2174 window = window_from_coordinates (f, column, row, &portion); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2175 w = XWINDOW (window); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2176 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2177 /* If we were displaying active text in another window, clear that. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2178 if (! EQ (window, mouse_face_window)) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2179 clear_mouse_face (); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2180 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
2181 /* Are we in a window whose display is up to date? |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
2182 And verify the buffer's text has not changed. */ |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2183 if (WINDOWP (window) && portion == 0 && row >= 0 && column >= 0 |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
2184 && row < FRAME_HEIGHT (f) && column < FRAME_WIDTH (f) |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
2185 && EQ (w->window_end_valid, w->buffer) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
2186 && w->last_modified == BUF_MODIFF (XBUFFER (w->buffer))) |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2187 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2188 int *ptr = FRAME_CURRENT_GLYPHS (f)->charstarts[row]; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2189 int i, pos; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2190 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2191 /* Find which buffer position the mouse corresponds to. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2192 for (i = column; i >= 0; i--) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2193 if (ptr[i] > 0) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2194 break; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2195 pos = ptr[i]; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2196 /* Is it outside the displayed active region (if any)? */ |
7282
2bc4929691e9
(show_mouse_face): Fix test for cursor in highlighted area.
Karl Heuer <kwzh@gnu.org>
parents:
7264
diff
changeset
|
2197 if (pos <= 0) |
2bc4929691e9
(show_mouse_face): Fix test for cursor in highlighted area.
Karl Heuer <kwzh@gnu.org>
parents:
7264
diff
changeset
|
2198 clear_mouse_face (); |
2bc4929691e9
(show_mouse_face): Fix test for cursor in highlighted area.
Karl Heuer <kwzh@gnu.org>
parents:
7264
diff
changeset
|
2199 else if (! (EQ (window, mouse_face_window) |
7283
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2200 && row >= mouse_face_beg_row |
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2201 && row <= mouse_face_end_row |
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2202 && (row > mouse_face_beg_row || column >= mouse_face_beg_col) |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2203 && (row < mouse_face_end_row || column < mouse_face_end_col |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2204 || mouse_face_past_end))) |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2205 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2206 Lisp_Object mouse_face, overlay, position; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2207 Lisp_Object *overlay_vec; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2208 int len, noverlays, ignor1; |
6649
1305248ee38a
(note_mouse_highlight): Reject out-of-range pos value
Richard M. Stallman <rms@gnu.org>
parents:
6644
diff
changeset
|
2209 struct buffer *obuf; |
6683
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2210 int obegv, ozv; |
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2211 |
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2212 /* If we get an out-of-range value, return now; avoid an error. */ |
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2213 if (pos > BUF_Z (XBUFFER (w->buffer))) |
6649
1305248ee38a
(note_mouse_highlight): Reject out-of-range pos value
Richard M. Stallman <rms@gnu.org>
parents:
6644
diff
changeset
|
2214 return; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2215 |
6626
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2216 /* Make the window's buffer temporarily current for |
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2217 overlays_at and compute_char_face. */ |
6649
1305248ee38a
(note_mouse_highlight): Reject out-of-range pos value
Richard M. Stallman <rms@gnu.org>
parents:
6644
diff
changeset
|
2218 obuf = current_buffer; |
6626
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2219 current_buffer = XBUFFER (w->buffer); |
6683
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2220 obegv = BEGV; |
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2221 ozv = ZV; |
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2222 BEGV = BEG; |
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2223 ZV = Z; |
6626
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2224 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2225 /* Yes. Clear the display of the old active region, if any. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2226 clear_mouse_face (); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2227 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2228 /* Is this char mouse-active? */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2229 XSET (position, Lisp_Int, pos); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2230 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2231 len = 10; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2232 overlay_vec = (Lisp_Object *) xmalloc (len * sizeof (Lisp_Object)); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2233 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2234 /* Put all the overlays we want in a vector in overlay_vec. |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2235 Store the length in len. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2236 noverlays = overlays_at (XINT (pos), 1, &overlay_vec, &len, &ignor1); |
6626
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2237 noverlays = sort_overlays (overlay_vec, noverlays, w); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2238 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2239 /* Find the highest priority overlay that has a mouse-face prop. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2240 overlay = Qnil; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2241 for (i = 0; i < noverlays; i++) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2242 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2243 mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2244 if (!NILP (mouse_face)) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2245 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2246 overlay = overlay_vec[i]; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2247 break; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2248 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2249 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2250 free (overlay_vec); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2251 /* If no overlay applies, get a text property. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2252 if (NILP (overlay)) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2253 mouse_face = Fget_text_property (position, Qmouse_face, w->buffer); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2254 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2255 /* Handle the overlay case. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2256 if (! NILP (overlay)) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2257 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2258 /* Find the range of text around this char that |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2259 should be active. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2260 Lisp_Object before, after; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2261 int ignore; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2262 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2263 before = Foverlay_start (overlay); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2264 after = Foverlay_end (overlay); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2265 /* Record this as the current active region. */ |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2266 fast_find_position (window, before, &mouse_face_beg_col, |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2267 &mouse_face_beg_row); |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2268 mouse_face_past_end |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2269 = !fast_find_position (window, after, &mouse_face_end_col, |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2270 &mouse_face_end_row); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2271 mouse_face_window = window; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2272 mouse_face_face_id = compute_char_face (f, w, pos, 0, 0, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2273 &ignore, pos + 1, 1); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2274 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2275 /* Display it as active. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2276 show_mouse_face (1); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2277 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2278 /* Handle the text property case. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2279 else if (! NILP (mouse_face)) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2280 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2281 /* Find the range of text around this char that |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2282 should be active. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2283 Lisp_Object before, after, beginning, end; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2284 int ignore; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2285 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2286 beginning = Fmarker_position (w->start); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2287 XSET (end, Lisp_Int, |
6626
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2288 (BUF_Z (XBUFFER (w->buffer)) |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2289 - XFASTINT (w->window_end_pos))); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2290 before |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2291 = Fprevious_single_property_change (make_number (pos + 1), |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2292 Qmouse_face, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2293 w->buffer, beginning); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2294 after |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2295 = Fnext_single_property_change (position, Qmouse_face, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2296 w->buffer, end); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2297 /* Record this as the current active region. */ |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2298 fast_find_position (window, before, &mouse_face_beg_col, |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2299 &mouse_face_beg_row); |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2300 mouse_face_past_end |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2301 = !fast_find_position (window, after, &mouse_face_end_col, |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2302 &mouse_face_end_row); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2303 mouse_face_window = window; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2304 mouse_face_face_id |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2305 = compute_char_face (f, w, pos, 0, 0, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2306 &ignore, pos + 1, 1); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2307 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2308 /* Display it as active. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2309 show_mouse_face (1); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2310 } |
6683
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2311 BEGV = obegv; |
af1629dfdb4c
(note_mouse_highlight): Temporarily widen the buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6660
diff
changeset
|
2312 ZV = ozv; |
6626
59c44532d2a0
(construct_menu_click, construct_mouse_click):
Richard M. Stallman <rms@gnu.org>
parents:
6616
diff
changeset
|
2313 current_buffer = obuf; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2314 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2315 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2316 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2317 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2318 /* Find the row and column of position POS in window WINDOW. |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2319 Store them in *COLUMNP and *ROWP. |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2320 This assumes display in WINDOW is up to date. |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2321 If POS is above start of WINDOW, return coords |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2322 of start of first screen line. |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2323 If POS is after end of WINDOW, return coords of end of last screen line. |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2324 |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2325 Value is 1 if POS is in range, 0 if it was off screen. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2326 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2327 static int |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2328 fast_find_position (window, pos, columnp, rowp) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2329 Lisp_Object window; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2330 int pos; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2331 int *columnp, *rowp; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2332 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2333 struct window *w = XWINDOW (window); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2334 FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2335 int i; |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2336 int row = 0; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2337 int left = w->left; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2338 int top = w->top; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2339 int height = XFASTINT (w->height) - ! MINI_WINDOW_P (w); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2340 int width = window_internal_width (w); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2341 int *charstarts; |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2342 int lastcol; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2343 |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2344 /* Find the right row. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2345 for (i = 0; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2346 i < height; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2347 i++) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2348 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2349 int linestart = FRAME_CURRENT_GLYPHS (f)->charstarts[top + i][left]; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2350 if (linestart > pos) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2351 break; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2352 if (linestart > 0) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2353 row = i; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2354 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2355 |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2356 /* Find the right column with in it. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2357 charstarts = FRAME_CURRENT_GLYPHS (f)->charstarts[top + row]; |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2358 lastcol = left; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2359 for (i = 0; i < width; i++) |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2360 { |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2361 if (charstarts[left + i] == pos) |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2362 { |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2363 *rowp = row + top; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2364 *columnp = i + left; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2365 return 1; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2366 } |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2367 else if (charstarts[left + i] > pos) |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2368 break; |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
2369 else if (charstarts[left + i] > 0) |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2370 lastcol = left + i; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2371 } |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2372 |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2373 *rowp = row + top; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
2374 *columnp = lastcol; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2375 return 0; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2376 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2377 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2378 /* Display the active region described by mouse_face_* |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2379 in its mouse-face if HL > 0, in its normal face if HL = 0. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2380 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2381 static void |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2382 show_mouse_face (hl) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2383 int hl; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2384 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2385 struct window *w = XWINDOW (mouse_face_window); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2386 int width = window_internal_width (w); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2387 FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2388 int i; |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2389 int curs_x = f->phys_cursor_x; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2390 int curs_y = f->phys_cursor_y; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2391 int cursor_off = 0; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2392 |
7283
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2393 for (i = mouse_face_beg_row; i <= mouse_face_end_row; i++) |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2394 { |
7283
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2395 int column = (i == mouse_face_beg_row ? mouse_face_beg_col : w->left); |
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2396 int endcolumn = (i == mouse_face_end_row ? mouse_face_end_col : w->left + width); |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2397 endcolumn = min (endcolumn, FRAME_CURRENT_GLYPHS (f)->used[i] - w->left); |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2398 |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2399 /* If the cursor's in the text we are about to rewrite, |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2400 turn the cursor off. */ |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2401 if (i == curs_y |
7283
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2402 && curs_x >= mouse_face_beg_col - 1 && curs_x <= mouse_face_end_col) |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2403 { |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2404 x_display_cursor (f, 0); |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2405 cursor_off = 1; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2406 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2407 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2408 dumpglyphs (f, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2409 CHAR_TO_PIXEL_COL (f, column), |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2410 CHAR_TO_PIXEL_ROW (f, i), |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2411 FRAME_CURRENT_GLYPHS (f)->glyphs[i] + column, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2412 endcolumn - column, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2413 /* Highlight with mouse face if hl > 0. */ |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
2414 hl > 0 ? 3 : 0, 0); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2415 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2416 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2417 /* If we turned the cursor off, turn it back on. */ |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2418 if (cursor_off) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
2419 x_display_cursor (f, 1); |
6757
770fe370479b
(show_mouse_face): Change the mouse cursor accordingly.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6683
diff
changeset
|
2420 |
770fe370479b
(show_mouse_face): Change the mouse cursor accordingly.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6683
diff
changeset
|
2421 /* Change the mouse cursor according to the value of HL. */ |
770fe370479b
(show_mouse_face): Change the mouse cursor accordingly.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6683
diff
changeset
|
2422 if (hl > 0) |
770fe370479b
(show_mouse_face): Change the mouse cursor accordingly.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6683
diff
changeset
|
2423 XDefineCursor (XDISPLAY FRAME_X_WINDOW (f), f->display.x->cross_cursor); |
770fe370479b
(show_mouse_face): Change the mouse cursor accordingly.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6683
diff
changeset
|
2424 else |
770fe370479b
(show_mouse_face): Change the mouse cursor accordingly.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6683
diff
changeset
|
2425 XDefineCursor (XDISPLAY FRAME_X_WINDOW (f), f->display.x->text_cursor); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2426 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2427 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2428 /* Clear out the mouse-highlighted active region. |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2429 Redraw it unhighlighted first. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2430 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2431 static void |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2432 clear_mouse_face () |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2433 { |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2434 if (! NILP (mouse_face_window)) |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2435 show_mouse_face (0); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2436 |
7283
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2437 mouse_face_beg_row = mouse_face_beg_col = -1; |
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
2438 mouse_face_end_row = mouse_face_end_col = -1; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2439 mouse_face_window = Qnil; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2440 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
2441 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2442 static struct scroll_bar *x_window_to_scroll_bar (); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2443 static void x_scroll_bar_report_motion (); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2444 |
429 | 2445 /* Return the current position of the mouse. |
2446 | |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2447 If the mouse movement started in a scroll bar, set *f, *bar_window, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2448 and *part to the frame, window, and scroll bar part that the mouse |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2449 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
|
2450 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
|
2451 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2452 If the mouse movement started elsewhere, set *f to the frame the |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2453 mouse is on, *bar_window to nil, and *x and *y to the character cell |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2454 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
|
2455 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2456 Set *time to the server timestamp for the time at which the mouse |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2457 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
|
2458 |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
2459 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
|
2460 |
429 | 2461 This clears the mouse_moved flag, so we can wait for the next mouse |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2462 movement. This also calls XQueryPointer, which will cause the |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2463 server to give us another MotionNotify when the mouse moves |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2464 again. */ |
429 | 2465 |
2466 static void | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2467 XTmouse_position (f, bar_window, part, x, y, time) |
4974
09139fb51584
(XTmouse_position): Undo roland's change.
Richard M. Stallman <rms@gnu.org>
parents:
4972
diff
changeset
|
2468 FRAME_PTR *f; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2469 Lisp_Object *bar_window; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2470 enum scroll_bar_part *part; |
429 | 2471 Lisp_Object *x, *y; |
732 | 2472 unsigned long *time; |
429 | 2473 { |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
2474 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
|
2475 |
429 | 2476 BLOCK_INPUT; |
2477 | |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2478 if (! NILP (last_mouse_scroll_bar)) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2479 x_scroll_bar_report_motion (f, bar_window, part, x, y, time); |
429 | 2480 else |
2481 { | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2482 Window root; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2483 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
|
2484 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2485 Window dummy_window; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2486 int dummy; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2487 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2488 mouse_moved = 0; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2489 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
|
2490 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2491 /* Figure out which root window we're on. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2492 XQueryPointer (x_current_display, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2493 DefaultRootWindow (x_current_display), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2494 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2495 /* 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
|
2496 &root, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2497 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2498 /* 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
|
2499 a different screen. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2500 &dummy_window, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2501 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2502 /* The position on that root window. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2503 &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
|
2504 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2505 /* 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
|
2506 &dummy, &dummy, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2507 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2508 /* 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
|
2509 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
|
2510 (unsigned int *) &dummy); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2511 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2512 /* 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
|
2513 containing the pointer. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2514 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2515 Window win, child; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2516 int 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
|
2517 int parent_x, parent_y; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2518 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2519 win = root; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2520 |
7101
e7afa8046b41
(XTmouse_position, XTread_socket): Don't use last_mouse_frame if it's dead.
Karl Heuer <kwzh@gnu.org>
parents:
7100
diff
changeset
|
2521 if (x_mouse_grabbed && 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
|
2522 { |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2523 /* 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
|
2524 even if the mouse is now outside it. */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2525 XTranslateCoordinates (x_current_display, |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2526 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2527 /* From-window, to-window. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2528 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
|
2529 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2530 /* 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
|
2531 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
|
2532 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2533 /* Child of win. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2534 &child); |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2535 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
|
2536 } |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2537 else |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2538 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2539 while (1) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2540 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2541 XTranslateCoordinates (x_current_display, |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2542 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2543 /* From-window, to-window. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2544 root, win, |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2545 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2546 /* From-position, to-position. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2547 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
|
2548 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2549 /* Child of win. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2550 &child); |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2551 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2552 if (child == None) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2553 break; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2554 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2555 win = child; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2556 parent_x = win_x; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2557 parent_y = win_y; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2558 } |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2559 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2560 /* Now we know that: |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2561 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
|
2562 (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
|
2563 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
|
2564 (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
|
2565 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
|
2566 (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
|
2567 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
|
2568 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
|
2569 never use them in that case.) */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2570 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2571 /* Is win one of our frames? */ |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
2572 f1 = x_any_window_to_frame (win); |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2573 } |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2574 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2575 /* 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
|
2576 if (! f1) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2577 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2578 struct scroll_bar *bar = x_window_to_scroll_bar (win); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2579 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2580 if (bar) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2581 { |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
2582 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
|
2583 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
|
2584 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
|
2585 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2586 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2587 |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
2588 if (f1) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2589 { |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
2590 int ignore1, ignore2; |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
2591 |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
2592 /* Ok, we found a frame. Store all the values. */ |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
2593 |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
2594 pixel_to_glyph_coords (f1, win_x, win_y, &ignore1, &ignore2, |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
2595 &last_mouse_glyph, x_mouse_grabbed); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2596 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2597 *bar_window = Qnil; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2598 *part = 0; |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
2599 *f = f1; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2600 XSET (*x, Lisp_Int, win_x); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2601 XSET (*y, Lisp_Int, win_y); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2602 *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
|
2603 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2604 } |
429 | 2605 } |
2606 | |
2607 UNBLOCK_INPUT; | |
2608 } | |
2609 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
2610 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
2611 #define XEvent XKeyPressedEvent |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
2612 #endif /* ! defined (HAVE_X11) */ |
429 | 2613 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2614 /* Scroll bar support. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2615 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2616 /* Given an X window ID, find the struct scroll_bar which manages it. |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2617 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
|
2618 bits. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2619 static struct scroll_bar * |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2620 x_window_to_scroll_bar (window_id) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2621 Window window_id; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2622 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2623 Lisp_Object tail, frame; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2624 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2625 for (tail = Vframe_list; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2626 XGCTYPE (tail) == Lisp_Cons; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2627 tail = XCONS (tail)->cdr) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2628 { |
6521
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
2629 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
|
2630 |
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
2631 frame = XCONS (tail)->car; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2632 /* All elements of Vframe_list should be frames. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2633 if (XGCTYPE (frame) != Lisp_Frame) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2634 abort (); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2635 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2636 /* 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
|
2637 right window ID. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2638 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
|
2639 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
|
2640 /* 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
|
2641 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
|
2642 ! GC_NILP (bar) || (bar = condemned, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2643 condemned = Qnil, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2644 ! 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
|
2645 bar = XSCROLL_BAR (bar)->next) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2646 if (SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)) == window_id) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2647 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
|
2648 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2649 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2650 return 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2651 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2652 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2653 /* Open a new X window to serve as a scroll bar, and return the |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2654 scroll bar vector for it. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2655 static struct scroll_bar * |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2656 x_scroll_bar_create (window, top, left, width, height) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2657 struct window *window; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2658 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
|
2659 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2660 FRAME_PTR frame = XFRAME (WINDOW_FRAME (window)); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2661 struct scroll_bar *bar = |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2662 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
|
2663 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2664 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2665 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2666 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2667 XSetWindowAttributes a; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2668 unsigned long mask; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2669 a.background_pixel = frame->display.x->background_pixel; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2670 a.event_mask = (ButtonPressMask | ButtonReleaseMask |
1793
cf4c3f01ddb9
* xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents:
1787
diff
changeset
|
2671 | ButtonMotionMask | PointerMotionHintMask |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2672 | ExposureMask); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2673 a.cursor = x_vertical_scroll_bar_cursor; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
2674 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
2675 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
|
2676 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2677 #if 0 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2678 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2679 ac = 0; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2680 XtSetArg (al[ac], XtNx, left); ac++; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2681 XtSetArg (al[ac], XtNy, top); ac++; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2682 XtSetArg (al[ac], XtNwidth, width); ac++; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2683 XtSetArg (al[ac], XtNheight, height); ac++; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2684 XtSetArg (al[ac], XtNborderWidth, 0); ac++; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2685 sb_widget = XtCreateManagedWidget ("box", |
5916
4e827db2523a
(x_scroll_bar_create): Fix indentation.
Karl Heuer <kwzh@gnu.org>
parents:
5898
diff
changeset
|
2686 boxWidgetClass, |
4e827db2523a
(x_scroll_bar_create): Fix indentation.
Karl Heuer <kwzh@gnu.org>
parents:
5898
diff
changeset
|
2687 frame->display.x->edit_widget, al, ac); |
4e827db2523a
(x_scroll_bar_create): Fix indentation.
Karl Heuer <kwzh@gnu.org>
parents:
5898
diff
changeset
|
2688 SET_SCROLL_BAR_X_WINDOW |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2689 (bar, sb_widget->core.window); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
2690 #endif |
5916
4e827db2523a
(x_scroll_bar_create): Fix indentation.
Karl Heuer <kwzh@gnu.org>
parents:
5898
diff
changeset
|
2691 SET_SCROLL_BAR_X_WINDOW |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2692 (bar, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2693 XCreateWindow (x_current_display, FRAME_X_WINDOW (frame), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2694 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2695 /* Position and size of scroll bar. */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2696 left, top, width, height, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2697 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2698 /* Border width, depth, class, and visual. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2699 0, CopyFromParent, CopyFromParent, CopyFromParent, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2700 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2701 /* Attributes. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2702 mask, &a)); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2703 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2704 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2705 XSET (bar->window, Lisp_Window, window); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2706 XSET (bar->top, Lisp_Int, top); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2707 XSET (bar->left, Lisp_Int, left); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2708 XSET (bar->width, Lisp_Int, width); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2709 XSET (bar->height, Lisp_Int, height); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2710 XSET (bar->start, Lisp_Int, 0); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2711 XSET (bar->end, Lisp_Int, 0); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2712 bar->dragging = Qnil; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2713 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2714 /* Add bar to its frame's list of scroll bars. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2715 bar->next = FRAME_SCROLL_BARS (frame); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2716 bar->prev = Qnil; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2717 XSET (FRAME_SCROLL_BARS (frame), Lisp_Vector, bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2718 if (! NILP (bar->next)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2719 XSET (XSCROLL_BAR (bar->next)->prev, Lisp_Vector, bar); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2720 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2721 XMapWindow (x_current_display, SCROLL_BAR_X_WINDOW (bar)); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2722 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2723 UNBLOCK_INPUT; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2724 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2725 return bar; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2726 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2727 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2728 /* Draw BAR's handle in the proper position. |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2729 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
|
2730 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
|
2731 redraw it. (REBUILD is handy for drawing the handle after expose |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2732 events.) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2733 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2734 Normally, we want to constrain the start and end of the handle to |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2735 fit inside its rectangle, but if the user is dragging 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
|
2736 handle, we want to let them drag it down all the way, so that the |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2737 bar's top is as far down as it goes; otherwise, there's no way to |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2738 move to the very end of the buffer. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2739 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2740 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
|
2741 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
|
2742 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
|
2743 int rebuild; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2744 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2745 int dragging = ! NILP (bar->dragging); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2746 Window w = SCROLL_BAR_X_WINDOW (bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2747 GC gc = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)))->display.x->normal_gc; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2748 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2749 /* 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
|
2750 if (! rebuild |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2751 && 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
|
2752 && 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
|
2753 return; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2754 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2755 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2756 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2757 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2758 int inside_width = VERTICAL_SCROLL_BAR_INSIDE_WIDTH (XINT (bar->width)); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2759 int inside_height = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (XINT (bar->height)); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2760 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2761 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2762 /* 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
|
2763 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
|
2764 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2765 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
|
2766 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2767 if (start < 0) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2768 start = 0; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2769 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
|
2770 start = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2771 end = start + length; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2772 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2773 if (end < start) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2774 end = start; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2775 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
|
2776 end = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2777 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2778 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2779 /* Store the adjusted setting in 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
|
2780 XSET (bar->start, Lisp_Int, start); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2781 XSET (bar->end, Lisp_Int, end); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2782 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2783 /* 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
|
2784 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
|
2785 end = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2786 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2787 /* 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
|
2788 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
|
2789 that many pixels tall. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2790 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
|
2791 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2792 /* 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
|
2793 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
|
2794 if (0 < start) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2795 XClearArea (x_current_display, w, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2796 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2797 /* x, y, width, height, and exposures. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2798 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2799 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
|
2800 inside_width, start, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2801 False); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2802 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2803 /* Draw the handle itself. */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2804 XFillRectangle (x_current_display, w, gc, |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2805 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2806 /* x, y, width, height */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2807 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2808 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
|
2809 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
|
2810 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2811 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2812 /* 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
|
2813 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
|
2814 if (end < inside_height) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2815 XClearArea (x_current_display, w, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2816 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2817 /* x, y, width, height, and exposures. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2818 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2819 VERTICAL_SCROLL_BAR_TOP_BORDER + end, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2820 inside_width, inside_height - end, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2821 False); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2822 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2823 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2824 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2825 UNBLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2826 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2827 |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3585
diff
changeset
|
2828 /* Move a scroll bar around on the screen, to accommodate changing |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2829 window configurations. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2830 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2831 x_scroll_bar_move (bar, top, left, width, height) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2832 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
|
2833 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
|
2834 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2835 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2836 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2837 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2838 XWindowChanges wc; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2839 unsigned int mask = 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2840 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2841 wc.x = left; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2842 wc.y = top; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2843 wc.width = width; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2844 wc.height = height; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2845 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2846 if (left != XINT (bar->left)) mask |= CWX; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2847 if (top != XINT (bar->top)) mask |= CWY; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2848 if (width != XINT (bar->width)) mask |= CWWidth; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2849 if (height != XINT (bar->height)) mask |= CWHeight; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2850 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2851 if (mask) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2852 XConfigureWindow (x_current_display, SCROLL_BAR_X_WINDOW (bar), |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2853 mask, &wc); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2854 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2855 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2856 XSET (bar->left, Lisp_Int, left); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2857 XSET (bar->top, Lisp_Int, top); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2858 XSET (bar->width, Lisp_Int, width); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2859 XSET (bar->height, Lisp_Int, height); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2860 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2861 UNBLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2862 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2863 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2864 /* Destroy the X window for BAR, and set its Emacs window's scroll bar |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2865 to nil. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2866 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2867 x_scroll_bar_remove (bar) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2868 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
|
2869 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2870 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2871 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2872 BLOCK_INPUT; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2873 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2874 /* Destroy the window. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2875 XDestroyWindow (x_current_display, SCROLL_BAR_X_WINDOW (bar)); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2876 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2877 /* 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
|
2878 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
|
2879 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2880 UNBLOCK_INPUT; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2881 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2882 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2883 /* 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
|
2884 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
|
2885 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
|
2886 create one. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2887 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2888 XTset_vertical_scroll_bar (window, portion, whole, position) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2889 struct window *window; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2890 int portion, whole, position; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2891 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2892 FRAME_PTR f = XFRAME (WINDOW_FRAME (window)); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2893 int top = XINT (window->top); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2894 int left = WINDOW_VERTICAL_SCROLL_BAR_COLUMN (window); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2895 int height = WINDOW_VERTICAL_SCROLL_BAR_HEIGHT (window); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2896 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2897 /* Where should this scroll bar be, pixelwise? */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2898 int pixel_top = CHAR_TO_PIXEL_ROW (f, top); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2899 int pixel_left = CHAR_TO_PIXEL_COL (f, left); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2900 int pixel_width = VERTICAL_SCROLL_BAR_PIXEL_WIDTH (f); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2901 int pixel_height = VERTICAL_SCROLL_BAR_PIXEL_HEIGHT (f, height); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2902 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2903 struct scroll_bar *bar; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2904 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2905 /* Does the scroll bar exist yet? */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2906 if (NILP (window->vertical_scroll_bar)) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2907 bar = x_scroll_bar_create (window, |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2908 pixel_top, pixel_left, |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2909 pixel_width, pixel_height); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2910 else |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2911 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2912 /* It may just need to be moved and resized. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2913 bar = XSCROLL_BAR (window->vertical_scroll_bar); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2914 x_scroll_bar_move (bar, pixel_top, pixel_left, pixel_width, pixel_height); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2915 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2916 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2917 /* 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
|
2918 dragged. */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2919 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
|
2920 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2921 int top_range = |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2922 VERTICAL_SCROLL_BAR_TOP_RANGE (pixel_height); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2923 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2924 if (whole == 0) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2925 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
|
2926 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2927 { |
3686
910ea1d66bfd
* xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents:
3683
diff
changeset
|
2928 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
|
2929 int end = ((double) (position + portion) * top_range) / whole; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2930 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2931 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
|
2932 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2933 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2934 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2935 XSET (window->vertical_scroll_bar, Lisp_Vector, bar); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2936 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2937 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2938 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2939 /* 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
|
2940 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
|
2941 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
|
2942 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
|
2943 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
|
2944 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
|
2945 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
|
2946 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2947 /* 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
|
2948 to `*judge_scroll_bars_hook'. A scroll bar may be spared if |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2949 `*redeem_scroll_bar_hook' is applied to its window before the judgement. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2950 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2951 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
|
2952 FRAME_PTR frame; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2953 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2954 /* The condemned list should be empty at this point; if it's not, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2955 then the rest of Emacs isn't using the condemn/redeem/judge |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2956 protocol correctly. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2957 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame))) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2958 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2959 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2960 /* Move them all to the "condemned" list. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2961 FRAME_CONDEMNED_SCROLL_BARS (frame) = FRAME_SCROLL_BARS (frame); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2962 FRAME_SCROLL_BARS (frame) = Qnil; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2963 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2964 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2965 /* Unmark WINDOW's scroll bar for deletion in this judgement cycle. |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2966 Note that WINDOW isn't necessarily condemned at all. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2967 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2968 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
|
2969 struct window *window; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
2970 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2971 struct scroll_bar *bar; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2972 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2973 /* 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
|
2974 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
|
2975 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2976 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2977 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
|
2978 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2979 /* Unlink it from the condemned list. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2980 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2981 FRAME_PTR f = XFRAME (WINDOW_FRAME (window)); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2982 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2983 if (NILP (bar->prev)) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2984 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2985 /* If the prev pointer is nil, it must be the first in one of |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2986 the lists. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2987 if (EQ (FRAME_SCROLL_BARS (f), window->vertical_scroll_bar)) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2988 /* It's not condemned. Everything's fine. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2989 return; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2990 else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f), |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2991 window->vertical_scroll_bar)) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2992 FRAME_CONDEMNED_SCROLL_BARS (f) = bar->next; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2993 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2994 /* If its prev pointer is nil, it must be at the front of |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2995 one or the other! */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2996 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2997 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
2998 else |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
2999 XSCROLL_BAR (bar->prev)->next = bar->next; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3000 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3001 if (! NILP (bar->next)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3002 XSCROLL_BAR (bar->next)->prev = bar->prev; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3003 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3004 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
|
3005 bar->prev = Qnil; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3006 XSET (FRAME_SCROLL_BARS (f), Lisp_Vector, bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3007 if (! NILP (bar->next)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3008 XSET (XSCROLL_BAR (bar->next)->prev, Lisp_Vector, bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3009 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3010 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3011 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3012 /* 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
|
3013 last call to `*condemn_scroll_bars_hook'. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3014 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3015 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
|
3016 FRAME_PTR f; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3017 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3018 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
|
3019 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3020 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
|
3021 |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
3022 /* 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
|
3023 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
|
3024 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
|
3025 |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
3026 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
|
3027 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3028 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
|
3029 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3030 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
|
3031 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3032 next = b->next; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3033 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
|
3034 } |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3035 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3036 /* 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
|
3037 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
|
3038 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3039 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3040 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3041 /* Handle an Expose or GraphicsExpose event on a scroll bar. |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3042 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3043 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
|
3044 mark bits. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3045 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3046 x_scroll_bar_expose (bar, event) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3047 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
|
3048 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3049 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3050 Window w = SCROLL_BAR_X_WINDOW (bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3051 GC gc = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)))->display.x->normal_gc; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3052 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3053 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3054 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3055 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
|
3056 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3057 /* Draw a one-pixel border just inside the edges of 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
|
3058 XDrawRectangle (x_current_display, w, gc, |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3059 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3060 /* x, y, width, height */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3061 0, 0, XINT (bar->width) - 1, XINT (bar->height) - 1); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3062 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3063 UNBLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3064 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3065 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3066 /* Handle a mouse click on the scroll bar BAR. If *EMACS_EVENT's kind |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3067 is set to something other than no_event, it is enqueued. |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3068 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3069 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
|
3070 mark bits. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3071 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3072 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
|
3073 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
|
3074 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3075 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
|
3076 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3077 if (XGCTYPE (bar->window) != Lisp_Window) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3078 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3079 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3080 emacs_event->kind = scroll_bar_click; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3081 emacs_event->code = event->xbutton.button - Button1; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3082 emacs_event->modifiers = |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
3083 (x_x_to_emacs_modifiers (event->xbutton.state) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3084 | (event->type == ButtonRelease |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3085 ? up_modifier |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3086 : down_modifier)); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3087 emacs_event->frame_or_window = bar->window; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3088 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
|
3089 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3090 int internal_height = |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3091 VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (XINT (bar->height)); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3092 int top_range = |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3093 VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3094 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
|
3095 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3096 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
|
3097 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
|
3098 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3099 if (y < XINT (bar->start)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3100 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
|
3101 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
|
3102 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
|
3103 else |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3104 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
|
3105 |
5440f00480e6
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2923
diff
changeset
|
3106 /* 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
|
3107 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
|
3108 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
|
3109 #if 0 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3110 /* 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
|
3111 holding it. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3112 if (event->type == ButtonPress |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3113 && 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
|
3114 XSET (bar->dragging, Lisp_Int, 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
|
3115 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3116 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3117 /* 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
|
3118 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
|
3119 && ! NILP (bar->dragging)) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3120 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3121 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
|
3122 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
|
3123 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3124 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
|
3125 bar->dragging = Qnil; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3126 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3127 |
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
3128 /* 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
|
3129 #if 0 |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3585
diff
changeset
|
3130 /* 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
|
3131 the handle. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3132 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
|
3133 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
|
3134 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3135 XSET (emacs_event->x, Lisp_Int, y); |
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
3136 #else |
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
3137 XSET (emacs_event->x, Lisp_Int, y); |
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
3138 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3139 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3140 XSET (emacs_event->y, Lisp_Int, top_range); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3141 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3142 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3143 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3144 /* 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
|
3145 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3146 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
|
3147 mark bits. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3148 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3149 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
|
3150 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
|
3151 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3152 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3153 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
|
3154 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3155 mouse_moved = 1; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3156 XSET (last_mouse_scroll_bar, Lisp_Vector, bar); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3157 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3158 /* 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
|
3159 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
|
3160 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3161 /* 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
|
3162 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
|
3163 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3164 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
|
3165 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3166 int new_end = new_start + (XINT (bar->end) - XINT (bar->start)); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3167 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3168 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
|
3169 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3170 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3171 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3172 /* Call XQueryPointer so we'll get an event the next time the mouse |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3173 moves and we can see *still* on the same position. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3174 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3175 int dummy; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3176 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3177 XQueryPointer (event->xmotion.display, event->xmotion.window, |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3178 (Window *) &dummy, (Window *) &dummy, |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3179 &dummy, &dummy, &dummy, &dummy, |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3180 (unsigned int *) &dummy); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3181 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3182 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3183 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3184 /* 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
|
3185 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
|
3186 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3187 x_scroll_bar_report_motion (f, bar_window, part, x, y, time) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3188 FRAME_PTR *f; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3189 Lisp_Object *bar_window; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3190 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
|
3191 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
|
3192 unsigned long *time; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3193 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3194 struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3195 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
|
3196 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
|
3197 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
|
3198 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
|
3199 |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
3200 BLOCK_INPUT; |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
3201 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3202 /* 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
|
3203 report that. */ |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3204 if (! XQueryPointer (x_current_display, |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3205 SCROLL_BAR_X_WINDOW (bar), |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3206 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3207 /* 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
|
3208 &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
|
3209 &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
|
3210 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3211 /* 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
|
3212 &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
|
3213 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3214 /* 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
|
3215 &dummy_mask)) |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3216 *f = 0; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3217 else |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3218 { |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3219 int inside_height |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3220 = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (XINT (bar->height)); |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3221 int top_range |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3222 = VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)); |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3223 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3224 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
|
3225 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3226 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
|
3227 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
|
3228 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3229 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
|
3230 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
|
3231 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
|
3232 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
|
3233 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3234 *f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3235 *bar_window = bar->window; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3236 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3237 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
|
3238 *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
|
3239 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
|
3240 *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
|
3241 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
|
3242 *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
|
3243 else |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3244 *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
|
3245 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3246 XSET (*x, Lisp_Int, win_y); |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3247 XSET (*y, Lisp_Int, top_range); |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3248 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3249 mouse_moved = 0; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3250 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
|
3251 } |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3252 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
3253 *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
|
3254 |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
3255 UNBLOCK_INPUT; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3256 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3257 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3258 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3259 /* 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
|
3260 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
|
3261 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
|
3262 redraw them. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3263 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3264 x_scroll_bar_clear (f) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3265 FRAME_PTR f; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3266 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3267 Lisp_Object bar; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3268 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3269 for (bar = FRAME_SCROLL_BARS (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3270 XTYPE (bar) == Lisp_Vector; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3271 bar = XSCROLL_BAR (bar)->next) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3272 XClearArea (x_current_display, SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)), |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3273 0, 0, 0, 0, True); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3274 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3275 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3276 /* This processes Expose events from the menubar specific X event |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3277 loop in menubar.c. This allows to redisplay the frame if necessary |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3278 when handling menubar or popup items. */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3279 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3280 void |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3281 process_expose_from_menu (event) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3282 XEvent event; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3283 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3284 FRAME_PTR f; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3285 |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
3286 BLOCK_INPUT; |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
3287 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3288 f = x_window_to_frame (event.xexpose.window); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3289 if (f) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3290 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3291 if (f->async_visible == 0) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3292 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3293 f->async_visible = 1; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3294 f->async_iconified = 0; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3295 SET_FRAME_GARBAGED (f); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3296 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3297 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3298 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3299 dumprectangle (x_window_to_frame (event.xexpose.window), |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3300 event.xexpose.x, event.xexpose.y, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3301 event.xexpose.width, event.xexpose.height); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3302 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3303 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3304 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3305 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3306 struct scroll_bar *bar |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3307 = x_window_to_scroll_bar (event.xexpose.window); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3308 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3309 if (bar) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3310 x_scroll_bar_expose (bar, &event); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3311 } |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
3312 |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
3313 UNBLOCK_INPUT; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3314 } |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
3315 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3316 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3317 /* The main X event-reading loop - XTread_socket. */ |
286 | 3318 |
3319 /* Timestamp of enter window event. This is only used by XTread_socket, | |
3320 but we have to put it out here, since static variables within functions | |
3321 sometimes don't work. */ | |
3322 static Time enter_timestamp; | |
3323 | |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3324 /* This holds the state XLookupString needs to implement dead keys |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3325 and other tricks known as "compose processing". _X Window System_ |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3326 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
|
3327 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
|
3328 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3329 This must be defined outside of XTread_socket, for the same reasons |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3330 given for enter_timestamp, above. */ |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3331 static XComposeStatus compose_status; |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3332 |
642 | 3333 /* Communication with window managers. */ |
3334 Atom Xatom_wm_protocols; | |
3335 | |
3336 /* Kinds of protocol things we may receive. */ | |
3337 Atom Xatom_wm_take_focus; | |
3338 Atom Xatom_wm_save_yourself; | |
3339 Atom Xatom_wm_delete_window; | |
3340 | |
3341 /* Other WM communication */ | |
3342 Atom Xatom_wm_configure_denied; /* When our config request is denied */ | |
3343 Atom Xatom_wm_window_moved; /* When the WM moves us. */ | |
3344 | |
2195
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3345 /* Window manager communication. */ |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3346 Atom Xatom_wm_change_state; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3347 |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
3348 /* EditRes protocol */ |
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
3349 Atom Xatom_editres_name; |
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
3350 |
2064 | 3351 /* Record the last 100 characters stored |
3352 to help debug the loss-of-chars-during-GC problem. */ | |
3353 int temp_index; | |
3354 short temp_buffer[100]; | |
3355 | |
286 | 3356 /* Read events coming from the X server. |
3357 This routine is called by the SIGIO handler. | |
3358 We return as soon as there are no more events to be read. | |
3359 | |
3360 Events representing keys are stored in buffer BUFP, | |
3361 which can hold up to NUMCHARS characters. | |
3362 We return the number of characters stored into the buffer, | |
3363 thus pretending to be `read'. | |
3364 | |
3365 WAITP is nonzero if we should block until input arrives. | |
3366 EXPECTED is nonzero if the caller knows input is available. */ | |
3367 | |
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
3368 int |
286 | 3369 XTread_socket (sd, bufp, numchars, waitp, expected) |
3370 register int sd; | |
3371 register struct input_event *bufp; | |
3372 register int numchars; | |
3373 int waitp; | |
3374 int expected; | |
3375 { | |
3376 int count = 0; | |
3377 int nbytes = 0; | |
3378 int mask; | |
3379 int items_pending; /* How many items are in the X queue. */ | |
3380 XEvent event; | |
771 | 3381 struct frame *f; |
3938
83d870a52936
* xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents:
3924
diff
changeset
|
3382 int event_found = 0; |
286 | 3383 int prefix; |
3384 Lisp_Object part; | |
3385 | |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
3386 if (interrupt_input_blocked) |
286 | 3387 { |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
3388 interrupt_input_pending = 1; |
286 | 3389 return -1; |
3390 } | |
3391 | |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
3392 interrupt_input_pending = 0; |
286 | 3393 BLOCK_INPUT; |
3394 | |
3395 if (numchars <= 0) | |
3396 abort (); /* Don't think this happens. */ | |
3397 | |
3398 #ifdef FIOSNBIO | |
3399 /* If available, Xlib uses FIOSNBIO to make the socket | |
3400 non-blocking, and then looks for EWOULDBLOCK. If O_NDELAY is set, | |
3401 FIOSNBIO is ignored, and instead of signalling EWOULDBLOCK, | |
3402 a read returns 0, which Xlib interprets as equivalent to EPIPE. */ | |
3403 fcntl (fileno (stdin), 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
|
3404 #endif /* ! defined (FIOSNBIO) */ |
286 | 3405 |
3406 #ifndef SIGIO | |
3407 #ifndef HAVE_SELECT | |
3408 if (! (fcntl (fileno (stdin), F_GETFL, 0) & O_NDELAY)) | |
3409 { | |
3410 extern int read_alarm_should_throw; | |
3411 read_alarm_should_throw = 1; | |
3412 XPeekEvent (XDISPLAY &event); | |
3413 read_alarm_should_throw = 0; | |
3414 } | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3415 #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
|
3416 #endif /* SIGIO */ |
286 | 3417 |
3418 while (XStuffPending () != 0) | |
3419 { | |
3420 XNextEvent (XDISPLAY &event); | |
3421 event_found = 1; | |
3422 | |
3423 switch (event.type) | |
3424 { | |
3425 #ifdef HAVE_X11 | |
642 | 3426 case ClientMessage: |
3427 { | |
3428 if (event.xclient.message_type == Xatom_wm_protocols | |
3429 && event.xclient.format == 32) | |
3430 { | |
3431 if (event.xclient.data.l[0] == Xatom_wm_take_focus) | |
3432 { | |
771 | 3433 f = x_window_to_frame (event.xclient.window); |
7128
6c6a776a64e1
(XTread_socket, case ClientMessage): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
7123
diff
changeset
|
3434 /* Since we set WM_TAKE_FOCUS, we must call |
6c6a776a64e1
(XTread_socket, case ClientMessage): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
7123
diff
changeset
|
3435 XSetInputFocus explicitly. But not if f is null, |
6c6a776a64e1
(XTread_socket, case ClientMessage): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
7123
diff
changeset
|
3436 since that might be an event for a deleted frame. */ |
771 | 3437 if (f) |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3438 XSetInputFocus (event.xclient.display, |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3439 event.xclient.window, |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3440 RevertToPointerRoot, |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3441 event.xclient.data.l[1]); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3442 /* Not certain about handling scroll bars here */ |
642 | 3443 } |
3444 else if (event.xclient.data.l[0] == Xatom_wm_save_yourself) | |
3445 { | |
3446 /* Save state modify the WM_COMMAND property to | |
3447 something which can reinstate us. This notifies | |
3448 the session manager, who's looking for such a | |
3449 PropertyNotify. Can restart processing when | |
3450 a keyboard or mouse event arrives. */ | |
3451 if (numchars > 0) | |
3452 { | |
7870
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3453 /* This is just so we only give real data once |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3454 for a single Emacs process. */ |
7902
22b9aaaf0302
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7870
diff
changeset
|
3455 if (x_top_window_to_frame (event.xclient.window) |
22b9aaaf0302
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7870
diff
changeset
|
3456 == selected_frame) |
7870
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3457 XSetCommand (x_current_display, |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3458 event.xclient.window, |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3459 initial_argv, initial_argc); |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3460 else |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3461 XSetCommand (x_current_display, |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3462 event.xclient.window, |
537930034e73
(XTread_socket): Handle Xatom_wm_save_yourself by calling XSetCommand.
Richard M. Stallman <rms@gnu.org>
parents:
7806
diff
changeset
|
3463 0, 0); |
642 | 3464 } |
3465 } | |
3466 else if (event.xclient.data.l[0] == Xatom_wm_delete_window) | |
3467 { | |
6114
b69bdef4f7f6
(XTread_socket): For case ClientMessage and Xatom_wm_delete_window, use
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6088
diff
changeset
|
3468 struct frame *f = x_any_window_to_frame (event.xclient.window); |
771 | 3469 |
3470 if (f) | |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3471 { |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3472 if (numchars == 0) |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3473 abort (); |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3474 |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3475 bufp->kind = delete_window_event; |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3476 XSET (bufp->frame_or_window, Lisp_Frame, f); |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3477 bufp++; |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3478 |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3479 count += 1; |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3480 numchars -= 1; |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3481 } |
642 | 3482 } |
3483 } | |
3484 else if (event.xclient.message_type == Xatom_wm_configure_denied) | |
3485 { | |
3486 } | |
3487 else if (event.xclient.message_type == Xatom_wm_window_moved) | |
3488 { | |
3489 int new_x, new_y; | |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3490 struct frame *f = x_window_to_frame (event.xclient.window); |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3491 |
786 | 3492 new_x = event.xclient.data.s[0]; |
3493 new_y = event.xclient.data.s[1]; | |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3494 |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3495 if (f) |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3496 { |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3497 f->display.x->left_pos = new_x; |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3498 f->display.x->top_pos = new_y; |
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
3499 } |
642 | 3500 } |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3501 #if defined (USE_X_TOOLKIT) && defined (HAVE_X11R5) |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
3502 else if (event.xclient.message_type == Xatom_editres_name) |
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
3503 { |
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
3504 struct frame *f = x_any_window_to_frame (event.xclient.window); |
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
3505 _XEditResCheckMessages (f->display.x->widget, NULL, &event, NULL); |
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
3506 } |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3507 #endif /* USE_X_TOOLKIT and HAVE_X11R5 */ |
642 | 3508 } |
3509 break; | |
286 | 3510 |
2195
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3511 case SelectionNotify: |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3512 #ifdef USE_X_TOOLKIT |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3513 if (! x_window_to_frame (event.xselection.requestor)) |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3514 goto OTHER; |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3515 #endif /* not USE_X_TOOLKIT */ |
2195
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3516 x_handle_selection_notify (&event); |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3517 break; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3518 |
286 | 3519 case SelectionClear: /* Someone has grabbed ownership. */ |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3520 #ifdef USE_X_TOOLKIT |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3521 if (! x_window_to_frame (event.xselectionclear.window)) |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3522 goto OTHER; |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3523 #endif /* USE_X_TOOLKIT */ |
2195
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3524 { |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3525 XSelectionClearEvent *eventp = (XSelectionClearEvent *) &event; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3526 |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3527 if (numchars == 0) |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3528 abort (); |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3529 |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3530 bufp->kind = selection_clear_event; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3531 SELECTION_EVENT_DISPLAY (bufp) = eventp->display; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3532 SELECTION_EVENT_SELECTION (bufp) = eventp->selection; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3533 SELECTION_EVENT_TIME (bufp) = eventp->time; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3534 bufp++; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3535 |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3536 count += 1; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3537 numchars -= 1; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3538 } |
286 | 3539 break; |
3540 | |
3541 case SelectionRequest: /* Someone wants our selection. */ | |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3542 #ifdef USE_X_TOOLKIT |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3543 if (!x_window_to_frame (event.xselectionrequest.owner)) |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3544 goto OTHER; |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3545 #endif /* USE_X_TOOLKIT */ |
2195
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3546 { |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3547 XSelectionRequestEvent *eventp = (XSelectionRequestEvent *) &event; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3548 |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3549 if (numchars == 0) |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3550 abort (); |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3551 |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3552 bufp->kind = selection_request_event; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3553 SELECTION_EVENT_DISPLAY (bufp) = eventp->display; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3554 SELECTION_EVENT_REQUESTOR (bufp) = eventp->requestor; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3555 SELECTION_EVENT_SELECTION (bufp) = eventp->selection; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3556 SELECTION_EVENT_TARGET (bufp) = eventp->target; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3557 SELECTION_EVENT_PROPERTY (bufp) = eventp->property; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3558 SELECTION_EVENT_TIME (bufp) = eventp->time; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3559 bufp++; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3560 |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3561 count += 1; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3562 numchars -= 1; |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
3563 } |
286 | 3564 break; |
3565 | |
3566 case PropertyNotify: | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3567 #ifdef USE_X_TOOLKIT |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3568 if (!x_any_window_to_frame (event.xproperty.window)) |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3569 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3570 #endif /* not USE_X_TOOLKIT */ |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3571 x_handle_property_notify (&event); |
286 | 3572 break; |
3573 | |
3045
0267fb20b0df
(XTread_socket, ConfigureNotify case):
Richard M. Stallman <rms@gnu.org>
parents:
3030
diff
changeset
|
3574 case ReparentNotify: |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
3575 f = x_top_window_to_frame (event.xreparent.window); |
3045
0267fb20b0df
(XTread_socket, ConfigureNotify case):
Richard M. Stallman <rms@gnu.org>
parents:
3030
diff
changeset
|
3576 if (f) |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
3577 { |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
3578 int x, y; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
3579 f->display.x->parent_desc = event.xreparent.parent; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
3580 x_real_positions (f, &x, &y); |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
3581 f->display.x->left_pos = x; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
3582 f->display.x->top_pos = y; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
3583 } |
3045
0267fb20b0df
(XTread_socket, ConfigureNotify case):
Richard M. Stallman <rms@gnu.org>
parents:
3030
diff
changeset
|
3584 break; |
0267fb20b0df
(XTread_socket, ConfigureNotify case):
Richard M. Stallman <rms@gnu.org>
parents:
3030
diff
changeset
|
3585 |
286 | 3586 case Expose: |
771 | 3587 f = x_window_to_frame (event.xexpose.window); |
3588 if (f) | |
286 | 3589 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3590 if (f->async_visible == 0) |
286 | 3591 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3592 f->async_visible = 1; |
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3593 f->async_iconified = 0; |
771 | 3594 SET_FRAME_GARBAGED (f); |
286 | 3595 } |
3596 else | |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3597 dumprectangle (x_window_to_frame (event.xexpose.window), |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3598 event.xexpose.x, event.xexpose.y, |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3599 event.xexpose.width, event.xexpose.height); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3600 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3601 else |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3602 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3603 struct scroll_bar *bar |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
3604 = x_window_to_scroll_bar (event.xexpose.window); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3605 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3606 if (bar) |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3607 x_scroll_bar_expose (bar, &event); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3608 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3609 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3610 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3611 #endif /* USE_X_TOOLKIT */ |
286 | 3612 } |
3613 break; | |
3614 | |
3615 case GraphicsExpose: /* This occurs when an XCopyArea's | |
3616 source area was obscured or not | |
3617 available.*/ | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3618 f = x_window_to_frame (event.xgraphicsexpose.drawable); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3619 if (f) |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3620 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3621 dumprectangle (f, |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3622 event.xgraphicsexpose.x, event.xgraphicsexpose.y, |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3623 event.xgraphicsexpose.width, |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3624 event.xgraphicsexpose.height); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3625 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3626 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3627 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3628 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3629 #endif /* USE_X_TOOLKIT */ |
286 | 3630 break; |
3631 | |
3632 case NoExpose: /* This occurs when an XCopyArea's | |
3633 source area was completely | |
3634 available */ | |
3635 break; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3636 #else /* ! defined (HAVE_X11) */ |
286 | 3637 case ExposeWindow: |
3638 if (event.subwindow != 0) | |
3639 break; /* duplicate event */ | |
771 | 3640 f = x_window_to_frame (event.window); |
3641 if (event.window == f->display.x->icon_desc) | |
286 | 3642 { |
771 | 3643 refreshicon (f); |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3644 f->async_iconified = 1; |
286 | 3645 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3646 if (event.window == FRAME_X_WINDOW (f)) |
286 | 3647 { |
3648 /* Say must check all windows' needs_exposure flags. */ | |
3649 expose_all_windows = 1; | |
771 | 3650 f->display.x->needs_exposure = 1; |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3651 f->async_visible = 1; |
286 | 3652 } |
3653 break; | |
3654 | |
3655 case ExposeRegion: | |
3656 if (event.subwindow != 0) | |
3657 break; /* duplicate event */ | |
771 | 3658 f = x_window_to_frame (event.window); |
3659 if (event.window == f->display.x->icon_desc) | |
286 | 3660 { |
771 | 3661 refreshicon (f); |
286 | 3662 break; |
3663 } | |
3664 /* If window already needs full redraw, ignore this rectangle. */ | |
771 | 3665 if (expose_all_windows && f->display.x->needs_exposure) |
286 | 3666 break; |
3667 /* Put the event on the queue of rectangles to redraw. */ | |
3668 if (enqueue_event (&event, &x_expose_queue)) | |
3669 /* If it is full, we can't record the rectangle, | |
3670 so redraw this entire window. */ | |
3671 { | |
3672 /* Say must check all windows' needs_exposure flags. */ | |
3673 expose_all_windows = 1; | |
771 | 3674 f->display.x->needs_exposure = 1; |
286 | 3675 } |
3676 break; | |
3677 | |
3678 case ExposeCopy: | |
3679 /* This should happen only when we are expecting it, | |
3680 in x_read_exposes. */ | |
3681 abort (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3682 #endif /* ! defined (HAVE_X11) */ |
286 | 3683 |
3684 #ifdef HAVE_X11 | |
3685 case UnmapNotify: | |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
3686 f = x_any_window_to_frame (event.xunmap.window); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3687 if (f) /* F may no longer exist if |
771 | 3688 the frame was deleted. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3689 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3690 /* While a frame is unmapped, display generation is |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3691 disabled; you don't want to spend time updating a |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3692 display that won't ever be seen. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3693 f->async_visible = 0; |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3694 /* We can't distinguish, from the event, whether the window |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3695 has become iconified or invisible. So assume, if it |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3696 was previously visible, than now it is iconified. |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3697 We depend on x_make_frame_invisible to mark it iconified. */ |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
3698 if (FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f)) |
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
3699 f->async_iconified = 1; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3700 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3701 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3702 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3703 #endif /* USE_X_TOOLKIT */ |
286 | 3704 break; |
3705 | |
3706 case MapNotify: | |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3707 /* We use x_top_window_to_frame because map events can come |
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3708 for subwindows and they don't mean that the frame is visible. */ |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
3709 f = x_top_window_to_frame (event.xmap.window); |
771 | 3710 if (f) |
286 | 3711 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3712 f->async_visible = 1; |
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3713 f->async_iconified = 0; |
286 | 3714 |
3715 /* wait_reading_process_input will notice this and update | |
771 | 3716 the frame's display structures. */ |
3717 SET_FRAME_GARBAGED (f); | |
286 | 3718 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3719 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3720 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3721 #endif /* USE_X_TOOLKIT */ |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
3722 break; |
286 | 3723 |
3724 /* Turn off processing if we become fully obscured. */ | |
3725 case VisibilityNotify: | |
3726 break; | |
3727 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3728 #else /* ! defined (HAVE_X11) */ |
286 | 3729 case UnmapWindow: |
771 | 3730 f = x_window_to_frame (event.window); |
3731 if (event.window == f->display.x->icon_desc) | |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3732 f->async_iconified = 0; |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3733 if (event.window == FRAME_X_WINDOW (f)) |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
3734 f->async_visible = 0; |
286 | 3735 break; |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3736 #endif /* ! defined (HAVE_X11) */ |
286 | 3737 |
3738 #ifdef HAVE_X11 | |
3739 case KeyPress: | |
6010
1f9f36411af8
(XTread_socket--cases KeyPress, EnterNotify, LeaveNotify)
Richard M. Stallman <rms@gnu.org>
parents:
5987
diff
changeset
|
3740 f = x_any_window_to_frame (event.xkey.window); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3741 |
771 | 3742 if (f != 0) |
286 | 3743 { |
3355
e0c2e8a2ef75
(XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents:
3284
diff
changeset
|
3744 KeySym keysym, orig_keysym; |
5018
14f3c98a5cc1
(XTread_socket): Increase length of copy_buffer to 81.
Richard M. Stallman <rms@gnu.org>
parents:
4974
diff
changeset
|
3745 /* al%imercury@uunet.uu.net says that making this 81 instead of |
14f3c98a5cc1
(XTread_socket): Increase length of copy_buffer to 81.
Richard M. Stallman <rms@gnu.org>
parents:
4974
diff
changeset
|
3746 80 fixed a bug whereby meta chars made his Emacs hang. */ |
14f3c98a5cc1
(XTread_socket): Increase length of copy_buffer to 81.
Richard M. Stallman <rms@gnu.org>
parents:
4974
diff
changeset
|
3747 unsigned char copy_buffer[81]; |
1841
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
3748 int modifiers; |
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
3749 |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
3750 event.xkey.state |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
3751 |= x_emacs_to_x_modifiers (extra_keyboard_modifiers); |
1841
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
3752 modifiers = event.xkey.state; |
555 | 3753 |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3754 /* This will have to go some day... */ |
2881
11eced50eaa6
* xterm.c (XTread_socket): Turn off ControlMask for XLookupString.
Jim Blandy <jimb@redhat.com>
parents:
2840
diff
changeset
|
3755 |
11eced50eaa6
* xterm.c (XTread_socket): Turn off ControlMask for XLookupString.
Jim Blandy <jimb@redhat.com>
parents:
2840
diff
changeset
|
3756 /* make_lispy_event turns chars into control chars. |
11eced50eaa6
* xterm.c (XTread_socket): Turn off ControlMask for XLookupString.
Jim Blandy <jimb@redhat.com>
parents:
2840
diff
changeset
|
3757 Don't do it here because XLookupString is too eager. */ |
11eced50eaa6
* xterm.c (XTread_socket): Turn off ControlMask for XLookupString.
Jim Blandy <jimb@redhat.com>
parents:
2840
diff
changeset
|
3758 event.xkey.state &= ~ControlMask; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3759 nbytes = |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3760 XLookupString (&event.xkey, copy_buffer, 80, &keysym, |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
3761 &compose_status); |
286 | 3762 |
3355
e0c2e8a2ef75
(XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents:
3284
diff
changeset
|
3763 orig_keysym = keysym; |
395 | 3764 |
286 | 3765 if (numchars > 1) |
3766 { | |
3839
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3767 if (((keysym >= XK_BackSpace && keysym <= XK_Escape) |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3768 || keysym == XK_Delete |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3769 || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */ |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3770 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */ |
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
3771 #ifdef HPUX |
3839
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3772 /* This recognizes the "extended function keys". |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3773 It seems there's no cleaner way. |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3774 Test IsModifierKey to avoid handling mode_switch |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3775 incorrectly. */ |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3776 || ((unsigned) (keysym) >= XK_Select |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3777 && (unsigned)(keysym) < XK_KP_Space) |
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
3778 #endif |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3779 #ifdef XK_dead_circumflex |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3780 || orig_keysym == XK_dead_circumflex |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3781 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3782 #ifdef XK_dead_grave |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3783 || orig_keysym == XK_dead_grave |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3784 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3785 #ifdef XK_dead_tilde |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3786 || orig_keysym == XK_dead_tilde |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3787 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3788 #ifdef XK_dead_diaeresis |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3789 || orig_keysym == XK_dead_diaeresis |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3790 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3791 #ifdef XK_dead_macron |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3792 || orig_keysym == XK_dead_macron |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3793 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3794 #ifdef XK_dead_degree |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3795 || orig_keysym == XK_dead_degree |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3796 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3797 #ifdef XK_dead_acute |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3798 || orig_keysym == XK_dead_acute |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3799 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3800 #ifdef XK_dead_cedilla |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3801 || orig_keysym == XK_dead_cedilla |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3802 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3803 #ifdef XK_dead_breve |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3804 || orig_keysym == XK_dead_breve |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3805 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3806 #ifdef XK_dead_ogonek |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3807 || orig_keysym == XK_dead_ogonek |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3808 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3809 #ifdef XK_dead_caron |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3810 || orig_keysym == XK_dead_caron |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3811 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3812 #ifdef XK_dead_doubleacute |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3813 || orig_keysym == XK_dead_doubleacute |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3814 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3815 #ifdef XK_dead_abovedot |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3816 || orig_keysym == XK_dead_abovedot |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3817 #endif |
3839
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3818 || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */ |
3cc238ae0de5
* xterm.c (XTread_socket): Never treat a modifier key as a
Jim Blandy <jimb@redhat.com>
parents:
3710
diff
changeset
|
3819 || IsFunctionKey (keysym) /* 0xffbe <= x < 0xffe1 */ |
7706
44ff7a0a70b6
(x_is_vendor_fkey): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
7680
diff
changeset
|
3820 /* Any "vendor-specific" key is ok. */ |
44ff7a0a70b6
(x_is_vendor_fkey): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
7680
diff
changeset
|
3821 || (orig_keysym & (1 << 28))) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3822 && ! (IsModifierKey (orig_keysym) |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3823 #ifndef HAVE_X11R5 |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3824 #ifdef XK_Mode_switch |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3825 || ((unsigned)(orig_keysym) == XK_Mode_switch) |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3826 #endif |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3827 #ifdef XK_Num_Lock |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3828 || ((unsigned)(orig_keysym) == XK_Num_Lock) |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3829 #endif |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3830 #endif /* not HAVE_X11R5 */ |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
3831 )) |
286 | 3832 { |
2064 | 3833 if (temp_index == sizeof temp_buffer / sizeof (short)) |
3834 temp_index = 0; | |
3835 temp_buffer[temp_index++] = keysym; | |
286 | 3836 bufp->kind = non_ascii_keystroke; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3837 bufp->code = keysym; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3838 XSET (bufp->frame_or_window, Lisp_Frame, f); |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
3839 bufp->modifiers = x_x_to_emacs_modifiers (modifiers); |
708 | 3840 bufp->timestamp = event.xkey.time; |
286 | 3841 bufp++; |
3842 count++; | |
3843 numchars--; | |
3844 } | |
3845 else if (numchars > nbytes) | |
3846 { | |
3847 register int i; | |
3848 | |
2064 | 3849 for (i = 0; i < nbytes; i++) |
286 | 3850 { |
2064 | 3851 if (temp_index == sizeof temp_buffer / sizeof (short)) |
3852 temp_index = 0; | |
3853 temp_buffer[temp_index++] = copy_buffer[i]; | |
286 | 3854 bufp->kind = ascii_keystroke; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3855 bufp->code = copy_buffer[i]; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3856 XSET (bufp->frame_or_window, Lisp_Frame, f); |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
3857 bufp->modifiers = x_x_to_emacs_modifiers (modifiers); |
708 | 3858 bufp->timestamp = event.xkey.time; |
286 | 3859 bufp++; |
3860 } | |
3861 | |
3862 count += nbytes; | |
3863 numchars -= nbytes; | |
3864 } | |
2064 | 3865 else |
3866 abort (); | |
286 | 3867 } |
2064 | 3868 else |
3869 abort (); | |
286 | 3870 } |
3871 break; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3872 #else /* ! defined (HAVE_X11) */ |
286 | 3873 case KeyPressed: |
3874 { | |
3875 register char *where_mapping; | |
3876 | |
771 | 3877 f = x_window_to_frame (event.window); |
286 | 3878 /* Ignore keys typed on icon windows. */ |
771 | 3879 if (f != 0 && event.window == f->display.x->icon_desc) |
286 | 3880 break; |
3881 where_mapping = XLookupMapping (&event, &nbytes); | |
3882 /* Nasty fix for arrow keys */ | |
3883 if (!nbytes && IsCursorKey (event.detail & 0xff)) | |
3884 { | |
3885 switch (event.detail & 0xff) | |
3886 { | |
3887 case KC_CURSOR_LEFT: | |
3888 where_mapping = "\002"; | |
3889 break; | |
3890 case KC_CURSOR_RIGHT: | |
3891 where_mapping = "\006"; | |
3892 break; | |
3893 case KC_CURSOR_UP: | |
3894 where_mapping = "\020"; | |
3895 break; | |
3896 case KC_CURSOR_DOWN: | |
3897 where_mapping = "\016"; | |
3898 break; | |
3899 } | |
3900 nbytes = 1; | |
3901 } | |
3902 if (numchars - nbytes > 0) | |
3903 { | |
3904 register int i; | |
3905 | |
3906 for (i = 0; i < nbytes; i++) | |
3907 { | |
3908 bufp->kind = ascii_keystroke; | |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
3909 bufp->code = where_mapping[i]; |
429 | 3910 XSET (bufp->time, Lisp_Int, event.xkey.time); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
3911 XSET (bufp->frame_or_window, Lisp_Frame, f); |
286 | 3912 bufp++; |
3913 } | |
3914 count += nbytes; | |
3915 numchars -= nbytes; | |
3916 } | |
3917 } | |
3918 break; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
3919 #endif /* ! defined (HAVE_X11) */ |
286 | 3920 |
3921 #ifdef HAVE_X11 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3922 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3923 /* Here's a possible interpretation of the whole |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3924 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If you get a |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3925 FocusIn event, you have to get a FocusOut event before you |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3926 relinquish the focus. If you haven't received a FocusIn event, |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3927 then a mere LeaveNotify is enough to free you. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3928 |
286 | 3929 case EnterNotify: |
6010
1f9f36411af8
(XTread_socket--cases KeyPress, EnterNotify, LeaveNotify)
Richard M. Stallman <rms@gnu.org>
parents:
5987
diff
changeset
|
3930 f = x_any_window_to_frame (event.xcrossing.window); |
369 | 3931 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3932 if (event.xcrossing.focus) /* Entered Window */ |
286 | 3933 { |
3934 /* Avoid nasty pop/raise loops. */ | |
771 | 3935 if (f && (!(f->auto_raise) |
3936 || !(f->auto_lower) | |
286 | 3937 || (event.xcrossing.time - enter_timestamp) > 500)) |
3938 { | |
771 | 3939 x_new_focus_frame (f); |
286 | 3940 enter_timestamp = event.xcrossing.time; |
3941 } | |
3942 } | |
771 | 3943 else if (f == x_focus_frame) |
3944 x_new_focus_frame (0); | |
7469
24b292242269
(dumpglyphs): For cursor foreground, try the
Richard M. Stallman <rms@gnu.org>
parents:
7415
diff
changeset
|
3945 /* EnterNotify counts as mouse movement, |
24b292242269
(dumpglyphs): For cursor foreground, try the
Richard M. Stallman <rms@gnu.org>
parents:
7415
diff
changeset
|
3946 so update things that depend on mouse position. */ |
24b292242269
(dumpglyphs): For cursor foreground, try the
Richard M. Stallman <rms@gnu.org>
parents:
7415
diff
changeset
|
3947 if (f) |
24b292242269
(dumpglyphs): For cursor foreground, try the
Richard M. Stallman <rms@gnu.org>
parents:
7415
diff
changeset
|
3948 note_mouse_movement (f, &event.xmotion); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3949 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3950 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3951 #endif /* USE_X_TOOLKIT */ |
286 | 3952 break; |
3953 | |
3954 case FocusIn: | |
6010
1f9f36411af8
(XTread_socket--cases KeyPress, EnterNotify, LeaveNotify)
Richard M. Stallman <rms@gnu.org>
parents:
5987
diff
changeset
|
3955 f = x_any_window_to_frame (event.xfocus.window); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3956 if (event.xfocus.detail != NotifyPointer) |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3957 x_focus_event_frame = f; |
771 | 3958 if (f) |
3959 x_new_focus_frame (f); | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3960 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3961 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3962 #endif /* USE_X_TOOLKIT */ |
286 | 3963 break; |
3964 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3965 |
286 | 3966 case LeaveNotify: |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3967 f = x_top_window_to_frame (event.xcrossing.window); |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3968 if (f) |
286 | 3969 { |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3970 if (f == mouse_face_mouse_frame) |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3971 /* If we move outside the frame, |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3972 then we're certainly no longer on any text in the frame. */ |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3973 clear_mouse_face (); |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3974 |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3975 if (event.xcrossing.focus) |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3976 { |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3977 if (! x_focus_event_frame) |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3978 x_new_focus_frame (0); |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3979 else |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3980 x_new_focus_frame (f); |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3981 } |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3982 else |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3983 { |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3984 if (f == x_focus_event_frame) |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3985 x_focus_event_frame = 0; |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3986 if (f == x_focus_frame) |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3987 x_new_focus_frame (0); |
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
3988 } |
286 | 3989 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3990 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3991 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
3992 #endif /* USE_X_TOOLKIT */ |
286 | 3993 break; |
3994 | |
3995 case FocusOut: | |
6010
1f9f36411af8
(XTread_socket--cases KeyPress, EnterNotify, LeaveNotify)
Richard M. Stallman <rms@gnu.org>
parents:
5987
diff
changeset
|
3996 f = x_any_window_to_frame (event.xfocus.window); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3997 if (event.xfocus.detail != NotifyPointer |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3998 && f == x_focus_event_frame) |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
3999 x_focus_event_frame = 0; |
771 | 4000 if (f && f == x_focus_frame) |
4001 x_new_focus_frame (0); | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4002 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4003 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4004 #endif /* USE_X_TOOLKIT */ |
286 | 4005 break; |
4006 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4007 #else /* ! defined (HAVE_X11) */ |
286 | 4008 |
4009 case EnterWindow: | |
4010 if ((event.detail & 0xFF) == 1) | |
4011 break; /* Coming from our own subwindow */ | |
4012 if (event.subwindow != 0) | |
4013 break; /* Entering our own subwindow. */ | |
4014 | |
4015 { | |
771 | 4016 f = x_window_to_frame (event.window); |
4017 x_mouse_frame = f; | |
4018 | |
4019 x_new_focus_frame (f); | |
286 | 4020 } |
4021 break; | |
4022 | |
4023 case LeaveWindow: | |
4024 if ((event.detail & 0xFF) == 1) | |
4025 break; /* Entering our own subwindow */ | |
4026 if (event.subwindow != 0) | |
4027 break; /* Leaving our own subwindow. */ | |
4028 | |
771 | 4029 x_mouse_frame = 0; |
4030 if (x_focus_frame == 0 | |
4031 && x_input_frame != 0 | |
4032 && x_input_frame == x_window_to_frame (event.window) | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4033 && event.window == FRAME_X_WINDOW (x_input_frame)) |
286 | 4034 { |
771 | 4035 f = x_input_frame; |
4036 x_input_frame = 0; | |
4037 if (f) | |
4038 frame_unhighlight (f); | |
286 | 4039 } |
4040 break; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4041 #endif /* ! defined (HAVE_X11) */ |
286 | 4042 |
4043 #ifdef HAVE_X11 | |
4044 case MotionNotify: | |
4045 { | |
7101
e7afa8046b41
(XTmouse_position, XTread_socket): Don't use last_mouse_frame if it's dead.
Karl Heuer <kwzh@gnu.org>
parents:
7100
diff
changeset
|
4046 if (x_mouse_grabbed && FRAME_LIVE_P (last_mouse_frame)) |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
4047 f = last_mouse_frame; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
4048 else |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
4049 f = x_window_to_frame (event.xmotion.window); |
771 | 4050 if (f) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4051 note_mouse_movement (f, &event.xmotion); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4052 else |
286 | 4053 { |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
4054 struct scroll_bar *bar |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
4055 = x_window_to_scroll_bar (event.xmotion.window); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4056 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4057 if (bar) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
4058 x_scroll_bar_note_movement (bar, &event); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
4059 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
4060 /* If we move outside the frame, |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
4061 then we're certainly no longer on any text in the frame. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
4062 clear_mouse_face (); |
286 | 4063 } |
4064 } | |
7128
6c6a776a64e1
(XTread_socket, case ClientMessage): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
7123
diff
changeset
|
4065 #if 0 /* This should be unnecessary, since the toolkit has no use |
6c6a776a64e1
(XTread_socket, case ClientMessage): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
7123
diff
changeset
|
4066 for motion events that happen outside of the menu event loop, |
6c6a776a64e1
(XTread_socket, case ClientMessage): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
7123
diff
changeset
|
4067 and it seems to cause the bug that mouse events stop coming |
6c6a776a64e1
(XTread_socket, case ClientMessage): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
7123
diff
changeset
|
4068 after a while. */ |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4069 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4070 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4071 #endif /* USE_X_TOOLKIT */ |
7128
6c6a776a64e1
(XTread_socket, case ClientMessage): Don't call
Richard M. Stallman <rms@gnu.org>
parents:
7123
diff
changeset
|
4072 #endif |
286 | 4073 break; |
4074 | |
4075 case ConfigureNotify: | |
6088
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4076 f = x_any_window_to_frame (event.xconfigure.window); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4077 #ifdef USE_X_TOOLKIT |
6088
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4078 if (f |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4079 #if 0 |
6088
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4080 && ! event.xconfigure.send_event |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4081 #endif |
6088
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4082 && (event.xconfigure.window == XtWindow (f->display.x->widget))) |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4083 { |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4084 Window win, child; |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4085 int win_x, win_y; |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4086 |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4087 /* Find the position of the outside upper-left corner of |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4088 the window, in the root coordinate system. Don't |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4089 refer to the parent window here; we may be processing |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4090 this event after the window manager has changed our |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4091 parent, but before we have reached the ReparentNotify. */ |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4092 XTranslateCoordinates (x_current_display, |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4093 |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4094 /* From-window, to-window. */ |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4095 XtWindow (f->display.x->widget), |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4096 ROOT_WINDOW, |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4097 |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4098 /* From-position, to-position. */ |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4099 -event.xconfigure.border_width, |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4100 -event.xconfigure.border_width, |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4101 &win_x, &win_y, |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4102 |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4103 /* Child of win. */ |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4104 &child); |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4105 event.xconfigure.x = win_x; |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4106 event.xconfigure.y = win_y; |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4107 |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4108 f->display.x->pixel_width = event.xconfigure.width; |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4109 f->display.x->pixel_height = event.xconfigure.height; |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4110 f->display.x->left_pos = event.xconfigure.x; |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4111 f->display.x->top_pos = event.xconfigure.y; |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4112 |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4113 /* What we have now is the position of Emacs's own window. |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4114 Convert that to the position of the window manager window. */ |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4115 { |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4116 int x, y; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4117 x_real_positions (f, &x, &y); |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4118 f->display.x->left_pos = x; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4119 f->display.x->top_pos = y; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4120 } |
6088
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4121 } |
8e38fcb2df96
(XTread_socket): For case ConfigureNotify, call x_any_window_to_frame.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6055
diff
changeset
|
4122 goto OTHER; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4123 #else /* not USE_X_TOOLKIT */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4124 if (f) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4125 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4126 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4127 int columns = PIXEL_TO_CHAR_WIDTH (f, event.xconfigure.width); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4128 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4129 /* Even if the number of character rows and columns has |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4130 not changed, the font size may have changed, so we need |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4131 to check the pixel dimensions as well. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4132 if (columns != f->width |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4133 || rows != f->height |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4134 || event.xconfigure.width != f->display.x->pixel_width |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4135 || event.xconfigure.height != f->display.x->pixel_height) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4136 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4137 change_frame_size (f, rows, columns, 0, 1); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4138 SET_FRAME_GARBAGED (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4139 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4140 |
3045
0267fb20b0df
(XTread_socket, ConfigureNotify case):
Richard M. Stallman <rms@gnu.org>
parents:
3030
diff
changeset
|
4141 if (! event.xconfigure.send_event) |
3030
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4142 { |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4143 Window win, child; |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4144 int win_x, win_y; |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4145 |
3951
9da0fb7d815e
* xterm.c (XTread_socket): When handing non-synthetic
Jim Blandy <jimb@redhat.com>
parents:
3943
diff
changeset
|
4146 /* Find the position of the outside upper-left corner of |
9da0fb7d815e
* xterm.c (XTread_socket): When handing non-synthetic
Jim Blandy <jimb@redhat.com>
parents:
3943
diff
changeset
|
4147 the window, in the root coordinate system. Don't |
9da0fb7d815e
* xterm.c (XTread_socket): When handing non-synthetic
Jim Blandy <jimb@redhat.com>
parents:
3943
diff
changeset
|
4148 refer to the parent window here; we may be processing |
9da0fb7d815e
* xterm.c (XTread_socket): When handing non-synthetic
Jim Blandy <jimb@redhat.com>
parents:
3943
diff
changeset
|
4149 this event after the window manager has changed our |
9da0fb7d815e
* xterm.c (XTread_socket): When handing non-synthetic
Jim Blandy <jimb@redhat.com>
parents:
3943
diff
changeset
|
4150 parent, but before we have reached the ReparentNotify. */ |
3030
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4151 XTranslateCoordinates (x_current_display, |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4152 |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4153 /* From-window, to-window. */ |
3951
9da0fb7d815e
* xterm.c (XTread_socket): When handing non-synthetic
Jim Blandy <jimb@redhat.com>
parents:
3943
diff
changeset
|
4154 f->display.x->window_desc, |
3045
0267fb20b0df
(XTread_socket, ConfigureNotify case):
Richard M. Stallman <rms@gnu.org>
parents:
3030
diff
changeset
|
4155 ROOT_WINDOW, |
3030
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4156 |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4157 /* From-position, to-position. */ |
3951
9da0fb7d815e
* xterm.c (XTread_socket): When handing non-synthetic
Jim Blandy <jimb@redhat.com>
parents:
3943
diff
changeset
|
4158 -event.xconfigure.border_width, |
9da0fb7d815e
* xterm.c (XTread_socket): When handing non-synthetic
Jim Blandy <jimb@redhat.com>
parents:
3943
diff
changeset
|
4159 -event.xconfigure.border_width, |
3030
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4160 &win_x, &win_y, |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4161 |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4162 /* Child of win. */ |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4163 &child); |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4164 event.xconfigure.x = win_x; |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4165 event.xconfigure.y = win_y; |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4166 } |
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
4167 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4168 f->display.x->pixel_width = event.xconfigure.width; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4169 f->display.x->pixel_height = event.xconfigure.height; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4170 f->display.x->left_pos = event.xconfigure.x; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4171 f->display.x->top_pos = event.xconfigure.y; |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4172 |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4173 /* What we have now is the position of Emacs's own window. |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4174 Convert that to the position of the window manager window. */ |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4175 { |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4176 int x, y; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4177 x_real_positions (f, &x, &y); |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4178 f->display.x->left_pos = x; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4179 f->display.x->top_pos = y; |
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
4180 if (y != event.xconfigure.y) |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
4181 { |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
4182 /* Since the WM decorations come below top_pos now, |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
4183 we must put them below top_pos in the future. */ |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
4184 f->display.x->win_gravity = NorthWestGravity; |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
4185 x_wm_set_size_hint (f, 0, 0); |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
4186 } |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
4187 } |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4188 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4189 #endif /* not USE_X_TOOLKIT */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4190 break; |
286 | 4191 |
4192 case ButtonPress: | |
4193 case ButtonRelease: | |
4194 { | |
4195 /* If we decide we want to generate an event to be seen | |
4196 by the rest of Emacs, we put it here. */ | |
4197 struct input_event emacs_event; | |
4198 emacs_event.kind = no_event; | |
4199 | |
7501
7196bd4f57d4
(XTread_socket): For button events, clear compose_status.
Richard M. Stallman <rms@gnu.org>
parents:
7469
diff
changeset
|
4200 bzero (&compose_status, sizeof (compose_status)); |
7196bd4f57d4
(XTread_socket): For button events, clear compose_status.
Richard M. Stallman <rms@gnu.org>
parents:
7469
diff
changeset
|
4201 |
771 | 4202 f = x_window_to_frame (event.xbutton.window); |
4203 if (f) | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4204 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4205 if (!x_focus_frame || (f == x_focus_frame)) |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
4206 construct_mouse_click (&emacs_event, &event, f); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4207 } |
286 | 4208 else |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4209 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
4210 struct scroll_bar *bar = |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
4211 x_window_to_scroll_bar (event.xbutton.window); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4212 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4213 if (bar) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
4214 x_scroll_bar_handle_click (bar, &event, &emacs_event); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4215 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4216 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4217 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4218 f = x_any_window_to_frame (event.xbutton.window); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4219 if (f && event.type == ButtonPress) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4220 construct_menu_click (&emacs_event, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4221 &event, f); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4222 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4223 #endif /* USE_X_TOOLKIT */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4224 } |
286 | 4225 |
4226 if (numchars >= 1 && emacs_event.kind != no_event) | |
4227 { | |
4228 bcopy (&emacs_event, bufp, sizeof (struct input_event)); | |
4229 bufp++; | |
4230 count++; | |
4231 numchars--; | |
4232 } | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4233 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4234 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4235 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4236 #endif /* USE_X_TOOLKIT */ |
286 | 4237 } |
4238 break; | |
4239 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4240 #else /* ! defined (HAVE_X11) */ |
286 | 4241 case ButtonPressed: |
4242 case ButtonReleased: | |
771 | 4243 f = x_window_to_frame (event.window); |
4244 if (f) | |
286 | 4245 { |
771 | 4246 if (event.window == f->display.x->icon_desc) |
286 | 4247 { |
771 | 4248 x_make_frame_visible (f); |
286 | 4249 |
4250 if (warp_mouse_on_deiconify) | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4251 XWarpMouse (FRAME_X_WINDOW (f), 10, 10); |
286 | 4252 break; |
4253 } | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4254 if (event.window == FRAME_X_WINDOW (f)) |
286 | 4255 { |
771 | 4256 if (f->auto_raise) |
4257 x_raise_frame (f); | |
286 | 4258 } |
4259 } | |
4260 enqueue_event (&event, &x_mouse_queue); | |
4261 if (numchars >= 2) | |
4262 { | |
4263 bufp->kind = ascii_keystroke; | |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
4264 bufp->code = 'X' & 037; /* C-x */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4265 XSET (bufp->frame_or_window, Lisp_Frame, f); |
429 | 4266 XSET (bufp->time, Lisp_Int, event.xkey.time); |
286 | 4267 bufp++; |
4268 | |
4269 bufp->kind = ascii_keystroke; | |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
4270 bufp->code = 0; /* C-@ */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4271 XSET (bufp->frame_or_window, Lisp_Frame, f); |
429 | 4272 XSET (bufp->time, Lisp_Int, event.xkey.time); |
286 | 4273 bufp++; |
4274 | |
4275 count += 2; | |
4276 numchars -= 2; | |
4277 } | |
4278 break; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4279 #endif /* ! defined (HAVE_X11) */ |
286 | 4280 |
4281 #ifdef HAVE_X11 | |
4282 | |
4283 case CirculateNotify: | |
4284 break; | |
4285 case CirculateRequest: | |
4286 break; | |
4287 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4288 #endif /* ! defined (HAVE_X11) */ |
286 | 4289 |
4290 case MappingNotify: | |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4291 /* Someone has changed the keyboard mapping - update the |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4292 local cache. */ |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4293 switch (event.xmapping.request) |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4294 { |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4295 case MappingModifier: |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4296 x_find_modifier_meanings (); |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4297 /* This is meant to fall through. */ |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4298 case MappingKeyboard: |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4299 XRefreshKeyboardMapping (&event.xmapping); |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
4300 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4301 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4302 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4303 #endif /* USE_X_TOOLKIT */ |
286 | 4304 break; |
4305 | |
4306 default: | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4307 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4308 OTHER: |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4309 BLOCK_INPUT; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4310 XtDispatchEvent (&event); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4311 UNBLOCK_INPUT; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
4312 #endif /* USE_X_TOOLKIT */ |
286 | 4313 break; |
4314 } | |
4315 } | |
4316 | |
5753
eb44ecad5557
(XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5740
diff
changeset
|
4317 #ifdef X_IO_BUG |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4318 if (! event_found) |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4319 { |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4320 /* On some systems, an X bug causes Emacs to get no more events |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4321 when the window is destroyed. Detect that. (1994.) */ |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4322 /* 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
|
4323 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
|
4324 B. Bretthauer, 1994 */ |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4325 x_noop_count++; |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4326 if (x_noop_count >= 100) |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4327 { |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4328 x_noop_count=0; |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4329 XNoOp (x_current_display); |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4330 } |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
4331 } |
5753
eb44ecad5557
(XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5740
diff
changeset
|
4332 #endif /* X_IO_BUG */ |
eb44ecad5557
(XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5740
diff
changeset
|
4333 |
5953
60f711724bc9
(XTread_socket): Do not assume that select returning
Richard M. Stallman <rms@gnu.org>
parents:
5916
diff
changeset
|
4334 #if 0 /* This fails for serial-line connections to the X server, |
60f711724bc9
(XTread_socket): Do not assume that select returning
Richard M. Stallman <rms@gnu.org>
parents:
5916
diff
changeset
|
4335 because the characters arrive one by one, and a partial |
60f711724bc9
(XTread_socket): Do not assume that select returning
Richard M. Stallman <rms@gnu.org>
parents:
5916
diff
changeset
|
4336 command makes select return but gives nothing to read. |
60f711724bc9
(XTread_socket): Do not assume that select returning
Richard M. Stallman <rms@gnu.org>
parents:
5916
diff
changeset
|
4337 We'll have to hope that the bug that this tried to fix |
60f711724bc9
(XTread_socket): Do not assume that select returning
Richard M. Stallman <rms@gnu.org>
parents:
5916
diff
changeset
|
4338 in 1988 has been fixed in Xlib or the X server. */ |
286 | 4339 #ifdef HAVE_SELECT |
4340 if (expected && ! event_found) | |
4341 { | |
4342 /* AOJ 880406: if select returns true but XPending doesn't, it means that | |
4343 there is an EOF condition; in other words, that X has died. | |
4344 Act as if there had been a hangup. */ | |
4345 int fd = ConnectionNumber (x_current_display); | |
5357
b36dfc938ba4
(XTread_socket): Make proper junk values to pass to select.
Richard M. Stallman <rms@gnu.org>
parents:
5354
diff
changeset
|
4346 SELECT_TYPE mask, junk1, junk2; |
3938
83d870a52936
* xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents:
3924
diff
changeset
|
4347 EMACS_TIME timeout; |
3924
44fe472b66ba
* xterm.c: Add CPP tangle from process.c to get definitions for
Jim Blandy <jimb@redhat.com>
parents:
3890
diff
changeset
|
4348 |
4683
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
4349 FD_ZERO (&mask); |
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
4350 FD_SET (fd, &mask); |
3938
83d870a52936
* xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents:
3924
diff
changeset
|
4351 EMACS_SET_SECS_USECS (timeout, 0, 0); |
5357
b36dfc938ba4
(XTread_socket): Make proper junk values to pass to select.
Richard M. Stallman <rms@gnu.org>
parents:
5354
diff
changeset
|
4352 FD_ZERO (&junk1); |
b36dfc938ba4
(XTread_socket): Make proper junk values to pass to select.
Richard M. Stallman <rms@gnu.org>
parents:
5354
diff
changeset
|
4353 FD_ZERO (&junk2); |
b36dfc938ba4
(XTread_socket): Make proper junk values to pass to select.
Richard M. Stallman <rms@gnu.org>
parents:
5354
diff
changeset
|
4354 if (0 != select (fd + 1, &mask, &junk1, &junk2, &timeout) |
286 | 4355 && !XStuffPending ()) |
4356 kill (getpid (), SIGHUP); | |
4357 } | |
4683
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
4358 #endif /* HAVE_SELECT */ |
5953
60f711724bc9
(XTread_socket): Do not assume that select returning
Richard M. Stallman <rms@gnu.org>
parents:
5916
diff
changeset
|
4359 #endif /* 0 */ |
286 | 4360 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4361 #ifndef HAVE_X11 |
771 | 4362 if (updating_frame == 0) |
286 | 4363 x_do_pending_expose (); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4364 #endif |
286 | 4365 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4366 /* If the focus was just given to an autoraising frame, |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4367 raise it now. */ |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4368 #ifdef HAVE_X11 |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4369 if (pending_autoraise_frame) |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4370 { |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4371 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
|
4372 pending_autoraise_frame = 0; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4373 } |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4374 #endif |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
4375 |
286 | 4376 UNBLOCK_INPUT; |
4377 return count; | |
4378 } | |
4379 | |
4380 #ifndef HAVE_X11 | |
4381 /* Read and process only Expose events | |
4382 until we get an ExposeCopy event; then return. | |
4383 This is used in insert/delete line. | |
4384 We assume input is already blocked. */ | |
4385 | |
4386 static void | |
4387 x_read_exposes () | |
4388 { | |
771 | 4389 struct frame *f; |
286 | 4390 XKeyPressedEvent event; |
4391 | |
4392 while (1) | |
4393 { | |
4394 /* while there are more events*/ | |
4395 XMaskEvent (ExposeWindow | ExposeRegion | ExposeCopy, &event); | |
4396 switch (event.type) | |
4397 { | |
4398 case ExposeWindow: | |
4399 if (event.subwindow != 0) | |
4400 break; /* duplicate event */ | |
771 | 4401 f = x_window_to_frame (event.window); |
4402 if (event.window == f->display.x->icon_desc) | |
286 | 4403 { |
771 | 4404 refreshicon (f); |
286 | 4405 break; |
4406 } | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4407 if (event.window == FRAME_X_WINDOW (f)) |
286 | 4408 { |
4409 expose_all_windows = 1; | |
771 | 4410 f->display.x->needs_exposure = 1; |
286 | 4411 break; |
4412 } | |
4413 break; | |
4414 | |
4415 case ExposeRegion: | |
4416 if (event.subwindow != 0) | |
4417 break; /* duplicate event */ | |
771 | 4418 f = x_window_to_frame (event.window); |
4419 if (event.window == f->display.x->icon_desc) | |
286 | 4420 { |
771 | 4421 refreshicon (f); |
286 | 4422 break; |
4423 } | |
4424 /* If window already needs full redraw, ignore this rectangle. */ | |
771 | 4425 if (expose_all_windows && f->display.x->needs_exposure) |
286 | 4426 break; |
4427 /* Put the event on the queue of rectangles to redraw. */ | |
4428 if (enqueue_event (&event, &x_expose_queue)) | |
4429 /* If it is full, we can't record the rectangle, | |
4430 so redraw this entire window. */ | |
4431 { | |
4432 /* Say must check all windows' needs_exposure flags. */ | |
4433 expose_all_windows = 1; | |
771 | 4434 f->display.x->needs_exposure = 1; |
286 | 4435 } |
4436 break; | |
4437 | |
4438 case ExposeCopy: | |
4439 return; | |
4440 } | |
4441 } | |
4442 } | |
4443 #endif /* HAVE_X11 */ | |
4444 | |
4445 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4446 /* Drawing the cursor. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4447 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4448 |
286 | 4449 /* Draw a hollow box cursor. Don't change the inside of the box. */ |
4450 | |
4451 static void | |
771 | 4452 x_draw_box (f) |
4453 struct frame *f; | |
286 | 4454 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4455 int left = CHAR_TO_PIXEL_COL (f, f->cursor_x); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4456 int top = CHAR_TO_PIXEL_ROW (f, f->cursor_y); |
771 | 4457 int width = FONT_WIDTH (f->display.x->font); |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
4458 int height = f->display.x->line_height; |
286 | 4459 |
4460 #ifdef HAVE_X11 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4461 XDrawRectangle (x_current_display, FRAME_X_WINDOW (f), |
771 | 4462 f->display.x->cursor_gc, |
286 | 4463 left, top, width - 1, height - 1); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4464 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4465 XPixSet (FRAME_X_WINDOW (f), |
286 | 4466 left, top, width, 1, |
771 | 4467 f->display.x->cursor_pixel); |
4468 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4469 XPixSet (FRAME_X_WINDOW (f), |
286 | 4470 left, top, 1, height, |
771 | 4471 f->display.x->cursor_pixel); |
4472 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4473 XPixSet (FRAME_X_WINDOW (f), |
286 | 4474 left+width-1, top, 1, height, |
771 | 4475 f->display.x->cursor_pixel); |
4476 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4477 XPixSet (FRAME_X_WINDOW (f), |
286 | 4478 left, top+height-1, width, 1, |
771 | 4479 f->display.x->cursor_pixel); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4480 #endif /* ! defined (HAVE_X11) */ |
286 | 4481 } |
4482 | |
771 | 4483 /* Clear the cursor of frame F to background color, |
286 | 4484 and mark the cursor as not shown. |
4485 This is used when the text where the cursor is | |
4486 is about to be rewritten. */ | |
4487 | |
4488 static void | |
771 | 4489 clear_cursor (f) |
4490 struct frame *f; | |
286 | 4491 { |
4492 int mask; | |
4493 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
4494 if (! FRAME_VISIBLE_P (f) |
771 | 4495 || f->phys_cursor_x < 0) |
286 | 4496 return; |
4497 | |
4498 #ifdef HAVE_X11 | |
771 | 4499 x_display_cursor (f, 0); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4500 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4501 XPixSet (FRAME_X_WINDOW (f), |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4502 CHAR_TO_PIXEL_COL (f, f->phys_cursor_x), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4503 CHAR_TO_PIXEL_ROW (f, f->phys_cursor_y), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
4504 FONT_WIDTH (f->display.x->font), f->display.x->line_height, |
771 | 4505 f->display.x->background_pixel); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4506 #endif /* ! defined (HAVE_X11) */ |
771 | 4507 f->phys_cursor_x = -1; |
286 | 4508 } |
4509 | |
771 | 4510 /* Redraw the glyph at ROW, COLUMN on frame F, in the style |
429 | 4511 HIGHLIGHT. HIGHLIGHT is as defined for dumpglyphs. Return the |
4512 glyph drawn. */ | |
286 | 4513 |
4514 static void | |
771 | 4515 x_draw_single_glyph (f, row, column, glyph, highlight) |
4516 struct frame *f; | |
286 | 4517 int row, column; |
429 | 4518 GLYPH glyph; |
286 | 4519 int highlight; |
4520 { | |
771 | 4521 dumpglyphs (f, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4522 CHAR_TO_PIXEL_COL (f, column), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4523 CHAR_TO_PIXEL_ROW (f, row), |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4524 &glyph, 1, highlight, 0); |
286 | 4525 } |
4526 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4527 static void |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4528 x_display_bar_cursor (f, on) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4529 struct frame *f; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4530 int on; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4531 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4532 struct frame_glyphs *current_glyphs = FRAME_CURRENT_GLYPHS (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4533 |
2235
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
4534 /* This is pointless on invisible frames, and dangerous on garbaged |
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
4535 frames; in the latter case, the frame may be in the midst of |
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
4536 changing its size, and curs_x and curs_y may be off the frame. */ |
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
4537 if (! FRAME_VISIBLE_P (f) || FRAME_GARBAGED_P (f)) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4538 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4539 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4540 if (! on && f->phys_cursor_x < 0) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4541 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4542 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4543 /* If we're not updating, then we want to use the current frame's |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4544 cursor position, not our local idea of where the cursor ought to be. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4545 if (f != updating_frame) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4546 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4547 curs_x = FRAME_CURSOR_X (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4548 curs_y = FRAME_CURSOR_Y (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4549 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4550 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4551 /* If there is anything wrong with the current cursor state, remove it. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4552 if (f->phys_cursor_x >= 0 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4553 && (!on |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4554 || f->phys_cursor_x != curs_x |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4555 || f->phys_cursor_y != curs_y |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4556 || f->display.x->current_cursor != bar_cursor)) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4557 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4558 /* Erase the cursor by redrawing the character underneath it. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4559 x_draw_single_glyph (f, f->phys_cursor_y, f->phys_cursor_x, |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4560 f->phys_cursor_glyph, |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4561 current_glyphs->highlight[f->phys_cursor_y]); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4562 f->phys_cursor_x = -1; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4563 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4564 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4565 /* If we now need a cursor in the new place or in the new form, do it so. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4566 if (on |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4567 && (f->phys_cursor_x < 0 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4568 || (f->display.x->current_cursor != bar_cursor))) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4569 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4570 f->phys_cursor_glyph |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4571 = ((current_glyphs->enable[curs_y] |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4572 && curs_x < current_glyphs->used[curs_y]) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4573 ? current_glyphs->glyphs[curs_y][curs_x] |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4574 : SPACEGLYPH); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4575 XFillRectangle (x_current_display, FRAME_X_WINDOW (f), |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4576 f->display.x->cursor_gc, |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4577 CHAR_TO_PIXEL_COL (f, curs_x), |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4578 CHAR_TO_PIXEL_ROW (f, curs_y), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
4579 1, f->display.x->line_height); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4580 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4581 f->phys_cursor_x = curs_x; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4582 f->phys_cursor_y = curs_y; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4583 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4584 f->display.x->current_cursor = bar_cursor; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4585 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4586 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4587 if (updating_frame != f) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4588 XFlushQueue (); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4589 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4590 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4591 |
771 | 4592 /* Turn the displayed cursor of frame F on or off according to ON. |
286 | 4593 If ON is nonzero, where to put the cursor is specified |
771 | 4594 by F->cursor_x and F->cursor_y. */ |
286 | 4595 |
4596 static void | |
771 | 4597 x_display_box_cursor (f, on) |
4598 struct frame *f; | |
286 | 4599 int on; |
4600 { | |
771 | 4601 struct frame_glyphs *current_glyphs = FRAME_CURRENT_GLYPHS (f); |
4602 | |
2235
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
4603 /* This is pointless on invisible frames, and dangerous on garbaged |
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
4604 frames; in the latter case, the frame may be in the midst of |
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
4605 changing its size, and curs_x and curs_y may be off the frame. */ |
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
4606 if (! FRAME_VISIBLE_P (f) || FRAME_GARBAGED_P (f)) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4607 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4608 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4609 /* If cursor is off and we want it off, return quickly. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4610 if (!on && f->phys_cursor_x < 0) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4611 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4612 |
771 | 4613 /* If we're not updating, then we want to use the current frame's |
708 | 4614 cursor position, not our local idea of where the cursor ought to be. */ |
771 | 4615 if (f != updating_frame) |
708 | 4616 { |
771 | 4617 curs_x = FRAME_CURSOR_X (f); |
4618 curs_y = FRAME_CURSOR_Y (f); | |
708 | 4619 } |
4620 | |
286 | 4621 /* If cursor is currently being shown and we don't want it to be |
4622 or it is in the wrong place, | |
4623 or we want a hollow box and it's not so, (pout!) | |
4624 erase it. */ | |
771 | 4625 if (f->phys_cursor_x >= 0 |
286 | 4626 && (!on |
771 | 4627 || f->phys_cursor_x != curs_x |
4628 || f->phys_cursor_y != curs_y | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4629 || (f->display.x->current_cursor != hollow_box_cursor |
771 | 4630 && (f != x_highlight_frame)))) |
286 | 4631 { |
7508
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4632 int mouse_face_here = 0; |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4633 |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4634 /* If the cursor is in the mouse face area, redisplay that when |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4635 we clear the cursor. */ |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4636 if (f == mouse_face_mouse_frame |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4637 && |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4638 (f->phys_cursor_y > mouse_face_beg_row |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4639 || (f->phys_cursor_y == mouse_face_beg_row |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4640 && f->phys_cursor_x >= mouse_face_beg_col)) |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4641 && |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4642 (f->phys_cursor_y < mouse_face_end_row |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4643 || (f->phys_cursor_y == mouse_face_end_row |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4644 && f->phys_cursor_x < mouse_face_end_col))) |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4645 mouse_face_here = 1; |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4646 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4647 /* If the font is not as tall as a whole line, |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4648 we must explicitly clear the line's whole height. */ |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4649 if (FONT_HEIGHT (f->display.x->font) != f->display.x->line_height) |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4650 XClearArea (x_current_display, FRAME_X_WINDOW (f), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4651 CHAR_TO_PIXEL_COL (f, f->phys_cursor_x), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4652 CHAR_TO_PIXEL_ROW (f, f->phys_cursor_y), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4653 FONT_WIDTH (f->display.x->font), |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4654 f->display.x->line_height, False); |
286 | 4655 /* Erase the cursor by redrawing the character underneath it. */ |
771 | 4656 x_draw_single_glyph (f, f->phys_cursor_y, f->phys_cursor_x, |
4657 f->phys_cursor_glyph, | |
7508
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4658 (mouse_face_here |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4659 ? 3 |
a15923bc982d
(x_display_box_cursor): Preserve mouse highlight if the old cursor was in it.
Richard M. Stallman <rms@gnu.org>
parents:
7501
diff
changeset
|
4660 : current_glyphs->highlight[f->phys_cursor_y])); |
771 | 4661 f->phys_cursor_x = -1; |
286 | 4662 } |
4663 | |
4664 /* If we want to show a cursor, | |
4665 or we want a box cursor and it's not so, | |
4666 write it in the right place. */ | |
4667 if (on | |
771 | 4668 && (f->phys_cursor_x < 0 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4669 || (f->display.x->current_cursor != filled_box_cursor |
771 | 4670 && f == x_highlight_frame))) |
286 | 4671 { |
771 | 4672 f->phys_cursor_glyph |
708 | 4673 = ((current_glyphs->enable[curs_y] |
4674 && curs_x < current_glyphs->used[curs_y]) | |
4675 ? current_glyphs->glyphs[curs_y][curs_x] | |
429 | 4676 : SPACEGLYPH); |
771 | 4677 if (f != x_highlight_frame) |
286 | 4678 { |
771 | 4679 x_draw_box (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4680 f->display.x->current_cursor = hollow_box_cursor; |
286 | 4681 } |
4682 else | |
4683 { | |
771 | 4684 x_draw_single_glyph (f, curs_y, curs_x, |
4685 f->phys_cursor_glyph, 2); | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4686 f->display.x->current_cursor = filled_box_cursor; |
286 | 4687 } |
4688 | |
771 | 4689 f->phys_cursor_x = curs_x; |
4690 f->phys_cursor_y = curs_y; | |
286 | 4691 } |
4692 | |
771 | 4693 if (updating_frame != f) |
286 | 4694 XFlushQueue (); |
4695 } | |
4696 | |
771 | 4697 x_display_cursor (f, on) |
4698 struct frame *f; | |
286 | 4699 int on; |
4700 { | |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
4701 BLOCK_INPUT; |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
4702 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4703 if (FRAME_DESIRED_CURSOR (f) == filled_box_cursor) |
771 | 4704 x_display_box_cursor (f, on); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4705 else if (FRAME_DESIRED_CURSOR (f) == bar_cursor) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4706 x_display_bar_cursor (f, on); |
286 | 4707 else |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4708 /* Those are the only two we have implemented! */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4709 abort (); |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
4710 |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
4711 UNBLOCK_INPUT; |
286 | 4712 } |
4713 | |
4714 /* Icons. */ | |
4715 | |
771 | 4716 /* Refresh bitmap kitchen sink icon for frame F |
286 | 4717 when we get an expose event for it. */ |
4718 | |
771 | 4719 refreshicon (f) |
4720 struct frame *f; | |
286 | 4721 { |
4722 #ifdef HAVE_X11 | |
4723 /* Normally, the window manager handles this function. */ | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4724 #else /* ! defined (HAVE_X11) */ |
286 | 4725 int mask; |
4726 | |
771 | 4727 if (f->display.x->icon_bitmap_flag) |
4728 XBitmapBitsPut (f->display.x->icon_desc, 0, 0, sink_width, sink_height, | |
286 | 4729 sink_bits, BlackPixel, WHITE_PIX_DEFAULT, |
4730 icon_bitmap, GXcopy, AllPlanes); | |
4731 else | |
4732 { | |
771 | 4733 extern struct frame *selected_frame; |
286 | 4734 struct Lisp_String *str; |
4735 unsigned char *string; | |
4736 | |
4737 string | |
771 | 4738 = XSTRING (XBUFFER (XWINDOW (f->selected_window)->buffer)->name)->data; |
4739 | |
4740 if (f->display.x->icon_label != string) | |
286 | 4741 { |
771 | 4742 f->display.x->icon_label = string; |
4743 XChangeWindow (f->display.x->icon_desc, | |
286 | 4744 XQueryWidth (string, icon_font_info->id) + 10, |
4745 icon_font_info->height + 10); | |
4746 } | |
4747 | |
771 | 4748 XText (f->display.x->icon_desc, 5, 5, string, |
286 | 4749 str->size, icon_font_info->id, |
4750 BLACK_PIX_DEFAULT, WHITE_PIX_DEFAULT); | |
4751 } | |
4752 XFlushQueue (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4753 #endif /* ! defined (HAVE_X11) */ |
286 | 4754 } |
4755 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4756 /* Make the x-window of frame F use the gnu icon bitmap. */ |
286 | 4757 |
4758 int | |
771 | 4759 x_bitmap_icon (f) |
4760 struct frame *f; | |
286 | 4761 { |
4762 int mask; | |
4763 Window icon_window; | |
4764 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4765 if (FRAME_X_WINDOW (f) == 0) |
286 | 4766 return 1; |
4767 | |
4768 #ifdef HAVE_X11 | |
3282
a3c8d3866d01
(x_bitmap_icon): Don't free icon_bitmap;
Richard M. Stallman <rms@gnu.org>
parents:
3272
diff
changeset
|
4769 if (! icon_bitmap) |
a3c8d3866d01
(x_bitmap_icon): Don't free icon_bitmap;
Richard M. Stallman <rms@gnu.org>
parents:
3272
diff
changeset
|
4770 icon_bitmap = |
a3c8d3866d01
(x_bitmap_icon): Don't free icon_bitmap;
Richard M. Stallman <rms@gnu.org>
parents:
3272
diff
changeset
|
4771 XCreateBitmapFromData (x_current_display, FRAME_X_WINDOW (f), |
a3c8d3866d01
(x_bitmap_icon): Don't free icon_bitmap;
Richard M. Stallman <rms@gnu.org>
parents:
3272
diff
changeset
|
4772 gnu_bits, gnu_width, gnu_height); |
771 | 4773 x_wm_set_icon_pixmap (f, icon_bitmap); |
4774 f->display.x->icon_bitmap_flag = 1; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4775 #else /* ! defined (HAVE_X11) */ |
771 | 4776 if (f->display.x->icon_desc) |
286 | 4777 { |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4778 XClearIconWindow (FRAME_X_WINDOW (f)); |
771 | 4779 XDestroyWindow (f->display.x->icon_desc); |
286 | 4780 } |
4781 | |
771 | 4782 icon_window = XCreateWindow (f->display.x->parent_desc, |
286 | 4783 0, 0, sink_width, sink_height, |
4784 2, WhitePixmap, (Pixmap) NULL); | |
4785 | |
4786 if (icon_window == 0) | |
4787 return 1; | |
4788 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4789 XSetIconWindow (FRAME_X_WINDOW (f), icon_window); |
286 | 4790 XSelectInput (icon_window, ExposeWindow | UnmapWindow); |
4791 | |
771 | 4792 f->display.x->icon_desc = icon_window; |
4793 f->display.x->icon_bitmap_flag = 1; | |
286 | 4794 |
4795 if (icon_bitmap == 0) | |
4796 icon_bitmap | |
4797 = XStoreBitmap (sink_mask_width, sink_mask_height, sink_mask_bits); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4798 #endif /* ! defined (HAVE_X11) */ |
286 | 4799 |
4800 return 0; | |
4801 } | |
4802 | |
4803 | |
771 | 4804 /* Make the x-window of frame F use a rectangle with text. */ |
286 | 4805 |
4806 int | |
771 | 4807 x_text_icon (f, icon_name) |
4808 struct frame *f; | |
286 | 4809 char *icon_name; |
4810 { | |
4811 #ifndef HAVE_X11 | |
4812 int mask; | |
4813 int width; | |
4814 Window icon_window; | |
4815 char *X_DefaultValue; | |
4816 Bitmap b1; | |
4817 | |
4818 #ifndef WhitePixel | |
4819 #define WhitePixel 1 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4820 #endif /* WhitePixel */ |
286 | 4821 |
4822 #ifndef BlackPixel | |
4823 #define BlackPixel 0 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4824 #endif /* BlackPixel */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4825 #endif /* HAVE_X11 */ |
286 | 4826 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4827 if (FRAME_X_WINDOW (f) == 0) |
286 | 4828 return 1; |
4829 | |
4830 #ifdef HAVE_X11 | |
4831 if (icon_name) | |
771 | 4832 f->display.x->icon_label = icon_name; |
286 | 4833 else |
771 | 4834 if (! f->display.x->icon_label) |
4835 f->display.x->icon_label = " *emacs* "; | |
286 | 4836 |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
4837 #if 0 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4838 XSetIconName (x_current_display, FRAME_X_WINDOW (f), |
771 | 4839 (char *) f->display.x->icon_label); |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
4840 #endif |
286 | 4841 |
771 | 4842 f->display.x->icon_bitmap_flag = 0; |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
4843 x_wm_set_icon_pixmap (f, 0); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4844 #else /* ! defined (HAVE_X11) */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4845 if (icon_font_info == 0) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4846 icon_font_info |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4847 = XGetFont (XGetDefault (XDISPLAY |
2279
012b04efa234
* emacs.c (Finvocation_name): New function.
Jim Blandy <jimb@redhat.com>
parents:
2235
diff
changeset
|
4848 (char *) XSTRING (Vinvocation_name)->data, |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4849 "BodyFont")); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4850 |
771 | 4851 if (f->display.x->icon_desc) |
286 | 4852 { |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4853 XClearIconWindow (XDISPLAY FRAME_X_WINDOW (f)); |
771 | 4854 XDestroyWindow (XDISPLAY f->display.x->icon_desc); |
286 | 4855 } |
4856 | |
4857 if (icon_name) | |
771 | 4858 f->display.x->icon_label = (unsigned char *) icon_name; |
286 | 4859 else |
771 | 4860 if (! f->display.x->icon_label) |
4861 f->display.x->icon_label = XSTRING (f->name)->data; | |
4862 | |
4863 width = XStringWidth (f->display.x->icon_label, icon_font_info, 0, 0); | |
4864 icon_window = XCreateWindow (f->display.x->parent_desc, | |
4865 f->display.x->left_pos, | |
4866 f->display.x->top_pos, | |
286 | 4867 width + 10, icon_font_info->height + 10, |
4868 2, BlackPixmap, WhitePixmap); | |
4869 | |
4870 if (icon_window == 0) | |
4871 return 1; | |
4872 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4873 XSetIconWindow (FRAME_X_WINDOW (f), icon_window); |
286 | 4874 XSelectInput (icon_window, ExposeWindow | ExposeRegion | UnmapWindow | ButtonPressed); |
4875 | |
771 | 4876 f->display.x->icon_desc = icon_window; |
4877 f->display.x->icon_bitmap_flag = 0; | |
4878 f->display.x->icon_label = 0; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4879 #endif /* ! defined (HAVE_X11) */ |
286 | 4880 |
4881 return 0; | |
4882 } | |
4883 | |
621 | 4884 /* Handling X errors. */ |
4885 | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4886 /* Shut down Emacs in an orderly fashion, because of a SIGPIPE on the |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4887 X server's connection, or an error reported via the X protocol. */ |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
4888 |
621 | 4889 static SIGTYPE |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4890 x_connection_closed () |
621 | 4891 { |
4892 if (_Xdebug) | |
4893 abort (); | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4894 |
3710
38e8dc7fd1e8
(x_connection_closed): Pass new arg to shut_down_emacs.
Richard M. Stallman <rms@gnu.org>
parents:
3686
diff
changeset
|
4895 shut_down_emacs (0, 1, Qnil); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4896 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4897 exit (70); |
621 | 4898 } |
4899 | |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4900 /* An X error handler which prints an error message and then kills |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4901 Emacs. This is what's normally installed as Xlib's handler for |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4902 protocol errors. */ |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4903 static int |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4904 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
|
4905 Display *display; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4906 XErrorEvent *error; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4907 { |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4908 char buf[256]; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4909 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4910 /* Note that there is no real way portable across R3/R4 to get the |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4911 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
|
4912 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4913 XGetErrorText (display, error->error_code, buf, sizeof (buf)); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4914 fprintf (stderr, "X protocol error: %s on protocol request %d\n", |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4915 buf, error->request_code); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4916 |
3683
568c8391744d
* xterm.c (x_error_quitter, x_io_error_quitter): Remove calls to
Jim Blandy <jimb@redhat.com>
parents:
3669
diff
changeset
|
4917 #if 0 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4918 /* While we're testing Emacs 19, we'll just dump core whenever we |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4919 get an X error, so we can figure out why it happened. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4920 abort (); |
3683
568c8391744d
* xterm.c (x_error_quitter, x_io_error_quitter): Remove calls to
Jim Blandy <jimb@redhat.com>
parents:
3669
diff
changeset
|
4921 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
4922 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4923 x_connection_closed (); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4924 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4925 |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4926 /* A handler for X IO errors which prints an error message and then |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4927 kills Emacs. This is what is always installed as Xlib's handler |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4928 for I/O errors. */ |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4929 static int |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4930 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
|
4931 Display *display; |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4932 { |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4933 fprintf (stderr, "Connection to X server %s lost.\n", |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4934 XDisplayName (DisplayString (display))); |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4935 |
3683
568c8391744d
* xterm.c (x_error_quitter, x_io_error_quitter): Remove calls to
Jim Blandy <jimb@redhat.com>
parents:
3669
diff
changeset
|
4936 #if 0 |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4937 /* While we're testing Emacs 19, we'll just dump core whenever we |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4938 get an X error, so we can figure out why it happened. */ |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4939 abort (); |
3683
568c8391744d
* xterm.c (x_error_quitter, x_io_error_quitter): Remove calls to
Jim Blandy <jimb@redhat.com>
parents:
3669
diff
changeset
|
4940 #endif |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4941 |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4942 x_connection_closed (); |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4943 } |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
4944 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4945 /* A buffer for storing X error messages. */ |
3558
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
4946 static char *x_caught_error_message; |
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
4947 #define X_CAUGHT_ERROR_MESSAGE_SIZE 200 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4948 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4949 /* An X error handler which stores the error message in |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4950 x_caught_error_message. This is what's installed when |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4951 x_catch_errors is in effect. */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4952 static int |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4953 x_error_catcher (display, error) |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4954 Display *display; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4955 XErrorEvent *error; |
286 | 4956 { |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4957 XGetErrorText (display, error->error_code, |
3558
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
4958 x_caught_error_message, X_CAUGHT_ERROR_MESSAGE_SIZE); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4959 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4960 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4961 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4962 /* Begin trapping X errors. |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4963 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4964 After calling this function, X protocol errors no longer cause |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4965 Emacs to exit; instead, they are recorded in x_cfc_error_message. |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4966 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4967 Calling x_check_errors signals an Emacs error if an X error has |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4968 occurred since the last call to x_catch_errors or x_check_errors. |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4969 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4970 Calling x_uncatch_errors resumes the normal error handling. */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4971 |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
4972 void x_catch_errors (), x_check_errors (), x_uncatch_errors (); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4973 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4974 void |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4975 x_catch_errors () |
286 | 4976 { |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4977 /* Make sure any errors from previous requests have been dealt with. */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4978 XSync (x_current_display, False); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4979 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4980 /* Set up the error buffer. */ |
3465
d23de4338f96
(x_catch_errors): Fill in missing array size in cast.
Richard M. Stallman <rms@gnu.org>
parents:
3444
diff
changeset
|
4981 x_caught_error_message |
3558
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
4982 = (char*) xmalloc (X_CAUGHT_ERROR_MESSAGE_SIZE); |
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
4983 x_caught_error_message[0] = '\0'; |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4984 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4985 /* Install our little error handler. */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4986 XHandleError (x_error_catcher); |
286 | 4987 } |
4988 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4989 /* If any X protocol errors have arrived since the last call to |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4990 x_catch_errors or x_check_errors, signal an Emacs error using |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4991 sprintf (a buffer, FORMAT, the x error message text) as the text. */ |
5986 | 4992 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4993 void |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4994 x_check_errors (format) |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4995 char *format; |
286 | 4996 { |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4997 /* Make sure to catch any errors incurred so far. */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4998 XSync (x_current_display, False); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
4999 |
3558
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
5000 if (x_caught_error_message[0]) |
286 | 5001 { |
3558
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
5002 char buf[X_CAUGHT_ERROR_MESSAGE_SIZE + 56]; |
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
5003 |
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
5004 sprintf (buf, format, x_caught_error_message); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5005 x_uncatch_errors (); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5006 error (buf); |
286 | 5007 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5008 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5009 |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5010 /* Nonzero if we had any X protocol errors since we did x_catch_errors. */ |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5011 |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5012 int |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5013 x_had_errors_p () |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5014 { |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5015 /* Make sure to catch any errors incurred so far. */ |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5016 XSync (x_current_display, False); |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5017 |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5018 return x_caught_error_message[0] != 0; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5019 } |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5020 |
5986 | 5021 /* Stop catching X protocol errors and let them make Emacs die. */ |
5022 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5023 void |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5024 x_uncatch_errors () |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5025 { |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
5026 xfree (x_caught_error_message); |
3558
f7f187debe2d
(x_caught_error_message): Change type to char* from char*[].
Richard M. Stallman <rms@gnu.org>
parents:
3511
diff
changeset
|
5027 x_caught_error_message = 0; |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5028 XHandleError (x_error_quitter); |
286 | 5029 } |
5030 | |
5031 #if 0 | |
5032 static unsigned int x_wire_count; | |
5033 x_trace_wire () | |
5034 { | |
5035 fprintf (stderr, "Lib call: %d\n", ++x_wire_count); | |
5036 } | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5037 #endif /* ! 0 */ |
286 | 5038 |
5039 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5040 /* 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
|
5041 |
771 | 5042 /* Set the font of the x-window specified by frame F |
286 | 5043 to the font named NEWNAME. This is safe to use |
771 | 5044 even before F has an actual x-window. */ |
286 | 5045 |
5046 #ifdef HAVE_X11 | |
5047 | |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5048 struct font_info |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5049 { |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5050 XFontStruct *font; |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5051 char *name; |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5052 }; |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5053 |
286 | 5054 /* A table of all the fonts we have already loaded. */ |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5055 static struct font_info *x_font_table; |
286 | 5056 |
5057 /* The current capacity of x_font_table. */ | |
5058 static int x_font_table_size; | |
5059 | |
5060 /* The number of fonts actually stored in x_font_table. | |
5061 x_font_table[n] is used and valid iff 0 <= n < n_fonts. | |
5062 0 <= n_fonts <= x_font_table_size. */ | |
5063 static int n_fonts; | |
5064 | |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
5065 Lisp_Object |
771 | 5066 x_new_font (f, fontname) |
5067 struct frame *f; | |
286 | 5068 register char *fontname; |
5069 { | |
5070 int already_loaded; | |
5071 int n_matching_fonts; | |
5072 XFontStruct *font_info; | |
5073 char **font_names; | |
5074 | |
5075 /* Get a list of all the fonts that match this name. Once we | |
5076 have a list of matching fonts, we compare them against the fonts | |
5077 we already have by comparing font ids. */ | |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5078 font_names = (char **) XListFonts (x_current_display, fontname, |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5079 1024, &n_matching_fonts); |
3639
70a688f0cdae
* xterm.c (x_new_font): If font_names is zero, that's all the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
5080 /* Apparently it doesn't set n_matching_fonts to zero when it can't |
70a688f0cdae
* xterm.c (x_new_font): If font_names is zero, that's all the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
5081 find any matches; font_names == 0 is the only clue. */ |
70a688f0cdae
* xterm.c (x_new_font): If font_names is zero, that's all the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
5082 if (! font_names) |
70a688f0cdae
* xterm.c (x_new_font): If font_names is zero, that's all the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
5083 n_matching_fonts = 0; |
70a688f0cdae
* xterm.c (x_new_font): If font_names is zero, that's all the
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
5084 |
3511
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5085 /* Don't just give up if n_matching_fonts is 0. |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5086 Apparently there's a bug on Suns: XListFontsWithInfo can |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5087 fail to find a font, but XLoadQueryFont may still find it. */ |
286 | 5088 |
429 | 5089 /* See if we've already loaded a matching font. */ |
3511
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5090 already_loaded = -1; |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5091 if (n_matching_fonts != 0) |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5092 { |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5093 int i, j; |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5094 |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5095 for (i = 0; i < n_fonts; i++) |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5096 for (j = 0; j < n_matching_fonts; j++) |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5097 if (!strcmp (x_font_table[i].name, font_names[j])) |
3511
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5098 { |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5099 already_loaded = i; |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5100 fontname = font_names[j]; |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5101 goto found_font; |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5102 } |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5103 } |
286 | 5104 found_font: |
5105 | |
5106 /* If we have, just return it from the table. */ | |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5107 if (already_loaded >= 0) |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5108 f->display.x->font = x_font_table[already_loaded].font; |
429 | 5109 |
286 | 5110 /* Otherwise, load the font and add it to the table. */ |
5111 else | |
5112 { | |
3016
ce9ea90b5848
* xterm.c (x_new_font): Reject fonts with varying spacing. We
Jim Blandy <jimb@redhat.com>
parents:
2982
diff
changeset
|
5113 int i; |
286 | 5114 XFontStruct *font; |
5115 | |
3016
ce9ea90b5848
* xterm.c (x_new_font): Reject fonts with varying spacing. We
Jim Blandy <jimb@redhat.com>
parents:
2982
diff
changeset
|
5116 /* Try to find a character-cell font in the list. */ |
3066
039cbddadc51
* xfaces.c (merge_faces): You can't tell if a font is a
Jim Blandy <jimb@redhat.com>
parents:
3045
diff
changeset
|
5117 #if 0 |
039cbddadc51
* xfaces.c (merge_faces): You can't tell if a font is a
Jim Blandy <jimb@redhat.com>
parents:
3045
diff
changeset
|
5118 /* A laudable goal, but this isn't how to do it. */ |
3016
ce9ea90b5848
* xterm.c (x_new_font): Reject fonts with varying spacing. We
Jim Blandy <jimb@redhat.com>
parents:
2982
diff
changeset
|
5119 for (i = 0; i < n_matching_fonts; i++) |
ce9ea90b5848
* xterm.c (x_new_font): Reject fonts with varying spacing. We
Jim Blandy <jimb@redhat.com>
parents:
2982
diff
changeset
|
5120 if (! font_info[i].per_char) |
ce9ea90b5848
* xterm.c (x_new_font): Reject fonts with varying spacing. We
Jim Blandy <jimb@redhat.com>
parents:
2982
diff
changeset
|
5121 break; |
3066
039cbddadc51
* xfaces.c (merge_faces): You can't tell if a font is a
Jim Blandy <jimb@redhat.com>
parents:
3045
diff
changeset
|
5122 #else |
039cbddadc51
* xfaces.c (merge_faces): You can't tell if a font is a
Jim Blandy <jimb@redhat.com>
parents:
3045
diff
changeset
|
5123 i = 0; |
039cbddadc51
* xfaces.c (merge_faces): You can't tell if a font is a
Jim Blandy <jimb@redhat.com>
parents:
3045
diff
changeset
|
5124 #endif |
3016
ce9ea90b5848
* xterm.c (x_new_font): Reject fonts with varying spacing. We
Jim Blandy <jimb@redhat.com>
parents:
2982
diff
changeset
|
5125 |
3511
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5126 /* See comment above. */ |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5127 if (n_matching_fonts != 0) |
3016
ce9ea90b5848
* xterm.c (x_new_font): Reject fonts with varying spacing. We
Jim Blandy <jimb@redhat.com>
parents:
2982
diff
changeset
|
5128 fontname = font_names[i]; |
ce9ea90b5848
* xterm.c (x_new_font): Reject fonts with varying spacing. We
Jim Blandy <jimb@redhat.com>
parents:
2982
diff
changeset
|
5129 |
286 | 5130 font = (XFontStruct *) XLoadQueryFont (x_current_display, fontname); |
5131 if (! font) | |
3511
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5132 { |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5133 /* Free the information from XListFonts. */ |
3511
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5134 if (n_matching_fonts) |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5135 XFreeFontNames (font_names); |
3511
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5136 return Qnil; |
21fae09a3ad2
(x_new_font): Don't give up right away if XListFontsWithInfo
Richard M. Stallman <rms@gnu.org>
parents:
3465
diff
changeset
|
5137 } |
286 | 5138 |
5139 /* Do we need to create the table? */ | |
5140 if (x_font_table_size == 0) | |
5141 { | |
5142 x_font_table_size = 16; | |
5143 x_font_table | |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5144 = (struct font_info *) xmalloc (x_font_table_size |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5145 * sizeof (x_font_table[0])); |
286 | 5146 } |
5147 /* Do we need to grow the table? */ | |
5148 else if (n_fonts >= x_font_table_size) | |
5149 { | |
429 | 5150 x_font_table_size *= 2; |
286 | 5151 x_font_table |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5152 = (struct font_info *) xrealloc (x_font_table, |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5153 (x_font_table_size |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5154 * sizeof (x_font_table[0]))); |
286 | 5155 } |
5156 | |
4909
74ae77c7d742
(x_new_font): xmalloc arg was 1 too small.
Richard M. Stallman <rms@gnu.org>
parents:
4777
diff
changeset
|
5157 x_font_table[n_fonts].name = (char *) xmalloc (strlen (fontname) + 1); |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5158 bcopy (fontname, x_font_table[n_fonts].name, strlen (fontname) + 1); |
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5159 f->display.x->font = x_font_table[n_fonts++].font = font; |
286 | 5160 } |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5161 |
771 | 5162 /* 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
|
5163 if (FRAME_X_WINDOW (f) != 0) |
286 | 5164 { |
771 | 5165 XSetFont (x_current_display, f->display.x->normal_gc, |
5166 f->display.x->font->fid); | |
5167 XSetFont (x_current_display, f->display.x->reverse_gc, | |
5168 f->display.x->font->fid); | |
5169 XSetFont (x_current_display, f->display.x->cursor_gc, | |
5170 f->display.x->font->fid); | |
5171 | |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
5172 frame_update_line_height (f); |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5173 x_set_window_size (f, 0, f->width, f->height); |
286 | 5174 } |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
5175 else |
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
5176 /* If we are setting a new frame's font for the first time, |
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
5177 there are no faces yet, so this font's height is the line height. */ |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
5178 f->display.x->line_height = FONT_HEIGHT (f->display.x->font); |
286 | 5179 |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
5180 { |
6521
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
5181 Lisp_Object lispy_name; |
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
5182 |
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
5183 lispy_name = build_string (fontname); |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
5184 |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5185 /* Free the information from XListFonts. The data |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
5186 we actually retain comes from XLoadQueryFont. */ |
4493
d0143beb12f0
(struct font_info): New structure.
Richard M. Stallman <rms@gnu.org>
parents:
4476
diff
changeset
|
5187 XFreeFontNames (font_names); |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
5188 |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
5189 return lispy_name; |
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
5190 } |
286 | 5191 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5192 #else /* ! defined (HAVE_X11) */ |
771 | 5193 x_new_font (f, newname) |
5194 struct frame *f; | |
286 | 5195 register char *newname; |
5196 { | |
5197 FONT_TYPE *temp; | |
5198 int mask; | |
5199 | |
5200 temp = XGetFont (newname); | |
5201 if (temp == (FONT_TYPE *) 0) | |
5202 return 1; | |
5203 | |
771 | 5204 if (f->display.x->font) |
5205 XLoseFont (f->display.x->font); | |
5206 | |
5207 f->display.x->font = temp; | |
5208 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5209 if (FRAME_X_WINDOW (f) != 0) |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5210 x_set_window_size (f, 0, f->width, f->height); |
286 | 5211 |
5212 return 0; | |
5213 } | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5214 #endif /* ! defined (HAVE_X11) */ |
286 | 5215 |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
5216 x_calc_absolute_position (f) |
771 | 5217 struct frame *f; |
286 | 5218 { |
5219 #ifdef HAVE_X11 | |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5220 Window win, child; |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5221 int win_x = 0, win_y = 0; |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
5222 int flags = f->display.x->size_hint_flags; |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5223 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5224 /* Find the position of the outside upper-left corner of |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5225 the inner window, with respect to the outer window. */ |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5226 if (f->display.x->parent_desc != ROOT_WINDOW) |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5227 { |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5228 BLOCK_INPUT; |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5229 XTranslateCoordinates (x_current_display, |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5230 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5231 /* From-window, to-window. */ |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5232 f->display.x->window_desc, |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5233 f->display.x->parent_desc, |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5234 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5235 /* From-position, to-position. */ |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5236 0, 0, &win_x, &win_y, |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5237 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5238 /* Child of win. */ |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5239 &child); |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5240 UNBLOCK_INPUT; |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5241 } |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5242 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5243 /* 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
|
5244 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
|
5245 if (flags & XNegative) |
3890
ab295012a818
* xterm.c (XTread_socket): Remove #if 0''s around code which tests
Jim Blandy <jimb@redhat.com>
parents:
3883
diff
changeset
|
5246 f->display.x->left_pos = (x_screen_width |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5247 - 2 * f->display.x->border_width - win_x |
3890
ab295012a818
* xterm.c (XTread_socket): Remove #if 0''s around code which tests
Jim Blandy <jimb@redhat.com>
parents:
3883
diff
changeset
|
5248 - PIXEL_WIDTH (f) |
ab295012a818
* xterm.c (XTread_socket): Remove #if 0''s around code which tests
Jim Blandy <jimb@redhat.com>
parents:
3883
diff
changeset
|
5249 + f->display.x->left_pos); |
771 | 5250 |
7262
68fc80bf10df
(x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents:
7210
diff
changeset
|
5251 if (flags & YNegative) |
3890
ab295012a818
* xterm.c (XTread_socket): Remove #if 0''s around code which tests
Jim Blandy <jimb@redhat.com>
parents:
3883
diff
changeset
|
5252 f->display.x->top_pos = (x_screen_height |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5253 - 2 * f->display.x->border_width - win_y |
3890
ab295012a818
* xterm.c (XTread_socket): Remove #if 0''s around code which tests
Jim Blandy <jimb@redhat.com>
parents:
3883
diff
changeset
|
5254 - PIXEL_HEIGHT (f) |
ab295012a818
* xterm.c (XTread_socket): Remove #if 0''s around code which tests
Jim Blandy <jimb@redhat.com>
parents:
3883
diff
changeset
|
5255 + f->display.x->top_pos); |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5256 /* 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
|
5257 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
|
5258 so the flags should correspond. */ |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5259 f->display.x->size_hint_flags &= ~ (XNegative | YNegative); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5260 #else /* ! defined (HAVE_X11) */ |
286 | 5261 WINDOWINFO_TYPE parentinfo; |
5262 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5263 XGetWindowInfo (FRAME_X_WINDOW (f), &parentinfo); |
771 | 5264 |
5265 if (f->display.x->left_pos < 0) | |
5266 f->display.x->left_pos = parentinfo.width + (f->display.x->left_pos + 1) | |
5267 - PIXEL_WIDTH (f) - 2 * f->display.x->internal_border_width; | |
5268 | |
5269 if (f->display.x->top_pos < 0) | |
5270 f->display.x->top_pos = parentinfo.height + (f->display.x->top_pos + 1) | |
5271 - PIXEL_HEIGHT (f) - 2 * f->display.x->internal_border_width; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5272 #endif /* ! defined (HAVE_X11) */ |
286 | 5273 } |
5274 | |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5275 /* 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
|
5276 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
|
5277 x_make_frame_visible (in that case, XOFF and YOFF are the current |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5278 position values). */ |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5279 |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
5280 x_set_offset (f, xoff, yoff, change_gravity) |
771 | 5281 struct frame *f; |
286 | 5282 register int xoff, yoff; |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
5283 int change_gravity; |
286 | 5284 { |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5285 if (change_gravity) |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5286 { |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5287 f->display.x->top_pos = yoff; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5288 f->display.x->left_pos = xoff; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5289 f->display.x->size_hint_flags &= ~ (XNegative | YNegative); |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5290 if (xoff < 0) |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5291 f->display.x->size_hint_flags |= XNegative; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5292 if (yoff < 0) |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5293 f->display.x->size_hint_flags |= YNegative; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5294 f->display.x->win_gravity = NorthWestGravity; |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5295 } |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
5296 x_calc_absolute_position (f); |
286 | 5297 |
5298 BLOCK_INPUT; | |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5299 x_wm_set_size_hint (f, 0, 0); |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
5300 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5301 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5302 XMoveWindow (XDISPLAY XtWindow (f->display.x->widget), |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5303 f->display.x->left_pos, f->display.x->top_pos); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5304 #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
|
5305 XMoveWindow (XDISPLAY FRAME_X_WINDOW (f), |
771 | 5306 f->display.x->left_pos, f->display.x->top_pos); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5307 #endif /* not USE_X_TOOLKIT */ |
286 | 5308 UNBLOCK_INPUT; |
5309 } | |
5310 | |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5311 /* Call this to change the size of frame F's x-window. |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5312 If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5313 for this size change and subsequent size changes. |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5314 Otherwise we leave the window gravity unchanged. */ |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5315 |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5316 x_set_window_size (f, change_gravity, cols, rows) |
771 | 5317 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
|
5318 int change_gravity; |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5319 int cols, rows; |
286 | 5320 { |
5321 int pixelwidth, pixelheight; | |
5322 int mask; | |
5323 | |
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
|
5324 #ifdef USE_X_TOOLKIT |
0c351de98a26
(x_set_window_size): Add USE_X_TOOLKIT conditional. Call EmacsFrameSetCharSize and return.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5685
diff
changeset
|
5325 BLOCK_INPUT; |
7415
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5326 { |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5327 /* The x and y position of the widget is clobbered by the |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5328 call to XtSetValues within EmacsFrameSetCharSize. |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5329 This is a real kludge, but I don't understand Xt so I can't |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5330 figure out a correct fix. Can anyone else tell me? -- rms. */ |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5331 int xpos = f->display.x->widget->core.x; |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5332 int ypos = f->display.x->widget->core.y; |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5333 EmacsFrameSetCharSize (f->display.x->edit_widget, cols, rows); |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5334 f->display.x->widget->core.x = xpos; |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5335 f->display.x->widget->core.y = ypos; |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
5336 } |
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
|
5337 UNBLOCK_INPUT; |
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
|
5338 |
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
|
5339 #else /* not USE_X_TOOLKIT */ |
0c351de98a26
(x_set_window_size): Add USE_X_TOOLKIT conditional. Call EmacsFrameSetCharSize and return.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5685
diff
changeset
|
5340 |
286 | 5341 BLOCK_INPUT; |
5342 | |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5343 check_frame_size (f, &rows, &cols); |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5344 f->display.x->vertical_scroll_bar_extra |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5345 = (FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5346 ? VERTICAL_SCROLL_BAR_PIXEL_WIDTH (f) |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
5347 : 0); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5348 pixelwidth = CHAR_TO_PIXEL_WIDTH (f, cols); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5349 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); |
286 | 5350 |
5351 #ifdef HAVE_X11 | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5352 f->display.x->win_gravity = NorthWestGravity; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5353 x_wm_set_size_hint (f, 0, 0); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5354 #endif /* ! defined (HAVE_X11) */ |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
5355 XSync (x_current_display, False); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5356 XChangeWindowSize (FRAME_X_WINDOW (f), pixelwidth, pixelheight); |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5357 |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5358 /* 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
|
5359 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
|
5360 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
|
5361 ConfigureNotify event gets here. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5362 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5363 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
|
5364 and let the ConfigureNotify event set everything up, but that |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5365 might be kind of confusing to the lisp code, since size changes |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5366 wouldn't be reported in the frame parameters until some random |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5367 point in the future when the ConfigureNotify event arrives. */ |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
5368 change_frame_size (f, rows, cols, 0, 0); |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5369 PIXEL_WIDTH (f) = pixelwidth; |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5370 PIXEL_HEIGHT (f) = pixelheight; |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5371 |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
5372 /* If cursor was outside the new size, mark it as off. */ |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
5373 if (f->phys_cursor_y >= rows |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
5374 || f->phys_cursor_x >= cols) |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
5375 { |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
5376 f->phys_cursor_x = -1; |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
5377 f->phys_cursor_y = -1; |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
5378 } |
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
5379 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5380 /* We've set {FRAME,PIXEL}_{WIDTH,HEIGHT} to the values we hope to |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5381 receive in the ConfigureNotify event; if we get what we asked |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5382 for, then the event won't cause the screen to become garbaged, so |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5383 we have to make sure to do it here. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5384 SET_FRAME_GARBAGED (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5385 |
286 | 5386 XFlushQueue (); |
5387 UNBLOCK_INPUT; | |
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
|
5388 #endif /* not USE_X_TOOLKIT */ |
286 | 5389 } |
5390 | |
5391 #ifndef HAVE_X11 | |
771 | 5392 x_set_resize_hint (f) |
5393 struct frame *f; | |
286 | 5394 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
5395 XSetResizeHint (FRAME_X_WINDOW (f), |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
5396 2 * f->display.x->internal_border_width, |
771 | 5397 2 * f->display.x->internal_border_width, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
5398 FONT_WIDTH (f->display.x->font), |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
5399 f->display.x->line_height); |
286 | 5400 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5401 #endif /* HAVE_X11 */ |
286 | 5402 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5403 /* Mouse warping, focus shifting, raising and lowering. */ |
286 | 5404 |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5405 void |
771 | 5406 x_set_mouse_position (f, x, y) |
5407 struct frame *f; | |
286 | 5408 int x, y; |
5409 { | |
5410 int pix_x, pix_y; | |
5411 | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
5412 pix_x = CHAR_TO_PIXEL_COL (f, x) + FONT_WIDTH (f->display.x->font) / 2; |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
5413 pix_y = CHAR_TO_PIXEL_ROW (f, y) + f->display.x->line_height / 2; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5414 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5415 if (pix_x < 0) pix_x = 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5416 if (pix_x > PIXEL_WIDTH (f)) pix_x = PIXEL_WIDTH (f); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5417 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5418 if (pix_y < 0) pix_y = 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5419 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f); |
286 | 5420 |
5421 BLOCK_INPUT; | |
5422 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5423 XWarpMousePointer (FRAME_X_WINDOW (f), pix_x, pix_y); |
286 | 5424 UNBLOCK_INPUT; |
5425 } | |
5426 | |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5427 /* 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
|
5428 |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5429 void |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5430 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
|
5431 struct frame *f; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5432 int pix_x, pix_y; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5433 { |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5434 BLOCK_INPUT; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5435 |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5436 XWarpMousePointer (FRAME_X_WINDOW (f), pix_x, pix_y); |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5437 UNBLOCK_INPUT; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5438 } |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
5439 |
286 | 5440 #ifdef HAVE_X11 |
771 | 5441 x_focus_on_frame (f) |
5442 struct frame *f; | |
286 | 5443 { |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
5444 #if 0 /* This proves to be unpleasant. */ |
771 | 5445 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
|
5446 #endif |
369 | 5447 #if 0 |
5448 /* I don't think that the ICCCM allows programs to do things like this | |
5449 without the interaction of the window manager. Whatever you end up | |
771 | 5450 doing with this code, do it to x_unfocus_frame too. */ |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5451 XSetInputFocus (x_current_display, FRAME_X_WINDOW (f), |
286 | 5452 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
|
5453 #endif /* ! 0 */ |
286 | 5454 } |
5455 | |
771 | 5456 x_unfocus_frame (f) |
5457 struct frame *f; | |
286 | 5458 { |
369 | 5459 #if 0 |
771 | 5460 /* Look at the remarks in x_focus_on_frame. */ |
5461 if (x_focus_frame == f) | |
286 | 5462 XSetInputFocus (x_current_display, PointerRoot, |
5463 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
|
5464 #endif /* ! 0 */ |
286 | 5465 } |
5466 | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5467 #endif /* ! defined (HAVE_X11) */ |
286 | 5468 |
771 | 5469 /* Raise frame F. */ |
5470 | |
5471 x_raise_frame (f) | |
5472 struct frame *f; | |
286 | 5473 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
5474 if (f->async_visible) |
286 | 5475 { |
5476 BLOCK_INPUT; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5477 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5478 XRaiseWindow (XDISPLAY XtWindow (f->display.x->widget)); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5479 #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
|
5480 XRaiseWindow (XDISPLAY FRAME_X_WINDOW (f)); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5481 #endif /* not USE_X_TOOLKIT */ |
286 | 5482 XFlushQueue (); |
5483 UNBLOCK_INPUT; | |
5484 } | |
5485 } | |
5486 | |
771 | 5487 /* Lower frame F. */ |
5488 | |
5489 x_lower_frame (f) | |
5490 struct frame *f; | |
286 | 5491 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
5492 if (f->async_visible) |
286 | 5493 { |
5494 BLOCK_INPUT; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5495 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5496 XLowerWindow (XDISPLAY XtWindow (f->display.x->widget)); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5497 #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
|
5498 XLowerWindow (XDISPLAY FRAME_X_WINDOW (f)); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5499 #endif /* not USE_X_TOOLKIT */ |
286 | 5500 XFlushQueue (); |
5501 UNBLOCK_INPUT; | |
5502 } | |
5503 } | |
5504 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5505 static void |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5506 XTframe_raise_lower (f, raise) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5507 FRAME_PTR f; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5508 int raise; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5509 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5510 if (raise) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5511 x_raise_frame (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5512 else |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5513 x_lower_frame (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5514 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5515 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5516 |
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
5517 /* Change from withdrawn state to mapped state, |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
5518 or deiconify. */ |
286 | 5519 |
771 | 5520 x_make_frame_visible (f) |
5521 struct frame *f; | |
286 | 5522 { |
5523 int mask; | |
5524 | |
429 | 5525 BLOCK_INPUT; |
5526 | |
771 | 5527 if (! FRAME_VISIBLE_P (f)) |
286 | 5528 { |
5529 #ifdef HAVE_X11 | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5530 #ifndef USE_X_TOOLKIT |
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
5531 if (! FRAME_ICONIFIED_P (f)) |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
5532 x_set_offset (f, f->display.x->left_pos, f->display.x->top_pos, 0); |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5533 #endif |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
5534 |
429 | 5535 if (! EQ (Vx_no_window_manager, Qt)) |
771 | 5536 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
|
5537 #ifdef USE_X_TOOLKIT |
7167
2fa74c48e4e5
(x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents:
7128
diff
changeset
|
5538 /* This was XtPopup, but that did nothing for an iconified frame. */ |
2fa74c48e4e5
(x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents:
7128
diff
changeset
|
5539 XtMapWidget (f->display.x->widget); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5540 #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
|
5541 XMapWindow (XDISPLAY FRAME_X_WINDOW (f)); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5542 #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
|
5543 #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
|
5544 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
|
5545 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
|
5546 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5547 XMapSubwindows (x_current_display, FRAME_X_WINDOW (f)); |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5548 #endif |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5549 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5550 XMapWindow (XDISPLAY FRAME_X_WINDOW (f)); |
771 | 5551 if (f->display.x->icon_desc != 0) |
5552 XUnmapWindow (f->display.x->icon_desc); | |
429 | 5553 |
5554 /* Handled by the MapNotify event for X11 */ | |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
5555 f->async_visible = 1; |
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
5556 f->async_iconified = 0; |
771 | 5557 |
5558 /* NOTE: this may cause problems for the first frame. */ | |
429 | 5559 XTcursor_to (0, 0); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5560 #endif /* ! defined (HAVE_X11) */ |
429 | 5561 } |
286 | 5562 |
5563 XFlushQueue (); | |
429 | 5564 |
286 | 5565 UNBLOCK_INPUT; |
5566 } | |
5567 | |
5568 /* Change from mapped state to withdrawn state. */ | |
5569 | |
771 | 5570 x_make_frame_invisible (f) |
5571 struct frame *f; | |
286 | 5572 { |
5573 int mask; | |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5574 Window window; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5575 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5576 #ifdef USE_X_TOOLKIT |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5577 /* Use the frame's outermost window, not the one we normally draw on. */ |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5578 window = XtWindow (f->display.x->widget); |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5579 #else /* not USE_X_TOOLKIT */ |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5580 window = FRAME_X_WINDOW (f); |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5581 #endif /* not USE_X_TOOLKIT */ |
286 | 5582 |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
5583 /* Don't keep the highlight on an invisible frame. */ |
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
5584 if (x_highlight_frame == f) |
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
5585 x_highlight_frame = 0; |
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
5586 |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
5587 #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
|
5588 if (! f->async_visible && ! f->async_iconified) |
286 | 5589 return; |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
5590 #endif |
286 | 5591 |
5592 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
|
5593 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5594 /* 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
|
5595 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
|
5596 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
|
5597 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
|
5598 by hand again (they have already done that once for this window.) */ |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5599 x_wm_set_size_hint (f, 0, 1); |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5600 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5601 #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
|
5602 |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5603 if (! XWithdrawWindow (x_current_display, window, |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5604 DefaultScreen (x_current_display))) |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5605 { |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5606 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
|
5607 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
|
5608 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5609 #else /* ! defined (HAVE_X11R4) */ |
286 | 5610 #ifdef HAVE_X11 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5611 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5612 /* Tell the window manager what we're going to do. */ |
286 | 5613 if (! EQ (Vx_no_window_manager, Qt)) |
5614 { | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5615 XEvent unmap; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5616 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5617 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
|
5618 unmap.xunmap.window = window; |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5619 unmap.xunmap.event = DefaultRootWindow (x_current_display); |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5620 unmap.xunmap.from_configure = False; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5621 if (! XSendEvent (x_current_display, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5622 DefaultRootWindow (x_current_display), |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5623 False, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5624 SubstructureRedirectMask|SubstructureNotifyMask, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5625 &unmap)) |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5626 { |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5627 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
|
5628 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
|
5629 } |
286 | 5630 } |
5631 | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5632 /* Unmap the window ourselves. Cheeky! */ |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5633 XUnmapWindow (x_current_display, window); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5634 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5635 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5636 XUnmapWindow (FRAME_X_WINDOW (f)); |
771 | 5637 if (f->display.x->icon_desc != 0) |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5638 XUnmapWindow (f->display.x->icon_desc); |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5639 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5640 #endif /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5641 #endif /* ! defined (HAVE_X11R4) */ |
286 | 5642 |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
5643 /* 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
|
5644 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
|
5645 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
|
5646 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
|
5647 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
|
5648 f->visible = 0; |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
5649 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
|
5650 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
|
5651 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
|
5652 |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
5653 x_sync (); |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
5654 |
286 | 5655 UNBLOCK_INPUT; |
5656 } | |
5657 | |
5658 /* Change window state from mapped to iconified. */ | |
5659 | |
771 | 5660 x_iconify_frame (f) |
5661 struct frame *f; | |
286 | 5662 { |
5663 int mask; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5664 int result; |
286 | 5665 |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
5666 /* Don't keep the highlight on an invisible frame. */ |
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
5667 if (x_highlight_frame == f) |
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
5668 x_highlight_frame = 0; |
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
5669 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
5670 if (f->async_iconified) |
286 | 5671 return; |
5672 | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5673 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5674 BLOCK_INPUT; |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5675 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5676 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
|
5677 { |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5678 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
|
5679 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
|
5680 /* This was XtPopup, but that did nothing for an iconified frame. */ |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5681 XtMapWidget (f->display.x->widget); |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5682 UNBLOCK_INPUT; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5683 return; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5684 } |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5685 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5686 result = XIconifyWindow (x_current_display, |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5687 XtWindow (f->display.x->widget), |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5688 DefaultScreen (x_current_display)); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5689 UNBLOCK_INPUT; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5690 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5691 if (!result) |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
5692 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
|
5693 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5694 f->async_iconified = 1; |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
5695 |
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
5696 BLOCK_INPUT; |
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
5697 XFlushQueue (); |
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
5698 UNBLOCK_INPUT; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5699 #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
|
5700 |
286 | 5701 BLOCK_INPUT; |
5702 | |
5703 #ifdef HAVE_X11 | |
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
5704 /* 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
|
5705 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
|
5706 if (! FRAME_VISIBLE_P (f) && !FRAME_ICONIFIED_P (f)) |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
5707 x_set_offset (f, f->display.x->left_pos, f->display.x->top_pos, 0); |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
5708 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5709 /* 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
|
5710 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
|
5711 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5712 /* 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
|
5713 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
|
5714 { |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5715 XEvent message; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5716 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5717 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
|
5718 message.xclient.type = ClientMessage; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5719 message.xclient.message_type = Xatom_wm_change_state; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5720 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
|
5721 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
|
5722 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5723 if (! XSendEvent (x_current_display, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5724 DefaultRootWindow (x_current_display), |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5725 False, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5726 SubstructureRedirectMask | SubstructureNotifyMask, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5727 &message)) |
286 | 5728 { |
5729 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
|
5730 error ("Can't notify window manager of iconification"); |
286 | 5731 } |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5732 } |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5733 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5734 /* X11R3: set the initial_state field of the window manager hints to |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5735 IconicState. */ |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
5736 x_wm_set_window_state (f, IconicState); |
286 | 5737 |
4304
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
5738 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
|
5739 { |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
5740 /* If the frame was withdrawn, before, we must map it. */ |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
5741 XMapWindow (XDISPLAY FRAME_X_WINDOW (f)); |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5742 #if 0 /* We don't have subwindows in the icon. */ |
4304
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
5743 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
5744 XMapSubwindows (x_current_display, FRAME_X_WINDOW (f)); |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5745 #endif |
4304
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
5746 } |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
5747 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
5748 f->async_iconified = 1; |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5749 #else /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5750 XUnmapWindow (XDISPLAY FRAME_X_WINDOW (f)); |
771 | 5751 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
5752 f->async_visible = 0; /* Handled in the UnMap event for X11. */ |
771 | 5753 if (f->display.x->icon_desc != 0) |
286 | 5754 { |
771 | 5755 XMapWindow (XDISPLAY f->display.x->icon_desc); |
5756 refreshicon (f); | |
286 | 5757 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5758 #endif /* ! defined (HAVE_X11) */ |
286 | 5759 |
5760 XFlushQueue (); | |
5761 UNBLOCK_INPUT; | |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
5762 #endif /* not USE_X_TOOLKIT */ |
286 | 5763 } |
5764 | |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5765 /* Destroy the X window of frame F. */ |
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5766 |
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5767 x_destroy_window (f) |
771 | 5768 struct frame *f; |
286 | 5769 { |
5770 BLOCK_INPUT; | |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5771 |
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5772 if (f->display.x->icon_desc != 0) |
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5773 XDestroyWindow (XDISPLAY f->display.x->icon_desc); |
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5774 XDestroyWindow (XDISPLAY f->display.x->window_desc); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5775 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5776 XtDestroyWidget (f->display.x->widget); |
5898
105c99071e9b
(x_destroy_window) [USE_X_TOOLKIT]: Call free_frame_menubar.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5872
diff
changeset
|
5777 free_frame_menubar (f); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5778 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5779 |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
5780 free_frame_faces (f); |
286 | 5781 XFlushQueue (); |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5782 |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
5783 xfree (f->display.x); |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5784 f->display.x = 0; |
771 | 5785 if (f == x_focus_frame) |
5786 x_focus_frame = 0; | |
5787 if (f == x_highlight_frame) | |
5788 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
|
5789 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5790 if (f == mouse_face_mouse_frame) |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
5791 { |
7283
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
5792 mouse_face_beg_row = mouse_face_beg_col = -1; |
3dc9a9e95d32
(note_mouse_highlight, show_mouse_face, clear_mouse_face, x_destroy_window):
Karl Heuer <kwzh@gnu.org>
parents:
7282
diff
changeset
|
5793 mouse_face_end_row = mouse_face_end_col = -1; |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
5794 mouse_face_window = Qnil; |
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
5795 } |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5796 |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
5797 UNBLOCK_INPUT; |
286 | 5798 } |
5799 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5800 /* Manage event queues for X10. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5801 |
286 | 5802 #ifndef HAVE_X11 |
5803 | |
5804 /* Manage event queues. | |
5805 | |
5806 This code is only used by the X10 support. | |
5807 | |
5808 We cannot leave events in the X queue and get them when we are ready | |
5809 because X does not provide a subroutine to get only a certain kind | |
5810 of event but not block if there are no queued events of that kind. | |
5811 | |
5812 Therefore, we must examine events as they come in and copy events | |
5813 of certain kinds into our private queues. | |
5814 | |
5815 All ExposeRegion events are put in x_expose_queue. | |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5816 All ButtonPress and ButtonRelease events are put in x_mouse_queue. */ |
286 | 5817 |
5818 | |
5819 /* Write the event *P_XREP into the event queue *QUEUE. | |
5820 If the queue is full, do nothing, but return nonzero. */ | |
5821 | |
5822 int | |
5823 enqueue_event (p_xrep, queue) | |
5824 register XEvent *p_xrep; | |
5825 register struct event_queue *queue; | |
5826 { | |
5827 int newindex = queue->windex + 1; | |
5828 if (newindex == EVENT_BUFFER_SIZE) | |
5829 newindex = 0; | |
5830 if (newindex == queue->rindex) | |
5831 return -1; | |
5832 queue->xrep[queue->windex] = *p_xrep; | |
5833 queue->windex = newindex; | |
5834 return 0; | |
5835 } | |
5836 | |
5837 /* Fetch the next event from queue *QUEUE and store it in *P_XREP. | |
5838 If *QUEUE is empty, do nothing and return 0. */ | |
5839 | |
5840 int | |
5841 dequeue_event (p_xrep, queue) | |
5842 register XEvent *p_xrep; | |
5843 register struct event_queue *queue; | |
5844 { | |
5845 if (queue->windex == queue->rindex) | |
5846 return 0; | |
5847 *p_xrep = queue->xrep[queue->rindex++]; | |
5848 if (queue->rindex == EVENT_BUFFER_SIZE) | |
5849 queue->rindex = 0; | |
5850 return 1; | |
5851 } | |
5852 | |
5853 /* Return the number of events buffered in *QUEUE. */ | |
5854 | |
5855 int | |
5856 queue_event_count (queue) | |
5857 register struct event_queue *queue; | |
5858 { | |
5859 int tem = queue->windex - queue->rindex; | |
5860 if (tem >= 0) | |
5861 return tem; | |
5862 return EVENT_BUFFER_SIZE + tem; | |
5863 } | |
5864 | |
5865 /* Return nonzero if mouse input is pending. */ | |
5866 | |
5867 int | |
5868 mouse_event_pending_p () | |
5869 { | |
5870 return queue_event_count (&x_mouse_queue); | |
5871 } | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5872 #endif /* HAVE_X11 */ |
286 | 5873 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5874 /* Setting window manager hints. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5875 |
286 | 5876 #ifdef HAVE_X11 |
5877 | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5878 /* 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
|
5879 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
|
5880 that the window now has. |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5881 If USER_POSITION is nonzero, we set the USPosition |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5882 flag (this is useful when FLAGS is 0). */ |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5883 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5884 x_wm_set_size_hint (f, flags, user_position) |
771 | 5885 struct frame *f; |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5886 long flags; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5887 int user_position; |
286 | 5888 { |
5889 XSizeHints size_hints; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5890 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5891 #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
|
5892 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
|
5893 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
|
5894 Dimension widget_width, widget_height; |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
5895 Window window = XtWindow (f->display.x->widget); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5896 #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
|
5897 Window window = FRAME_X_WINDOW (f); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
5898 #endif /* not USE_X_TOOLKIT */ |
286 | 5899 |
7187
ca0102511d80
(x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents:
7169
diff
changeset
|
5900 /* 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
|
5901 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */; |
286 | 5902 |
771 | 5903 flexlines = f->height; |
5904 | |
5905 size_hints.x = f->display.x->left_pos; | |
5906 size_hints.y = f->display.x->top_pos; | |
7123
4f2c825cc0f8
(x_wm_set_size_hint): Do set max_height, max_width, and PMaxSize flag.
Richard M. Stallman <rms@gnu.org>
parents:
7122
diff
changeset
|
5907 |
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
|
5908 #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
|
5909 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
|
5910 XtSetArg (al[ac], XtNheight, &widget_height); 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
|
5911 XtGetValues (f->display.x->column_widget, al, 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
|
5912 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
|
5913 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
|
5914 #else /* not USE_X_TOOLKIT */ |
771 | 5915 size_hints.height = PIXEL_HEIGHT (f); |
5916 size_hints.width = PIXEL_WIDTH (f); | |
6631
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
5917 #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
|
5918 |
771 | 5919 size_hints.width_inc = FONT_WIDTH (f->display.x->font); |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
5920 size_hints.height_inc = f->display.x->line_height; |
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
|
5921 size_hints.max_width = x_screen_width - CHAR_TO_PIXEL_WIDTH (f, 0); |
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
|
5922 size_hints.max_height = x_screen_height - CHAR_TO_PIXEL_HEIGHT (f, 0); |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5923 |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5924 { |
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
|
5925 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
|
5926 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
|
5927 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5928 base_width = CHAR_TO_PIXEL_WIDTH (f, 0); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5929 base_height = CHAR_TO_PIXEL_HEIGHT (f, 0); |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
5930 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5931 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
|
5932 |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5933 /* 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
|
5934 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
|
5935 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
|
5936 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
|
5937 zero-row, zero-column frame. |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5938 |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5939 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
|
5940 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
|
5941 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
|
5942 |
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
5943 #ifdef HAVE_X11R4 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5944 size_hints.flags |= PBaseSize; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5945 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
|
5946 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
|
5947 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
|
5948 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
|
5949 #else |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5950 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
|
5951 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
|
5952 #endif |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
5953 } |
286 | 5954 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5955 if (flags) |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5956 size_hints.flags |= flags; |
286 | 5957 else |
5958 { | |
5959 XSizeHints hints; /* Sometimes I hate X Windows... */ | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5960 long supplied_return; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5961 int value; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5962 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5963 #ifdef HAVE_X11R4 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5964 value = XGetWMNormalHints (x_current_display, window, &hints, |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5965 &supplied_return); |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5966 #else |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5967 value = XGetNormalHints (x_current_display, window, &hints); |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5968 #endif |
286 | 5969 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5970 if (value == 0) |
3444
2a646c40a4cf
(x_wm_set_size_hint): Handle XGetNormalHints returning 0.
Richard M. Stallman <rms@gnu.org>
parents:
3369
diff
changeset
|
5971 hints.flags = 0; |
286 | 5972 if (hints.flags & PSize) |
5973 size_hints.flags |= PSize; | |
5974 if (hints.flags & PPosition) | |
5975 size_hints.flags |= PPosition; | |
5976 if (hints.flags & USPosition) | |
5977 size_hints.flags |= USPosition; | |
5978 if (hints.flags & USSize) | |
5979 size_hints.flags |= USSize; | |
5980 } | |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5981 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5982 #ifdef PWinGravity |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
5983 size_hints.win_gravity = f->display.x->win_gravity; |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5984 size_hints.flags |= PWinGravity; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5985 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5986 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
|
5987 { |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5988 size_hints.flags &= ~ PPosition; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
5989 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
|
5990 } |
4777
21ed9c9bb210
(w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents:
4696
diff
changeset
|
5991 #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
|
5992 |
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
|
5993 #ifdef HAVE_X11R4 |
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
5994 XSetWMNormalHints (x_current_display, window, &size_hints); |
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
5995 #else |
286 | 5996 XSetNormalHints (x_current_display, 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
|
5997 #endif |
286 | 5998 } |
5999 | |
6000 /* Used for IconicState or NormalState */ | |
771 | 6001 x_wm_set_window_state (f, state) |
6002 struct frame *f; | |
286 | 6003 int state; |
6004 { | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6005 #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
|
6006 Arg al[1]; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
6007 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
6008 XtSetArg (al[0], XtNinitialState, state); |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
6009 XtSetValues (f->display.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
|
6010 #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
|
6011 Window window = FRAME_X_WINDOW (f); |
286 | 6012 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6013 f->display.x->wm_hints.flags |= StateHint; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6014 f->display.x->wm_hints.initial_state = state; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6015 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6016 XSetWMHints (x_current_display, window, &f->display.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
|
6017 #endif /* not USE_X_TOOLKIT */ |
286 | 6018 } |
6019 | |
771 | 6020 x_wm_set_icon_pixmap (f, icon_pixmap) |
6021 struct frame *f; | |
286 | 6022 Pixmap icon_pixmap; |
6023 { | |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
6024 #ifdef USE_X_TOOLKIT |
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
6025 Window window = XtWindow (f->display.x->widget); |
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
6026 #else |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6027 Window window = FRAME_X_WINDOW (f); |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
6028 #endif |
286 | 6029 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
6030 if (icon_pixmap) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
6031 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
6032 f->display.x->wm_hints.icon_pixmap = icon_pixmap; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
6033 f->display.x->wm_hints.flags |= IconPixmapHint; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
6034 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
6035 else |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
6036 f->display.x->wm_hints.flags &= ~IconPixmapHint; |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6037 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6038 XSetWMHints (x_current_display, window, &f->display.x->wm_hints); |
286 | 6039 } |
6040 | |
771 | 6041 x_wm_set_icon_position (f, icon_x, icon_y) |
6042 struct frame *f; | |
286 | 6043 int icon_x, icon_y; |
6044 { | |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
6045 #ifdef USE_X_TOOLKIT |
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
6046 Window window = XtWindow (f->display.x->widget); |
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
6047 #else |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6048 Window window = FRAME_X_WINDOW (f); |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
6049 #endif |
286 | 6050 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6051 f->display.x->wm_hints.flags |= IconPositionHint; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6052 f->display.x->wm_hints.icon_x = icon_x; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6053 f->display.x->wm_hints.icon_y = icon_y; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6054 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
6055 XSetWMHints (x_current_display, window, &f->display.x->wm_hints); |
286 | 6056 } |
6057 | |
6058 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
6059 /* Initialization. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
6060 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6061 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6062 static XrmOptionDescRec emacs_options[] = { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6063 {"-geometry", ".geometry", XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6064 {"-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
|
6065 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6066 {"-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
|
6067 XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6068 {"-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
|
6069 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6070 {"-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
|
6071 {"-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
|
6072 {"-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
|
6073 {"-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
|
6074 {"-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
|
6075 {"-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
|
6076 {"-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
|
6077 }; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6078 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6079 |
286 | 6080 void |
7801
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6081 x_term_init (display_name, xrm_option, resource_name) |
286 | 6082 char *display_name; |
7801
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6083 char *xrm_option; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6084 char *resource_name; |
286 | 6085 { |
771 | 6086 Lisp_Object frame; |
286 | 6087 char *defaultvalue; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6088 int argc = 0; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6089 char** argv = 0; |
4147
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
6090 #ifndef F_SETOWN_BUG |
286 | 6091 #ifdef F_SETOWN |
6092 extern int old_fcntl_owner; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6093 #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
|
6094 #endif /* F_SETOWN_BUG */ |
369 | 6095 |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
6096 #ifdef X_IO_BUG |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
6097 x_noop_count = 0; |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
6098 #endif |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
6099 |
771 | 6100 x_focus_frame = x_highlight_frame = 0; |
286 | 6101 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6102 #ifdef USE_X_TOOLKIT |
7801
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6103 argv = (char **) XtMalloc (7 * sizeof (char *)); |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6104 argv[0] = ""; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6105 argv[1] = "-display"; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6106 argv[2] = display_name; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6107 argv[3] = "-name"; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6108 /* Usually `emacs', but not always. */ |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6109 argv[4] = resource_name; |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
6110 argc = 5; |
7801
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6111 if (xrm_option) |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6112 { |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6113 argv[argc++] = "-xrm"; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6114 argv[argc++] = xrm_option; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
6115 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6116 Xt_app_shell = XtAppInitialize (&Xt_app_con, "Emacs", |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
6117 emacs_options, XtNumber (emacs_options), |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6118 &argc, argv, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6119 NULL, NULL, 0); |
7100
3aaa031a8fe4
(x_term_init): Add explicit cast.
Karl Heuer <kwzh@gnu.org>
parents:
7093
diff
changeset
|
6120 XtFree ((char *)argv); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6121 x_current_display = XtDisplay (Xt_app_shell); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6122 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6123 #else /* not USE_X_TOOLKIT */ |
286 | 6124 x_current_display = XOpenDisplay (display_name); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
6125 #endif /* not USE_X_TOOLKIT */ |
286 | 6126 if (x_current_display == 0) |
4147
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
6127 fatal ("X server %s not responding.\n\ |
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
6128 Check the DISPLAY environment variable or use \"-d\"\n", |
286 | 6129 display_name); |
6130 | |
6131 #ifdef HAVE_X11 | |
6132 { | |
6133 #if 0 | |
6134 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
|
6135 #endif /* ! 0 */ |
2279
012b04efa234
* emacs.c (Finvocation_name): New function.
Jim Blandy <jimb@redhat.com>
parents:
2235
diff
changeset
|
6136 x_id_name = (char *) xmalloc (XSTRING (Vinvocation_name)->size |
7905
cbc288be9c89
(x_term_init): Don't call get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7902
diff
changeset
|
6137 + XSTRING (Vsystem_name)->size |
398 | 6138 + 2); |
7905
cbc288be9c89
(x_term_init): Don't call get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7902
diff
changeset
|
6139 sprintf (x_id_name, "%s@%s", |
cbc288be9c89
(x_term_init): Don't call get_system_name.
Karl Heuer <kwzh@gnu.org>
parents:
7902
diff
changeset
|
6140 XSTRING (Vinvocation_name)->data, XSTRING (Vsystem_name)->data); |
286 | 6141 } |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6142 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6143 /* Figure out which modifier bits mean what. */ |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6144 x_find_modifier_meanings (); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
6145 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6146 /* Get the scroll bar cursor. */ |
2195
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
6147 x_vertical_scroll_bar_cursor |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
6148 = XCreateFontCursor (x_current_display, XC_sb_v_double_arrow); |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
6149 |
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
6150 #if 0 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6151 /* Watch for PropertyNotify events on the root window; we use them |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6152 to figure out when to invalidate our cache of the cut buffers. */ |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6153 x_watch_cut_buffer_cache (); |
2195
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
6154 #endif |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6155 |
2285
f0a979beceab
* xterm.c (x_term_init): If the X connection is already in file
Jim Blandy <jimb@redhat.com>
parents:
2279
diff
changeset
|
6156 if (ConnectionNumber (x_current_display) != 0) |
4683
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
6157 change_keyboard_wait_descriptor (ConnectionNumber (x_current_display)); |
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
6158 change_input_fd (ConnectionNumber (x_current_display)); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6159 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6160 #endif /* ! defined (HAVE_X11) */ |
286 | 6161 |
4147
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
6162 #ifndef F_SETOWN_BUG |
286 | 6163 #ifdef F_SETOWN |
4683
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
6164 old_fcntl_owner = fcntl (ConnectionNumber (x_current_display), F_GETOWN, 0); |
286 | 6165 #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
|
6166 /* stdin is a socket here */ |
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
6167 fcntl (ConnectionNumber (x_current_display), 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
|
6168 #else /* ! defined (F_SETOWN_SOCK_NEG) */ |
4683
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
6169 fcntl (ConnectionNumber (x_current_display), 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
|
6170 #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
|
6171 #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
|
6172 #endif /* F_SETOWN_BUG */ |
286 | 6173 |
6174 #ifdef SIGIO | |
6175 init_sigio (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6176 #endif /* ! defined (SIGIO) */ |
286 | 6177 |
6178 expose_all_windows = 0; | |
6179 | |
771 | 6180 clear_frame_hook = XTclear_frame; |
286 | 6181 clear_end_of_line_hook = XTclear_end_of_line; |
6182 ins_del_lines_hook = XTins_del_lines; | |
6183 change_line_highlight_hook = XTchange_line_highlight; | |
6184 insert_glyphs_hook = XTinsert_glyphs; | |
6185 write_glyphs_hook = XTwrite_glyphs; | |
6186 delete_glyphs_hook = XTdelete_glyphs; | |
6187 ring_bell_hook = XTring_bell; | |
6188 reset_terminal_modes_hook = XTreset_terminal_modes; | |
6189 set_terminal_modes_hook = XTset_terminal_modes; | |
6190 update_begin_hook = XTupdate_begin; | |
6191 update_end_hook = XTupdate_end; | |
6192 set_terminal_window_hook = XTset_terminal_window; | |
6193 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
|
6194 frame_up_to_date_hook = XTframe_up_to_date; |
286 | 6195 cursor_to_hook = XTcursor_to; |
6196 reassert_line_highlight_hook = XTreassert_line_highlight; | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
6197 mouse_position_hook = XTmouse_position; |
771 | 6198 frame_rehighlight_hook = XTframe_rehighlight; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
6199 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
|
6200 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
|
6201 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
|
6202 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
|
6203 judge_scroll_bars_hook = XTjudge_scroll_bars; |
286 | 6204 |
771 | 6205 scroll_region_ok = 1; /* we'll scroll partial frames */ |
286 | 6206 char_ins_del_ok = 0; /* just as fast to write the line */ |
6207 line_ins_del_ok = 1; /* we'll just blt 'em */ | |
6208 fast_clear_end_of_line = 1; /* X does this well */ | |
771 | 6209 memory_below_frame = 0; /* we don't remember what scrolls |
286 | 6210 off the bottom */ |
6211 baud_rate = 19200; | |
6212 | |
4476
e7de1b007447
(x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents:
4304
diff
changeset
|
6213 /* 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
|
6214 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
|
6215 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6216 /* Note that there is no real way portable across R3/R4 to get the |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6217 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
|
6218 XHandleError (x_error_quitter); |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
6219 XHandleIOError (x_io_error_quitter); |
286 | 6220 |
6221 /* Disable Window Change signals; they are handled by X events. */ | |
6222 #ifdef SIGWINCH | |
6223 signal (SIGWINCH, SIG_DFL); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6224 #endif /* ! defined (SIGWINCH) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6225 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6226 signal (SIGPIPE, x_connection_closed); |
286 | 6227 } |
395 | 6228 |
6229 void | |
6230 syms_of_xterm () | |
6231 { | |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6232 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
|
6233 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
|
6234 staticpro (&mouse_face_window); |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6235 mouse_face_window = Qnil; |
395 | 6236 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6237 #endif /* ! defined (HAVE_X11) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
6238 #endif /* ! defined (HAVE_X_WINDOWS) */ |