mirror of
https://github.com/labwc/labwc.git
synced 2026-04-12 08:21:13 -04:00
[wip] move view_init and view_destroy to view-impl-common.c
This commit is contained in:
parent
1506fe3af8
commit
7a2ea5b54c
4 changed files with 96 additions and 89 deletions
|
|
@ -20,6 +20,9 @@ void view_impl_map(struct view *view);
|
|||
*/
|
||||
void view_impl_apply_geometry(struct view *view, int w, int h);
|
||||
|
||||
void view_init(struct view *view);
|
||||
void view_destroy(struct view *view);
|
||||
|
||||
void view_impl_remove_common_listeners(struct view *view);
|
||||
|
||||
#endif /* __LABWC_VIEW_IMPL_COMMON_H */
|
||||
|
|
|
|||
|
|
@ -202,9 +202,6 @@ void view_adjust_size(struct view *view, int *w, int *h);
|
|||
void view_evacuate_region(struct view *view);
|
||||
void view_on_output_destroy(struct view *view);
|
||||
|
||||
void view_init(struct view *view);
|
||||
void view_destroy(struct view *view);
|
||||
|
||||
/* xdg.c */
|
||||
struct wlr_xdg_surface *xdg_surface_from_view(struct view *view);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,17 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/* view-impl-common.c: common code for shell view->impl functions */
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <strings.h>
|
||||
#include "common/list.h"
|
||||
#include "common/mem.h"
|
||||
#include "labwc.h"
|
||||
#include "menu/menu.h"
|
||||
#include "node.h"
|
||||
#include "ssd.h"
|
||||
#include "view.h"
|
||||
#include "view-impl-common.h"
|
||||
#include "workspaces.h"
|
||||
|
||||
void
|
||||
view_impl_move_to_front(struct view *view)
|
||||
|
|
@ -101,3 +107,90 @@ view_impl_remove_common_listeners(struct view *view)
|
|||
wl_list_remove(&view->request_fullscreen.link);
|
||||
wl_list_remove(&view->set_title.link);
|
||||
}
|
||||
|
||||
void
|
||||
view_init(struct view *view)
|
||||
{
|
||||
assert(view);
|
||||
|
||||
view->workspace = view->server->workspace_current;
|
||||
view->scene_tree = wlr_scene_tree_create(view->workspace->tree);
|
||||
wlr_scene_node_set_enabled(&view->scene_tree->node, false);
|
||||
node_descriptor_create(&view->scene_tree->node,
|
||||
LAB_NODE_DESC_VIEW, view);
|
||||
|
||||
view->impl->setup_common_listeners(view);
|
||||
view->impl->setup_specific_listeners(view);
|
||||
|
||||
wl_list_insert(&view->server->views, &view->link);
|
||||
}
|
||||
|
||||
void
|
||||
view_destroy(struct view *view)
|
||||
{
|
||||
assert(view);
|
||||
struct server *server = view->server;
|
||||
bool need_cursor_update = false;
|
||||
|
||||
view->impl->remove_common_listeners(view);
|
||||
view->impl->remove_specific_listeners(view);
|
||||
|
||||
if (view->toplevel.handle) {
|
||||
wlr_foreign_toplevel_handle_v1_destroy(view->toplevel.handle);
|
||||
}
|
||||
|
||||
if (server->grabbed_view == view) {
|
||||
/* Application got killed while moving around */
|
||||
server->input_mode = LAB_INPUT_STATE_PASSTHROUGH;
|
||||
server->grabbed_view = NULL;
|
||||
need_cursor_update = true;
|
||||
regions_hide_overlay(&server->seat);
|
||||
}
|
||||
|
||||
if (server->focused_view == view) {
|
||||
server->focused_view = NULL;
|
||||
need_cursor_update = true;
|
||||
}
|
||||
|
||||
if (server->seat.pressed.view == view) {
|
||||
seat_reset_pressed(&server->seat);
|
||||
}
|
||||
|
||||
if (view->tiled_region_evacuate) {
|
||||
zfree(view->tiled_region_evacuate);
|
||||
}
|
||||
|
||||
osd_on_view_destroy(view);
|
||||
ssd_destroy(view->ssd);
|
||||
view->ssd = NULL;
|
||||
|
||||
if (view->scene_tree) {
|
||||
wlr_scene_node_destroy(&view->scene_tree->node);
|
||||
view->scene_tree = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* The layer-shell top-layer is disabled when an application is running
|
||||
* in fullscreen mode, so if that's the case, we have to re-enable it
|
||||
* here.
|
||||
*/
|
||||
if (view->fullscreen && view->output) {
|
||||
uint32_t top = ZWLR_LAYER_SHELL_V1_LAYER_TOP;
|
||||
wlr_scene_node_set_enabled(&view->output->layer_tree[top]->node,
|
||||
true);
|
||||
}
|
||||
|
||||
/* If we spawned a window menu, close it */
|
||||
if (server->menu_current
|
||||
&& server->menu_current->triggered_by_view == view) {
|
||||
menu_close_root(server);
|
||||
}
|
||||
|
||||
/* Remove view from server->views */
|
||||
wl_list_remove(&view->link);
|
||||
free(view);
|
||||
|
||||
if (need_cursor_update) {
|
||||
cursor_update_focus(server);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
86
src/view.c
86
src/view.c
|
|
@ -1047,89 +1047,3 @@ view_reload_ssd(struct view *view)
|
|||
decorate(view);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
view_init(struct view *view)
|
||||
{
|
||||
assert(view);
|
||||
|
||||
view->workspace = view->server->workspace_current;
|
||||
view->scene_tree = wlr_scene_tree_create(view->workspace->tree);
|
||||
wlr_scene_node_set_enabled(&view->scene_tree->node, false);
|
||||
node_descriptor_create(&view->scene_tree->node,
|
||||
LAB_NODE_DESC_VIEW, view);
|
||||
|
||||
view->impl->setup_common_listeners(view);
|
||||
view->impl->setup_specific_listeners(view);
|
||||
|
||||
wl_list_insert(&view->server->views, &view->link);
|
||||
}
|
||||
|
||||
void
|
||||
view_destroy(struct view *view)
|
||||
{
|
||||
assert(view);
|
||||
struct server *server = view->server;
|
||||
bool need_cursor_update = false;
|
||||
|
||||
view->impl->remove_common_listeners(view);
|
||||
view->impl->remove_specific_listeners(view);
|
||||
|
||||
if (view->toplevel.handle) {
|
||||
wlr_foreign_toplevel_handle_v1_destroy(view->toplevel.handle);
|
||||
}
|
||||
|
||||
if (server->grabbed_view == view) {
|
||||
/* Application got killed while moving around */
|
||||
server->input_mode = LAB_INPUT_STATE_PASSTHROUGH;
|
||||
server->grabbed_view = NULL;
|
||||
need_cursor_update = true;
|
||||
regions_hide_overlay(&server->seat);
|
||||
}
|
||||
|
||||
if (server->focused_view == view) {
|
||||
server->focused_view = NULL;
|
||||
need_cursor_update = true;
|
||||
}
|
||||
|
||||
if (server->seat.pressed.view == view) {
|
||||
seat_reset_pressed(&server->seat);
|
||||
}
|
||||
|
||||
if (view->tiled_region_evacuate) {
|
||||
zfree(view->tiled_region_evacuate);
|
||||
}
|
||||
|
||||
osd_on_view_destroy(view);
|
||||
undecorate(view);
|
||||
|
||||
if (view->scene_tree) {
|
||||
wlr_scene_node_destroy(&view->scene_tree->node);
|
||||
view->scene_tree = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* The layer-shell top-layer is disabled when an application is running
|
||||
* in fullscreen mode, so if that's the case, we have to re-enable it
|
||||
* here.
|
||||
*/
|
||||
if (view->fullscreen && view->output) {
|
||||
uint32_t top = ZWLR_LAYER_SHELL_V1_LAYER_TOP;
|
||||
wlr_scene_node_set_enabled(&view->output->layer_tree[top]->node,
|
||||
true);
|
||||
}
|
||||
|
||||
/* If we spawned a window menu, close it */
|
||||
if (server->menu_current
|
||||
&& server->menu_current->triggered_by_view == view) {
|
||||
menu_close_root(server);
|
||||
}
|
||||
|
||||
/* Remove view from server->views */
|
||||
wl_list_remove(&view->link);
|
||||
free(view);
|
||||
|
||||
if (need_cursor_update) {
|
||||
cursor_update_focus(server);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue