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_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);
|
void view_impl_remove_common_listeners(struct view *view);
|
||||||
|
|
||||||
#endif /* __LABWC_VIEW_IMPL_COMMON_H */
|
#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_evacuate_region(struct view *view);
|
||||||
void view_on_output_destroy(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 */
|
/* xdg.c */
|
||||||
struct wlr_xdg_surface *xdg_surface_from_view(struct view *view);
|
struct wlr_xdg_surface *xdg_surface_from_view(struct view *view);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,17 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/* view-impl-common.c: common code for shell view->impl functions */
|
/* view-impl-common.c: common code for shell view->impl functions */
|
||||||
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include "common/list.h"
|
#include "common/list.h"
|
||||||
|
#include "common/mem.h"
|
||||||
#include "labwc.h"
|
#include "labwc.h"
|
||||||
|
#include "menu/menu.h"
|
||||||
|
#include "node.h"
|
||||||
|
#include "ssd.h"
|
||||||
#include "view.h"
|
#include "view.h"
|
||||||
#include "view-impl-common.h"
|
#include "view-impl-common.h"
|
||||||
|
#include "workspaces.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
view_impl_move_to_front(struct view *view)
|
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->request_fullscreen.link);
|
||||||
wl_list_remove(&view->set_title.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);
|
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