diff options
author | Tony Crisci <tony@dubstepdish.com> | 2018-03-27 17:37:03 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-27 17:37:03 -0400 |
commit | 575bc81d54f98841c28718b1667d27acc136a48a (patch) | |
tree | 945fe17fb270b90ec50ff4be9097b04b510ac075 /rootston | |
parent | 6f2de28e5ebc1f8d2b2f2bd2e0532ffe994cd95a (diff) | |
parent | 4abca435cc1ca9d89c077f0d06419696213a36c4 (diff) |
Merge pull request #754 from emersion/popup-map-unmap-damage
[WIP] xdg-shell: damage view when popup is mapped/unmapped
Diffstat (limited to 'rootston')
-rw-r--r-- | rootston/xdg_shell.c | 14 | ||||
-rw-r--r-- | rootston/xdg_shell_v6.c | 16 |
2 files changed, 30 insertions, 0 deletions
diff --git a/rootston/xdg_shell.c b/rootston/xdg_shell.c index f26aefbd..62b57641 100644 --- a/rootston/xdg_shell.c +++ b/rootston/xdg_shell.c @@ -28,6 +28,16 @@ static void popup_handle_destroy(struct wl_listener *listener, void *data) { popup_destroy((struct roots_view_child *)popup); } +static void popup_handle_map(struct wl_listener *listener, void *data) { + struct roots_xdg_popup *popup = wl_container_of(listener, popup, map); + view_damage_whole(popup->view_child.view); +} + +static void popup_handle_unmap(struct wl_listener *listener, void *data) { + struct roots_xdg_popup *popup = wl_container_of(listener, popup, unmap); + view_damage_whole(popup->view_child.view); +} + static struct roots_xdg_popup *popup_create(struct roots_view *view, struct wlr_xdg_popup *wlr_popup); @@ -50,6 +60,10 @@ static struct roots_xdg_popup *popup_create(struct roots_view *view, view_child_init(&popup->view_child, view, wlr_popup->base->surface); popup->destroy.notify = popup_handle_destroy; wl_signal_add(&wlr_popup->base->events.destroy, &popup->destroy); + popup->map.notify = popup_handle_map; + wl_signal_add(&wlr_popup->base->events.map, &popup->map); + popup->unmap.notify = popup_handle_unmap; + wl_signal_add(&wlr_popup->base->events.unmap, &popup->unmap); popup->new_popup.notify = popup_handle_new_popup; wl_signal_add(&wlr_popup->base->events.new_popup, &popup->new_popup); return popup; diff --git a/rootston/xdg_shell_v6.c b/rootston/xdg_shell_v6.c index 2be9e00e..11bc0180 100644 --- a/rootston/xdg_shell_v6.c +++ b/rootston/xdg_shell_v6.c @@ -28,6 +28,18 @@ static void popup_handle_destroy(struct wl_listener *listener, void *data) { popup_destroy((struct roots_view_child *)popup); } +static void popup_handle_map(struct wl_listener *listener, void *data) { + struct roots_xdg_popup_v6 *popup = + wl_container_of(listener, popup, map); + view_damage_whole(popup->view_child.view); +} + +static void popup_handle_unmap(struct wl_listener *listener, void *data) { + struct roots_xdg_popup_v6 *popup = + wl_container_of(listener, popup, unmap); + view_damage_whole(popup->view_child.view); +} + static struct roots_xdg_popup_v6 *popup_create(struct roots_view *view, struct wlr_xdg_popup_v6 *wlr_popup); @@ -50,6 +62,10 @@ static struct roots_xdg_popup_v6 *popup_create(struct roots_view *view, view_child_init(&popup->view_child, view, wlr_popup->base->surface); popup->destroy.notify = popup_handle_destroy; wl_signal_add(&wlr_popup->base->events.destroy, &popup->destroy); + popup->map.notify = popup_handle_map; + wl_signal_add(&wlr_popup->base->events.map, &popup->map); + popup->unmap.notify = popup_handle_unmap; + wl_signal_add(&wlr_popup->base->events.unmap, &popup->unmap); popup->new_popup.notify = popup_handle_new_popup; wl_signal_add(&wlr_popup->base->events.new_popup, &popup->new_popup); return popup; |