diff --git a/app/view/view.cpp b/app/view/view.cpp --- a/app/view/view.cpp +++ b/app/view/view.cpp @@ -41,6 +41,7 @@ #include #include #include +#include // KDe #include @@ -1021,9 +1022,34 @@ void View::restoreGrabItemBehavior() { - if (mouseGrabberItem()) { - mouseGrabberItem()->ungrabMouse(); - } + if( QX11Info::isPlatformX11() ) + { + // from breeze + auto connection = QX11Info::connection(); + + xcb_button_release_event_t releaseEvent; + memset(&releaseEvent, 0, sizeof(releaseEvent)); + + releaseEvent.response_type = XCB_BUTTON_RELEASE; + releaseEvent.event = winId(); + releaseEvent.child = XCB_WINDOW_NONE; + releaseEvent.root = QX11Info::appRootWindow(); + releaseEvent.event_x = 0; + releaseEvent.event_y = 0; + releaseEvent.root_x = 0; + releaseEvent.root_y = 0; + releaseEvent.detail = XCB_BUTTON_INDEX_1; + releaseEvent.state = XCB_BUTTON_MASK_1; + releaseEvent.time = XCB_CURRENT_TIME; + releaseEvent.same_screen = true; + xcb_send_event( connection, false, winId(), XCB_EVENT_MASK_BUTTON_RELEASE, reinterpret_cast(&releaseEvent)); + } + else + { + if (mouseGrabberItem()) { + mouseGrabberItem()->ungrabMouse(); + } + } } //!BEGIN overriding context menus behavior diff --git a/app/view/visibilitymanager.cpp b/app/view/visibilitymanager.cpp --- a/app/view/visibilitymanager.cpp +++ b/app/view/visibilitymanager.cpp @@ -1152,6 +1152,8 @@ if (actInfo.isValid() && !actInfo.geometry().isNull() && m_latteView->screenGeometry().contains(actInfo.geometry().center())) { QPoint globalPoint{m_latteView->x() + localX, m_latteView->y() + localY}; wm->requestMoveWindow(actInfo.wid(), globalPoint); + setContainsMouse(false); + updateHiddenState(); } }