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