Merge branch 'master' into mart/ToolTipArea

This commit is contained in:
Sebastian Kügler 2014-01-10 18:57:58 +01:00
commit b54b42fcc0
8 changed files with 102 additions and 27 deletions

View File

@ -46,7 +46,7 @@ find_package(Qt5 REQUIRED NO_MODULE COMPONENTS Quick X11Extras Sql UiTools Qml W
find_package(KF5 CONFIG REQUIRED IdleTime ItemModels WidgetsAddons WindowSystem Codecs Archive CoreAddons Solid ThreadWeaver GlobalAccel
Config Auth JS Wallet DBusAddons I18n GuiAddons ConfigWidgets
Service ItemViews Notifications IconThemes Completion JobWidgets Sonnet TextWidgets XmlGui Crash
Bookmarks Declarative UnitConversion Parts Kross KIO DNSSD KDE4Support)
Bookmarks Declarative UnitConversion Parts Kross KIO DNSSD)
find_package(KActivities 5.0.0 CONFIG REQUIRED)

View File

@ -1,5 +1,6 @@
[Desktop Entry]
Comment=Example applet that shows how to use Models embedded in DataEngines
Comment[de]=Miniprogramm-Beispiel, das die Anwendung von Modellen eingebettet in Datenquellen zeigt
Comment[nl]=Voorbeeld van applet dat toont hoe modellen ingebed in gegevensengines zijn te gebruiken
Comment[pt]=Uma 'applet' de exemplo que demonstra como usar os modelos incorporados em motores de dados
Comment[pt_BR]=Uma miniaplicativo de exemplo que mostra como usar os modelos integrados em mecanismos de dados

View File

