49323
|
1 /* Definitions and headers for GTK widgets.
|
68651
|
2 Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
49323
|
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
|
|
8 the Free Software Foundation; either version 2, or (at your option)
|
|
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
|
64084
|
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19 Boston, MA 02110-1301, USA. */
|
49323
|
20
|
|
21 #ifndef GTKUTIL_H
|
|
22 #define GTKUTIL_H
|
|
23
|
|
24
|
|
25 #ifdef USE_GTK
|
|
26
|
|
27 #include <gtk/gtk.h>
|
|
28 #include "frame.h"
|
|
29
|
|
30 /* Minimum and maximum values used for GTK scroll bars */
|
|
31
|
50270
|
32 #define XG_SB_MIN 1
|
49323
|
33 #define XG_SB_MAX 10000000
|
50270
|
34 #define XG_SB_RANGE (XG_SB_MAX-XG_SB_MIN)
|
49323
|
35
|
|
36 /* Key for data that is valid for menus in a frame */
|
|
37 #define XG_FRAME_DATA "emacs_frame"
|
|
38
|
|
39 /* Key for data that is the last scrollbar value */
|
|
40 #define XG_LAST_SB_DATA "emacs_last_sb_value"
|
|
41
|
|
42 /* Key for data that menu items hold. */
|
|
43 #define XG_ITEM_DATA "emacs_menuitem"
|
|
44
|
|
45
|
|
46 /* Button types in menus. */
|
|
47 enum button_type
|
|
48 {
|
|
49 BUTTON_TYPE_NONE,
|
|
50 BUTTON_TYPE_TOGGLE,
|
|
51 BUTTON_TYPE_RADIO
|
|
52 };
|
|
53
|
|
54 /* This is a list node in a generic list implementation. */
|
|
55 typedef struct xg_list_node_
|
|
56 {
|
|
57 struct xg_list_node_ *prev;
|
|
58 struct xg_list_node_ *next;
|
|
59 } xg_list_node;
|
|
60
|
|
61 /* This structure is the callback data that is shared for menu items.
|
|
62 We need to keep it separate from the frame structure due to
|
|
63 detachable menus. The data in the frame structure is only valid while
|
|
64 the menu is popped up. This structure is kept around as long as
|
|
65 the menu is. */
|
|
66 typedef struct xg_menu_cb_data_
|
|
67 {
|
|
68 xg_list_node ptrs;
|
49600
|
69
|
49323
|
70 FRAME_PTR f;
|
|
71 Lisp_Object menu_bar_vector;
|
|
72 int menu_bar_items_used;
|
|
73 GCallback highlight_cb;
|
|
74 int ref_count;
|
|
75 } xg_menu_cb_data;
|
|
76
|
|
77 /* This structure holds callback information for each individual menu item. */
|
|
78 typedef struct xg_menu_item_cb_data_
|
|
79 {
|
|
80 xg_list_node ptrs;
|
|
81
|
|
82 gulong highlight_id;
|
|
83 gulong unhighlight_id;
|
|
84 gulong select_id;
|
|
85 Lisp_Object help;
|
|
86 gpointer call_data;
|
|
87 xg_menu_cb_data *cl_data;
|
49600
|
88
|
49323
|
89 } xg_menu_item_cb_data;
|
|
90
|
|
91
|
|
92 /* Used to specify menus and dialogs.
|
|
93 This is an adaption from lwlib for Gtk so we can use more of the same
|
|
94 code as lwlib in xmenu.c. */
|
|
95 typedef struct _widget_value
|
|
96 {
|
|
97 /* name of widget */
|
56846
5817080daeba
* xmenu.c (digest_single_submenu): Set lname and lkey in widget_value
Jan Djärv <jan.h.d@swipnet.se>
diff
changeset
|
98 Lisp_Object lname;
|
49323
|
99 char *name;
|
|
100 /* value (meaning depend on widget type) */
|
|
101 char *value;
|
49600
|
102 /* keyboard equivalent. no implications for XtTranslations */
|
56846
5817080daeba
* xmenu.c (digest_single_submenu): Set lname and lkey in widget_value
Jan Djärv <jan.h.d@swipnet.se>
diff
changeset
|
103 Lisp_Object lkey;
|
49323
|
104 char *key;
|
|
105 /* Help string or nil if none.
|
|
106 GC finds this string through the frame's menu_bar_vector
|
|
107 or through menu_items. */
|
|
108 Lisp_Object help;
|
|
109 /* true if enabled */
|
|
110 gint enabled;
|
|
111 /* true if selected */
|
|
112 gint selected;
|
|
113 /* The type of a button. */
|
|
114 enum button_type button_type;
|
|
115 /* Contents of the sub-widgets, also selected slot for checkbox */
|
|
116 struct _widget_value *contents;
|
|
117 /* data passed to callback */
|
|
118 gpointer call_data;
|
|
119 /* next one in the list */
|
|
120 struct _widget_value *next;
|
|
121
|
|
122 /* we resource the widget_value structures; this points to the next
|
|
123 one on the free list if this one has been deallocated.
|
|
124 */
|
|
125 struct _widget_value *free_list;
|
|
126 } widget_value;
|
|
127
|
57941
|
128 #ifdef HAVE_GTK_FILE_BOTH
|
|
129 extern int use_old_gtk_file_dialog;
|
|
130 #endif
|
|
131
|
49434
|
132 extern widget_value *malloc_widget_value P_ ((void));
|
49323
|
133 extern void free_widget_value P_ ((widget_value *));
|
|
134
|
67761
|
135 extern int xg_uses_old_file_dialog P_ ((void));
|
|
136
|
49323
|
137 extern char *xg_get_file_name P_ ((FRAME_PTR f,
|
|
138 char *prompt,
|
|
139 char *default_filename,
|
57868
|
140 int mustmatch_p,
|
|
141 int only_dir_p));
|
49323
|
142
|
|
143 extern GtkWidget *xg_create_widget P_ ((char *type,
|
|
144 char *name,
|
|
145 FRAME_PTR f,
|
|
146 widget_value *val,
|
|
147 GCallback select_cb,
|
|
148 GCallback deactivate_cb,
|
|
149 GCallback hightlight_cb));
|
|
150
|
|
151 extern void xg_modify_menubar_widgets P_ ((GtkWidget *menubar,
|
|
152 FRAME_PTR f,
|
|
153 widget_value *val,
|
|
154 int deep_p,
|
|
155 GCallback select_cb,
|
|
156 GCallback deactivate_cb,
|
|
157 GCallback hightlight_cb));
|
|
158
|
|
159 extern int xg_update_frame_menubar P_ ((FRAME_PTR f));
|
|
160
|
52981
|
161 extern int xg_have_tear_offs P_ ((void));
|
49323
|
162
|
53069
|
163 extern int xg_get_scroll_id_for_window P_ ((Display *dpy, Window wid));
|
50064
|
164
|
49323
|
165 extern void xg_create_scroll_bar P_ ((FRAME_PTR f,
|
|
166 struct scroll_bar *bar,
|
|
167 GCallback scroll_callback,
|
|
168 char *scroll_bar_name));
|
|
169 extern void xg_show_scroll_bar P_ ((int scrollbar_id));
|
|
170 extern void xg_remove_scroll_bar P_ ((FRAME_PTR f, int scrollbar_id));
|
|
171
|
|
172 extern void xg_update_scrollbar_pos P_ ((FRAME_PTR f,
|
|
173 int scrollbar_id,
|
|
174 int top,
|
|
175 int left,
|
|
176 int width,
|
57596
|
177 int height));
|
49323
|
178
|
|
179 extern void xg_set_toolkit_scroll_bar_thumb P_ ((struct scroll_bar *bar,
|
|
180 int portion,
|
|
181 int position,
|
|
182 int whole));
|
|
183
|
|
184
|
|
185 extern void update_frame_tool_bar P_ ((FRAME_PTR f));
|
|
186 extern void free_frame_tool_bar P_ ((FRAME_PTR f));
|
|
187
|
|
188 extern void xg_resize_widgets P_ ((FRAME_PTR f,
|
|
189 int pixelwidth,
|
|
190 int pixelheight));
|
|
191 extern void xg_frame_set_char_size P_ ((FRAME_PTR f, int cols, int rows));
|
53069
|
192 extern GtkWidget * xg_win_to_widget P_ ((Display *dpy, Window wdesc));
|
|
193
|
|
194 extern int xg_display_open P_ ((char *display_name, Display **dpy));
|
|
195 extern void xg_display_close P_ ((Display *dpy));
|
|
196 extern GdkCursor * xg_create_default_cursor P_ ((Display *dpy));
|
|
197
|
49323
|
198 extern int xg_create_frame_widgets P_ ((FRAME_PTR f));
|
|
199 extern void x_wm_set_size_hint P_ ((FRAME_PTR f,
|
|
200 long flags,
|
|
201 int user_position));
|
|
202 extern void xg_set_background_color P_ ((FRAME_PTR f, unsigned long bg));
|
|
203
|
65005
|
204 extern void xg_set_frame_icon P_ ((FRAME_PTR f,
|
|
205 Pixmap icon_pixmap,
|
|
206 Pixmap icon_mask));
|
64935
|
207
|
49323
|
208 /* Mark all callback data that are Lisp_object:s during GC. */
|
49434
|
209 extern void xg_mark_data P_ ((void));
|
49323
|
210
|
|
211 /* Initialize GTK specific parts. */
|
49434
|
212 extern void xg_initialize P_ ((void));
|
49323
|
213
|
|
214 /* Setting scrollbar values invokes the callback. Use this variable
|
|
215 to indicate that the callback should do nothing. */
|
|
216 extern int xg_ignore_gtk_scrollbar;
|
|
217
|
|
218 #endif /* USE_GTK */
|
|
219 #endif /* GTKUTIL_H */
|
52401
|
220
|
|
221 /* arch-tag: 0757f3dc-00c7-4cee-9e4c-282cf1d34c72
|
|
222 (do not change this comment) */
|