mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-09 16:05:58 +01:00
groupbar: Middle click on groupbar to close tab (#4297)
* Prevent window swapping when the head is removed * Bring floating windows to top when selected * Allow clicks on gropubar in fullscreen 1 * Close window on groupbar with middle click
This commit is contained in:
parent
78f9ba9fdd
commit
5f8e4068e5
3 changed files with 24 additions and 8 deletions
|
@ -36,15 +36,15 @@ void IHyprLayout::onWindowRemoved(CWindow* pWindow) {
|
||||||
const auto WINDOWISVISIBLE = pWindow->getGroupCurrent() == pWindow;
|
const auto WINDOWISVISIBLE = pWindow->getGroupCurrent() == pWindow;
|
||||||
|
|
||||||
if (WINDOWISVISIBLE)
|
if (WINDOWISVISIBLE)
|
||||||
PWINDOWPREV->setGroupCurrent(PWINDOWPREV);
|
PWINDOWPREV->setGroupCurrent(pWindow->m_sGroupData.head ? pWindow->m_sGroupData.pNextWindow : PWINDOWPREV);
|
||||||
|
|
||||||
PWINDOWPREV->m_sGroupData.pNextWindow = pWindow->m_sGroupData.pNextWindow;
|
PWINDOWPREV->m_sGroupData.pNextWindow = pWindow->m_sGroupData.pNextWindow;
|
||||||
|
|
||||||
pWindow->m_sGroupData.pNextWindow = nullptr;
|
pWindow->m_sGroupData.pNextWindow = nullptr;
|
||||||
|
|
||||||
if (pWindow->m_sGroupData.head) {
|
if (pWindow->m_sGroupData.head) {
|
||||||
std::swap(PWINDOWPREV->m_sGroupData.head, pWindow->m_sGroupData.head);
|
std::swap(PWINDOWPREV->m_sGroupData.pNextWindow->m_sGroupData.head, pWindow->m_sGroupData.head);
|
||||||
std::swap(PWINDOWPREV->m_sGroupData.locked, pWindow->m_sGroupData.locked);
|
std::swap(PWINDOWPREV->m_sGroupData.pNextWindow->m_sGroupData.locked, pWindow->m_sGroupData.locked);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pWindow == m_pLastTiledWindow)
|
if (pWindow == m_pLastTiledWindow)
|
||||||
|
|
|
@ -601,7 +601,7 @@ void CInputManager::processMouseDownNormal(wlr_pointer_button_event* e) {
|
||||||
const auto mouseCoords = g_pInputManager->getMouseCoordsInternal();
|
const auto mouseCoords = g_pInputManager->getMouseCoordsInternal();
|
||||||
const auto w = g_pCompositor->vectorToWindowIdeal(mouseCoords);
|
const auto w = g_pCompositor->vectorToWindowIdeal(mouseCoords);
|
||||||
|
|
||||||
if (w && !w->m_bIsFullscreen && !m_bLastFocusOnLS && w->checkInputOnDecos(INPUT_TYPE_BUTTON, mouseCoords, e))
|
if (w && !m_bLastFocusOnLS && w->checkInputOnDecos(INPUT_TYPE_BUTTON, mouseCoords, e))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// clicking on border triggers resize
|
// clicking on border triggers resize
|
||||||
|
|
|
@ -386,12 +386,28 @@ bool CHyprGroupBarDecoration::onEndWindowDragOnDeco(const Vector2D& pos, CWindow
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, wlr_pointer_button_event* e) {
|
bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, wlr_pointer_button_event* e) {
|
||||||
if (e->state != WLR_BUTTON_PRESSED)
|
if (m_pWindow->m_bIsFullscreen && g_pCompositor->getWorkspaceByID(m_pWindow->m_iWorkspaceID)->m_efFullscreenMode == FULLSCREEN_FULL)
|
||||||
return false;
|
return true;
|
||||||
|
|
||||||
const float BARRELATIVEX = pos.x - assignedBoxGlobal().x;
|
const float BARRELATIVEX = pos.x - assignedBoxGlobal().x;
|
||||||
const int WINDOWINDEX = (BARRELATIVEX) / (m_fBarWidth + BAR_HORIZONTAL_PADDING);
|
const int WINDOWINDEX = (BARRELATIVEX) / (m_fBarWidth + BAR_HORIZONTAL_PADDING);
|
||||||
|
|
||||||
|
// close window on middle click
|
||||||
|
if (e->button == 274) {
|
||||||
|
static Vector2D pressedCursorPos;
|
||||||
|
|
||||||
|
if (e->state == WLR_BUTTON_PRESSED)
|
||||||
|
pressedCursorPos = pos;
|
||||||
|
else if (e->state == WLR_BUTTON_RELEASED && pressedCursorPos == pos)
|
||||||
|
g_pXWaylandManager->sendCloseWindow(m_pWindow->getGroupWindowByIndex(WINDOWINDEX));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e->state != WLR_BUTTON_PRESSED)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// click on padding
|
||||||
if (BARRELATIVEX - (m_fBarWidth + BAR_HORIZONTAL_PADDING) * WINDOWINDEX > m_fBarWidth) {
|
if (BARRELATIVEX - (m_fBarWidth + BAR_HORIZONTAL_PADDING) * WINDOWINDEX > m_fBarWidth) {
|
||||||
if (!g_pCompositor->isWindowActive(m_pWindow))
|
if (!g_pCompositor->isWindowActive(m_pWindow))
|
||||||
g_pCompositor->focusWindow(m_pWindow);
|
g_pCompositor->focusWindow(m_pWindow);
|
||||||
|
@ -403,8 +419,8 @@ bool CHyprGroupBarDecoration::onMouseButtonOnDeco(const Vector2D& pos, wlr_point
|
||||||
if (pWindow != m_pWindow)
|
if (pWindow != m_pWindow)
|
||||||
pWindow->setGroupCurrent(pWindow);
|
pWindow->setGroupCurrent(pWindow);
|
||||||
|
|
||||||
if (!g_pCompositor->isWindowActive(pWindow))
|
if (pWindow->m_bIsFloating)
|
||||||
g_pCompositor->focusWindow(pWindow);
|
g_pCompositor->changeWindowZOrder(pWindow, 1);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue