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