1 /*
2  * Header file to make compatibility with older GTK versions less
3  * painful, by #defining various things that are pure spelling changes
4  * between GTK1 and GTK2, or between 2 and 3.
5  */
6 
7 #if !GTK_CHECK_VERSION(2,0,0)
8 
9 #include <ctype.h>
10 #include <X11/X.h>
11 
12 /* Helper macro used in definitions below. Note that although it
13  * *expands* w and flag twice, it does not *evaluate* them twice
14  * because the evaluations are in exclusive branches of ?:. So it's
15  * a side-effect-safe macro. */
16 #define gtk1_widget_set_unset_flag(w, flag, b)                    \
17     ((b) ? GTK_WIDGET_SET_FLAGS(w, flag) : GTK_WIDGET_UNSET_FLAGS(w, flag))
18 
19 #define GType GtkType
20 #define GObject GtkObject
21 #define G_CALLBACK(x) GTK_SIGNAL_FUNC(x)
22 #define G_OBJECT(x) GTK_OBJECT(x)
23 #define G_TYPE_CHECK_INSTANCE_TYPE GTK_CHECK_TYPE
24 #define G_TYPE_CHECK_INSTANCE_CAST GTK_CHECK_CAST
25 #define G_TYPE_CHECK_CLASS_TYPE GTK_CHECK_CLASS_TYPE
26 #define G_TYPE_CHECK_CLASS_CAST GTK_CHECK_CLASS_CAST
27 
28 #define g_ascii_isspace(x) (isspace((unsigned char)(x)))
29 #define g_signal_connect gtk_signal_connect
30 #define g_signal_connect_swapped gtk_signal_connect_object
31 #define g_signal_stop_emission_by_name gtk_signal_emit_stop_by_name
32 #define g_signal_emit_by_name gtk_signal_emit_by_name
33 #define g_signal_handler_disconnect gtk_signal_disconnect
34 #define g_object_get_data gtk_object_get_data
35 #define g_object_set_data gtk_object_set_data
36 #define g_object_set_data_full gtk_object_set_data_full
37 #define g_object_ref_sink(x) do {               \
38         gtk_object_ref(x);                      \
39         gtk_object_sink(x);                     \
40     } while (0)
41 
42 #define GDK_GRAB_SUCCESS GrabSuccess
43 
44 #define GDK_WINDOW_XID GDK_WINDOW_XWINDOW
45 
46 #define gtk_widget_set_size_request gtk_widget_set_usize
47 #define gtk_radio_button_get_group gtk_radio_button_group
48 #define gtk_notebook_set_current_page gtk_notebook_set_page
49 #define gtk_color_selection_set_has_opacity_control \
50     gtk_color_selection_set_opacity
51 
52 #define gtk_dialog_get_content_area(dlg) ((dlg)->vbox)
53 #define gtk_dialog_get_action_area(dlg) ((dlg)->action_area)
54 #define gtk_dialog_set_can_default(dlg) ((dlg)->action_area)
55 #define gtk_widget_get_window(w) ((w)->window)
56 #define gtk_widget_get_parent(w) ((w)->parent)
57 #define gtk_widget_set_allocation(w, a) ((w)->allocation = *(a))
58 #define gtk_container_get_border_width(c) ((c)->border_width)
59 #define gtk_container_get_focus_child(c) ((c)->focus_child)
60 #define gtk_bin_get_child(b) ((b)->child)
61 #define gtk_color_selection_dialog_get_color_selection(cs) ((cs)->colorsel)
62 #define gtk_selection_data_get_target(sd) ((sd)->target)
63 #define gtk_selection_data_get_data_type(sd) ((sd)->type)
64 #define gtk_selection_data_get_data(sd) ((sd)->data)
65 #define gtk_selection_data_get_length(sd) ((sd)->length)
66 #define gtk_selection_data_get_format(sd) ((sd)->format)
67 #define gtk_adjustment_set_lower(a, val) ((a)->lower = (val))
68 #define gtk_adjustment_set_upper(a, val) ((a)->upper = (val))
69 #define gtk_adjustment_set_page_size(a, val) ((a)->page_size = (val))
70 #define gtk_adjustment_set_page_increment(a, val) ((a)->page_increment = (val))
71 #define gtk_adjustment_set_step_increment(a, val) ((a)->step_increment = (val))
72 #define gtk_adjustment_get_value(a) ((a)->value)
73 #define gtk_selection_data_get_selection(a) ((a)->selection)
74 #define gdk_display_beep(disp) gdk_beep()
75 
76 #define gtk_widget_set_has_window(w, b)                 \
77     gtk1_widget_set_unset_flag(w, GTK_NO_WINDOW, !(b))
78 #define gtk_widget_set_mapped(w, b)                     \
79     gtk1_widget_set_unset_flag(w, GTK_MAPPED, (b))
80 #define gtk_widget_set_can_default(w, b)                \
81     gtk1_widget_set_unset_flag(w, GTK_CAN_DEFAULT, (b))
82 #define gtk_widget_get_visible(w) GTK_WIDGET_VISIBLE(w)
83 #define gtk_widget_get_mapped(w) GTK_WIDGET_MAPPED(w)
84 #define gtk_widget_get_realized(w) GTK_WIDGET_REALIZED(w)
85 #define gtk_widget_get_state(w) GTK_WIDGET_STATE(w)
86 #define gtk_widget_get_can_focus(w) GTK_WIDGET_CAN_FOCUS(w)
87 #define gtk_widget_is_drawable(w) GTK_WIDGET_DRAWABLE(w)
88 #define gtk_widget_is_sensitive(w) GTK_WIDGET_IS_SENSITIVE(w)
89 #define gtk_widget_has_focus(w) GTK_WIDGET_HAS_FOCUS(w)
90 
91 /* This is a bit of a bodge because it relies on us only calling this
92  * macro as GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), so under
93  * GTK1 it makes sense to omit the contained function call and just
94  * return the GDK default display. */
95 #define GDK_DISPLAY_XDISPLAY(x) GDK_DISPLAY()
96 
97 #define GDK_KEY_C                    ('C')
98 #define GDK_KEY_V                    ('V')
99 #define GDK_KEY_c                    ('c')
100 #define GDK_KEY_v                    ('v')
101 
102 #endif /* 2.0 */
103 
104 #if !GTK_CHECK_VERSION(2,22,0)
105 
106 #define gdk_visual_get_depth(v) ((v)->depth)
107 
108 #endif /* 2.22 */
109 
110 #if !GTK_CHECK_VERSION(2,24,0)
111 
112 #define GDK_KEY_Alt_L                GDK_Alt_L
113 #define GDK_KEY_Alt_R                GDK_Alt_R
114 #define GDK_KEY_BackSpace            GDK_BackSpace
115 #define GDK_KEY_Begin                GDK_Begin
116 #define GDK_KEY_Break                GDK_Break
117 #define GDK_KEY_Delete               GDK_Delete
118 #define GDK_KEY_Down                 GDK_Down
119 #define GDK_KEY_End                  GDK_End
120 #define GDK_KEY_Escape               GDK_Escape
121 #define GDK_KEY_F10                  GDK_F10
122 #define GDK_KEY_F11                  GDK_F11
123 #define GDK_KEY_F12                  GDK_F12
124 #define GDK_KEY_F13                  GDK_F13
125 #define GDK_KEY_F14                  GDK_F14
126 #define GDK_KEY_F15                  GDK_F15
127 #define GDK_KEY_F16                  GDK_F16
128 #define GDK_KEY_F17                  GDK_F17
129 #define GDK_KEY_F18                  GDK_F18
130 #define GDK_KEY_F19                  GDK_F19
131 #define GDK_KEY_F1                   GDK_F1
132 #define GDK_KEY_F20                  GDK_F20
133 #define GDK_KEY_F2                   GDK_F2
134 #define GDK_KEY_F3                   GDK_F3
135 #define GDK_KEY_F4                   GDK_F4
136 #define GDK_KEY_F5                   GDK_F5
137 #define GDK_KEY_F6                   GDK_F6
138 #define GDK_KEY_F7                   GDK_F7
139 #define GDK_KEY_F8                   GDK_F8
140 #define GDK_KEY_F9                   GDK_F9
141 #define GDK_KEY_Home                 GDK_Home
142 #define GDK_KEY_Insert               GDK_Insert
143 #define GDK_KEY_ISO_Left_Tab         GDK_ISO_Left_Tab
144 #define GDK_KEY_KP_0                 GDK_KP_0
145 #define GDK_KEY_KP_1                 GDK_KP_1
146 #define GDK_KEY_KP_2                 GDK_KP_2
147 #define GDK_KEY_KP_3                 GDK_KP_3
148 #define GDK_KEY_KP_4                 GDK_KP_4
149 #define GDK_KEY_KP_5                 GDK_KP_5
150 #define GDK_KEY_KP_6                 GDK_KP_6
151 #define GDK_KEY_KP_7                 GDK_KP_7
152 #define GDK_KEY_KP_8                 GDK_KP_8
153 #define GDK_KEY_KP_9                 GDK_KP_9
154 #define GDK_KEY_KP_Add               GDK_KP_Add
155 #define GDK_KEY_KP_Begin             GDK_KP_Begin
156 #define GDK_KEY_KP_Decimal           GDK_KP_Decimal
157 #define GDK_KEY_KP_Delete            GDK_KP_Delete
158 #define GDK_KEY_KP_Divide            GDK_KP_Divide
159 #define GDK_KEY_KP_Down              GDK_KP_Down
160 #define GDK_KEY_KP_End               GDK_KP_End
161 #define GDK_KEY_KP_Enter             GDK_KP_Enter
162 #define GDK_KEY_KP_Home              GDK_KP_Home
163 #define GDK_KEY_KP_Insert            GDK_KP_Insert
164 #define GDK_KEY_KP_Left              GDK_KP_Left
165 #define GDK_KEY_KP_Multiply          GDK_KP_Multiply
166 #define GDK_KEY_KP_Page_Down         GDK_KP_Page_Down
167 #define GDK_KEY_KP_Page_Up           GDK_KP_Page_Up
168 #define GDK_KEY_KP_Right             GDK_KP_Right
169 #define GDK_KEY_KP_Subtract          GDK_KP_Subtract
170 #define GDK_KEY_KP_Up                GDK_KP_Up
171 #define GDK_KEY_Left                 GDK_Left
172 #define GDK_KEY_Meta_L               GDK_Meta_L
173 #define GDK_KEY_Meta_R               GDK_Meta_R
174 #define GDK_KEY_Num_Lock             GDK_Num_Lock
175 #define GDK_KEY_Page_Down            GDK_Page_Down
176 #define GDK_KEY_Page_Up              GDK_Page_Up
177 #define GDK_KEY_Return               GDK_Return
178 #define GDK_KEY_Right                GDK_Right
179 #define GDK_KEY_Tab                  GDK_Tab
180 #define GDK_KEY_Up                   GDK_Up
181 #define GDK_KEY_greater              GDK_greater
182 #define GDK_KEY_less                 GDK_less
183 
184 #define gdk_window_get_screen(w) gdk_drawable_get_screen(w)
185 #define gtk_combo_box_new_with_model_and_entry(t) gtk_combo_box_entry_new_with_model(t, 1)
186 
187 #endif /* 2.24 */
188 
189 #if !GTK_CHECK_VERSION(3,0,0)
190 #define GDK_IS_X11_WINDOW(window) (1)
191 #endif
192 
193 #if GTK_CHECK_VERSION(3,0,0)
194 #define STANDARD_OK_LABEL "_OK"
195 #define STANDARD_OPEN_LABEL "_Open"
196 #define STANDARD_CANCEL_LABEL "_Cancel"
197 #else
198 #define STANDARD_OK_LABEL GTK_STOCK_OK
199 #define STANDARD_OPEN_LABEL GTK_STOCK_OPEN
200 #define STANDARD_CANCEL_LABEL GTK_STOCK_CANCEL
201 #endif
202 
203 #if GTK_CHECK_VERSION(3,0,0)
204 #define gtk_hseparator_new() gtk_separator_new(GTK_ORIENTATION_HORIZONTAL)
205 /* Fortunately, my hboxes and vboxes never actually set homogeneous to
206  * true, so I can just wrap these deprecated constructors with a macro
207  * without also having to arrange a call to gtk_box_set_homogeneous. */
208 #define gtk_hbox_new(homogeneous, spacing) \
209     gtk_box_new(GTK_ORIENTATION_HORIZONTAL, spacing)
210 #define gtk_vbox_new(homogeneous, spacing) \
211     gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing)
212 #define gtk_vscrollbar_new(adjust) \
213     gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, adjust)
214 
215 #define gdk_get_display() gdk_display_get_name(gdk_display_get_default())
216 
217 #define gdk_cursor_new(cur) \
218     gdk_cursor_new_for_display(gdk_display_get_default(), cur)
219 
220 #endif /* 3.0 */
221