fix search trickle through actions and variants view and mouse event stealing by wallpapertile
C++ / fmt (pull_request) Successful in 4s
JS/TS / fmt (pull_request) Successful in 7s
JS/TS / lint (pull_request) Successful in 10s
Python / static (pull_request) Successful in 1m6s
Rust / fmt (pull_request) Successful in 1m3s
Rust / build (pull_request) Successful in 2m17s
Rust / clippy (pull_request) Successful in 1m29s
C++ / build (pull_request) Successful in 2m48s
Python / verify (pull_request) Successful in 3m16s
C++ / clang-tidy (pull_request) Successful in 4m17s

This commit is contained in:
2026-08-16 23:13:37 +02:00
parent 43647dd486
commit 69c2bfae9d
4 changed files with 168 additions and 30 deletions
@@ -21,6 +21,7 @@ constexpr int kMaxLayoutCapacity = 64;
CarouselView::CarouselView(QQuickItem* parent) : QQuickItem(parent) {
setAcceptedMouseButtons(Qt::LeftButton);
setFiltersChildMouseEvents(true);
setFlag(QQuickItem::ItemHasContents, false);
setClip(false);
@@ -80,6 +81,89 @@ void CarouselView::setDelegate(QQmlComponent* c) {
relayout();
}
bool CarouselView::childMouseEventFilter(QQuickItem* item, QEvent* event) {
Q_UNUSED(item);
auto* mouseEvent = dynamic_cast<QMouseEvent*>(event);
if (!mouseEvent) return false;
const QPointF pos = mapFromItem(item, mouseEvent->position());
switch (mouseEvent->type()) {
case QEvent::MouseButtonPress: {
if (mouseEvent->button() != Qt::LeftButton) return false;
m_dragging = true;
m_dragActive = false;
m_pressPos = pos;
m_pressContentX = m_contentX;
m_dragTimer.start();
m_lastMoveX = pos.x();
m_lastMoveT = 0;
m_velocity = 0;
return false;
}
case QEvent::MouseMove: {
if (!m_dragging) return false;
const qreal dx = pos.x() - m_pressPos.x();
if (!m_dragActive && std::abs(dx) > kDragThreshold) {
m_dragActive = true;
m_pressContentX = m_contentX;
cancelAnimations();
grabMouse();
}
if (!m_dragActive) return false;
m_contentX = m_pressContentX - dx;
wrapContentIfNeeded();
updateCurrentIndexFromContentX(true);
relayout();
const qint64 t = m_dragTimer.elapsed();
const qint64 dt = t - m_lastMoveT;
if (dt > 0) {
const qreal instVel = (m_lastMoveX - pos.x()) / (dt / 1000.0);
m_velocity = m_velocity * 0.7 + instVel * 0.3;
}
m_lastMoveX = pos.x();
m_lastMoveT = t;
mouseEvent->accept();
return true;
}
case QEvent::MouseButtonRelease: {
if (!m_dragging) return false;
if (!m_dragActive) {
m_dragging = false;
return false;
}
return false;
}
case QEvent::MouseButtonDblClick:
return false;
default:
return false;
}
}
void CarouselView::setModel(const QVariantList& m) {
m_model = m;