correctly build applet and containment
This commit is contained in:
parent
cc21f6fcfe
commit
64fde089f2
@ -190,17 +190,17 @@ set(plasma_LIB_SRCS
|
||||
#FIXME: all these must move into the qgv library
|
||||
private/themedwidgetinterface.cpp
|
||||
widgets/iconwidget.cpp
|
||||
abstracttoolbox.cpp
|
||||
view.cpp
|
||||
#view.cpp
|
||||
applet.cpp
|
||||
containment.cpp
|
||||
corona.cpp
|
||||
dialog.cpp
|
||||
#dialog.cpp
|
||||
popupapplet.cpp
|
||||
private/applethandle.cpp
|
||||
)
|
||||
|
||||
set (plasmaqgv_LIB_SRCS
|
||||
private/applethandle.cpp
|
||||
abstracttoolbox.cpp
|
||||
delegate.cpp
|
||||
#FIXME: this is duplicated with libplasma because iconwidget requires it!
|
||||
private/themedwidgetinterface.cpp
|
||||
|
273
applet.cpp
273
applet.cpp
@ -205,7 +205,6 @@ Applet::~Applet()
|
||||
|
||||
void Applet::init()
|
||||
{
|
||||
setFlag(ItemIsMovable, true);
|
||||
if (d->script) {
|
||||
d->setupScriptSupport();
|
||||
|
||||
@ -360,7 +359,11 @@ KConfigGroup Applet::globalConfig() const
|
||||
KConfigGroup globalAppletConfig;
|
||||
QString group = isContainment() ? "ContainmentGlobals" : "AppletGlobals";
|
||||
|
||||
Corona *corona = qobject_cast<Corona*>(scene());
|
||||
Containment *cont = containment();
|
||||
Corona *corona = 0;
|
||||
if (cont) {
|
||||
corona = cont->corona();
|
||||
}
|
||||
if (corona) {
|
||||
KSharedConfig::Ptr coronaConfig = corona->config();
|
||||
globalAppletConfig = KConfigGroup(coronaConfig, group);
|
||||
@ -402,45 +405,20 @@ Package Applet::package() const
|
||||
return d->package ? *d->package : Package();
|
||||
}
|
||||
|
||||
QGraphicsView *Applet::view() const
|
||||
{
|
||||
// It's assumed that we won't be visible on more than one view here.
|
||||
// Anything that actually needs view() should only really care about
|
||||
// one of them anyway though.
|
||||
if (!scene()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
QGraphicsView *found = 0;
|
||||
QGraphicsView *possibleFind = 0;
|
||||
//kDebug() << "looking through" << scene()->views().count() << "views";
|
||||
foreach (QGraphicsView *view, scene()->views()) {
|
||||
//kDebug() << " checking" << view << view->sceneRect()
|
||||
// << "against" << sceneBoundingRect() << scenePos();
|
||||
if (view->sceneRect().intersects(sceneBoundingRect()) ||
|
||||
view->sceneRect().contains(scenePos())) {
|
||||
//kDebug() << " found something!" << view->isActiveWindow();
|
||||
if (view->isActiveWindow()) {
|
||||
found = view;
|
||||
} else {
|
||||
possibleFind = view;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return found ? found : possibleFind;
|
||||
}
|
||||
|
||||
QRectF Applet::mapFromView(const QGraphicsView *view, const QRect &rect) const
|
||||
{
|
||||
return QRect();
|
||||
/*TODO: port away qgv
|
||||
// Why is this adjustment needed? Qt calculation error?
|
||||
return mapFromScene(view->mapToScene(rect)).boundingRect().adjusted(0, 0, 1, 1);
|
||||
return mapFromScene(view->mapToScene(rect)).boundingRect().adjusted(0, 0, 1, 1);*/
|
||||
}
|
||||
|
||||
QRect Applet::mapToView(const QGraphicsView *view, const QRectF &rect) const
|
||||
{
|
||||
return QRect();
|
||||
/*TODO: port away qgv
|
||||
// Why is this adjustment needed? Qt calculation error?
|
||||
return view->mapFromScene(mapToScene(rect)).boundingRect().adjusted(0, 0, -1, -1);
|
||||
return view->mapFromScene(mapToScene(rect)).boundingRect().adjusted(0, 0, -1, -1);*/
|
||||
}
|
||||
|
||||
QPoint Applet::popupPosition(const QSize &s) const
|
||||
@ -450,7 +428,11 @@ QPoint Applet::popupPosition(const QSize &s) const
|
||||
|
||||
QPoint Applet::popupPosition(const QSize &s, Qt::AlignmentFlag alignment) const
|
||||
{
|
||||
Corona * corona = qobject_cast<Corona*>(scene());
|
||||
Containment *cont = containment();
|
||||
Corona *corona = 0;
|
||||
if (cont) {
|
||||
corona = cont->corona();
|
||||
}
|
||||
Q_ASSERT(corona);
|
||||
|
||||
return corona->popupPosition(this, s, alignment);
|
||||
@ -580,8 +562,6 @@ ImmutabilityType Applet::immutability() const
|
||||
|
||||
if (cont) {
|
||||
upperImmutability = cont->immutability();
|
||||
} else if (Corona *corona = qobject_cast<Corona*>(scene())) {
|
||||
upperImmutability = corona->immutability();
|
||||
}
|
||||
|
||||
if (upperImmutability != Mutable) {
|
||||
@ -637,7 +617,6 @@ void Applet::setBackgroundHints(const Plasma::BackgroundHints hints)
|
||||
d->background->setEnabledBorders(Plasma::FrameSvg::AllBorders);
|
||||
qreal left, top, right, bottom;
|
||||
d->background->getMargins(left, top, right, bottom);
|
||||
setContentsMargins(left, right, top, bottom);
|
||||
QSizeF fitSize(left + right, top + bottom);
|
||||
d->background->resizeFrame(boundingRect().size());
|
||||
|
||||
@ -656,10 +635,7 @@ void Applet::setBackgroundHints(const Plasma::BackgroundHints hints)
|
||||
|
||||
delete d->background;
|
||||
d->background = 0;
|
||||
setContentsMargins(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
bool Applet::hasFailedToLaunch() const
|
||||
@ -748,7 +724,11 @@ void Applet::flushPendingConstraintsEvents()
|
||||
}
|
||||
|
||||
d->updateShortcuts();
|
||||
Corona * corona = qobject_cast<Corona*>(scene());
|
||||
Containment *cont = containment();
|
||||
Corona *corona = 0;
|
||||
if (cont) {
|
||||
corona = cont->corona();
|
||||
}
|
||||
if (corona) {
|
||||
connect(corona, SIGNAL(shortcutsChanged()), this, SLOT(updateShortcuts()), Qt::UniqueConnection);
|
||||
}
|
||||
@ -773,11 +753,6 @@ void Applet::flushPendingConstraintsEvents()
|
||||
AppletHandle *h = d->handle.data();
|
||||
disconnect(this);
|
||||
|
||||
QGraphicsScene *s = scene();
|
||||
if (s && h->scene() == s) {
|
||||
s->removeItem(h);
|
||||
}
|
||||
|
||||
h->deleteLater();
|
||||
}
|
||||
|
||||
@ -786,10 +761,6 @@ void Applet::flushPendingConstraintsEvents()
|
||||
|
||||
if (c & Plasma::SizeConstraint) {
|
||||
d->positionMessageOverlay();
|
||||
|
||||
if (d->started && layout()) {
|
||||
layout()->updateGeometry();
|
||||
}
|
||||
}
|
||||
|
||||
if (c & Plasma::FormFactorConstraint) {
|
||||
@ -802,14 +773,6 @@ void Applet::flushPendingConstraintsEvents()
|
||||
d->preferredBackgroundHints = hints;
|
||||
}
|
||||
|
||||
if (d->failed) {
|
||||
if (f == Vertical || f == Horizontal) {
|
||||
QGraphicsLayoutItem *item = layout()->itemAt(1);
|
||||
layout()->removeAt(1);
|
||||
delete item;
|
||||
}
|
||||
}
|
||||
|
||||
// avoid putting rotated applets in panels
|
||||
if (f == Vertical || f == Horizontal) {
|
||||
QTransform at;
|
||||
@ -843,7 +806,6 @@ void Applet::flushPendingConstraintsEvents()
|
||||
setSizePolicy(d->preferredSizePolicy);
|
||||
}
|
||||
}
|
||||
updateGeometry();
|
||||
}
|
||||
|
||||
// now take care of constraints in special subclasses: Contaiment and PopupApplet
|
||||
@ -917,11 +879,6 @@ void Applet::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QW
|
||||
return;
|
||||
}
|
||||
|
||||
qreal left, top, right, bottom;
|
||||
getContentsMargins(&left, &top, &right, &bottom);
|
||||
QRect contentsRect = QRectF(QPointF(0, 0),
|
||||
boundingRect().size()).adjusted(left, top, -right, -bottom).toRect();
|
||||
|
||||
if (widget && d->isContainment) {
|
||||
// note that the widget we get is actually the viewport of the view, not the view itself
|
||||
View* v = qobject_cast<Plasma::View*>(widget->parent());
|
||||
@ -938,37 +895,13 @@ void Applet::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QW
|
||||
wallpaperConfig = KConfigGroup(&wallpaperConfig, "Wallpaper");
|
||||
wallpaperConfig = KConfigGroup(&wallpaperConfig, w->pluginName());
|
||||
w->restore(wallpaperConfig);
|
||||
disconnect(w, SIGNAL(update(QRectF)), this, SLOT(updateRect(QRectF)));
|
||||
connect(w, SIGNAL(update(QRectF)), this, SLOT(updateRect(QRectF)));
|
||||
}
|
||||
|
||||
painter->save();
|
||||
c->wallpaper()->paint(painter, option->exposedRect);
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
// .. and now paint the actual containment interface, but with
|
||||
// a Containment style option based on the one we get
|
||||
// the view must be assigned only if its containment is actually our own
|
||||
Containment::StyleOption coption(*option);
|
||||
if (v && v->containment() == containment()) {
|
||||
coption.view = v;
|
||||
}
|
||||
paintInterface(painter, &coption, contentsRect);
|
||||
}
|
||||
} else {
|
||||
//kDebug() << "paint interface of" << (QObject*) this;
|
||||
// paint the applet's interface
|
||||
paintInterface(painter, option, contentsRect);
|
||||
}
|
||||
}
|
||||
|
||||
void Applet::paintInterface(QPainter *painter, const QStyleOptionGraphicsItem *option, const QRect &contentsRect)
|
||||
{
|
||||
if (d->script) {
|
||||
d->script->paintInterface(painter, option, contentsRect);
|
||||
} else {
|
||||
//kDebug() << "Applet::paintInterface() default impl";
|
||||
}
|
||||
}
|
||||
|
||||
@ -976,17 +909,10 @@ FormFactor Applet::formFactor() const
|
||||
{
|
||||
Containment *c = containment();
|
||||
QObject *pw = qobject_cast<QObject *>(parent());
|
||||
if (!pw) {
|
||||
pw = dynamic_cast<QObject *>(parentItem());
|
||||
}
|
||||
Plasma::Applet *parentApplet = qobject_cast<Plasma::Applet *>(pw);
|
||||
//assumption: this loop is usually is -really- short or doesn't run at all
|
||||
while (!parentApplet && pw && pw->parentWidget()) {
|
||||
QObject *parentWidget = qobject_cast<QObject *>(pw->parent());
|
||||
if (!parentWidget) {
|
||||
parentWidget = dynamic_cast<QObject *>(pw->parentItem());
|
||||
}
|
||||
pw = parentWidget;
|
||||
while (!parentApplet && pw && pw->parent()) {
|
||||
pw = pw->parent();
|
||||
parentApplet = qobject_cast<Plasma::Applet *>(pw);
|
||||
}
|
||||
|
||||
@ -999,10 +925,10 @@ FormFactor Applet::formFactor() const
|
||||
// a popupapplet can always be constrained.
|
||||
// a normal applet should to but
|
||||
//FIXME: not always constrained to not break systemmonitor
|
||||
if (parentApplet && parentApplet != c && c != this && (pa || layout())) {
|
||||
if (pa || (parentApplet->size().height() < layout()->effectiveSizeHint(Qt::MinimumSize).height())) {
|
||||
if (parentApplet && parentApplet != c && c != this) {
|
||||
if (pa || (parentApplet->size().height() < sizeHint(Qt::MinimumSize).height())) {
|
||||
return Plasma::Horizontal;
|
||||
} else if (pa || (parentApplet->size().width() < layout()->effectiveSizeHint(Qt::MinimumSize).width())) {
|
||||
} else if (pa || (parentApplet->size().width() < sizeHint(Qt::MinimumSize).width())) {
|
||||
return Plasma::Vertical;
|
||||
}
|
||||
return parentApplet->formFactor();
|
||||
@ -1020,7 +946,7 @@ Containment *Applet::containment() const
|
||||
}
|
||||
}
|
||||
|
||||
QObject *parent = parentItem();
|
||||
QObject *parent = this->parent();
|
||||
Containment *c = 0;
|
||||
|
||||
while (parent) {
|
||||
@ -1029,7 +955,7 @@ Containment *Applet::containment() const
|
||||
c = possibleC;
|
||||
break;
|
||||
}
|
||||
parent = parent->parentItem();
|
||||
parent = parent->parent();
|
||||
}
|
||||
|
||||
if (!c) {
|
||||
@ -1121,34 +1047,6 @@ void Applet::setAspectRatioMode(Plasma::AspectRatioMode mode)
|
||||
d->aspectRatioMode = mode;
|
||||
}
|
||||
|
||||
void Applet::registerAsDragHandle(QObject *item)
|
||||
{
|
||||
if (!item || d->registeredAsDragHandle.contains(item)) {
|
||||
return;
|
||||
}
|
||||
|
||||
d->registeredAsDragHandle.insert(item);
|
||||
item->installSceneEventFilter(this);
|
||||
}
|
||||
|
||||
void Applet::unregisterAsDragHandle(QObject *item)
|
||||
{
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (d->registeredAsDragHandle.remove(item)) {
|
||||
if (item != this) {
|
||||
item->removeSceneEventFilter(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Applet::isRegisteredAsDragHandle(QObject *item)
|
||||
{
|
||||
return d->registeredAsDragHandle.contains(item);
|
||||
}
|
||||
|
||||
bool Applet::hasConfigurationInterface() const
|
||||
{
|
||||
return d->hasConfigurationInterface;
|
||||
@ -1210,106 +1108,6 @@ void Applet::setHasConfigurationInterface(bool hasInterface)
|
||||
d->hasConfigurationInterface = hasInterface;
|
||||
}
|
||||
|
||||
bool Applet::sceneEventFilter(QObject *watched, QEvent *event)
|
||||
{
|
||||
if (watched == this) {
|
||||
switch (event->type()) {
|
||||
case QEvent::GraphicsSceneHoverEnter:
|
||||
//kDebug() << "got hoverenterEvent" << immutability() << " " << immutability();
|
||||
if (immutability() == Mutable) {
|
||||
QObject *pw = this;
|
||||
//This is for the rare case of applet in applet (systray)
|
||||
//if the applet is in an applet that is not a containment, don't create the handle BUG:301648
|
||||
while (pw = pw->parentWidget()) {
|
||||
if (qobject_cast<Containment *>(pw)) {
|
||||
break;
|
||||
} else if (qobject_cast<Applet *>(pw)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
QGraphicsSceneHoverEvent *he = static_cast<QGraphicsSceneHoverEvent*>(event);
|
||||
if (d->handle) {
|
||||
d->handle.data()->setHoverPos(he->pos());
|
||||
} else {
|
||||
//kDebug() << "generated applet handle";
|
||||
AppletHandle *handle = new AppletHandle(containment(), this, he->pos());
|
||||
|
||||
connect(this, SIGNAL(geometryChanged()),
|
||||
handle, SLOT(appletResized()));
|
||||
d->handle = handle;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case QEvent::GraphicsSceneHoverMove:
|
||||
if (d->handle && !d->handle.data()->shown() && immutability() == Mutable) {
|
||||
QGraphicsSceneHoverEvent *he = static_cast<QGraphicsSceneHoverEvent*>(event);
|
||||
d->handle.data()->setHoverPos(he->pos());
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
switch (event->type()) {
|
||||
case QEvent::GraphicsSceneMouseMove:
|
||||
case QEvent::GraphicsSceneMousePress:
|
||||
case QEvent::GraphicsSceneMouseRelease:
|
||||
{
|
||||
// don't move when the containment is not mutable,
|
||||
// in the rare case the containment doesn't exists consider it as mutable
|
||||
if ((flags() & ItemIsMovable) && d->registeredAsDragHandle.contains(watched)) {
|
||||
Containment *c = containment();
|
||||
if (!c || c->immutability() == Mutable) {
|
||||
scene()->sendEvent(this, event);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return QObject::sceneEventFilter(watched, event);
|
||||
}
|
||||
|
||||
void Applet::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
if (immutability() == Mutable && formFactor() == Plasma::Planar && (flags() & ItemIsMovable)) {
|
||||
QObject::mouseMoveEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
void Applet::focusInEvent(QFocusEvent *event)
|
||||
{
|
||||
if (!isContainment() && containment()) {
|
||||
//focusing an applet may trigger this event again, but we won't be here more than twice
|
||||
containment()->d->focusApplet(this);
|
||||
}
|
||||
|
||||
QObject::focusInEvent(event);
|
||||
}
|
||||
|
||||
void Applet::resizeEvent(QGraphicsSceneResizeEvent *event)
|
||||
{
|
||||
QObject::resizeEvent(event);
|
||||
|
||||
if (d->background) {
|
||||
d->background->resizeFrame(boundingRect().size());
|
||||
}
|
||||
|
||||
updateConstraints(Plasma::SizeConstraint);
|
||||
|
||||
d->scheduleModificationNotification();
|
||||
emit geometryChanged();
|
||||
}
|
||||
|
||||
bool Applet::isUserConfiguring() const
|
||||
{
|
||||
return KConfigDialog::exists(d->configDialogId());
|
||||
@ -1621,18 +1419,9 @@ Applet *Applet::loadPlasmoid(const QString &path, uint appletId, const QVariantL
|
||||
return 0;
|
||||
}
|
||||
|
||||
QPainterPath Applet::shape() const
|
||||
{
|
||||
if (d->script) {
|
||||
return d->script->shape();
|
||||
}
|
||||
|
||||
return QObject::shape();
|
||||
}
|
||||
|
||||
QSizeF Applet::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
|
||||
{
|
||||
QSizeF hint = QObject::sizeHint(which, constraint);
|
||||
QSizeF hint(-1, -1);
|
||||
const FormFactor ff = formFactor();
|
||||
|
||||
// in panels make sure that the contents won't exit from the panel
|
||||
@ -1704,6 +1493,8 @@ void Applet::timerEvent(QTimerEvent *event)
|
||||
|
||||
QRect Applet::screenRect() const
|
||||
{
|
||||
//TODO: port away QGV
|
||||
/*
|
||||
QGraphicsView *v = view();
|
||||
|
||||
if (v) {
|
||||
@ -1714,7 +1505,7 @@ QRect Applet::screenRect() const
|
||||
QPoint tL = v->mapToGlobal(v->mapFromScene(pos()));
|
||||
QPoint bR = v->mapToGlobal(v->mapFromScene(bottomRight));
|
||||
return QRect(QPoint(tL.x(), tL.y()), QSize(bR.x() - tL.x(), bR.y() - tL.y()));
|
||||
}
|
||||
}*/
|
||||
|
||||
//The applet doesn't have a view on it.
|
||||
//So a screenRect isn't relevant.
|
||||
|
105
applet.h
105
applet.h
@ -22,7 +22,7 @@
|
||||
#ifndef PLASMA_APPLET_H
|
||||
#define PLASMA_APPLET_H
|
||||
|
||||
#include <QGraphicsItem>
|
||||
#include <QObject>
|
||||
#include <QGraphicsWidget>
|
||||
#include <QIcon>
|
||||
|
||||
@ -173,14 +173,6 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
**/
|
||||
Package package() const;
|
||||
|
||||
/**
|
||||
* Returns the view this widget is visible on, or 0 if none can be found.
|
||||
* @warning do NOT assume this will always return a view!
|
||||
* a null view probably means that either plasma isn't finished loading, or your applet is
|
||||
* on an activity that's not being shown anywhere.
|
||||
*/
|
||||
QGraphicsView *view() const;
|
||||
|
||||
/**
|
||||
* Maps a QRect from a view's coordinates to local coordinates.
|
||||
* @param view the view from which rect should be mapped
|
||||
@ -340,18 +332,6 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
*/
|
||||
static QString category(const QString &appletName);
|
||||
|
||||
/**
|
||||
* This method is called when the interface should be painted.
|
||||
*
|
||||
* @param painter the QPainter to use to do the paintiner
|
||||
* @param option the style options object
|
||||
* @param contentsRect the rect to paint within; automatically adjusted for
|
||||
* the background, if any
|
||||
**/
|
||||
virtual void paintInterface(QPainter *painter,
|
||||
const QStyleOptionGraphicsItem *option,
|
||||
const QRect &contentsRect);
|
||||
|
||||
/**
|
||||
* Returns the user-visible name for the applet, as specified in the
|
||||
* .desktop file.
|
||||
@ -468,7 +448,7 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
QRect screenRect() const;
|
||||
|
||||
/**
|
||||
* Reimplemented from QGraphicsItem
|
||||
* Reimplemented from QObject
|
||||
**/
|
||||
int type() const;
|
||||
enum {
|
||||
@ -511,25 +491,25 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
virtual void removeAssociatedWidget(QWidget *widget);
|
||||
|
||||
/**
|
||||
* @param parent the QGraphicsItem this applet is parented to
|
||||
* @param parent the QObject this applet is parented to
|
||||
* @param serviceId the name of the .desktop file containing the
|
||||
* information about the widget
|
||||
* @param appletId a unique id used to differentiate between multiple
|
||||
* instances of the same Applet type
|
||||
*/
|
||||
explicit Applet(QGraphicsItem *parent = 0, const QString &serviceId = QString(), uint appletId = 0);
|
||||
explicit Applet(QObject *parent = 0, const QString &serviceId = QString(), uint appletId = 0);
|
||||
|
||||
/**
|
||||
* @param parent the QGraphicsItem this applet is parented to
|
||||
* @param parent the QObject this applet is parented to
|
||||
* @param info the plugin information object for this Applet
|
||||
* @param appletId a unique id used to differentiate between multiple
|
||||
* instances of the same Applet type
|
||||
* @since 4.6
|
||||
*/
|
||||
explicit Applet(const KPluginInfo &info, QGraphicsItem *parent = 0, uint appletId = 0);
|
||||
explicit Applet(const KPluginInfo &info, QObject *parent = 0, uint appletId = 0);
|
||||
|
||||
/**
|
||||
* @param parent the QGraphicsItem this applet is parented to
|
||||
* @param parent the QObject this applet is parented to
|
||||
* @param serviceId the name of the .desktop file containing the
|
||||
* information about the widget
|
||||
* @param appletId a unique id used to differentiate between multiple
|
||||
@ -538,7 +518,7 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
* and the applet id
|
||||
* @since 4.3
|
||||
*/
|
||||
explicit Applet(QGraphicsItem *parent, const QString &serviceId, uint appletId, const QVariantList &args);
|
||||
explicit Applet(QObject *parent, const QString &serviceId, uint appletId, const QVariantList &args);
|
||||
|
||||
|
||||
/**
|
||||
@ -685,6 +665,8 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
*/
|
||||
void immutabilityChanged(Plasma::ImmutabilityType immutable);
|
||||
|
||||
void geometryChanged();
|
||||
|
||||
public Q_SLOTS:
|
||||
/**
|
||||
* Sets the immutability type for this applet (not immutable,
|
||||
@ -812,10 +794,21 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
bool hasFocus() const;
|
||||
void setFocus(Qt::FocusReason);
|
||||
|
||||
void resize(const QSizeF &size);
|
||||
//Geometry functions: FIXME: to remove?
|
||||
QSizeF size() const;
|
||||
QRectF geometry() const;
|
||||
void setGeometry(const QRect &geom);
|
||||
void setGeometry(const QRectF &rect);
|
||||
QRectF boundingRect() const;
|
||||
void resize(const QSizeF &size);
|
||||
int zValue() const;
|
||||
void setZValue(int val);
|
||||
QTransform transform() const;
|
||||
void setTransform(const QTransform &transform);
|
||||
QPointF pos() const;
|
||||
void setPos(const QPointF &pos);
|
||||
void setPos(int x, int y);
|
||||
QSizePolicy sizePolicy() const;
|
||||
void setSizePolicy(const QSizePolicy &policy);
|
||||
|
||||
protected:
|
||||
/**
|
||||
@ -915,55 +908,6 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
*/
|
||||
virtual void constraintsEvent(Plasma::Constraints constraints);
|
||||
|
||||
/**
|
||||
* Register the widgets that manage mouse clicks but you still want
|
||||
* to be able to drag the applet around when holding the mouse pointer
|
||||
* on that widget.
|
||||
*
|
||||
* Calling this results in an eventFilter being places on the widget.
|
||||
*
|
||||
* @param item the item to watch for mouse move
|
||||
*/
|
||||
void registerAsDragHandle(QGraphicsItem *item);
|
||||
|
||||
/**
|
||||
* Unregister a widget registered with registerAsDragHandle.
|
||||
*
|
||||
* @param item the item to unregister
|
||||
*/
|
||||
void unregisterAsDragHandle(QGraphicsItem *item);
|
||||
|
||||
/**
|
||||
* @param item the item to look for if it is registered or not
|
||||
* @return true if it is registered, false otherwise
|
||||
*/
|
||||
bool isRegisteredAsDragHandle(QGraphicsItem *item);
|
||||
|
||||
/**
|
||||
* @internal scene event filter; used to manage applet dragging
|
||||
*/
|
||||
bool sceneEventFilter(QGraphicsItem *watched, QEvent *event);
|
||||
|
||||
/**
|
||||
* @internal manage the mouse movement to drag the applet around
|
||||
*/
|
||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
||||
|
||||
/**
|
||||
* Reimplemented from QGraphicsItem
|
||||
*/
|
||||
void focusInEvent(QFocusEvent *event);
|
||||
|
||||
/**
|
||||
* Reimplemented from QGraphicsItem
|
||||
*/
|
||||
void resizeEvent(QGraphicsSceneResizeEvent *event);
|
||||
|
||||
/**
|
||||
* Reimplemented from QGraphicsItem
|
||||
*/
|
||||
QPainterPath shape() const;
|
||||
|
||||
/**
|
||||
* Reimplemented from QGraphicsLayoutItem
|
||||
*/
|
||||
@ -998,7 +942,6 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
|
||||
Q_PRIVATE_SLOT(d, void cleanUpAndDelete())
|
||||
Q_PRIVATE_SLOT(d, void selectItemToDestroy())
|
||||
Q_PRIVATE_SLOT(d, void updateRect(const QRectF& rect))
|
||||
Q_PRIVATE_SLOT(d, void configDialogFinished())
|
||||
Q_PRIVATE_SLOT(d, void updateShortcuts())
|
||||
Q_PRIVATE_SLOT(d, void publishCheckboxStateChanged(int state))
|
||||
@ -1006,7 +949,7 @@ class PLASMA_EXPORT Applet : public QObject
|
||||
Q_PRIVATE_SLOT(d, void propagateConfigChanged())
|
||||
|
||||
/**
|
||||
* Reimplemented from QGraphicsItem
|
||||
* Reimplemented from QObject
|
||||
**/
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
|
||||
|
||||
|
267
containment.cpp
267
containment.cpp
@ -52,7 +52,6 @@
|
||||
#include "kio/scheduler.h"
|
||||
#endif
|
||||
|
||||
#include "abstracttoolbox.h"
|
||||
#include "animator.h"
|
||||
#include "containmentactions.h"
|
||||
#include "containmentactionspluginsconfig.h"
|
||||
@ -97,7 +96,7 @@ Containment::StyleOption::StyleOption(const QStyleOptionGraphicsItem &other)
|
||||
type = Type;
|
||||
}
|
||||
|
||||
Containment::Containment(QGraphicsItem *parent,
|
||||
Containment::Containment(QObject *parent,
|
||||
const QString &serviceId,
|
||||
uint containmentId)
|
||||
: Applet(parent, serviceId, containmentId),
|
||||
@ -148,11 +147,7 @@ void Containment::init()
|
||||
return;
|
||||
}
|
||||
|
||||
setCacheMode(NoCache);
|
||||
setFlag(QGraphicsItem::ItemIsMovable, false);
|
||||
setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
|
||||
setAcceptDrops(true);
|
||||
setAcceptsHoverEvents(true);
|
||||
|
||||
if (d->type == NoContainmentType) {
|
||||
setContainmentType(DesktopContainment);
|
||||
@ -273,10 +268,7 @@ void Containment::restore(KConfigGroup &group)
|
||||
|
||||
|
||||
resize(geo.size());
|
||||
//are we an offscreen containment?
|
||||
if (containmentType() != PanelContainment && containmentType() != CustomPanelContainment && geo.right() < 0) {
|
||||
corona()->addOffscreenWidget(this);
|
||||
}
|
||||
//FIXME: unbreak containments just for dashboard
|
||||
|
||||
setLocation((Plasma::Location)group.readEntry("location", (int)d->location));
|
||||
setFormFactor((Plasma::FormFactor)group.readEntry("formfactor", (int)d->formFactor));
|
||||
@ -293,10 +285,6 @@ void Containment::restore(KConfigGroup &group)
|
||||
setWallpaper(group.readEntry("wallpaperplugin", ContainmentPrivate::defaultWallpaper),
|
||||
group.readEntry("wallpaperpluginmode", ContainmentPrivate::defaultWallpaperMode));
|
||||
|
||||
if (d->toolBox) {
|
||||
d->toolBox.data()->restore(group);
|
||||
}
|
||||
|
||||
KConfigGroup cfg;
|
||||
if (containmentType() == PanelContainment || containmentType() == CustomPanelContainment) {
|
||||
//don't let global desktop actions conflict with panels
|
||||
@ -383,10 +371,6 @@ void Containment::save(KConfigGroup &g) const
|
||||
group.writeEntry("location", (int)d->location);
|
||||
group.writeEntry("activityId", d->activityId);
|
||||
|
||||
if (d->toolBox) {
|
||||
d->toolBox.data()->save(group);
|
||||
}
|
||||
|
||||
|
||||
if (d->wallpaper) {
|
||||
group.writeEntry("wallpaperplugin", d->wallpaper->pluginName());
|
||||
@ -450,86 +434,13 @@ void Containment::setContainmentType(Containment::Type type)
|
||||
return;
|
||||
}
|
||||
|
||||
delete d->toolBox.data();
|
||||
d->type = type;
|
||||
d->checkContainmentFurniture();
|
||||
}
|
||||
|
||||
Corona *Containment::corona() const
|
||||
{
|
||||
return qobject_cast<Corona*>(scene());
|
||||
}
|
||||
|
||||
void Containment::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
event->ignore();
|
||||
if (d->wallpaper && d->wallpaper->isInitialized()) {
|
||||
QGraphicsItem *item = scene()->itemAt(event->scenePos());
|
||||
if (item == this) {
|
||||
d->wallpaper->mouseMoveEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
if (!event->isAccepted()) {
|
||||
event->accept();
|
||||
Applet::mouseMoveEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
void Containment::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
//close a toolbox if exists, to emulate qmenu behavior
|
||||
if (d->toolBox) {
|
||||
d->toolBox.data()->setShowing(false);
|
||||
}
|
||||
event->ignore();
|
||||
if (d->appletAt(event->scenePos())) {
|
||||
return; //no unexpected click-throughs
|
||||
}
|
||||
|
||||
if (d->wallpaper && d->wallpaper->isInitialized() && !event->isAccepted()) {
|
||||
d->wallpaper->mousePressEvent(event);
|
||||
}
|
||||
|
||||
if (event->isAccepted()) {
|
||||
setFocus(Qt::MouseFocusReason);
|
||||
} else if (event->button() == Qt::RightButton && event->modifiers() == Qt::NoModifier) {
|
||||
// we'll catch this in the context menu even
|
||||
Applet::mousePressEvent(event);
|
||||
} else {
|
||||
QString trigger = ContainmentActions::eventToString(event);
|
||||
if (d->prepareContainmentActions(trigger, event->screenPos())) {
|
||||
d->actionPlugins()->value(trigger)->contextEvent(event);
|
||||
}
|
||||
|
||||
if (!event->isAccepted()) {
|
||||
Applet::mousePressEvent(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Containment::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
event->ignore();
|
||||
|
||||
if (d->appletAt(event->scenePos())) {
|
||||
return; //no unexpected click-throughs
|
||||
}
|
||||
|
||||
QString trigger = ContainmentActions::eventToString(event);
|
||||
|
||||
if (d->wallpaper && d->wallpaper->isInitialized()) {
|
||||
d->wallpaper->mouseReleaseEvent(event);
|
||||
}
|
||||
|
||||
if (!event->isAccepted() && isContainment()) {
|
||||
if (d->prepareContainmentActions(trigger, event->screenPos())) {
|
||||
d->actionPlugins()->value(trigger)->contextEvent(event);
|
||||
}
|
||||
|
||||
event->accept();
|
||||
Applet::mouseReleaseEvent(event);
|
||||
}
|
||||
return qobject_cast<Corona*>(parent());
|
||||
}
|
||||
|
||||
void Containment::showDropZone(const QPoint pos)
|
||||
@ -543,17 +454,16 @@ void Containment::showContextMenu(const QPointF &containmentPos, const QPoint &s
|
||||
//kDebug() << containmentPos << screenPos;
|
||||
QGraphicsSceneContextMenuEvent gvevent;
|
||||
gvevent.setScreenPos(screenPos);
|
||||
gvevent.setScenePos(mapToScene(containmentPos));
|
||||
gvevent.setPos(containmentPos);
|
||||
gvevent.setReason(QGraphicsSceneContextMenuEvent::Mouse);
|
||||
gvevent.setWidget(view());
|
||||
//FIXME: do we need views here?
|
||||
//gvevent.setWidget(view());
|
||||
contextMenuEvent(&gvevent);
|
||||
}
|
||||
|
||||
void Containment::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
|
||||
{
|
||||
if (!isContainment() || !KAuthorized::authorizeKAction("plasma/containment_context_menu")) {
|
||||
Applet::contextMenuEvent(event);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -597,8 +507,6 @@ void Containment::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
|
||||
|
||||
menu->exec(pos);
|
||||
event->accept();
|
||||
} else {
|
||||
Applet::contextMenuEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
@ -611,10 +519,6 @@ void Containment::setFormFactor(FormFactor formFactor)
|
||||
//kDebug() << "switching FF to " << formFactor;
|
||||
d->formFactor = formFactor;
|
||||
|
||||
if (d->toolBox) {
|
||||
d->toolBox.data()->reposition();
|
||||
}
|
||||
|
||||
updateConstraints(Plasma::FormFactorConstraint);
|
||||
|
||||
KConfigGroup c = config();
|
||||
@ -714,7 +618,6 @@ void Containment::addApplet(Applet *applet, const QPointF &pos, bool delayInit)
|
||||
disconnect(applet, 0, currentContainment, 0);
|
||||
KConfigGroup oldConfig = applet->config();
|
||||
currentContainment->d->applets.removeAll(applet);
|
||||
applet->setParentItem(this);
|
||||
applet->setParent(this);
|
||||
|
||||
// now move the old config to the new location
|
||||
@ -725,7 +628,6 @@ void Containment::addApplet(Applet *applet, const QPointF &pos, bool delayInit)
|
||||
|
||||
disconnect(applet, SIGNAL(activate()), currentContainment, SIGNAL(activate()));
|
||||
} else {
|
||||
applet->setParentItem(this);
|
||||
applet->setParent(this);
|
||||
}
|
||||
|
||||
@ -748,7 +650,6 @@ void Containment::addApplet(Applet *applet, const QPointF &pos, bool delayInit)
|
||||
d->appletAppeared(applet);
|
||||
}
|
||||
|
||||
applet->setFlag(QGraphicsItem::ItemIsMovable, true);
|
||||
applet->updateConstraints(Plasma::AllConstraints);
|
||||
if (!delayInit) {
|
||||
applet->flushPendingConstraintsEvents();
|
||||
@ -863,112 +764,16 @@ QStringList Containment::listContainmentTypes()
|
||||
return types.toList();
|
||||
}
|
||||
|
||||
void Containment::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
|
||||
{
|
||||
//kDebug() << immutability() << Mutable << (immutability() == Mutable);
|
||||
event->setAccepted(immutability() == Mutable &&
|
||||
(event->mimeData()->hasFormat(static_cast<Corona*>(scene())->appletMimeType()) ||
|
||||
event->mimeData()->hasUrls()));
|
||||
|
||||
if (!event->isAccepted()) {
|
||||
// check to see if we have an applet that accepts the format.
|
||||
QStringList formats = event->mimeData()->formats();
|
||||
|
||||
foreach (const QString &format, formats) {
|
||||
KPluginInfo::List appletList = Applet::listAppletInfoForMimeType(format);
|
||||
if (!appletList.isEmpty()) {
|
||||
event->setAccepted(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!event->isAccepted()) {
|
||||
foreach (const QString &format, formats) {
|
||||
KPluginInfo::List wallpaperList = Wallpaper::listWallpaperInfoForMimeType(format);
|
||||
if (!wallpaperList.isEmpty()) {
|
||||
event->setAccepted(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (event->isAccepted()) {
|
||||
if (d->dropZoneStarted) {
|
||||
showDropZone(event->pos().toPoint());
|
||||
} else {
|
||||
if (!d->showDropZoneDelayTimer) {
|
||||
d->showDropZoneDelayTimer = new QTimer(this);
|
||||
d->showDropZoneDelayTimer->setInterval(300);
|
||||
d->showDropZoneDelayTimer->setSingleShot(true);
|
||||
connect(d->showDropZoneDelayTimer, SIGNAL(timeout()), this, SLOT(showDropZoneDelayed()));
|
||||
}
|
||||
|
||||
d->dropPoints.insert(0, event->pos());
|
||||
d->showDropZoneDelayTimer->start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Containment::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
|
||||
{
|
||||
//kDebug() << event->pos() << size().height() << size().width();
|
||||
if (d->showDropZoneDelayTimer) {
|
||||
d->showDropZoneDelayTimer->stop();
|
||||
}
|
||||
|
||||
if (event->pos().y() < 1 || event->pos().y() > size().height() ||
|
||||
event->pos().x() < 1 || event->pos().x() > size().width()) {
|
||||
showDropZone(QPoint());
|
||||
d->dropZoneStarted = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Containment::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
|
||||
{
|
||||
QGraphicsItem *item = scene()->itemAt(event->scenePos());
|
||||
event->setAccepted(item == this || item == d->toolBox.data() || !item);
|
||||
//kDebug() << event->isAccepted() << d->showDropZoneDelayTimer->isActive();
|
||||
if (!event->isAccepted()) {
|
||||
if (d->showDropZoneDelayTimer) {
|
||||
d->showDropZoneDelayTimer->stop();
|
||||
}
|
||||
} else if (!d->showDropZoneDelayTimer->isActive() && immutability() == Plasma::Mutable) {
|
||||
showDropZone(event->pos().toPoint());
|
||||
}
|
||||
}
|
||||
|
||||
void Containment::dropEvent(QGraphicsSceneDragDropEvent *event)
|
||||
{
|
||||
if (isContainment()) {
|
||||
d->dropData(event->scenePos(), event->screenPos(), event);
|
||||
} else {
|
||||
Applet::dropEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
void Containment::setToolBox(AbstractToolBox *toolBox)
|
||||
{
|
||||
if (d->toolBox.data()) {
|
||||
d->toolBox.data()->deleteLater();
|
||||
}
|
||||
d->toolBox = toolBox;
|
||||
}
|
||||
|
||||
AbstractToolBox *Containment::toolBox() const
|
||||
{
|
||||
return d->toolBox.data();
|
||||
}
|
||||
|
||||
void Containment::resizeEvent(QGraphicsSceneResizeEvent *event)
|
||||
{
|
||||
Applet::resizeEvent(event);
|
||||
|
||||
if (isContainment()) {
|
||||
if (corona()) {
|
||||
corona()->layoutContainments();
|
||||
}
|
||||
|
||||
if (d->wallpaper) {
|
||||
d->wallpaper->setBoundingRect(QRectF(QPointF(0, 0), size()));
|
||||
}
|
||||
@ -997,14 +802,11 @@ void Containment::wheelEvent(QGraphicsSceneWheelEvent *event)
|
||||
}
|
||||
|
||||
if (d->wallpaper && d->wallpaper->isInitialized()) {
|
||||
QGraphicsItem *item = scene()->itemAt(event->scenePos());
|
||||
if (item == this) {
|
||||
event->ignore();
|
||||
d->wallpaper->wheelEvent(event);
|
||||
event->ignore();
|
||||
d->wallpaper->wheelEvent(event);
|
||||
|
||||
if (event->isAccepted()) {
|
||||
return;
|
||||
}
|
||||
if (event->isAccepted()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1013,9 +815,6 @@ void Containment::wheelEvent(QGraphicsSceneWheelEvent *event)
|
||||
if (d->prepareContainmentActions(trigger, event->screenPos())) {
|
||||
d->actionPlugins()->value(trigger)->contextEvent(event);
|
||||
event->accept();
|
||||
} else {
|
||||
event->ignore();
|
||||
Applet::wheelEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1030,47 +829,12 @@ void Containment::enableAction(const QString &name, bool enable)
|
||||
|
||||
void Containment::addToolBoxAction(QAction *action)
|
||||
{
|
||||
d->createToolBox();
|
||||
if (d->toolBox) {
|
||||
d->toolBox.data()->addTool(action);
|
||||
}
|
||||
d->toolBoxActions << action;
|
||||
}
|
||||
|
||||
void Containment::removeToolBoxAction(QAction *action)
|
||||
{
|
||||
if (d->toolBox) {
|
||||
d->toolBox.data()->removeTool(action);
|
||||
}
|
||||
}
|
||||
|
||||
void Containment::setToolBoxOpen(bool open)
|
||||
{
|
||||
if (open) {
|
||||
openToolBox();
|
||||
} else {
|
||||
closeToolBox();
|
||||
}
|
||||
}
|
||||
|
||||
bool Containment::isToolBoxOpen() const
|
||||
{
|
||||
return (d->toolBox && d->toolBox.data()->isShowing());
|
||||
}
|
||||
|
||||
void Containment::openToolBox()
|
||||
{
|
||||
if (d->toolBox && !d->toolBox.data()->isShowing()) {
|
||||
d->toolBox.data()->setShowing(true);
|
||||
emit toolBoxVisibilityChanged(true);
|
||||
}
|
||||
}
|
||||
|
||||
void Containment::closeToolBox()
|
||||
{
|
||||
if (d->toolBox && d->toolBox.data()->isShowing()) {
|
||||
d->toolBox.data()->setShowing(false);
|
||||
emit toolBoxVisibilityChanged(false);
|
||||
}
|
||||
d->toolBoxActions.removeAll(action);
|
||||
}
|
||||
|
||||
void Containment::addAssociatedWidget(QWidget *widget)
|
||||
@ -1163,8 +927,6 @@ void Containment::setWallpaper(const QString &pluginName, const QString &mode)
|
||||
cfg.writeEntry("wallpaperpluginmode", mode);
|
||||
}
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
if (!d->wallpaper) {
|
||||
@ -1253,10 +1015,6 @@ void Containment::setActivity(const QString &activityId)
|
||||
KConfigGroup c = config();
|
||||
c.writeEntry("activityId", activityId);
|
||||
|
||||
if (d->toolBox) {
|
||||
d->toolBox.data()->update();
|
||||
}
|
||||
|
||||
emit configNeedsSaving();
|
||||
}
|
||||
|
||||
@ -1316,7 +1074,8 @@ void Containment::destroy(bool confirm)
|
||||
const QString title = i18nc("@title:window %1 is the name of the containment", "Remove %1", name());
|
||||
KGuiItem remove = KStandardGuiItem::remove();
|
||||
remove.setText(title);
|
||||
if (KMessageBox::warningContinueCancel(view(),
|
||||
//FIXME: make the view accessible?
|
||||
if (KMessageBox::warningContinueCancel(0/*view()*/,
|
||||
i18nc("%1 is the name of the containment", "Do you really want to remove this %1?", name()),
|
||||
title, remove) != KMessageBox::Continue) {
|
||||
return;
|
||||
|
@ -22,7 +22,7 @@
|
||||
#ifndef PLASMA_CONTAINMENT_H
|
||||
#define PLASMA_CONTAINMENT_H
|
||||
|
||||
#include <QGraphicsItem>
|
||||
#include <QObject>
|
||||
#include <QWidget>
|
||||
#include <QStyleOptionGraphicsItem>
|
||||
|
||||
@ -104,14 +104,24 @@ class PLASMA_EXPORT Containment : public Applet
|
||||
CustomPanelContainment = 128 /**< A customized desktop panel */
|
||||
};
|
||||
|
||||
enum ToolType {
|
||||
AddTool = 0,
|
||||
ConfigureTool = 100,
|
||||
ControlTool = 200,
|
||||
MiscTool = 300,
|
||||
DestructiveTool = 400,
|
||||
UserToolType = DestructiveTool + 1000
|
||||
};
|
||||
Q_ENUMS(ToolType)
|
||||
|
||||
/**
|
||||
* @param parent the QGraphicsItem this applet is parented to
|
||||
* @param parent the QObject this applet is parented to
|
||||
* @param serviceId the name of the .desktop file containing the
|
||||
* information about the widget
|
||||
* @param containmentId a unique id used to differentiate between multiple
|
||||
* instances of the same Applet type
|
||||
*/
|
||||
explicit Containment(QGraphicsItem *parent = 0,
|
||||
explicit Containment(QObject *parent = 0,
|
||||
const QString &serviceId = QString(),
|
||||
uint containmentId = 0);
|
||||
|
||||
@ -299,29 +309,6 @@ class PLASMA_EXPORT Containment : public Applet
|
||||
*/
|
||||
void removeToolBoxAction(QAction *action);
|
||||
|
||||
/**
|
||||
* Sets the open or closed state of the Containment's toolbox
|
||||
*
|
||||
* @param open true to open the ToolBox, false to close it
|
||||
*/
|
||||
void setToolBoxOpen(bool open);
|
||||
|
||||
/**
|
||||
* @return true if the toolbox is open
|
||||
* @since 4.5
|
||||
*/
|
||||
bool isToolBoxOpen() const;
|
||||
|
||||
/**
|
||||
* Open the Containment's toolbox
|
||||
*/
|
||||
void openToolBox();
|
||||
|
||||
/**
|
||||
* Closes Containment's toolbox
|
||||
*/
|
||||
void closeToolBox();
|
||||
|
||||
/**
|
||||
* associate actions with this widget, including ones added after this call.
|
||||
* needed to make keyboard shortcuts work.
|
||||
@ -545,31 +532,10 @@ Q_SIGNALS:
|
||||
*/
|
||||
virtual void restoreContents(KConfigGroup &group);
|
||||
|
||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
|
||||
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
|
||||
void keyPressEvent(QKeyEvent *event);
|
||||
void wheelEvent(QGraphicsSceneWheelEvent *event);
|
||||
|
||||
/**
|
||||
* @reimp
|
||||
* @sa QGraphicsItem::dragEnterEvent()
|
||||
*/
|
||||
void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
|
||||
|
||||
/**
|
||||
* @reimp
|
||||
* @sa QGraphicsItem::dragLeaveEvent()
|
||||
*/
|
||||
void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
|
||||
|
||||
/**
|
||||
* @reimp
|
||||
* @sa QGraphicsItem::dragMoveEvent()
|
||||
*/
|
||||
void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
|
||||
|
||||
/**
|
||||
* @reimp
|
||||
* @sa QGraphicsItem::dropEvent()
|
||||
@ -578,25 +544,15 @@ Q_SIGNALS:
|
||||
|
||||
/**
|
||||
* @reimp
|
||||
* @sa QGraphicsItem::resizeEvent()
|
||||
* @sa QObject::resizeEvent()
|
||||
*/
|
||||
void resizeEvent(QGraphicsSceneResizeEvent *event);
|
||||
|
||||
/**
|
||||
* Sets a custom ToolBox
|
||||
* if there was an old one it will be deleted
|
||||
* and the new one won't have any actions in it
|
||||
*
|
||||
* @param item the new toolbox item
|
||||
* @since 4.4
|
||||
*/
|
||||
void setToolBox(AbstractToolBox *toolBox);
|
||||
|
||||
/**
|
||||
* @return the ToolBox
|
||||
* @since 4.4
|
||||
*/
|
||||
AbstractToolBox *toolBox() const;
|
||||
//FIXME: kill those
|
||||
QSizeF maximumSize() const;
|
||||
void setMaximumSize(QSizeF size);
|
||||
QSizeF minimumSize() const;
|
||||
void setMinimumSize(QSizeF size);
|
||||
|
||||
private:
|
||||
/**
|
||||
@ -611,9 +567,7 @@ Q_SIGNALS:
|
||||
|
||||
Q_PRIVATE_SLOT(d, void appletDeleted(Plasma::Applet*))
|
||||
Q_PRIVATE_SLOT(d, void triggerShowAddWidgets())
|
||||
Q_PRIVATE_SLOT(d, void positionToolBox())
|
||||
Q_PRIVATE_SLOT(d, void requestConfiguration())
|
||||
Q_PRIVATE_SLOT(d, void updateToolBoxVisibility())
|
||||
Q_PRIVATE_SLOT(d, void showDropZoneDelayed())
|
||||
Q_PRIVATE_SLOT(d, void checkStatus(Plasma::ItemStatus))
|
||||
Q_PRIVATE_SLOT(d, void remoteAppletReady(Plasma::AccessAppletJob *))
|
||||
|
@ -329,9 +329,10 @@ QRegion Corona::availableScreenRegion(int id) const
|
||||
return QRegion(screenGeometry(id));
|
||||
}
|
||||
|
||||
QPoint Corona::popupPosition(const QGraphicsItem *item, const QSize &s, Qt::AlignmentFlag alignment)
|
||||
QPoint Corona::popupPosition(const QObject *item, const QSize &s, Qt::AlignmentFlag alignment)
|
||||
{
|
||||
const QGraphicsItem *actualItem = item;
|
||||
//FIXME: this is a stub
|
||||
const QGraphicsItem *actualItem = static_cast<QGraphicsItem>(item);
|
||||
const QGraphicsView *v = viewFor(item);
|
||||
|
||||
if (!v) {
|
||||
|
2
corona.h
2
corona.h
@ -202,7 +202,7 @@ public:
|
||||
* @param alignment alignment of the popup, valid flags are Qt::AlignLeft, Qt::AlignRight and Qt::AlignCenter
|
||||
* @returns reccomended position
|
||||
*/
|
||||
QPoint popupPosition(const QGraphicsItem *item, const QSize &size, Qt::AlignmentFlag alignment = Qt::AlignCenter);
|
||||
QPoint popupPosition(const QObject *item, const QSize &size, Qt::AlignmentFlag alignment = Qt::AlignCenter);
|
||||
|
||||
/**
|
||||
* This method is useful in order to retrieve the list of available
|
||||
|
@ -44,7 +44,6 @@
|
||||
#include "kio/scheduler.h"
|
||||
#endif
|
||||
|
||||
#include "abstracttoolbox.h"
|
||||
#include "containmentactions.h"
|
||||
#include "containmentactionspluginsconfig.h"
|
||||
#include "corona.h"
|
||||
@ -94,19 +93,19 @@ void ContainmentPrivate::addDefaultActions(KActionCollection *actions, Containme
|
||||
appletBrowserAction->setText(i18n("Add Widgets..."));
|
||||
appletBrowserAction->setIcon(KDE::icon("list-add"));
|
||||
appletBrowserAction->setShortcut(KShortcut("alt+d, a"));
|
||||
appletBrowserAction->setData(AbstractToolBox::AddTool);
|
||||
appletBrowserAction->setData(Containment::AddTool);
|
||||
|
||||
KAction *action = actions->addAction("next applet");
|
||||
action->setText(i18n("Next Widget"));
|
||||
//no icon
|
||||
action->setShortcut(KShortcut("alt+d, n"));
|
||||
action->setData(AbstractToolBox::ControlTool);
|
||||
action->setData(Containment::ControlTool);
|
||||
|
||||
action = actions->addAction("previous applet");
|
||||
action->setText(i18n("Previous Widget"));
|
||||
//no icon
|
||||
action->setShortcut(KShortcut("alt+d, p"));
|
||||
action->setData(AbstractToolBox::ControlTool);
|
||||
action->setData(Containment::ControlTool);
|
||||
}
|
||||
|
||||
void ContainmentPrivate::initApplets()
|
||||
@ -134,7 +133,6 @@ void ContainmentPrivate::checkContainmentFurniture()
|
||||
{
|
||||
if (q->isContainment() &&
|
||||
(type == Containment::DesktopContainment || type == Containment::PanelContainment)) {
|
||||
createToolBox();
|
||||
}
|
||||
}
|
||||
|
||||
@ -282,15 +280,6 @@ void ContainmentPrivate::setScreen(int newScreen, int newDesktop, bool preventIn
|
||||
const bool isDesktopContainment = type == Containment::DesktopContainment ||
|
||||
type == Containment::CustomContainment;
|
||||
if (isDesktopContainment) {
|
||||
// we want to listen to changes in work area if our screen changes
|
||||
if (toolBox) {
|
||||
if (screen < 0 && newScreen > -1) {
|
||||
QObject::connect(KWindowSystem::self(), SIGNAL(workAreaChanged()), toolBox.data(), SLOT(reposition()), Qt::UniqueConnection);
|
||||
} else if (newScreen < 0) {
|
||||
QObject::disconnect(KWindowSystem::self(), SIGNAL(workAreaChanged()), toolBox.data(), SLOT(reposition()));
|
||||
}
|
||||
}
|
||||
|
||||
if (newScreen > -1) {
|
||||
// sanity check to make sure someone else doesn't have this screen already!
|
||||
Containment *currently = corona->containmentForScreen(newScreen, newDesktop);
|
||||
@ -801,32 +790,6 @@ void ContainmentPrivate::checkStatus(Plasma::ItemStatus appletStatus)
|
||||
q->setStatus(appletStatus);
|
||||
}
|
||||
|
||||
void ContainmentPrivate::createToolBox()
|
||||
{
|
||||
if (!toolBox && KAuthorized::authorizeKAction("plasma/containment_context_menu")) {
|
||||
toolBox = Plasma::AbstractToolBox::load(q->corona()->preferredToolBoxPlugin(type), QVariantList(), q);
|
||||
|
||||
if (toolBox) {
|
||||
QObject::connect(toolBox.data(), SIGNAL(toggled()), q, SIGNAL(toolBoxToggled()));
|
||||
QObject::connect(toolBox.data(), SIGNAL(toggled()), q, SLOT(updateToolBoxVisibility()));
|
||||
|
||||
positionToolBox();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ContainmentPrivate::positionToolBox()
|
||||
{
|
||||
if (toolBox) {
|
||||
toolBox.data()->reposition();
|
||||
}
|
||||
}
|
||||
|
||||
void ContainmentPrivate::updateToolBoxVisibility()
|
||||
{
|
||||
emit q->toolBoxVisibilityChanged(toolBox.data()->isShowing());
|
||||
}
|
||||
|
||||
void ContainmentPrivate::triggerShowAddWidgets()
|
||||
{
|
||||
emit q->showAddWidgetsInterface(QPointF());
|
||||
@ -869,14 +832,6 @@ void ContainmentPrivate::containmentConstraintsEvent(Plasma::Constraints constra
|
||||
}
|
||||
}
|
||||
|
||||
if (toolBox && (constraints & Plasma::SizeConstraint ||
|
||||
constraints & Plasma::FormFactorConstraint ||
|
||||
constraints & Plasma::ScreenConstraint ||
|
||||
constraints & Plasma::StartupCompletedConstraint)) {
|
||||
//kDebug() << "Positioning toolbox";
|
||||
positionToolBox();
|
||||
}
|
||||
|
||||
if (constraints & Plasma::StartupCompletedConstraint && type < Containment::CustomContainment) {
|
||||
q->addToolBoxAction(q->action("remove"));
|
||||
checkRemoveAction();
|
||||
@ -897,15 +852,7 @@ Applet *ContainmentPrivate::addApplet(const QString &name, const QVariantList &a
|
||||
return 0;
|
||||
}
|
||||
|
||||
QGraphicsView *v = q->view();
|
||||
if (v) {
|
||||
v->setCursor(Qt::BusyCursor);
|
||||
}
|
||||
|
||||
Applet *applet = PluginLoader::self()->loadApplet(name, id, args);
|
||||
if (v) {
|
||||
v->unsetCursor();
|
||||
}
|
||||
|
||||
if (!applet) {
|
||||
#ifndef NDEBUG
|
||||
|
@ -21,6 +21,7 @@
|
||||
#ifndef CONTAINMENT_P_H
|
||||
#define CONTAINMENT_P_H
|
||||
|
||||
#include <kactioncollection.h>
|
||||
#include <kmenu.h>
|
||||
|
||||
#include "plasma.h"
|
||||
@ -28,7 +29,6 @@
|
||||
#include "corona.h"
|
||||
|
||||
static const int INTER_CONTAINMENT_MARGIN = 6;
|
||||
static const int TOOLBOX_MARGIN = 150;
|
||||
static const int CONTAINMENT_COLUMNS = 2;
|
||||
static const int VERTICAL_STACKING_OFFSET = 10000;
|
||||
|
||||
@ -44,7 +44,6 @@ namespace Plasma
|
||||
|
||||
class AccessAppletJob;
|
||||
class Containment;
|
||||
class AbstractToolBox;
|
||||
|
||||
class ContainmentPrivate
|
||||
{
|
||||
@ -79,9 +78,6 @@ public:
|
||||
dropMenus.clear();
|
||||
}
|
||||
|
||||
void createToolBox();
|
||||
void positionToolBox();
|
||||
void updateToolBoxVisibility();
|
||||
void triggerShowAddWidgets();
|
||||
void requestConfiguration();
|
||||
void checkStatus(Plasma::ItemStatus status);
|
||||
@ -168,7 +164,7 @@ public:
|
||||
int lastScreen;
|
||||
int desktop;
|
||||
int lastDesktop;
|
||||
QWeakPointer<AbstractToolBox> toolBox;
|
||||
QList<QAction *> toolBoxActions;
|
||||
QString activityId;
|
||||
Containment::Type type;
|
||||
QHash<KJob*, QPointF> dropPoints;
|
||||
|
@ -146,28 +146,6 @@ void AppletScript::showMessage(const QIcon &icon, const QString &message, const
|
||||
}
|
||||
}
|
||||
|
||||
void AppletScript::registerAsDragHandle(QGraphicsItem *item)
|
||||
{
|
||||
if (applet()) {
|
||||
applet()->registerAsDragHandle(item);
|
||||
}
|
||||
}
|
||||
|
||||
void AppletScript::unregisterAsDragHandle(QGraphicsItem *item)
|
||||
{
|
||||
if (applet()) {
|
||||
applet()->unregisterAsDragHandle(item);
|
||||
}
|
||||
}
|
||||
|
||||
bool AppletScript::isRegisteredAsDragHandle(QGraphicsItem *item)
|
||||
{
|
||||
if (applet()) {
|
||||
return applet()->isRegisteredAsDragHandle(item);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void AppletScript::configChanged()
|
||||
{
|
||||
}
|
||||
|
@ -225,21 +225,6 @@ protected:
|
||||
*/
|
||||
void showMessage(const QIcon &icon, const QString &message, const MessageButtons buttons);
|
||||
|
||||
/**
|
||||
* @see Applet
|
||||
*/
|
||||
void registerAsDragHandle(QGraphicsItem *item);
|
||||
|
||||
/**
|
||||
* @see Applet
|
||||
*/
|
||||
void unregisterAsDragHandle(QGraphicsItem *item);
|
||||
|
||||
/**
|
||||
* @see Applet
|
||||
*/
|
||||
bool isRegisteredAsDragHandle(QGraphicsItem *item);
|
||||
|
||||
private:
|
||||
friend class Applet;
|
||||
friend class PopupApplet;
|
||||
|
Loading…
Reference in New Issue
Block a user