primary-selection: move to hyprland impl
This commit is contained in:
parent
3eeaea5be9
commit
94c20a1863
10 changed files with 529 additions and 14 deletions
|
|
@ -30,6 +30,7 @@
|
|||
#include "../protocols/PresentationTime.hpp"
|
||||
#include "../protocols/XDGShell.hpp"
|
||||
#include "../protocols/DataDeviceWlr.hpp"
|
||||
#include "../protocols/PrimarySelection.hpp"
|
||||
|
||||
#include "../protocols/core/Seat.hpp"
|
||||
#include "../protocols/core/DataDevice.hpp"
|
||||
|
|
@ -71,6 +72,7 @@ CProtocolManager::CProtocolManager() {
|
|||
PROTO::presentation = std::make_unique<CPresentationProtocol>(&wp_presentation_interface, 1, "Presentation");
|
||||
PROTO::xdgShell = std::make_unique<CXDGShellProtocol>(&xdg_wm_base_interface, 6, "XDGShell");
|
||||
PROTO::dataWlr = std::make_unique<CDataDeviceWLRProtocol>(&zwlr_data_control_manager_v1_interface, 2, "DataDeviceWlr");
|
||||
PROTO::primarySelection = std::make_unique<CPrimarySelectionProtocol>(&zwp_primary_selection_device_manager_v1_interface, 1, "PrimarySelection");
|
||||
|
||||
// Old protocol implementations.
|
||||
// TODO: rewrite them to use hyprwayland-scanner.
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include "../protocols/core/Seat.hpp"
|
||||
#include "../protocols/core/DataDevice.hpp"
|
||||
#include "../protocols/DataDeviceWlr.hpp"
|
||||
#include "../protocols/PrimarySelection.hpp"
|
||||
#include "../Compositor.hpp"
|
||||
#include "../devices/IKeyboard.hpp"
|
||||
#include <algorithm>
|
||||
|
|
@ -447,7 +448,30 @@ void CSeatManager::setCurrentSelection(SP<IDataSource> source) {
|
|||
if (source) {
|
||||
selection.destroySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentSelection(nullptr); });
|
||||
PROTO::data->setSelection(source);
|
||||
PROTO::dataWlr->setSelection(source);
|
||||
PROTO::dataWlr->setSelection(source, false);
|
||||
}
|
||||
}
|
||||
|
||||
void CSeatManager::setCurrentPrimarySelection(SP<IDataSource> source) {
|
||||
if (source == selection.currentPrimarySelection) {
|
||||
Debug::log(WARN, "[seat] duplicated setCurrentPrimarySelection?");
|
||||
return;
|
||||
}
|
||||
|
||||
selection.destroyPrimarySelection.reset();
|
||||
|
||||
if (selection.currentPrimarySelection)
|
||||
selection.currentPrimarySelection->cancelled();
|
||||
|
||||
if (!source)
|
||||
PROTO::primarySelection->setSelection(nullptr);
|
||||
|
||||
selection.currentPrimarySelection = source;
|
||||
|
||||
if (source) {
|
||||
selection.destroyPrimarySelection = source->events.destroy.registerListener([this](std::any d) { setCurrentPrimarySelection(nullptr); });
|
||||
PROTO::primarySelection->setSelection(source);
|
||||
PROTO::dataWlr->setSelection(source, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -109,9 +109,12 @@ class CSeatManager {
|
|||
struct {
|
||||
WP<IDataSource> currentSelection;
|
||||
CHyprSignalListener destroySelection;
|
||||
WP<IDataSource> currentPrimarySelection;
|
||||
CHyprSignalListener destroyPrimarySelection;
|
||||
} selection;
|
||||
|
||||
void setCurrentSelection(SP<IDataSource> source);
|
||||
void setCurrentPrimarySelection(SP<IDataSource> source);
|
||||
|
||||
// do not write to directly, use set...
|
||||
WP<IPointer> mouse;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue