diff options
Diffstat (limited to 'plainqt/style/qtmaemo6menuproxy.cpp')
-rw-r--r-- | plainqt/style/qtmaemo6menuproxy.cpp | 56 |
1 files changed, 49 insertions, 7 deletions
diff --git a/plainqt/style/qtmaemo6menuproxy.cpp b/plainqt/style/qtmaemo6menuproxy.cpp index f2ddf36e..dbc57809 100644 --- a/plainqt/style/qtmaemo6menuproxy.cpp +++ b/plainqt/style/qtmaemo6menuproxy.cpp @@ -27,20 +27,59 @@ #include <QCloseEvent> #include <QStyleOption> #include <QPushButton> +#include <QPaintEvent> +#include <QPainter> #include <duiapplicationmenustyle.h> +#include <QDebug> + +/* unforunately this is required to force widgets drawing it's background, even + if there are widget attributes are set, that suppress the drawing! +*/ +class DrawBackgroundEventFilter : public QObject { +protected: + bool eventFilter(QObject* obj, QEvent* e) { + if(QPaintEvent* pe = dynamic_cast<QPaintEvent*>(e)) { + if(QWidget* w = qobject_cast<QWidget*>(obj)) { + qCritical() << "EventFilter:" << w->objectName() << w->geometry() << pe->rect(); + + Q_UNUSED(pe); + QPainter p(w); + p.setPen(Qt::NoPen); + p.setBrush(w->palette().window()); + p.drawRect(pe->rect()); + } + } + return QObject::eventFilter(obj, e); + }; +}; QtMaemo6MenuProxy::QtMaemo6MenuProxy(QMenuBar *mb, QWidget *parent) : QtMaemo6Window(NULL, parent), m_menuBar(mb) { + //must be set, to activate the compositing setAttribute(Qt::WA_TranslucentBackground); - QPalette palette; - palette.setBrush(QPalette::Window, QBrush(QColor(0, 0, 0, 192))); + palette.setBrush(QPalette::Window, Qt::transparent); setPalette(palette); + QWidget* appArea = new QWidget(); + appArea->setObjectName("appArea"); + appArea->installEventFilter(new DrawBackgroundEventFilter()); + + appArea->setAttribute(Qt::WA_TranslucentBackground); + palette.setBrush(QPalette::Window, QBrush(QColor(0, 0, 0, 192))); + appArea->setPalette(palette); + + QGridLayout* gridLayout = new QGridLayout(appArea); + gridLayout->setMargin(0); + gridLayout->setSpacing(0); + m_menu = new QtMaemo6Menu(mb, NULL); + m_menu->setAttribute(Qt::WA_TranslucentBackground, false); + palette.setBrush(QPalette::Window, QBrush(QColor(0, 0, 0, 0))); + m_menu->setPalette(palette); setCentralWidget(m_menu); QStyleOption option; @@ -55,10 +94,13 @@ QtMaemo6MenuProxy::QtMaemo6MenuProxy(QMenuBar *mb, QWidget *parent) QSpacerItem *bottomSpacer = new QSpacerItem(1, style->paddingBottom()); QSpacerItem *leftSpacer = new QSpacerItem(style->paddingLeft(), 1); - m_windowLayout->addItem(topSpacer, 0, 0, 1, 3); - m_windowLayout->addItem(leftSpacer, 1, 0, 1, 1); - m_windowLayout->addItem(rightSpacer, 1, 2, 1, 1); - m_windowLayout->addItem(bottomSpacer, 2, 0, 1, 3); + gridLayout->addItem(leftSpacer, 0, 0, 1, 1); + gridLayout->addWidget(centralWidget(), 0, 1, 1, 1); + gridLayout->addItem(rightSpacer, 0, 2, 1, 1); + gridLayout->addItem(bottomSpacer, 1, 0, 1, 3); + + m_windowLayout->addItem(topSpacer, 0, 0, 1, 1); + m_windowLayout->addWidget(appArea, 1, 0, 1, 1); } QtMaemo6MenuProxy::~QtMaemo6MenuProxy() @@ -69,6 +111,6 @@ QtMaemo6MenuProxy::~QtMaemo6MenuProxy() void QtMaemo6MenuProxy::mousePressEvent(QMouseEvent *event) { - Q_UNUSED(event); close(); + QtMaemo6Window::mousePressEvent(event); } |