Browse Source

Merge pull request #28784 from bruvzg/x11_check_extents_atoms

X11: Check if "_NET_FRAME_EXTENTS" atom is supported.
Rémi Verschelde 6 years ago
parent
commit
7112a45d99
1 changed files with 26 additions and 22 deletions
  1. 26 22
      platform/x11/os_x11.cpp

+ 26 - 22
platform/x11/os_x11.cpp

@@ -1184,18 +1184,20 @@ void OS_X11::set_window_position(const Point2 &p_position) {
 		//exclude window decorations
 		XSync(x11_display, False);
 		Atom prop = XInternAtom(x11_display, "_NET_FRAME_EXTENTS", True);
-		Atom type;
-		int format;
-		unsigned long len;
-		unsigned long remaining;
-		unsigned char *data = NULL;
-		if (XGetWindowProperty(x11_display, x11_window, prop, 0, 4, False, AnyPropertyType, &type, &format, &len, &remaining, &data) == Success) {
-			if (format == 32 && len == 4) {
-				long *extents = (long *)data;
-				x = extents[0];
-				y = extents[2];
+		if (prop != None) {
+			Atom type;
+			int format;
+			unsigned long len;
+			unsigned long remaining;
+			unsigned char *data = NULL;
+			if (XGetWindowProperty(x11_display, x11_window, prop, 0, 4, False, AnyPropertyType, &type, &format, &len, &remaining, &data) == Success) {
+				if (format == 32 && len == 4) {
+					long *extents = (long *)data;
+					x = extents[0];
+					y = extents[2];
+				}
+				XFree(data);
 			}
-			XFree(data);
 		}
 	}
 	XMoveWindow(x11_display, x11_window, p_position.x - x, p_position.y - y);
@@ -1215,18 +1217,20 @@ Size2 OS_X11::get_real_window_size() const {
 	int w = xwa.width;
 	int h = xwa.height;
 	Atom prop = XInternAtom(x11_display, "_NET_FRAME_EXTENTS", True);
-	Atom type;
-	int format;
-	unsigned long len;
-	unsigned long remaining;
-	unsigned char *data = NULL;
-	if (XGetWindowProperty(x11_display, x11_window, prop, 0, 4, False, AnyPropertyType, &type, &format, &len, &remaining, &data) == Success) {
-		if (format == 32 && len == 4) {
-			long *extents = (long *)data;
-			w += extents[0] + extents[1]; // left, right
-			h += extents[2] + extents[3]; // top, bottom
+	if (prop != None) {
+		Atom type;
+		int format;
+		unsigned long len;
+		unsigned long remaining;
+		unsigned char *data = NULL;
+		if (XGetWindowProperty(x11_display, x11_window, prop, 0, 4, False, AnyPropertyType, &type, &format, &len, &remaining, &data) == Success) {
+			if (format == 32 && len == 4) {
+				long *extents = (long *)data;
+				w += extents[0] + extents[1]; // left, right
+				h += extents[2] + extents[3]; // top, bottom
+			}
+			XFree(data);
 		}
-		XFree(data);
 	}
 	return Size2(w, h);
 }