+
+ case wxSYS_SCREEN_X:
+#if GTK_CHECK_VERSION(2,2,0)
+ if (window && !gtk_check_version(2,2,0))
+ return gdk_screen_get_width(gdk_drawable_get_screen(window));
+ else
+#endif
+ return gdk_screen_width();
+
+ case wxSYS_SCREEN_Y:
+#if GTK_CHECK_VERSION(2,2,0)
+ if (window && !gtk_check_version(2,2,0))
+ return gdk_screen_get_height(gdk_drawable_get_screen(window));
+ else
+#endif
+ return gdk_screen_height();
+
+ case wxSYS_HSCROLL_Y: return 15;
+ case wxSYS_VSCROLL_X: return 15;
+
+ case wxSYS_CAPTION_Y:
+ if (!window)
+ // No realized window specified, and no implementation for that case yet.
+ return -1;
+
+ // Check if wm supports frame extents - we can't know the caption height if it does not.
+#if GTK_CHECK_VERSION(2,2,0)
+ if (!gtk_check_version(2,2,0))
+ {
+ if (!gdk_x11_screen_supports_net_wm_hint(
+ gdk_drawable_get_screen(window),
+ gdk_atom_intern("_NET_FRAME_EXTENTS", false) ) )
+ return -1;
+ }
+ else
+#endif
+ {
+ if (!gdk_net_wm_supports(gdk_atom_intern("_NET_FRAME_EXTENTS", false)))
+ return -1;
+ }
+
+ wxASSERT_MSG( wxDynamicCast(win, wxTopLevelWindow),
+ wxT("Asking for caption height of a non toplevel window") );
+
+ // Get the height of the top windowmanager border.
+ // This is the titlebar in most cases. The titlebar might be elsewhere, and
+ // we could check which is the thickest wm border to decide on which side the
+ // titlebar is, but this might lead to interesting behaviours in used code.
+ // Reconsider when we have a way to report to the user on which side it is.
+ if (wxXGetWindowProperty(window, type, format, nitems, data))
+ {
+ int caption_height = -1;
+
+ if ((type == XA_CARDINAL) && (format == 32) && (nitems >= 3) && (data))
+ {
+ caption_height = int(data[2]); // top frame extent
+ }
+
+ if (data)
+ XFree(data);
+
+ return caption_height;
+ }
+
+ // Try a default approach without a window pointer, if possible
+ // ...
+
+ return -1;
+
+ case wxSYS_PENWINDOWS_PRESENT:
+ // No MS Windows for Pen computing extension available in X11 based gtk+.