1 #ifndef XDG_SHELL_HPP 2 #define XDG_SHELL_HPP 3 4 #include "view-impl.hpp" 5 6 /** 7 * A class for xdg-shell popups 8 */ 9 class wayfire_xdg_popup : public wf::wlr_view_t 10 { 11 protected: 12 wf::wl_listener_wrapper on_destroy, on_new_popup, 13 on_map, on_unmap, on_ping_timeout; 14 wf::signal_connection_t parent_geometry_changed, 15 parent_title_changed, parent_app_id_changed; 16 17 wf::wl_idle_call pending_close; 18 wlr_xdg_popup *popup; 19 void unconstrain(); 20 void update_position(); 21 22 public: 23 wayfire_xdg_popup(wlr_xdg_popup *popup); 24 void initialize() override; 25 26 wlr_view_t *popup_parent; 27 virtual void map(wlr_surface *surface) override; 28 virtual void commit() override; 29 30 virtual wf::point_t get_window_offset() override; 31 virtual void destroy() override; 32 virtual void close() override; 33 void ping() final; 34 }; 35 36 void create_xdg_popup(wlr_xdg_popup *popup); 37 38 class wayfire_xdg_view : public wf::wlr_view_t 39 { 40 private: 41 wf::wl_listener_wrapper on_map, on_unmap, on_destroy, on_new_popup, 42 on_request_move, on_request_resize, 43 on_request_minimize, on_request_maximize, 44 on_request_fullscreen, on_set_parent, 45 on_set_title, on_set_app_id, on_show_window_menu, 46 on_ping_timeout; 47 48 wf::point_t xdg_surface_offset = {0, 0}; 49 wlr_xdg_toplevel *xdg_toplevel; 50 uint32_t last_configure_serial = 0; 51 52 protected: 53 void initialize() override final; 54 55 public: 56 wayfire_xdg_view(wlr_xdg_toplevel *toplevel); 57 virtual ~wayfire_xdg_view(); 58 59 void map(wlr_surface *surface) final; 60 void commit() final; 61 62 wf::point_t get_window_offset() final; 63 wf::geometry_t get_wm_geometry() final; 64 65 void set_tiled(uint32_t edges) final; 66 void set_activated(bool act) final; 67 void set_fullscreen(bool full) final; 68 69 void resize(int w, int h) final; 70 void request_native_size() override final; 71 72 void destroy() final; 73 void close() final; 74 void ping() final; 75 }; 76 77 #endif /* end of include guard: XDG_SHELL_HPP */ 78