#endif
#ifdef __WXGTK__
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include <gdk/gdkprivate.h>
#include <wx/gtk/win_gtk.h>
+#define GetXWindow(wxwin) GDK_WINDOW_XWINDOW((wxwin)->m_widget->window)
+#endif
+
+#ifdef __WXX11__
+#include "wx/x11/privx.h"
+#define GetXWindow(wxwin) ((Window)(wxwin)->GetHandle())
#endif
#ifdef __WXMAC__
}
-// Save a reference to the dictionary of the wx.core module, and inject
+// Save a reference to the dictionary of the wx._core module, and inject
// a few more things into it.
PyObject* __wxPySetDictionary(PyObject* /* self */, PyObject* args)
{
PyDict_SetItemString(wxPython_dict, "__wxPyPtrTypeMap", wxPyPtrTypeMap);
// Create an exception object to use for wxASSERTions
- wxPyAssertionError = PyErr_NewException("wx.core.PyAssertionError",
+ wxPyAssertionError = PyErr_NewException("wx._core.PyAssertionError",
PyExc_AssertionError, NULL);
PyDict_SetItemString(wxPython_dict, "PyAssertionError", wxPyAssertionError);
return (long)win->GetHandle();
#endif
- // Find and return the actual X-Window.
-#ifdef __WXGTK__
- if (win->m_wxwindow) {
-#ifdef __WXGTK20__
- return (long) GDK_WINDOW_XWINDOW(GTK_PIZZA(win->m_wxwindow)->bin_window);
-#else
- GdkWindowPrivate* bwin = (GdkWindowPrivate*)GTK_PIZZA(win->m_wxwindow)->bin_window;
- if (bwin) {
- return (long)bwin->xwindow;
- }
-#endif
- }
+#if defined(__WXGTK__) || defined(__WXX11)
+ return (long)GetXWindow(win);
#endif
-
+
#ifdef __WXMAC__
- return (long)MAC_WXHWND(win->MacGetRootWindow());
+ //return (long)MAC_WXHWND(win->MacGetTopLevelWindowRef());
+ return (long)win->GetHandle();
#endif
return 0;
// Some helper functions for typemaps in my_typemaps.i, so they won't be
// included in every file over and over again...
-#if PYTHON_API_VERSION >= 1009
- static char* wxStringErrorMsg = "String or Unicode type required";
-#else
- static char* wxStringErrorMsg = "String type required";
-#endif
-
-
wxString* wxString_in_helper(PyObject* source) {
- wxString* target;
-#if PYTHON_API_VERSION >= 1009 // Have Python unicode API
+ wxString* target = NULL;
+
if (!PyString_Check(source) && !PyUnicode_Check(source)) {
- PyErr_SetString(PyExc_TypeError, wxStringErrorMsg);
+ PyErr_SetString(PyExc_TypeError, "String or Unicode type required");
return NULL;
}
#if wxUSE_UNICODE
- if (PyUnicode_Check(source)) {
- target = new wxString();
- size_t len = PyUnicode_GET_SIZE(source);
- if (len) {
- PyUnicode_AsWideChar((PyUnicodeObject*)source, target->GetWriteBuf(len), len);
- target->UngetWriteBuf();
- }
- } else {
- // It is a string, get pointers to it and transform to unicode
- char* tmpPtr; int tmpSize;
- PyString_AsStringAndSize(source, &tmpPtr, &tmpSize);
- target = new wxString(tmpPtr, *wxConvCurrent, tmpSize);
+ PyObject* uni = source;
+ if (PyString_Check(source)) {
+ uni = PyUnicode_FromObject(source);
+ if (PyErr_Occurred()) return NULL;
+ }
+ target = new wxString();
+ size_t len = PyUnicode_GET_SIZE(uni);
+ if (len) {
+ PyUnicode_AsWideChar((PyUnicodeObject*)uni, target->GetWriteBuf(len), len);
+ target->UngetWriteBuf();
}
+
+ if (PyString_Check(source))
+ Py_DECREF(uni);
#else
char* tmpPtr; int tmpSize;
if (PyString_AsStringAndSize(source, &tmpPtr, &tmpSize) == -1) {
}
target = new wxString(tmpPtr, tmpSize);
#endif // wxUSE_UNICODE
-
-#else // No Python unicode API (1.5.2)
- if (!PyString_Check(source)) {
- PyErr_SetString(PyExc_TypeError, wxStringErrorMsg);
- return NULL;
- }
- target = new wxString(PyString_AS_STRING(source), PyString_GET_SIZE(source));
-#endif
+
return target;
}
wxString Py2wxString(PyObject* source)
{
wxString target;
- bool doDecRef = False;
-
-#if PYTHON_API_VERSION >= 1009 // Have Python unicode API
- if (!PyString_Check(source) && !PyUnicode_Check(source)) {
- // Convert to String if not one already... (TODO: Unicode too?)
- source = PyObject_Str(source);
- doDecRef = True;
- }
#if wxUSE_UNICODE
- if (PyUnicode_Check(source)) {
- size_t len = PyUnicode_GET_SIZE(source);
- if (len) {
- PyUnicode_AsWideChar((PyUnicodeObject*)source, target.GetWriteBuf(len), len);
- target.UngetWriteBuf();
- }
- } else {
- // It is a string, get pointers to it and transform to unicode
- char* tmpPtr; int tmpSize;
- PyString_AsStringAndSize(source, &tmpPtr, &tmpSize);
- target = wxString(tmpPtr, *wxConvCurrent, tmpSize);
+ // Convert to a unicode object, if not already, then to a wxString
+ PyObject* uni = source;
+ if (!PyUnicode_Check(source)) {
+ uni = PyUnicode_FromObject(source);
+ if (PyErr_Occurred()) return wxEmptyString; // TODO: should we PyErr_Clear?
+ }
+ size_t len = PyUnicode_GET_SIZE(uni);
+ if (len) {
+ PyUnicode_AsWideChar((PyUnicodeObject*)uni, target.GetWriteBuf(len), len);
+ target.UngetWriteBuf();
}
+
+ if (!PyUnicode_Check(source))
+ Py_DECREF(uni);
#else
+ // Convert to a string object if it isn't already, then to wxString
+ PyObject* str = source;
+ if (!PyString_Check(source)) {
+ str = PyObject_Str(source);
+ if (PyErr_Occurred()) return wxEmptyString; // TODO: should we PyErr_Clear?
+ }
char* tmpPtr; int tmpSize;
- PyString_AsStringAndSize(source, &tmpPtr, &tmpSize);
+ PyString_AsStringAndSize(str, &tmpPtr, &tmpSize);
target = wxString(tmpPtr, tmpSize);
+
+ if (!PyString_Check(source))
+ Py_DECREF(str);
#endif // wxUSE_UNICODE
-#else // No Python unicode API (1.5.2)
- if (!PyString_Check(source)) {
- // Convert to String if not one already...
- source = PyObject_Str(source);
- doDecRef = True;
- }
- target = wxString(PyString_AS_STRING(source), PyString_GET_SIZE(source));
-#endif
-
- if (doDecRef)
- Py_DECREF(source);
return target;
}