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