瀏覽代碼

Merge pull request #9515 from marcelofg55/master

Implemented borderless window functions on Linux.
Rémi Verschelde 8 年之前
父節點
當前提交
79992a4a72
共有 2 個文件被更改,包括 29 次插入0 次删除
  1. 26 0
      platform/x11/os_x11.cpp
  2. 3 0
      platform/x11/os_x11.h

+ 26 - 0
platform/x11/os_x11.cpp

@@ -278,6 +278,13 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
 		xev.xclient.data.l[2] = 0;
 
 		XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureNotifyMask, &xev);
+	} else if (current_videomode.borderless_window) {
+		Hints hints;
+		Atom property;
+		hints.flags = 2;
+		hints.decorations = 0;
+		property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
+		XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
 	}
 
 	// disable resizable window
@@ -1018,6 +1025,25 @@ bool OS_X11::is_window_maximized() const {
 	return false;
 }
 
+void OS_X11::set_borderless_window(int p_borderless) {
+
+	if (current_videomode.borderless_window == p_borderless)
+		return;
+
+	current_videomode.borderless_window = p_borderless;
+
+	Hints hints;
+	Atom property;
+	hints.flags = 2;
+	hints.decorations = current_videomode.borderless_window ? 0 : 1;
+	property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
+	XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+}
+
+bool OS_X11::get_borderless_window() {
+	return current_videomode.borderless_window;
+}
+
 void OS_X11::request_attention() {
 	// Using EWMH -- Extended Window Manager Hints
 	//

+ 3 - 0
platform/x11/os_x11.h

@@ -251,6 +251,9 @@ public:
 	virtual bool is_window_maximized() const;
 	virtual void request_attention();
 
+	virtual void set_borderless_window(int p_borderless);
+	virtual bool get_borderless_window();
+
 	virtual void move_window_to_foreground();
 	virtual void alert(const String &p_alert, const String &p_title = "ALERT!");