summaryrefslogtreecommitdiffstats
path: root/platform/linuxbsd
diff options
context:
space:
mode:
authorbruvzg <7645683+bruvzg@users.noreply.github.com>2024-05-03 11:48:46 +0300
committerbruvzg <7645683+bruvzg@users.noreply.github.com>2024-05-23 15:23:18 +0300
commit628c81d2d9a2cf05541a8d95dd99f6349aca851d (patch)
treef0063c0a9125e9a6a9562e572429e38efbbb2372 /platform/linuxbsd
parentb947c53ddc08d4314b2ce70ca1bc2adb37b83c37 (diff)
downloadredot-engine-628c81d2d9a2cf05541a8d95dd99f6349aca851d.tar.gz
[DisplayServer] Add method to check if window transparency is supported and enabled.
Diffstat (limited to 'platform/linuxbsd')
-rw-r--r--platform/linuxbsd/x11/display_server_x11.cpp16
-rw-r--r--platform/linuxbsd/x11/display_server_x11.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp
index fb22cf5983..2491064a58 100644
--- a/platform/linuxbsd/x11/display_server_x11.cpp
+++ b/platform/linuxbsd/x11/display_server_x11.cpp
@@ -5192,6 +5192,22 @@ void DisplayServerX11::set_context(Context p_context) {
}
}
+bool DisplayServerX11::is_window_transparency_available() const {
+ CharString net_wm_cm_name = vformat("_NET_WM_CM_S%d", XDefaultScreen(x11_display)).ascii();
+ Atom net_wm_cm = XInternAtom(x11_display, net_wm_cm_name.get_data(), False);
+ if (net_wm_cm == None) {
+ return false;
+ }
+ if (XGetSelectionOwner(x11_display, net_wm_cm) == None) {
+ return false;
+ }
+
+ if (rendering_device && !rendering_device->is_composite_alpha_supported()) {
+ return false;
+ }
+ return OS::get_singleton()->is_layered_allowed();
+}
+
void DisplayServerX11::set_native_icon(const String &p_filename) {
WARN_PRINT("Native icon not supported by this display server.");
}
diff --git a/platform/linuxbsd/x11/display_server_x11.h b/platform/linuxbsd/x11/display_server_x11.h
index 0861789b4a..7c69df3df0 100644
--- a/platform/linuxbsd/x11/display_server_x11.h
+++ b/platform/linuxbsd/x11/display_server_x11.h
@@ -530,6 +530,8 @@ public:
virtual void set_context(Context p_context) override;
+ virtual bool is_window_transparency_available() const override;
+
virtual void set_native_icon(const String &p_filename) override;
virtual void set_icon(const Ref<Image> &p_icon) override;