+ return font;
+}
+
+static bool GetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* bottom)
+{
+ bool success = false;
+ Atom property = 0;
+ if (gdk_x11_screen_supports_net_wm_hint(
+ gdk_drawable_get_screen(window),
+ gdk_atom_intern("_NET_FRAME_EXTENTS", false)))
+ {
+ success = true;
+ property = gdk_x11_get_xatom_by_name_for_display(
+ gdk_drawable_get_display(window),
+ "_NET_FRAME_EXTENTS");
+ }
+
+ if (success)
+ {
+ Atom type;
+ int format;
+ gulong nitems, bytes_after;
+ long* data = NULL;
+ success = XGetWindowProperty(
+ gdk_x11_drawable_get_xdisplay(window),
+ gdk_x11_drawable_get_xid(window),
+ property,
+ 0, 4,
+ false,
+ XA_CARDINAL,
+ &type, &format, &nitems, &bytes_after, (guchar**)&data
+ ) == Success;
+ if (success)
+ {
+ success = data && nitems == 4;
+ if (success)
+ {
+ if (left) *left = int(data[0]);
+ if (right) *right = int(data[1]);
+ if (top) *top = int(data[2]);
+ if (bottom) *bottom = int(data[3]);
+ }
+ if (data)
+ XFree(data);
+ }
+ }
+ return success;
+}
+
+// helper: return the GtkSettings either for the screen the current window is
+// on or for the default screen if window is NULL
+static GtkSettings *GetSettingsForWindowScreen(GdkWindow *window)
+{
+ return window ? gtk_settings_get_for_screen(gdk_drawable_get_screen(window))
+ : gtk_settings_get_default();