mirror of
https://github.com/hyprwm/Hypr.git
synced 2024-11-24 06:15:57 +01:00
Added mouse support for movewindow (drag to move)
This commit is contained in:
parent
894a9b0e3e
commit
0b9a33228b
5 changed files with 39 additions and 13 deletions
|
@ -175,7 +175,7 @@ void KeybindManager::toggleActiveWindowFullscreen(std::string unusedArg) {
|
||||||
g_pWindowManager->toggleWindowFullscrenn(g_pWindowManager->LastWindow);
|
g_pWindowManager->toggleWindowFullscrenn(g_pWindowManager->LastWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
void KeybindManager::toggleActiveWindowFloating(std::string unusedArg) {
|
void KeybindManager::toggleActiveWindowFloating(std::string arg) {
|
||||||
if (const auto PWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow); PWINDOW) {
|
if (const auto PWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow); PWINDOW) {
|
||||||
PWINDOW->setIsFloating(!PWINDOW->getIsFloating());
|
PWINDOW->setIsFloating(!PWINDOW->getIsFloating());
|
||||||
PWINDOW->setDirty(true);
|
PWINDOW->setDirty(true);
|
||||||
|
@ -197,6 +197,7 @@ void KeybindManager::toggleActiveWindowFloating(std::string unusedArg) {
|
||||||
const auto RESTOREISPSEUDO = PWINDOW->getIsPseudotiled();
|
const auto RESTOREISPSEUDO = PWINDOW->getIsPseudotiled();
|
||||||
const auto RESTOREREALS = PWINDOW->getRealSize();
|
const auto RESTOREREALS = PWINDOW->getRealSize();
|
||||||
const auto RESTOREREALP = PWINDOW->getRealPosition();
|
const auto RESTOREREALP = PWINDOW->getRealPosition();
|
||||||
|
const auto RESTOREDRAGT = PWINDOW->getDraggingTiled();
|
||||||
|
|
||||||
g_pWindowManager->removeWindowFromVectorSafe(PWINDOW->getDrawable());
|
g_pWindowManager->removeWindowFromVectorSafe(PWINDOW->getDrawable());
|
||||||
|
|
||||||
|
@ -215,6 +216,7 @@ void KeybindManager::toggleActiveWindowFloating(std::string unusedArg) {
|
||||||
PNEWWINDOW->setIsPseudotiled(RESTOREISPSEUDO);
|
PNEWWINDOW->setIsPseudotiled(RESTOREISPSEUDO);
|
||||||
PNEWWINDOW->setRealPosition(RESTOREREALP);
|
PNEWWINDOW->setRealPosition(RESTOREREALP);
|
||||||
PNEWWINDOW->setRealSize(RESTOREREALS);
|
PNEWWINDOW->setRealSize(RESTOREREALS);
|
||||||
|
PNEWWINDOW->setDraggingTiled(RESTOREDRAGT);
|
||||||
}
|
}
|
||||||
|
|
||||||
// EWMH to let everyone know
|
// EWMH to let everyone know
|
||||||
|
@ -222,7 +224,8 @@ void KeybindManager::toggleActiveWindowFloating(std::string unusedArg) {
|
||||||
|
|
||||||
EWMH::updateWindow(PWINDOW->getDrawable());
|
EWMH::updateWindow(PWINDOW->getDrawable());
|
||||||
|
|
||||||
g_pWindowManager->setAllFloatingWindowsTop();
|
if (arg != "simple")
|
||||||
|
g_pWindowManager->setAllFloatingWindowsTop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -712,16 +712,26 @@ void Events::eventButtonPress(xcb_generic_event_t* event) {
|
||||||
|
|
||||||
// mouse down!
|
// mouse down!
|
||||||
g_pWindowManager->mouseKeyDown = E->detail;
|
g_pWindowManager->mouseKeyDown = E->detail;
|
||||||
|
|
||||||
|
if (const auto PLASTWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow); PLASTWINDOW) {
|
||||||
|
|
||||||
|
PLASTWINDOW->setDraggingTiled(!PLASTWINDOW->getIsFloating());
|
||||||
|
|
||||||
|
g_pWindowManager->actingOnWindowFloating = PLASTWINDOW->getDrawable();
|
||||||
|
g_pWindowManager->mouseLastPos = g_pWindowManager->getCursorPos();
|
||||||
|
|
||||||
|
if (!PLASTWINDOW->getIsFloating()) {
|
||||||
|
const auto PDRAWABLE = PLASTWINDOW->getDrawable();
|
||||||
|
KeybindManager::toggleActiveWindowFloating("");
|
||||||
|
|
||||||
|
// refocus
|
||||||
|
g_pWindowManager->setFocusedWindow(PDRAWABLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
xcb_grab_pointer(g_pWindowManager->DisplayConnection, 0, g_pWindowManager->Screen->root, XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_BUTTON_MOTION | XCB_EVENT_MASK_POINTER_MOTION_HINT,
|
xcb_grab_pointer(g_pWindowManager->DisplayConnection, 0, g_pWindowManager->Screen->root, XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_BUTTON_MOTION | XCB_EVENT_MASK_POINTER_MOTION_HINT,
|
||||||
XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC,
|
XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC,
|
||||||
g_pWindowManager->Screen->root, XCB_NONE, XCB_CURRENT_TIME);
|
g_pWindowManager->Screen->root, XCB_NONE, XCB_CURRENT_TIME);
|
||||||
|
|
||||||
if (const auto PLASTWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->LastWindow); PLASTWINDOW) {
|
|
||||||
if (PLASTWINDOW->getIsFloating()) {
|
|
||||||
g_pWindowManager->actingOnWindowFloating = PLASTWINDOW->getDrawable();
|
|
||||||
g_pWindowManager->mouseLastPos = g_pWindowManager->getCursorPos();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Events::eventButtonRelease(xcb_generic_event_t* event) {
|
void Events::eventButtonRelease(xcb_generic_event_t* event) {
|
||||||
|
@ -729,11 +739,21 @@ void Events::eventButtonRelease(xcb_generic_event_t* event) {
|
||||||
|
|
||||||
RETURNIFBAR;
|
RETURNIFBAR;
|
||||||
|
|
||||||
|
const auto PACTINGWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->actingOnWindowFloating);
|
||||||
|
|
||||||
// ungrab the mouse ptr
|
// ungrab the mouse ptr
|
||||||
xcb_ungrab_pointer(g_pWindowManager->DisplayConnection, XCB_CURRENT_TIME);
|
xcb_ungrab_pointer(g_pWindowManager->DisplayConnection, XCB_CURRENT_TIME);
|
||||||
const auto PACTINGWINDOW = g_pWindowManager->getWindowFromDrawable(g_pWindowManager->actingOnWindowFloating);
|
|
||||||
if (PACTINGWINDOW)
|
if (PACTINGWINDOW) {
|
||||||
PACTINGWINDOW->setDirty(true);
|
PACTINGWINDOW->setDirty(true);
|
||||||
|
|
||||||
|
if (PACTINGWINDOW->getDraggingTiled()) {
|
||||||
|
g_pWindowManager->LastWindow = PACTINGWINDOW->getDrawable();
|
||||||
|
KeybindManager::toggleActiveWindowFloating("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
g_pWindowManager->actingOnWindowFloating = 0;
|
g_pWindowManager->actingOnWindowFloating = 0;
|
||||||
g_pWindowManager->mouseKeyDown = 0;
|
g_pWindowManager->mouseKeyDown = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "window.hpp"
|
#include "window.hpp"
|
||||||
#include "windowManager.hpp"
|
#include "windowManager.hpp"
|
||||||
|
|
||||||
CWindow::CWindow() { this->setIsPseudotiled(false); this->setSplitRatio(1); this->setDockHidden(false); this->setRealBorderColor(0); this->setEffectiveBorderColor(0); this->setFirstOpen(true); this->setConstructed(false); this->setTransient(false); this->setLastUpdatePosition(Vector2D(0,0)); this->setLastUpdateSize(Vector2D(0,0)); this->setDock(false); this->setUnderFullscreen(false); this->setIsSleeping(true); this->setFirstAnimFrame(true); this->setIsAnimated(false); this->setDead(false); this->setMasterChildIndex(0); this->setMaster(false); this->setCanKill(false); this->setImmovable(false); this->setNoInterventions(false); this->setDirty(true); this->setFullscreen(false); this->setIsFloating(false); this->setParentNodeID(0); this->setChildNodeAID(0); this->setChildNodeBID(0); this->setName(""); }
|
CWindow::CWindow() { this->setDraggingTiled(false); this->setIsPseudotiled(false); this->setSplitRatio(1); this->setDockHidden(false); this->setRealBorderColor(0); this->setEffectiveBorderColor(0); this->setFirstOpen(true); this->setConstructed(false); this->setTransient(false); this->setLastUpdatePosition(Vector2D(0,0)); this->setLastUpdateSize(Vector2D(0,0)); this->setDock(false); this->setUnderFullscreen(false); this->setIsSleeping(true); this->setFirstAnimFrame(true); this->setIsAnimated(false); this->setDead(false); this->setMasterChildIndex(0); this->setMaster(false); this->setCanKill(false); this->setImmovable(false); this->setNoInterventions(false); this->setDirty(true); this->setFullscreen(false); this->setIsFloating(false); this->setParentNodeID(0); this->setChildNodeAID(0); this->setChildNodeBID(0); this->setName(""); }
|
||||||
CWindow::~CWindow() { }
|
CWindow::~CWindow() { }
|
||||||
|
|
||||||
void CWindow::generateNodeID() {
|
void CWindow::generateNodeID() {
|
||||||
|
|
|
@ -112,6 +112,9 @@ public:
|
||||||
EXPOSED_MEMBER(IsPseudotiled, bool, b);
|
EXPOSED_MEMBER(IsPseudotiled, bool, b);
|
||||||
EXPOSED_MEMBER(PseudoSize, Vector2D, vec);
|
EXPOSED_MEMBER(PseudoSize, Vector2D, vec);
|
||||||
|
|
||||||
|
// For dragging tiled windows
|
||||||
|
EXPOSED_MEMBER(DraggingTiled, bool, b);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
};
|
};
|
|
@ -955,7 +955,7 @@ CWindow* CWindowManager::findWindowAtCursor() {
|
||||||
const auto WORKSPACE = activeWorkspaces[getMonitorFromCursor()->ID];
|
const auto WORKSPACE = activeWorkspaces[getMonitorFromCursor()->ID];
|
||||||
|
|
||||||
for (auto& window : windows) {
|
for (auto& window : windows) {
|
||||||
if (window.getWorkspaceID() == WORKSPACE && !window.getIsFloating() && window.getDrawable() > 0) {
|
if (window.getWorkspaceID() == WORKSPACE && !window.getIsFloating() && window.getDrawable() > 0 && window.getConstructed()) {
|
||||||
|
|
||||||
if (cursorPos.x >= window.getPosition().x
|
if (cursorPos.x >= window.getPosition().x
|
||||||
&& cursorPos.x <= window.getPosition().x + window.getSize().x
|
&& cursorPos.x <= window.getPosition().x + window.getSize().x
|
||||||
|
|
Loading…
Reference in a new issue