diff options
Diffstat (limited to 'include/cru')
-rw-r--r-- | include/cru/platform/gui/xcb/UiApplication.h | 16 | ||||
-rw-r--r-- | include/cru/platform/gui/xcb/Window.h | 10 |
2 files changed, 20 insertions, 6 deletions
diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h index cc38b3ed..6063a8ab 100644 --- a/include/cru/platform/gui/xcb/UiApplication.h +++ b/include/cru/platform/gui/xcb/UiApplication.h @@ -31,10 +31,18 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication { xcb_screen_t* GetFirstXcbScreen(); xcb_atom_t GetOrCreateXcbAtom(std::string name); - xcb_atom_t GetXcbAtom_NET_WM_NAME(); - xcb_atom_t GetXcbAtom_NET_WM_WINDOW_TYPE(); - xcb_atom_t GetXcbAtom_NET_WM_WINDOW_TYPE_NORMAL(); - xcb_atom_t GetXcbAtom_NET_WM_WINDOW_TYPE_UTILITY(); + +#define CRU_XCB_UI_APPLICATION_DEFINE_XCB_ATOM(name) \ + xcb_atom_t GetXcbAtom##name() { return GetOrCreateXcbAtom(#name); } + + CRU_XCB_UI_APPLICATION_DEFINE_XCB_ATOM(WM_NAME) + CRU_XCB_UI_APPLICATION_DEFINE_XCB_ATOM(WM_STATE) + CRU_XCB_UI_APPLICATION_DEFINE_XCB_ATOM(_NET_WM_NAME) + CRU_XCB_UI_APPLICATION_DEFINE_XCB_ATOM(_NET_WM_WINDOW_TYPE) + CRU_XCB_UI_APPLICATION_DEFINE_XCB_ATOM(_NET_WM_WINDOW_TYPE_NORMAL) + CRU_XCB_UI_APPLICATION_DEFINE_XCB_ATOM(_NET_WM_WINDOW_TYPE_UTILITY) + +#undef CRU_XCB_UI_APPLICATION_DEFINE_XCB_ATOM public: int Run() override; diff --git a/include/cru/platform/gui/xcb/Window.h b/include/cru/platform/gui/xcb/Window.h index f118ed66..6d923666 100644 --- a/include/cru/platform/gui/xcb/Window.h +++ b/include/cru/platform/gui/xcb/Window.h @@ -29,8 +29,8 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { String GetTitle() override; void SetTitle(String title) override; - virtual WindowVisibilityType GetVisibility() = 0; - virtual void SetVisibility(WindowVisibilityType visibility) = 0; + WindowVisibilityType GetVisibility() override; + void SetVisibility(WindowVisibilityType visibility) override; virtual Size GetClientSize() = 0; virtual void SetClientSize(const Size& size) = 0; @@ -92,6 +92,11 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { void DoSetStyleFlags(xcb_window_t window); void DoSetTitle(xcb_window_t window); + void* XcbGetProperty(xcb_window_t window, xcb_atom_t property, + xcb_atom_t type, std::uint32_t offset, + std::uint32_t length, + std::uint32_t* out_length = nullptr); + private: XcbUiApplication* application_; std::optional<xcb_window_t> xcb_window_; @@ -99,6 +104,7 @@ class XcbWindow : public XcbResource, public virtual INativeWindow { Size current_size_; WindowStyleFlag style_; std::string title_; + bool mapped_; XcbWindow* parent_; |