@ -134,7 +134,6 @@ void DialogProxy::onVisibleChanged()
if (geometry() != screen()->availableGeometry()) {
m_cachedGeometry = geometry();
}
setPosition(screen()->availableGeometry().topLeft());
setGeometry(screen()->availableGeometry());
} else {
if (!m_cachedGeometry.isNull()) {
@ -412,8 +411,6 @@ void DialogProxy::syncBorders()
{
const QRect avail = screen()->availableGeometry();
m_frameSvgItem->setEnabledBorders(Plasma::FrameSvg::AllBorders);
int borders = Plasma::FrameSvg::AllBorders;
//Tooltips always have all the borders

View File

@ -0,0 +1,83 @@
/*
* Copyright 2014 David Edmundson <davidedmundson@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2 or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import org.kde.plasma.components 2.0 as PlasmaComponents
import QtQuick 2.0
/**
* A ModelMenu creates a context menu with items populated from a model or a QList<QAction*>
* For standard item models, actions are created using the following model role names or properties
* display - a string contains the action name
* decoration - an icon to display
* separator - boolean that will add a seperator in the list
*
*
*
* Example code:
*
* @code
* ModelMenu {
* id: menu
* visualParent: someButton
* model: myModel
* }
*
* Button {
* id: someButton
* onClicked: menu.popup()
* }
* @endcode
*/
PlasmaComponents.ContextMenu {
id: menu
/**
* The model containing menu items
*/
property alias model: repeater.model
/**
* This signal is emitted when a menu item is clicked.
* The attached model properties for that menu item are passed as an argument
*/
signal clicked(QtObject model)
//ContextMenu cannot have child items, so in order to have ContextMenu as the root object of this item
//we create a new property which contains an item which can then load the child items
property Item _children : Item {
Repeater {
id: repeater
delegate: PlasmaComponents.MenuItem {
//for QList<QAction*> Repeater adds an attached property modelData
//for QAbstractItemModel* it doesn't. Not checking causes errors
text: typeof(modelData) != "undefined" ? modelData.text : model.display
icon: typeof(modelData) != "undefined" ? modelData.icon : model.decoration
separator: typeof(modelData) != "undefined" ? modelData.separator : model.separator
onClicked: {
menu.clicked(typeof(modelData) != "undefined" ? modelData : model)
}
Component.onCompleted: {
parent = menu
}
}
}
}
}

View File

@ -13,6 +13,7 @@ Dialog 2.0 Dialog.qml
Highlight 2.0 Highlight.qml
Label 2.0 Label.qml
ListItem 2.0 ListItem.qml
ModelContextMenu 2.0 ModelContextMenu.qml
Page 2.0 Page.qml
PageStack 2.0 PageStack.qml
ProgressBar 2.0 ProgressBar.qml

View File

@ -148,7 +148,6 @@ PRIVATE
KF5::XmlGui
KF5::GlobalAccel
KF5::DNSSD
KF5::KDE4Support #ksharedptr
${PLASMA_EXTRA_LIBS}
)

View File

@ -21,21 +21,19 @@
#define PLASMA_SVG_P_H
#include <QHash>
#include <QSharedData>
#include <QSharedPointer>
#include <QSvgRenderer>
#include "ksharedptr.h"
#include <QWeakPointer>
namespace Plasma
{
class Svg;
class SharedSvgRenderer : public QSvgRenderer, public QSharedData
class SharedSvgRenderer : public QSvgRenderer
{
public:
typedef KSharedPtr<SharedSvgRenderer> Ptr;
typedef QSharedPointer<SharedSvgRenderer> Ptr;
SharedSvgRenderer(QObject *parent = 0);
SharedSvgRenderer(
const QString &filename,
@ -94,7 +92,7 @@ public:
void themeChanged();
void colorsChanged();
static QHash<QString, SharedSvgRenderer::Ptr> s_renderers;
static QHash<QString, QWeakPointer<SharedSvgRenderer> > s_renderers;
static QWeakPointer<Theme> s_systemColorsCache;
Svg *q;

View File

@ -36,7 +36,6 @@
#include <QDebug>
#include <kfilterdev.h>
#include <kiconeffect.h>
#include <ksharedptr.h>
#include "applet.h"
#include "package.h"
@ -419,17 +418,15 @@ void SvgPrivate::createRenderer()
QString styleSheet = cacheAndColorsTheme()->d->svgStyleSheet();
styleCrc = qChecksum(styleSheet.toUtf8(), styleSheet.size());
QHash<QString, SharedSvgRenderer::Ptr>::const_iterator it = s_renderers.constFind(styleCrc + path);
QHash<QString, QWeakPointer<SharedSvgRenderer> >::const_iterator it = s_renderers.constFind(styleCrc + path);
if (it != s_renderers.constEnd()) {
//qDebug() << "gots us an existing one!";
renderer = it.value();
} else {
renderer = it == s_renderers.constEnd() ? QWeakPointer<SharedSvgRenderer>() : it.value();
if (!renderer) {
if (path.isEmpty()) {
renderer = new SharedSvgRenderer();
renderer.reset(new SharedSvgRenderer());
} else {
QHash<QString, QRectF> interestingElements;
renderer = new SharedSvgRenderer(path, styleSheet, interestingElements);
renderer.reset(new SharedSvgRenderer(path, styleSheet, interestingElements));
// Add interesting elements to the theme's rect cache.
QHashIterator<QString, QRectF> i(interestingElements);
@ -455,16 +452,15 @@ void SvgPrivate::createRenderer()
void SvgPrivate::eraseRenderer()
{
if (renderer && renderer.count() == 2) {
// this and the cache reference it
s_renderers.erase(s_renderers.find(styleCrc + path));
if (theme) {
if (renderer) {
QWeakPointer<SharedSvgRenderer> guard = renderer;
renderer.reset();
if (guard.isNull() && theme) {
// no SvgPrivate instance references this anymore
theme.data()->releaseRectsCache(path);
}
}
renderer = 0;
styleCrc = 0;
localRectCache.clear();
elementsWithSizeHints.clear();
@ -646,7 +642,7 @@ void SvgPrivate::colorsChanged()
emit q->repaintNeeded();
}
QHash<QString, SharedSvgRenderer::Ptr> SvgPrivate::s_renderers;
QHash<QString, QWeakPointer<SharedSvgRenderer> > SvgPrivate::s_renderers;
QWeakPointer<Theme> SvgPrivate::s_systemColorsCache;
Svg::Svg(QObject *parent)