/*
* Header file to make compatibility with older GTK versions less
* painful, by #defining various things that are pure spelling changes
- * between GTK1 and GTK2.
+ * between GTK1 and GTK2, or between 2 and 3.
*/
#if !GTK_CHECK_VERSION(2,0,0)
#define gtk1_widget_set_unset_flag(w, flag, b) \
((b) ? GTK_WIDGET_SET_FLAGS(w, flag) : GTK_WIDGET_UNSET_FLAGS(w, flag))
+#define GType GtkType
+#define GObject GtkObject
#define G_CALLBACK(x) GTK_SIGNAL_FUNC(x)
#define G_OBJECT(x) GTK_OBJECT(x)
+#define G_TYPE_CHECK_INSTANCE_TYPE GTK_CHECK_TYPE
+#define G_TYPE_CHECK_INSTANCE_CAST GTK_CHECK_CAST
+#define G_TYPE_CHECK_CLASS_TYPE GTK_CHECK_CLASS_TYPE
+#define G_TYPE_CHECK_CLASS_CAST GTK_CHECK_CLASS_CAST
#define g_ascii_isspace(x) (isspace((unsigned char)(x)))
#define g_signal_connect gtk_signal_connect
+#define g_signal_connect_swapped gtk_signal_connect_object
+#define g_signal_stop_emission_by_name gtk_signal_emit_stop_by_name
+#define g_signal_emit_by_name gtk_signal_emit_by_name
+#define g_signal_handler_disconnect gtk_signal_disconnect
+#define g_object_get_data gtk_object_get_data
#define g_object_set_data gtk_object_set_data
+#define g_object_ref_sink gtk_object_sink
#define GDK_GRAB_SUCCESS GrabSuccess
+#define GDK_WINDOW_XID GDK_WINDOW_XWINDOW
+
#define gtk_widget_set_size_request gtk_widget_set_usize
+#define gtk_radio_button_get_group gtk_radio_button_group
+#define gtk_notebook_set_current_page gtk_notebook_set_page
+#define gtk_color_selection_set_has_opacity_control \
+ gtk_color_selection_set_opacity
#define gtk_dialog_get_content_area(dlg) ((dlg)->vbox)
#define gtk_dialog_get_action_area(dlg) ((dlg)->action_area)
#define gtk_widget_get_realized(w) GTK_WIDGET_REALIZED(w)
#define gtk_widget_get_state(w) GTK_WIDGET_STATE(w)
+/* This is a bit of a bodge because it relies on us only calling this
+ * macro as GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), so under
+ * GTK1 it makes sense to omit the contained function call and just
+ * return the GDK default display. */
+#define GDK_DISPLAY_XDISPLAY(x) GDK_DISPLAY()
+
#define GDK_KEY_Alt_L GDK_Alt_L
#define GDK_KEY_Alt_R GDK_Alt_R
#define GDK_KEY_BackSpace GDK_BackSpace
#endif
+#if GTK_CHECK_VERSION(3,0,0)
+#define STANDARD_OK_LABEL "_OK"
+#define STANDARD_OPEN_LABEL "_Open"
+#define STANDARD_CANCEL_LABEL "_Cancel"
+#else
+#define STANDARD_OK_LABEL GTK_STOCK_OK
+#define STANDARD_OPEN_LABEL GTK_STOCK_OPEN
+#define STANDARD_CANCEL_LABEL GTK_STOCK_CANCEL
+#endif
+
+#if GTK_CHECK_VERSION(3,0,0)
+#define gtk_hseparator_new() gtk_separator_new(GTK_ORIENTATION_HORIZONTAL)
+/* Fortunately, my hboxes and vboxes never actually set homogeneous to
+ * TRUE, so I can just wrap these deprecated constructors with a macro
+ * without also having to arrange a call to gtk_box_set_homogeneous. */
+#define gtk_hbox_new(homogeneous, spacing) \
+ gtk_box_new(GTK_ORIENTATION_HORIZONTAL, spacing)
+#define gtk_vbox_new(homogeneous, spacing) \
+ gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing)
+#define gtk_vscrollbar_new(adjust) \
+ gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, adjust)
+
+#define gdk_get_display() gdk_display_get_name(gdk_display_get_default())
+
+#define gdk_cursor_new(cur) \
+ gdk_cursor_new_for_display(gdk_display_get_default(), cur)
+
+#endif