| 385 | }; |
| 386 | |
| 387 | class tile_plugin_t : public wf::plugin_interface_t, wf::per_output_tracker_mixin_t<> |
| 388 | { |
| 389 | shared_data::ref_ptr_t<ipc::method_repository_t> ipc_repo; |
| 390 | shared_data::ref_ptr_t<wf::move_drag::core_drag_t> drag_helper; |
| 391 | std::unique_ptr<tile::drag_manager_t> preview_manager; |
| 392 | |
| 393 | public: |
| 394 | void init() override |
| 395 | { |
| 396 | init_output_tracking(); |
| 397 | wf::get_core().connect(&on_view_pre_moved_to_wset); |
| 398 | wf::get_core().connect(&on_view_moved_to_wset); |
| 399 | wf::get_core().connect(&on_focus_changed); |
| 400 | wf::get_core().connect(&on_view_unmapped); |
| 401 | ipc_repo->register_method("simple-tile/get-layout", ipc_get_layout); |
| 402 | ipc_repo->register_method("simple-tile/set-layout", ipc_set_layout); |
| 403 | preview_manager = std::make_unique<tile::drag_manager_t>(); |
| 404 | } |
| 405 | |
| 406 | void fini() override |
| 407 | { |
| 408 | preview_manager.reset(); |
| 409 | fini_output_tracking(); |
| 410 | for (auto wset : workspace_set_t::get_all()) |
| 411 | { |
| 412 | wset->erase_data<tile_workspace_set_data_t>(); |
| 413 | } |
| 414 | |
| 415 | for (auto wo : wf::get_core().output_layout->get_outputs()) |
| 416 | { |
| 417 | wo->erase_data<tile_output_plugin_t>(); |
| 418 | } |
| 419 | |
| 420 | ipc_repo->unregister_method("simple-tile/get-layout"); |
| 421 | ipc_repo->unregister_method("simple-tile/set-layout"); |
| 422 | } |
| 423 | |
| 424 | void stop_controller(std::shared_ptr<wf::workspace_set_t> wset) |
| 425 | { |
| 426 | if (auto wo = wset->get_attached_output()) |
| 427 | { |
| 428 | auto tile = wo->get_data<tile_output_plugin_t>(); |
| 429 | if (tile) |
| 430 | { |
| 431 | tile->stop_controller(true); |
| 432 | } |
| 433 | } |
| 434 | } |
| 435 | |
| 436 | wf::signal::connection_t<view_unmapped_signal> on_view_unmapped = [=] (wf::view_unmapped_signal *ev) |
| 437 | { |
| 438 | auto toplevel = toplevel_cast(ev->view); |
| 439 | if (!toplevel) |
| 440 | { |
| 441 | return; |
| 442 | } |
| 443 | |
| 444 | if (wf::tile::view_node_t::get_node(ev->view)) |
nothing calls this directly
no test coverage detected