--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/gtk/private.h
+// Purpose: wxGTK private macros, functions &c
+// Author: Vadim Zeitlin
+// Modified by:
+// Created: 12.03.02
+// RCS-ID: $Id$
+// Copyright: (c) 2002 Vadim Zeitlin <vadim@wxwindows.org>
+// Licence: wxWindows license
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_GTK_PRIVATE_H_
+#define _WX_GTK_PRIVATE_H_
+
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+
+#include "wx/event.h"
+
+// fail all version tests if the GTK+ version is so ancient that it doesn't
+// even have GTK_CHECK_VERSION
+#ifndef GTK_CHECK_VERSION
+ #define GTK_CHECK_VERSION(a, b, c) 0
+#endif
+
+// GTK+ 2.0 compatibility define is broken when used from C++ as it casts enum
+// to int implicitly
+#ifdef __WXGTK20__
+ #undef gtk_signal_disconnect_by_func
+ #define gtk_signal_disconnect_by_func(object,func,data) \
+ gtk_signal_compat_matched((object), (func), (data), \
+ (GSignalMatchType)(G_SIGNAL_MATCH_FUNC | \
+ G_SIGNAL_MATCH_DATA), 0)
+#endif
+
+// child is not a member of GTK_BUTTON() any more in GTK+ 2.0
+#ifdef __WXGTK20__
+ #define BUTTON_CHILD(w) GTK_BIN((w))->child
+#else
+ #define BUTTON_CHILD(w) GTK_BUTTON((w))->child
+#endif
+
+// event_window has disappeared from GtkToggleButton in GTK+ 2.0
+#ifdef __WXGTK20__
+ #define TOGGLE_BUTTON_EVENT_WIN(w) GTK_BUTTON((w))->event_window
+#else
+ #define TOGGLE_BUTTON_EVENT_WIN(w) GTK_TOGGLE_BUTTON((w))->event_window
+#endif
+
+// get the font from a style
+//
+// TODO: GdkFont has been replaced by PangoFontDescription in GTK+ 2.0
+// and we really should use it instead of GdkFont (see also dclient.cpp)
+#ifdef __WXGTK20__
+ #define GET_STYLE_FONT(style) gtk_style_get_font(style)
+ #define SET_STYLE_FONT(style, font) gtk_style_set_font(style, font)
+#else
+ #define GET_STYLE_FONT(style) ((style)->font)
+ #define SET_STYLE_FONT(style, fnt) \
+ gdk_font_unref( style->font ); \
+ style->font = gdk_font_ref( fnt )
+#endif
+
+// gtk_editable_{copy|cut|paste}_clipboard() had an extra argument under
+// previous GTK+ versions but no more
+#if defined(__WXGTK20__) || (GTK_MINOR_VERSION > 0)
+ #define DUMMY_CLIPBOARD_ARG
+#else
+ #define DUMMY_CLIPBOARD_ARG ,0
+#endif
+
+// _GtkEditable is now private
+#ifdef __WXGTK20__
+ #define GET_EDITABLE_POS(w) gtk_editable_get_position(GTK_EDITABLE(w))
+ #define SET_EDITABLE_POS(w, pos) \
+ gtk_editable_set_position(GTK_EDITABLE(w), (pos))
+#else
+ #define GET_EDITABLE_POS(w) GTK_EDITABLE((w))->current_pos
+ #define SET_EDITABLE_POS(w, pos) \
+ GTK_EDITABLE((w))->current_pos = (pos)
+#endif
+
+// this GtkNotebook struct field has been renamed
+#ifdef __WXGTK20__
+ #define NOTEBOOK_PANEL(nb) GTK_NOTEBOOK(nb)->event_window
+#else
+ #define NOTEBOOK_PANEL(nb) GTK_NOTEBOOK(nb)->panel
+#endif
+
+// VZ: I _think_ that in GTK+ 2.0 the scroll type is passed to the
+// value_changed callback as a 2nd argument but I'm not at all sure about
+// it, if this is false all occurences of this macro must be changed!
+#ifdef __WXGTK20__
+ #define SCROLLBAR_CBACK_ARG GtkScrollType scrollType,
+ #define GET_SCROLL_TYPE(w) scrollType
+#else
+ #define SCROLLBAR_CBACK_ARG
+ #define GET_SCROLL_TYPE(w) GTK_RANGE((w))->scroll_type
+#endif
+
+// translate a GTK+ scroll type to a wxEventType
+inline wxEventType GtkScrollTypeToWx(guint scrollType)
+{
+ wxEventType command;
+ switch ( scrollType )
+ {
+ case GTK_SCROLL_STEP_BACKWARD:
+ command = wxEVT_SCROLL_LINEUP;
+ break;
+
+ case GTK_SCROLL_STEP_FORWARD:
+ command = wxEVT_SCROLL_LINEDOWN;
+ break;
+
+ case GTK_SCROLL_PAGE_BACKWARD:
+ command = wxEVT_SCROLL_PAGEUP;
+ break;
+
+ case GTK_SCROLL_PAGE_FORWARD:
+ command = wxEVT_SCROLL_PAGEDOWN;
+ break;
+
+ default:
+ command = wxEVT_SCROLL_THUMBTRACK;
+ }
+
+ return command;
+}
+
+inline wxEventType GtkScrollWinTypeToWx(guint scrollType)
+{
+ // GtkScrollTypeToWx() returns SCROLL_XXX, not SCROLLWIN_XXX as we need
+ return GtkScrollTypeToWx(scrollType) +
+ wxEVT_SCROLLWIN_TOP - wxEVT_SCROLL_TOP;
+}
+
+#endif // _WX_GTK_PRIVATE_H_
+