Mercurial > emacs
annotate lwlib/lwlib.h @ 58195:c12b583f54b9
Fixed these problems:
** Clicking on partially visible lines fails
From: David Kastrup <dak@gnu.org>
Date: 27 Apr 2004 16:42:58 +0200
I had gnus display a mouse-highlighted line (a URL from browse-url)
partially at the bottom of its window. If I click with middle mouse
key on it, the window gets recentered while I hold the mouse key
pressed. If I release it, the window returns into its old position
(cursor in top row) and nothing happens, presumably because the click
was not registered on the line itself, but on the magically
recentered version.
That is a nuisance. Recentering of even partially visible click
targets should only happen if window-point moves there, but not at
the time of the click. From the moment I hold down a key until it
gets released, the displayed window portion should not change, with
the sole exception of scrolling when dragging at the edge of the
screen.
(progn
(setq line-spacing 4)
(dotimes (i (window-height))
(insert "\n" (int-to-string i)))
(forward-line -2)
(recenter -1))
** Can't drag modeline when mouse-autoselect-window is set
From: Klaus Zeitler <kzeitler@lucent.com>
Date: Mon, 11 Oct 2004 11:14:49 +0200
1. start emacs -q --no-site-file
2. set variable mouse-autoselect-window to t
3. split-window-vertically
now I can drag the modeline only upwards but not downwards
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sat, 13 Nov 2004 01:40:36 +0000 |
parents | 8a28788cef84 |
children | 9f78501bf1f3 3219f94257bc |
rev | line source |
---|---|
5626 | 1 #ifndef LWLIB_H |
2 #define LWLIB_H | |
3 | |
4 #include <X11/Intrinsic.h> | |
5 | |
6 /* | |
7 ** Widget values depend on the Widget type: | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41766
diff
changeset
|
8 ** |
5626 | 9 ** widget: (name value key enabled data contents/selected) |
10 ** | |
11 ** label: ("name" "string" NULL NULL NULL NULL) | |
12 ** button: ("name" "string" "key" T/F data <default-button-p>) | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41766
diff
changeset
|
13 ** button w/menu: |
5626 | 14 ** ("name" "string" "key" T/F data (label|button|button w/menu...)) |
15 ** menubar: ("name" NULL NULL T/F data (button w/menu)) | |
16 ** selectable thing: | |
17 ** ("name" "string" "key" T/F data T/F) | |
18 ** checkbox: selectable thing | |
19 ** radio: ("name" NULL NULL T/F data (selectable thing...)) | |
20 ** strings: ("name" NULL NULL T/F data (selectable thing...)) | |
21 ** text: ("name" "string" <ign> T/F data) | |
8784 | 22 ** main: ("name") |
5626 | 23 */ |
24 | |
25 typedef unsigned long LWLIB_ID; | |
26 | |
27 typedef enum _change_type | |
28 { | |
29 NO_CHANGE = 0, | |
30 INVISIBLE_CHANGE = 1, | |
31 VISIBLE_CHANGE = 2, | |
32 STRUCTURAL_CHANGE = 3 | |
33 } change_type; | |
34 | |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
35 enum button_type |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
36 { |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
37 BUTTON_TYPE_NONE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
38 BUTTON_TYPE_TOGGLE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
39 BUTTON_TYPE_RADIO |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
40 }; |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
41 |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
42 /* Menu separator types. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
43 |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
44 enum menu_separator |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
45 { |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
46 /* These values are Motif compatible. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
47 SEPARATOR_NO_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
48 SEPARATOR_SINGLE_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
49 SEPARATOR_DOUBLE_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
50 SEPARATOR_SINGLE_DASHED_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
51 SEPARATOR_DOUBLE_DASHED_LINE, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
52 SEPARATOR_SHADOW_ETCHED_IN, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
53 SEPARATOR_SHADOW_ETCHED_OUT, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
54 SEPARATOR_SHADOW_ETCHED_IN_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
55 SEPARATOR_SHADOW_ETCHED_OUT_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
56 |
41766
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
57 /* The following are supported by Lucid menus. */ |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
58 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
59 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
60 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH, |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
61 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
62 }; |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
63 |
5626 | 64 typedef struct _widget_value |
65 { | |
66 /* name of widget */ | |
56845
8a28788cef84
* lwlib.h (_widget_value): Added lname and lkey.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
67 Lisp_Object lname; |
5626 | 68 char* name; |
69 /* value (meaning depend on widget type) */ | |
70 char* value; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41766
diff
changeset
|
71 /* keyboard equivalent. no implications for XtTranslations */ |
56845
8a28788cef84
* lwlib.h (_widget_value): Added lname and lkey.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
72 Lisp_Object lkey; |
5626 | 73 char* key; |
41766
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
74 /* Help string or nil if none. |
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
75 GC finds this string through the frame's menu_bar_vector |
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
76 or through menu_items. */ |
32d440813da1
(_widget_value): `help' has type Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
29466
diff
changeset
|
77 Lisp_Object help; |
5626 | 78 /* true if enabled */ |
79 Boolean enabled; | |
80 /* true if selected */ | |
81 Boolean selected; | |
82 /* true if was edited (maintained by get_value) */ | |
83 Boolean edited; | |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
84 /* The type of a button. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
85 enum button_type button_type; |
5626 | 86 /* true if has changed (maintained by lw library) */ |
87 change_type change; | |
14878
487b03096cc5
(struct widget_value): New field this_one_change.
Richard M. Stallman <rms@gnu.org>
parents:
14018
diff
changeset
|
88 /* true if this widget itself has changed, |
487b03096cc5
(struct widget_value): New field this_one_change.
Richard M. Stallman <rms@gnu.org>
parents:
14018
diff
changeset
|
89 but not counting the other widgets found in the `next' field. */ |
487b03096cc5
(struct widget_value): New field this_one_change.
Richard M. Stallman <rms@gnu.org>
parents:
14018
diff
changeset
|
90 change_type this_one_change; |
5626 | 91 /* Contents of the sub-widgets, also selected slot for checkbox */ |
92 struct _widget_value* contents; | |
93 /* data passed to callback */ | |
94 XtPointer call_data; | |
95 /* next one in the list */ | |
96 struct _widget_value* next; | |
97 /* slot for the toolkit dependent part. Always initialize to NULL. */ | |
98 void* toolkit_data; | |
99 /* tell us if we should free the toolkit data slot when freeing the | |
100 widget_value itself. */ | |
101 Boolean free_toolkit_data; | |
102 | |
103 /* we resource the widget_value structures; this points to the next | |
104 one on the free list if this one has been deallocated. | |
105 */ | |
106 struct _widget_value *free_list; | |
107 } widget_value; | |
108 | |
109 | |
29466 | 110 typedef void (*lw_callback) __P ((Widget w, LWLIB_ID id, void* data)); |
5626 | 111 |
29466 | 112 void lw_register_widget __P ((char* type, char* name, LWLIB_ID id, |
113 widget_value* val, lw_callback pre_activate_cb, | |
114 lw_callback selection_cb, | |
115 lw_callback post_activate_cb, | |
116 lw_callback highlight_cb)); | |
117 Widget lw_get_widget __P ((LWLIB_ID id, Widget parent, Boolean pop_up_p)); | |
118 Widget lw_make_widget __P ((LWLIB_ID id, Widget parent, Boolean pop_up_p)); | |
119 Widget lw_create_widget __P ((char* type, char* name, LWLIB_ID id, | |
120 widget_value* val, Widget parent, Boolean pop_up_p, | |
121 lw_callback pre_activate_cb, | |
122 lw_callback selection_cb, | |
123 lw_callback post_activate_cb, | |
124 lw_callback highlight_cb)); | |
125 LWLIB_ID lw_get_widget_id __P ((Widget w)); | |
126 int lw_modify_all_widgets __P ((LWLIB_ID id, widget_value* val, Boolean deep_p)); | |
127 void lw_destroy_widget __P ((Widget w)); | |
128 void lw_destroy_all_widgets __P ((LWLIB_ID id)); | |
129 void lw_destroy_everything __P ((void)); | |
130 void lw_destroy_all_pop_ups __P ((void)); | |
131 Widget lw_raise_all_pop_up_widgets __P ((void)); | |
132 widget_value* lw_get_all_values __P ((LWLIB_ID id)); | |
133 Boolean lw_get_some_values __P ((LWLIB_ID id, widget_value* val)); | |
134 void lw_pop_up_all_widgets __P ((LWLIB_ID id)); | |
135 void lw_pop_down_all_widgets __P ((LWLIB_ID id)); | |
5626 | 136 widget_value *malloc_widget_value (); |
29466 | 137 void free_widget_value __P ((widget_value *)); |
138 void lw_popup_menu __P ((Widget, XEvent *)); | |
5626 | 139 |
140 /* Toolkit independent way of focusing on a Widget at the Xt level. */ | |
29466 | 141 void lw_set_keyboard_focus __P ((Widget parent, Widget w)); |
5626 | 142 |
143 /* Silly Energize hack to invert the "sheet" button */ | |
29466 | 144 void lw_show_busy __P ((Widget w, Boolean busy)); |
8784 | 145 |
146 /* Silly hack to assist with Lucid/Athena geometry management. */ | |
29466 | 147 void lw_refigure_widget __P ((Widget w, Boolean doit)); |
8784 | 148 |
149 /* Toolkit independent way of determining if an event occurred on a | |
150 menubar. */ | |
29466 | 151 Boolean lw_window_is_in_menubar __P ((Window win, Widget menubar_widget)); |
8784 | 152 |
153 /* Manage resizing: TRUE permits resizing widget w; FALSE disallows it. */ | |
29466 | 154 void lw_allow_resizing __P ((Widget w, Boolean flag)); |
5626 | 155 |
9064 | 156 /* Set up the main window. */ |
29466 | 157 void lw_set_main_areas __P ((Widget parent, |
9064 | 158 Widget menubar, |
29466 | 159 Widget work_area)); |
9064 | 160 |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
161 /* Value is non-zero if LABEL is a menu separator. If it is, *TYPE is |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
162 set to an appropriate enumerator of type enum menu_separator. |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
163 MOTIF_P non-zero means map separator types not supported by Motif |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
164 to similar ones that are supported. */ |
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
165 |
29466 | 166 int lw_separator_p __P ((char *label, enum menu_separator *type, |
167 int motif_p)); | |
168 | |
169 void lwlib_bcopy __P ((char*, char*, int)); | |
25035
d8d30f76cc61
(enum menu_separator): New.
Gerd Moellmann <gerd@gnu.org>
parents:
15630
diff
changeset
|
170 |
5626 | 171 #endif /* LWLIB_H */ |
52401 | 172 |
173 /* arch-tag: 44d818d5-7eb2-4d87-acd7-b992bb0d5d20 | |
174 (do not change this comment) */ |