+ // GTK+ screen functions are always available, no need to check for them
+#ifndef __WXGTK20__
+ if ( !XineramaIsActive((Display*)wxGetDisplay()) )
+ return new wxDisplayFactorySingle;
+#endif
+
+ return new wxDisplayFactoryX11;
+}
+
+#endif /* wxUSE_DISPLAY */
+
+#include "wx/utils.h"
+
+#if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
+
+void wxClientDisplayRect(int *x, int *y, int *width, int *height)
+{
+ // TODO: don't hardcode display size
+ if ( x )
+ *x = 0;
+ if ( y )
+ *y = 0;
+ if ( width )
+ *width = 672;
+ if ( height )
+ *height = 396;
+}
+
+#else // !wxUSE_LIBHILDON || !wxUSE_LIBHILDON2
+
+#include "wx/log.h"
+
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+
+// TODO: make this a full-fledged class and move to a public header
+class wxX11Ptr
+{
+public:
+ wxX11Ptr(void *ptr = NULL) : m_ptr(ptr) { }
+ ~wxX11Ptr() { if ( m_ptr ) XFree(m_ptr); }
+
+private:
+ void *m_ptr;
+
+ wxDECLARE_NO_COPY_CLASS(wxX11Ptr);
+};
+
+// NB: this function is implemented using X11 and not GDK calls as it's shared
+// by wxGTK[12], wxX11 and wxMotif ports
+void wxClientDisplayRect(int *x, int *y, int *width, int *height)
+{
+ Display * const dpy = wxGetX11Display();
+ wxCHECK_RET( dpy, wxT("can't be called before initializing the GUI") );
+
+ const Atom atomWorkArea = XInternAtom(dpy, "_NET_WORKAREA", True);
+ if ( atomWorkArea )