20
20
#include "dialog.h"
22
#include <QApplication>
24
#include <QDesktopWidget>
25
#include <QGraphicsView>
22
26
#include <QGraphicsWidget>
27
#include <QGraphicsScene>
23
29
#include <KWindowSystem>
31
#include <Plasma/Applet>
32
#include <Plasma/FrameSvg>
25
39
Dialog::Dialog(QWidget *parent, Qt::WindowFlags f)
26
: Plasma::Dialog(parent, f)
40
: QWidget(parent, f), m_widget(0)
28
42
setWindowFlags(Qt::Popup | Qt::WindowStaysOnTopHint);
45
if (!QX11Info::isCompositingManagerRunning()) {
46
setAttribute(Qt::WA_NoSystemBackground);
29
50
KWindowSystem::setState(effectiveWinId(), NET::SkipTaskbar | NET::SkipPager);
52
QPalette pal = palette();
53
pal.setColor(backgroundRole(), Qt::transparent);
56
m_background = new Plasma::FrameSvg(this);
57
m_background->setImagePath("dialogs/background");
59
m_scene = new QGraphicsScene(this);
60
m_view = new QGraphicsView(m_scene, this);
61
m_view->setFrameShape(QFrame::NoFrame);
62
m_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
63
m_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
64
m_view->viewport()->setAutoFillBackground(false);
71
void Dialog::setGraphicsWidget(QGraphicsWidget *widget)
74
m_scene->addItem(widget);
77
void Dialog::show(Plasma::Applet *applet)
79
Plasma::FrameSvg::EnabledBorders borders = Plasma::FrameSvg::AllBorders;
80
int left = m_background->marginSize(Plasma::LeftMargin);
81
int top = m_background->marginSize(Plasma::TopMargin);
82
int right = m_background->marginSize(Plasma::RightMargin);
83
int bottom = m_background->marginSize(Plasma::BottomMargin);
85
switch (applet->location())
87
case Plasma::BottomEdge:
88
borders &= ~Plasma::FrameSvg::BottomBorder;
93
borders &= ~Plasma::FrameSvg::TopBorder;
97
case Plasma::LeftEdge:
98
borders &= ~Plasma::FrameSvg::LeftBorder;
102
case Plasma::RightEdge:
103
borders &= ~Plasma::FrameSvg::RightBorder;
111
const QRect rect = QApplication::desktop()->availableGeometry().adjusted(left, top, -right, -bottom);
112
m_widget->resize(m_widget->preferredSize().boundedTo(rect.size()));
114
m_background->setEnabledBorders(borders);
115
setContentsMargins(left, top, right, bottom);
117
resize(m_widget->size().toSize() + QSize(left + right, top + bottom));
118
move(applet->popupPosition(size()));
123
void Dialog::resizeEvent(QResizeEvent *event)
127
m_background->resizeFrame(rect().size());
128
m_view->setGeometry(contentsRect());
131
if (!QX11Info::isCompositingManagerRunning()) {
132
setMask(m_background->mask());
137
void Dialog::paintEvent(QPaintEvent *event)
142
p.setCompositionMode(QPainter::CompositionMode_Source);
143
p.fillRect(rect(), Qt::transparent);
144
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
145
m_background->paintFrame(&p);
36
148
void Dialog::focusOutEvent(QFocusEvent *event)