]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/gtk1/private.h
changes to make wxGTK compile with GTK+ 2.0: now it does but the minimal
[wxWidgets.git] / include / wx / gtk1 / private.h
diff --git a/include/wx/gtk1/private.h b/include/wx/gtk1/private.h
new file mode 100644 (file)
index 0000000..aa0dd28
--- /dev/null
@@ -0,0 +1,138 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_
+