浏览代码

WindowManager: Allow disabling window hit testing altogether

This allows us to disable hit testing for transparent windows that
don't use alpha channels.
Tom 4 年之前
父节点
当前提交
7e9c265cc0
共有 2 个文件被更改,包括 7 次插入0 次删除
  1. 2 0
      Userland/Services/WindowServer/Window.cpp
  2. 5 0
      Userland/Services/WindowServer/Window.h

+ 2 - 0
Userland/Services/WindowServer/Window.cpp

@@ -949,6 +949,8 @@ bool Window::hit_test(const Gfx::IntPoint& point, bool include_frame) const
             return frame().hit_test(point);
         return false;
     }
+    if (!m_hit_testing_enabled)
+        return false;
     u8 threshold = alpha_hit_threshold() * 255;
     if (threshold == 0 || !m_backing_store || !m_backing_store->has_alpha_channel())
         return true;

+ 5 - 0
Userland/Services/WindowServer/Window.h

@@ -146,6 +146,10 @@ public:
     float opacity() const { return m_opacity; }
     void set_opacity(float);
 
+    void set_hit_testing_enabled(bool value)
+    {
+        m_hit_testing_enabled = value;
+    }
     float alpha_hit_threshold() const { return m_alpha_hit_threshold; }
     void set_alpha_hit_threshold(float threshold)
     {
@@ -379,6 +383,7 @@ private:
     bool m_invalidated { true };
     bool m_invalidated_all { true };
     bool m_invalidated_frame { true };
+    bool m_hit_testing_enabled { true };
     WindowTileType m_tiled { WindowTileType::None };
     Gfx::IntRect m_untiled_rect;
     bool m_occluded { false };