From d6b66ecb961bb958e3ffa3219baedec587bba329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCgler?= Date: Tue, 26 Feb 2013 04:50:00 +0100 Subject: [PATCH] Switch enabledBorders based on popupPosition --- src/declarativeimports/core/dialog.cpp | 51 ++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/src/declarativeimports/core/dialog.cpp b/src/declarativeimports/core/dialog.cpp index 228520969..82f5a7c62 100644 --- a/src/declarativeimports/core/dialog.cpp +++ b/src/declarativeimports/core/dialog.cpp @@ -63,7 +63,7 @@ QString locString(const Plasma::Location l) { DialogProxy::DialogProxy(QQuickItem *parent) : QQuickWindow(), m_activeWindow(false), - m_location(Plasma::TopEdge) + m_location(Plasma::LeftEdge) { QSurfaceFormat format; format.setAlphaBufferSize(8); @@ -76,14 +76,16 @@ DialogProxy::DialogProxy(QQuickItem *parent) m_syncTimer = new QTimer(this); m_syncTimer->setSingleShot(true); - m_syncTimer->setInterval(250); + m_syncTimer->setInterval(2500); connect(m_syncTimer, &QTimer::timeout, this, &DialogProxy::syncToMainItemSize); //HACK: this property is invoked due to the initialization that gets done to contentItem() in the getter property("data"); //Create the FrameSvg background. m_frameSvgItem = new Plasma::FrameSvgItem(contentItem()); - m_frameSvgItem->setImagePath("dialogs/background"); + //m_frameSvgItem->setImagePath("dialogs/background"); + m_frameSvgItem->setImagePath("widgets/background"); + setVisualParent(parent); } DialogProxy::~DialogProxy() @@ -144,6 +146,7 @@ QQuickItem *DialogProxy::visualParent() const void DialogProxy::setVisualParent(QQuickItem *visualParent) { + qDebug() << "Settting Parent....."; if (m_visualParent.data() == visualParent) { return; } @@ -165,7 +168,43 @@ void DialogProxy::setVisible(const bool visible) { qDebug() << visible; if (visible) { + m_frameSvgItem->setEnabledBorders(Plasma::FrameSvg::AllBorders); syncToMainItemSize(); + QPoint p = popupPosition(m_visualParent.data(), Qt::AlignCenter); + + const QRect avail = m_visualParent.data()->window()->screen()->availableGeometry(); + int borders = Plasma::FrameSvg::AllBorders; + if (p.x() <= 0) { + //m_frameSvgItem->setEnabledBorders(Plasma::FrameSvg::TopBorder | Plasma::FrameSvg::RightBorder | Plasma::FrameSvg::BottomBorder); + //m_frameSvgItem->setEnabledBorders(Plasma::FrameSvg::AllBorders & ~Plasma::FrameSvg::LeftBorder); + borders = borders & ~Plasma::FrameSvg::LeftBorder; + } + if (p.y() <= 0) { + //m_frameSvgItem->setEnabledBorders(Plasma::FrameSvg::LeftBorder | Plasma::FrameSvg::RightBorder | Plasma::FrameSvg::BottomBorder); + //m_frameSvgItem->setEnabledBorders(Plasma::FrameSvg::AllBorders & ~Plasma::FrameSvg::TopBorder); + borders = borders & ~Plasma::FrameSvg::TopBorder; + + } + if (avail.width() <= p.x() + m_visualParent.data()->width()) { + //m_frameSvgItem->setEnabledBorders(Plasma::FrameSvg::LeftBorder | Plasma::FrameSvg::TopBorder | Plasma::FrameSvg::BottomBorder); + borders = borders & ~Plasma::FrameSvg::RightBorder; + + } + if (avail.height() <= p.y() + m_visualParent.data()->height()) { + borders = borders & ~Plasma::FrameSvg::BottomBorder; + + //m_frameSvgItem->setEnabledBorders(Plasma::FrameSvg::LeftBorder | Plasma::FrameSvg::RightBorder | Plasma::FrameSvg::TopBorder); + } + m_frameSvgItem->setEnabledBorders((Plasma::FrameSvg::EnabledBorder)borders); + syncToMainItemSize(); +// enum EnabledBorder { +// NoBorder = 0, +// TopBorder = 1, +// BottomBorder = 2, +// LeftBorder = 4, +// RightBorder = 8, +// AllBorders = TopBorder | BottomBorder | LeftBorder | RightBorder +// }; if (m_visualParent) { setPosition(popupPosition(m_visualParent.data(), Qt::AlignCenter)); @@ -283,7 +322,7 @@ QPoint DialogProxy::popupPosition(QQuickItem *item, Qt::AlignmentFlag alignment) // hitting top qDebug() << "hitting top"; if (l == Plasma::LeftEdge || l == Plasma::RightEdge) { - menuPos.setY(0-topMargin); + menuPos.setY(0); } else { menuPos.setY(pos.y() + bottomPoint.y()); } @@ -381,6 +420,10 @@ void DialogProxy::syncToMainItemSize() if (!m_mainItem) { return; } + if (m_visualParent.isNull()) { + qDebug() << "booom: " << qobject_cast(parent()); + setVisualParent(qobject_cast(parent())); + } //FIXME: workaround to prevent dialogs of Popup type disappearing on the second show const QSize s = QSize(m_mainItem.data()->width(), m_mainItem.data()->height()) +