3
* Copyright (c) 2003 Lubos Lunak <l.lunak@kde.org>
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24
#include <kapplication.h>
30
#include <QMouseEvent>
31
#include <QResizeEvent>
33
#include <kiconloader.h>
36
#include <X11/extensions/shape.h>
38
#include <kdecorationfactory.h>
39
#include <kdecoration_plugins_p.h>
42
// FRAME the preview doesn't update to reflect the changes done in the kcm
44
KDecorationPreview::KDecorationPreview(KDecorationPlugins* plugin, QWidget* parent, const char* name)
45
: QWidget(parent, name),
48
options = new KDecorationPreviewOptions;
50
bridge = new KDecorationPreviewBridge(this, true, "Deco Benchmark");
54
setFixedSize(600, 500);
59
KDecorationPreview::~KDecorationPreview()
66
void KDecorationPreview::performRepaintTest(int n)
68
kDebug(1212) << "start " << n << " repaints...";
69
bridge->setCaption("Deco Benchmark");
70
deco->captionChange();
72
for (int i = 0; i < n; ++i) {
73
deco->widget()->repaint();
74
kapp->processEvents();
78
void KDecorationPreview::performCaptionTest(int n)
80
kDebug(1212) << "start " << n << " caption changes...";
81
QString caption = "Deco Benchmark %1";
83
for (int i = 0; i < n; ++i) {
84
bridge->setCaption(caption.arg(i));
85
deco->captionChange();
86
deco->widget()->repaint();
87
kapp->processEvents();
91
void KDecorationPreview::performResizeTest(int n)
93
kDebug(1212) << "start " << n << " resizes...";
94
bridge->setCaption("Deco Benchmark");
95
deco->captionChange();
96
for (int i = 0; i < n; ++i) {
97
positionPreviews(i % 200);
98
kapp->processEvents();
102
void KDecorationPreview::performRecreationTest(int n)
104
kDebug(1212) << "start " << n << " resizes...";
105
bridge->setCaption("Deco Benchmark");
106
deco->captionChange();
108
for (int i = 0; i < n; ++i) {
109
recreateDecoration();
110
kapp->processEvents();
114
bool KDecorationPreview::recreateDecoration()
117
deco = m_plugin->createDecoration(bridge);
124
deco->widget()->show();
129
void KDecorationPreview::positionPreviews(int shrink)
134
QSize size = QSize(width() - 2 * 10 - shrink, height() - 2 * 10 - shrink)/*.expandedTo(deco->minimumSize()*/;
136
QRect geometry(QPoint(10, 10), size);
137
deco->widget()->setGeometry(geometry);
140
void KDecorationPreview::setPreviewMask(const QRegion& reg, int mode)
142
QWidget *widget = deco->widget();
144
// FRAME duped from client.cpp
145
if (mode == Unsorted) {
146
XShapeCombineRegion(QX11Info::display(), widget->winId(), ShapeBounding, 0, 0,
147
reg.handle(), ShapeSet);
149
QVector< QRect > rects = reg.rects();
150
XRectangle* xrects = new XRectangle[ rects.count()];
151
for (unsigned int i = 0;
154
xrects[ i ].x = rects[ i ].x();
155
xrects[ i ].y = rects[ i ].y();
156
xrects[ i ].width = rects[ i ].width();
157
xrects[ i ].height = rects[ i ].height();
159
XShapeCombineRectangles(QX11Info::display(), widget->winId(), ShapeBounding, 0, 0,
160
xrects, rects.count(), ShapeSet, mode);
165
QRect KDecorationPreview::windowGeometry(bool active) const
167
QWidget *widget = deco->widget();
168
return widget->geometry();
171
QRegion KDecorationPreview::unobscuredRegion(bool active, const QRegion& r) const
176
KDecorationPreviewBridge::KDecorationPreviewBridge(KDecorationPreview* p, bool a, const QString &c)
177
: preview(p), active(a), m_caption(c)
181
void KDecorationPreviewBridge::setCaption(const QString &c)
186
QWidget* KDecorationPreviewBridge::initialParentWidget() const
191
Qt::WFlags KDecorationPreviewBridge::initialWFlags() const
196
bool KDecorationPreviewBridge::isActive() const
201
bool KDecorationPreviewBridge::isCloseable() const
206
bool KDecorationPreviewBridge::isMaximizable() const
211
KDecoration::MaximizeMode KDecorationPreviewBridge::maximizeMode() const
213
return KDecoration::MaximizeRestore;
216
bool KDecorationPreviewBridge::isMinimizable() const
221
bool KDecorationPreviewBridge::providesContextHelp() const
226
int KDecorationPreviewBridge::desktop() const
231
bool KDecorationPreviewBridge::isModal() const
236
bool KDecorationPreviewBridge::isShadeable() const
241
bool KDecorationPreviewBridge::isShade() const
246
bool KDecorationPreviewBridge::isSetShade() const
251
bool KDecorationPreviewBridge::keepAbove() const
256
bool KDecorationPreviewBridge::keepBelow() const
261
bool KDecorationPreviewBridge::isMovable() const
266
bool KDecorationPreviewBridge::isResizable() const
271
NET::WindowType KDecorationPreviewBridge::windowType(unsigned long) const
276
QIcon KDecorationPreviewBridge::icon() const
278
return QIcon(KGlobal::iconLoader()->loadIcon("xorg", KIconLoader::NoGroup, 32));
281
QString KDecorationPreviewBridge::caption() const
286
void KDecorationPreviewBridge::processMousePressEvent(QMouseEvent*)
290
void KDecorationPreviewBridge::showWindowMenu(const QRect &)
294
void KDecorationPreviewBridge::showWindowMenu(QPoint)
298
void KDecorationPreviewBridge::performWindowOperation(WindowOperation)
302
void KDecorationPreviewBridge::setMask(const QRegion& reg, int mode)
304
preview->setPreviewMask(reg, mode);
307
bool KDecorationPreviewBridge::isPreview() const
312
QRect KDecorationPreviewBridge::geometry() const
314
return preview->windowGeometry(active);
317
QRect KDecorationPreviewBridge::iconGeometry() const
322
QRegion KDecorationPreviewBridge::unobscuredRegion(const QRegion& r) const
324
return preview->unobscuredRegion(active, r);
327
WId KDecorationPreviewBridge::windowId() const
329
return 0; // no decorated window
332
void KDecorationPreviewBridge::closeWindow()
336
void KDecorationPreviewBridge::maximize(MaximizeMode)
340
void KDecorationPreviewBridge::minimize()
344
void KDecorationPreviewBridge::showContextHelp()
348
void KDecorationPreviewBridge::setDesktop(int)
352
void KDecorationPreviewBridge::titlebarDblClickOperation()
356
void KDecorationPreviewBridge::titlebarMouseWheelOperation(int)
360
void KDecorationPreviewBridge::setShade(bool)
364
void KDecorationPreviewBridge::setKeepAbove(bool)
368
void KDecorationPreviewBridge::setKeepBelow(bool)
372
int KDecorationPreviewBridge::currentDesktop() const
377
void KDecorationPreviewBridge::grabXServer(bool)
381
KDecorationPreviewOptions::KDecorationPreviewOptions()
383
defaultKWinSettings();
387
KDecorationPreviewOptions::~KDecorationPreviewOptions()
391
unsigned long KDecorationPreviewOptions::updateSettings()
393
KConfig cfg("kwinrc", true);
394
unsigned long changed = 0;
395
changed |= KDecorationOptions::updateKWinSettings(&cfg);
400
bool KDecorationPreviewPlugins::provides(Requirement)
405
// #include "preview.moc"