Browse Source

Fix X11 input region size.

bruvzg 2 years ago
parent
commit
60e0043012
1 changed files with 7 additions and 12 deletions
  1. 7 12
      platform/linuxbsd/x11/display_server_x11.cpp

+ 7 - 12
platform/linuxbsd/x11/display_server_x11.cpp

@@ -1432,28 +1432,23 @@ void DisplayServerX11::_update_window_mouse_passthrough(WindowID p_window) {
 	int event_base, error_base;
 	int event_base, error_base;
 	const Bool ext_okay = XShapeQueryExtension(x11_display, &event_base, &error_base);
 	const Bool ext_okay = XShapeQueryExtension(x11_display, &event_base, &error_base);
 	if (ext_okay) {
 	if (ext_okay) {
-		Region region;
 		if (windows[p_window].mpass) {
 		if (windows[p_window].mpass) {
-			region = XCreateRegion();
+			Region region = XCreateRegion();
+			XShapeCombineRegion(x11_display, windows[p_window].x11_window, ShapeInput, 0, 0, region, ShapeSet);
+			XDestroyRegion(region);
 		} else if (region_path.size() == 0) {
 		} else if (region_path.size() == 0) {
-			region = XCreateRegion();
-			XRectangle rect;
-			rect.x = 0;
-			rect.y = 0;
-			rect.width = window_get_size_with_decorations(p_window).x;
-			rect.height = window_get_size_with_decorations(p_window).y;
-			XUnionRectWithRegion(&rect, region, region);
+			XShapeCombineMask(x11_display, windows[p_window].x11_window, ShapeInput, 0, 0, None, ShapeSet);
 		} else {
 		} else {
 			XPoint *points = (XPoint *)memalloc(sizeof(XPoint) * region_path.size());
 			XPoint *points = (XPoint *)memalloc(sizeof(XPoint) * region_path.size());
 			for (int i = 0; i < region_path.size(); i++) {
 			for (int i = 0; i < region_path.size(); i++) {
 				points[i].x = region_path[i].x;
 				points[i].x = region_path[i].x;
 				points[i].y = region_path[i].y;
 				points[i].y = region_path[i].y;
 			}
 			}
-			region = XPolygonRegion(points, region_path.size(), EvenOddRule);
+			Region region = XPolygonRegion(points, region_path.size(), EvenOddRule);
 			memfree(points);
 			memfree(points);
+			XShapeCombineRegion(x11_display, windows[p_window].x11_window, ShapeInput, 0, 0, region, ShapeSet);
+			XDestroyRegion(region);
 		}
 		}
-		XShapeCombineRegion(x11_display, windows[p_window].x11_window, ShapeInput, 0, 0, region, ShapeSet);
-		XDestroyRegion(region);
 	}
 	}
 }
 }