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
|
|
33 #define XG_SB_MIN 0
|
|
34 #define XG_SB_MAX 10000000
|
|
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;
|
|
69
|
|
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;
|
|
88
|
|
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 */
|
|
98 char *name;
|
|
99 /* value (meaning depend on widget type) */
|
|
100 char *value;
|
|
101 /* keyboard equivalent. no implications for XtTranslations */
|
|
102 char *key;
|
|
103 /* Help string or nil if none.
|
|
104 GC finds this string through the frame's menu_bar_vector
|
|
105 or through menu_items. */
|
|
106 Lisp_Object help;
|
|
107 /* true if enabled */
|
|
108 gint enabled;
|
|
109 /* true if selected */
|
|
110 gint selected;
|
|
111 /* The type of a button. */
|
|
112 enum button_type button_type;
|
|
113 /* Contents of the sub-widgets, also selected slot for checkbox */
|
|
114 struct _widget_value *contents;
|
|
115 /* data passed to callback */
|
|
116 gpointer call_data;
|
|
117 /* next one in the list */
|
|
118 struct _widget_value *next;
|
|
119
|
|
120 /* we resource the widget_value structures; this points to the next
|
|
121 one on the free list if this one has been deallocated.
|
|
122 */
|
|
123 struct _widget_value *free_list;
|
|
124 } widget_value;
|
|
125
|
|
126 extern widget_value *malloc_widget_value ();
|
|
127 extern void free_widget_value P_ ((widget_value *));
|
|
128
|
|
129 extern char *xg_get_file_name P_ ((FRAME_PTR f,
|
|
130 char *prompt,
|
|
131 char *default_filename,
|
|
132 int mustmatch_p));
|
|
133
|
|
134 extern GtkWidget *xg_create_widget P_ ((char *type,
|
|
135 char *name,
|
|
136 FRAME_PTR f,
|
|
137 widget_value *val,
|
|
138 GCallback select_cb,
|
|
139 GCallback deactivate_cb,
|
|
140 GCallback hightlight_cb));
|
|
141
|
|
142 extern void xg_modify_menubar_widgets P_ ((GtkWidget *menubar,
|
|
143 FRAME_PTR f,
|
|
144 widget_value *val,
|
|
145 int deep_p,
|
|
146 GCallback select_cb,
|
|
147 GCallback deactivate_cb,
|
|
148 GCallback hightlight_cb));
|
|
149
|
|
150 extern int xg_update_frame_menubar P_ ((FRAME_PTR f));
|
|
151
|
|
152 extern void xg_keep_popup P_ ((GtkWidget *menu, GtkWidget *submenu));
|
|
153
|
|
154 extern void xg_create_scroll_bar P_ ((FRAME_PTR f,
|
|
155 struct scroll_bar *bar,
|
|
156 GCallback scroll_callback,
|
|
157 char *scroll_bar_name));
|
|
158 extern void xg_show_scroll_bar P_ ((int scrollbar_id));
|
|
159 extern void xg_remove_scroll_bar P_ ((FRAME_PTR f, int scrollbar_id));
|
|
160
|
|
161 extern void xg_update_scrollbar_pos P_ ((FRAME_PTR f,
|
|
162 int scrollbar_id,
|
|
163 int top,
|
|
164 int left,
|
|
165 int width,
|
|
166 int height));
|
|
167
|
|
168 extern void xg_set_toolkit_scroll_bar_thumb P_ ((struct scroll_bar *bar,
|
|
169 int portion,
|
|
170 int position,
|
|
171 int whole));
|
|
172
|
|
173
|
|
174 extern void update_frame_tool_bar P_ ((FRAME_PTR f));
|
|
175 extern void free_frame_tool_bar P_ ((FRAME_PTR f));
|
|
176
|
|
177 extern void xg_resize_widgets P_ ((FRAME_PTR f,
|
|
178 int pixelwidth,
|
|
179 int pixelheight));
|
|
180 extern void xg_frame_set_char_size P_ ((FRAME_PTR f, int cols, int rows));
|
|
181 extern GtkWidget * xg_win_to_widget P_ ((Window));
|
|
182 extern int xg_create_frame_widgets P_ ((FRAME_PTR f));
|
|
183 extern void x_wm_set_size_hint P_ ((FRAME_PTR f,
|
|
184 long flags,
|
|
185 int user_position));
|
|
186 extern void xg_set_background_color P_ ((FRAME_PTR f, unsigned long bg));
|
|
187
|
|
188 /* Mark all callback data that are Lisp_object:s during GC. */
|
|
189 extern void xg_mark_data ();
|
|
190
|
|
191 /* Initialize GTK specific parts. */
|
|
192 extern void xg_initialize ();
|
|
193
|
|
194 /* Setting scrollbar values invokes the callback. Use this variable
|
|
195 to indicate that the callback should do nothing. */
|
|
196 extern int xg_ignore_gtk_scrollbar;
|
|
197
|
|
198 /* After we send a scroll bar event, x_set_toolkit_scroll_bar_thumb will
|
|
199 be called. For some reason that needs to be debugged, it gets called
|
|
200 with bad values. Thus, we set this variable to ignore those calls. */
|
|
201 extern int xg_ignore_next_thumb;
|
|
202
|
|
203 /* If a detach of a menu is done, this is the menu widget that got
|
|
204 detached. Must be set to NULL before popping up popup menus.
|
|
205 Used with xg_keep_popup to delay deleting popup menus when they
|
|
206 have been detached. */
|
|
207 extern GtkWidget *xg_did_tearoff;
|
|
208
|
|
209 #endif /* USE_GTK */
|
|
210 #endif /* GTKUTIL_H */
|