diff --git a/declarativeimports/core/dialog.cpp b/declarativeimports/core/dialog.cpp index 2c9af76c9..7327503cf 100644 --- a/declarativeimports/core/dialog.cpp +++ b/declarativeimports/core/dialog.cpp @@ -135,6 +135,11 @@ void DialogProxy::syncMainItem() return; } + if (static_cast(m_dialog->graphicsWidget()) == m_mainItem.data() || + (m_declarativeItemContainer && m_declarativeItemContainer->declarativeItem() == m_mainItem.data())) { + return; + } + //not have a scene? go up in the hyerarchy until we find something with a scene QGraphicsScene *scene = m_mainItem.data()->scene(); if (!scene) { @@ -194,7 +199,6 @@ void DialogProxy::setVisible(const bool visible) if (m_dialog->isVisible() != visible) { m_dialog->setVisible(visible); if (visible) { - m_dialog->setWindowFlags(Qt::FramelessWindowHint|m_flags); m_dialog->setVisible(visible); m_dialog->raise(); } @@ -339,13 +343,22 @@ void DialogProxy::activateWindow() int DialogProxy::windowFlags() const { - return (int)m_dialog->windowFlags(); + return (int)m_flags; } void DialogProxy::setWindowFlags(const int flags) { - m_flags = (Qt::WindowFlags)flags; - m_dialog->setWindowFlags((Qt::WindowFlags)flags); + /*X misbehaviour: the only way to make a window with the Popup flag working, is to create it with that flag from the beginning*/ + if (((Qt::WindowFlags)flags & Qt::Popup) != (m_flags & Qt::Popup)) { + delete m_dialog; + m_flags = (Qt::WindowFlags)flags; + m_dialog = new Plasma::Dialog(0, Qt::FramelessWindowHint|m_flags); + m_margins = new DialogMargins(m_dialog, this); + m_dialog->installEventFilter(this); + } else { + m_flags = (Qt::WindowFlags)flags; + m_dialog->setWindowFlags(Qt::FramelessWindowHint|m_flags); + } } int DialogProxy::location() const diff --git a/declarativeimports/core/tooltip.cpp b/declarativeimports/core/tooltip.cpp index 118c20cca..9f5836c79 100644 --- a/declarativeimports/core/tooltip.cpp +++ b/declarativeimports/core/tooltip.cpp @@ -163,7 +163,12 @@ void ToolTipProxy::updateToolTip() Plasma::ToolTipContent data; data.setMainText(m_mainText); data.setSubText(m_subText); - data.setImage(KIcon(m_image).pixmap(IconSize(KIconLoader::Desktop))); + if (!m_image.isEmpty()) { + KIcon icon(m_image); + if (!icon.isNull()) { + data.setImage(icon.pixmap(IconSize(KIconLoader::Desktop))); + } + } Plasma::ToolTipManager::self()->setContent(m_widget, data); } diff --git a/declarativeimports/draganddrop/CMakeLists.txt b/declarativeimports/draganddrop/CMakeLists.txt index 5450873c7..d9a3813b0 100644 --- a/declarativeimports/draganddrop/CMakeLists.txt +++ b/declarativeimports/draganddrop/CMakeLists.txt @@ -19,9 +19,9 @@ INCLUDE_DIRECTORIES( qt4_automoc(${declarativedragdrop_SRCS}) -kde4_add_library(dragdropplugin SHARED ${declarativedragdrop_SRCS}) -target_link_libraries(dragdropplugin ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY}) +kde4_add_library(draganddropplugin SHARED ${declarativedragdrop_SRCS}) +target_link_libraries(draganddropplugin ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY}) -install(TARGETS dragdropplugin DESTINATION ${IMPORTS_INSTALL_DIR}/org/kde/draganddrop) +install(TARGETS draganddropplugin DESTINATION ${IMPORTS_INSTALL_DIR}/org/kde/draganddrop) install(FILES qmldir DESTINATION ${IMPORTS_INSTALL_DIR}/org/kde/draganddrop) diff --git a/declarativeimports/plasmacomponents/qml/TextArea.qml b/declarativeimports/plasmacomponents/qml/TextArea.qml index 6b229a554..d3d426993 100644 --- a/declarativeimports/plasmacomponents/qml/TextArea.qml +++ b/declarativeimports/plasmacomponents/qml/TextArea.qml @@ -187,6 +187,11 @@ Item { visible: textEdit.text == "" && !textArea.activeFocus opacity: 0.5 } + onActiveFocusChanged: { + if (!textField.activeFocus) { + textInput.closeSoftwareInputPanel() + } + } } } diff --git a/declarativeimports/plasmacomponents/qml/TextField.qml b/declarativeimports/plasmacomponents/qml/TextField.qml index c995f814a..90e147df7 100644 --- a/declarativeimports/plasmacomponents/qml/TextField.qml +++ b/declarativeimports/plasmacomponents/qml/TextField.qml @@ -149,12 +149,17 @@ Item { verticalCenter: parent.verticalCenter // TODO: see what is the correct policy for margins leftMargin: 2 * base.margins.left - rightMargin: 2 * base.margins.right + rightMargin: 2 * base.margins.right + (clearButton.opacity > 0 ? clearButton.width : 0) } selectByMouse: true color: theme.textColor enabled: textField.enabled clip: true + onActiveFocusChanged: { + if (!textField.activeFocus) { + textInput.closeSoftwareInputPanel() + } + } // Proxying keys events is not required by the // common API but is desired in the plasma API. @@ -163,6 +168,7 @@ Item { } PlasmaCore.SvgItem { + id: clearButton svg: PlasmaCore.Svg {imagePath: "widgets/lineedit"} elementId: "clearbutton" width: textInput.height diff --git a/declarativeimports/plasmacomponents/qml/ToolBar.qml b/declarativeimports/plasmacomponents/qml/ToolBar.qml index 963505f93..6c9e75470 100644 --- a/declarativeimports/plasmacomponents/qml/ToolBar.qml +++ b/declarativeimports/plasmacomponents/qml/ToolBar.qml @@ -124,8 +124,7 @@ Item{ PlasmaCore.FrameSvgItem { id: frameSvg - imagePath: "widgets/frame" - prefix: "raised" + imagePath: "widgets/toolbar" anchors { fill: parent leftMargin: -margins.left diff --git a/kpart/plasma-kpart.desktop b/kpart/plasma-kpart.desktop index 578547fa2..7ceef9936 100644 --- a/kpart/plasma-kpart.desktop +++ b/kpart/plasma-kpart.desktop @@ -13,6 +13,7 @@ Name[en_GB]=plasma-kpart Name[es]=plasma-kpart Name[et]=plasma-kpart Name[eu]=plasma-kpart +Name[fa]=plasma-kpart Name[fi]=plasma-kpart Name[fr]=plasma-kpart Name[he]=plasma-kpart @@ -28,6 +29,7 @@ Name[km]=plasma-kpart Name[kn]=plasma-kpart Name[ko]=plasma-kpart Name[lt]=plasma-kpart +Name[lv]=plasma-kpart Name[nb]=plasma-kpart Name[nds]=Kpart för Plasma Name[nl]=plasma-kpart diff --git a/remotewidgetshelper/kcm_remotewidgets.actions b/remotewidgetshelper/kcm_remotewidgets.actions index e8ba43ee5..370c67728 100644 --- a/remotewidgetshelper/kcm_remotewidgets.actions +++ b/remotewidgetshelper/kcm_remotewidgets.actions @@ -87,6 +87,7 @@ Description[kk]=Қашықтағы Plasma виджеттер ережелері Description[km]=ការពារ​ប្រព័ន្ធ​មិន​ឲ្យ​រក្សាទុក​គោលនយោបាយ​របស់​ធាតុក្រាហ្វិក​ប្លាស្មា​ពី​ចម្ងាយ Description[ko]=Plasma 원격 위젯 정책을 저장하지 못하도록 합니다 Description[lt]=Neleidžia sistemai išsaugoti nutolusių plazmos valdiklių taisyklių +Description[lv]=Liedz sistēmai saglabāt plasma attālināto sīkrīku politikas Description[nb]=Hindrer at systemet lagrer praksiser for plasmaelementer på nettverket Description[nds]=Höllt dat Systeem vun't Sekern vun de Regeln för feern Plasma-Lüttprogrammen af Description[nl]=Voorkomt het opslaan door het systeem van beleidsregels voor widgets op afstand diff --git a/scriptengines/javascript/common/extension_io.cpp b/scriptengines/javascript/common/extension_io.cpp index c25688153..7e43efff8 100644 --- a/scriptengines/javascript/common/extension_io.cpp +++ b/scriptengines/javascript/common/extension_io.cpp @@ -21,11 +21,15 @@ #include +#include #include +#include #include #include #include +#include + QScriptValue ScriptEnv::openUrl(QScriptContext *context, QScriptEngine *engine) { Q_UNUSED(engine) @@ -87,6 +91,67 @@ QScriptValue ScriptEnv::getUrl(QScriptContext *context, QScriptEngine *engine) return engine->newQObject(job); } +QScriptValue ScriptEnv::download(QScriptContext *context, QScriptEngine *engine) +{ + if (context->argumentCount() == 0) { + return engine->undefinedValue(); + } + + QScriptValue v = context->argument(0); + KUrl url = v.isString() ? KUrl(v.toString()) : qscriptvalue_cast(v); + + if (!url.isValid()) { + return engine->undefinedValue(); + } + + QString requestedFileName; + if (context->argumentCount() > 1) { + requestedFileName = context->argument(1).toString(); + } + + ScriptEnv *env = ScriptEnv::findScriptEnv(engine); + if (!env) { + //kDebug() << "findScriptEnv failed"; + return engine->undefinedValue(); + } + + QStringList protocols; + protocols << "http" << "https" << "ftp" << "ftps"; + if (!protocols.contains(url.protocol())) { + return engine->undefinedValue(); + } + + QScriptContext *c = engine->currentContext(); + QString destination; + while (c) { + QScriptValue v = c->activationObject().property("__plasma_package"); + if (v.isVariant()) { + KDesktopFile config(v.toVariant().value().path() + "/metadata.desktop"); + KConfigGroup cg = config.desktopGroup(); + const QString pluginName = cg.readEntry("X-KDE-PluginInfo-Name", QString()); + destination = KGlobalSettings::downloadPath() + "Plasma/" + pluginName + '/'; + break; + } + + c = c->parentContext(); + } + + if (destination.isEmpty()) { + return engine->undefinedValue(); + } + + requestedFileName.prepend(destination); + QDir dir(requestedFileName); + dir.mkpath(destination); + if (!dir.absolutePath().startsWith(destination)) { + requestedFileName = destination; + } + + //TODO: allow showing desktop progress info? + KIO::CopyJob *job = KIO::copy(url, KUrl(requestedFileName), KIO::HideProgressInfo); + return engine->newQObject(job); +} + QScriptValue ScriptEnv::userDataPath(QScriptContext *context, QScriptEngine *engine) { Q_UNUSED(engine) diff --git a/scriptengines/javascript/common/scriptenv.cpp b/scriptengines/javascript/common/scriptenv.cpp index d90ce301d..bb6543657 100644 --- a/scriptengines/javascript/common/scriptenv.cpp +++ b/scriptengines/javascript/common/scriptenv.cpp @@ -68,7 +68,6 @@ void ScriptEnv::setupGlobalObject() // property is hidden from scripts. global.setProperty("__plasma_scriptenv", m_engine->newQObject(this), QScriptValue::ReadOnly|QScriptValue::Undeletable|QScriptValue::SkipInEnumeration); - // Add utility functions #ifndef DECLARATIVE global.setProperty("print", m_engine->newFunction(ScriptEnv::print)); @@ -182,6 +181,9 @@ bool ScriptEnv::importBuiltinExtension(const QString &extension, QScriptValue &o obj.setProperty("userDataPath", m_engine->newFunction(ScriptEnv::userDataPath)); obj.setProperty("runCommand", m_engine->newFunction(ScriptEnv::runCommand)); return true; + } else if ("download" == extension) { + obj.setProperty("download", m_engine->newFunction(ScriptEnv::download)); + return true; } return false; diff --git a/scriptengines/javascript/common/scriptenv.h b/scriptengines/javascript/common/scriptenv.h index 4ec7202d8..cc0c4f5be 100644 --- a/scriptengines/javascript/common/scriptenv.h +++ b/scriptengines/javascript/common/scriptenv.h @@ -27,6 +27,11 @@ #include "authorization.h" +namespace Plasma +{ + class Package; +} // namespace Plasma + class ScriptEnv : public QObject { Q_OBJECT @@ -87,6 +92,7 @@ private: static QScriptValue applicationExists(QScriptContext *context, QScriptEngine *engine); static QScriptValue openUrl(QScriptContext *context, QScriptEngine *engine); static QScriptValue getUrl(QScriptContext *context, QScriptEngine *engine); + static QScriptValue download(QScriptContext *context, QScriptEngine *engine); static QScriptValue userDataPath(QScriptContext *context, QScriptEngine *engine); static QScriptValue listAddons(QScriptContext *context, QScriptEngine *engine); static QScriptValue loadAddon(QScriptContext *context, QScriptEngine *engine); diff --git a/scriptengines/javascript/data/plasma-javascriptaddon.desktop b/scriptengines/javascript/data/plasma-javascriptaddon.desktop index 1743ab726..3d281ba6c 100644 --- a/scriptengines/javascript/data/plasma-javascriptaddon.desktop +++ b/scriptengines/javascript/data/plasma-javascriptaddon.desktop @@ -28,6 +28,7 @@ Name[km]=ផ្នែក​បន្ថែម​ Plasma JavaScript Name[kn]=ಪ್ಲಾಸ್ಮಾ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಆಡ್‌ಆನ್ Name[ko]=Plasma 자바스크립트 추가 기능 Name[lt]=Plasma JavaScript priedas +Name[lv]=Plasma JavaScript papildinājums Name[nb]=Plasma JavaScript-tillegg Name[nds]=JavaScript-Verwiedern för Plasma Name[nl]=Addon voor Plasma JavaScript diff --git a/scriptengines/javascript/data/plasma-packagestructure-javascript-addon.desktop b/scriptengines/javascript/data/plasma-packagestructure-javascript-addon.desktop index e96fc6552..653ec911d 100644 --- a/scriptengines/javascript/data/plasma-packagestructure-javascript-addon.desktop +++ b/scriptengines/javascript/data/plasma-packagestructure-javascript-addon.desktop @@ -28,6 +28,7 @@ Name[km]=ផ្នែក​បន្ថែម Javascript Name[kn]=ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಆಡ್‌ಆನ್ Name[ko]=자바스크립트 추가 기능 Name[lt]=Javascript priedas +Name[lv]=JavaScript papildinājums Name[nb]=JavaScript-tillegg Name[nds]=JavaScript-Verwiedern Name[nl]=Addon voor JavaScript @@ -82,6 +83,7 @@ Comment[kk]=Javascript Plasma плагиніне қосымшасы Comment[km]=កម្មវិធី​បន្ថែម​សម្រាប់​កម្មវិធី​ជំនួយ Javascript Plasma Comment[ko]=자바스크립트 Plasma 플러그인을 위한 추가 기능 Comment[lt]=Javascript Plasma papildinio priedai +Comment[lv]=Papildinājumi Javascript Plasma spraudņiem Comment[nb]=Tillegg for JavaSript Plasma-programtillegg Comment[nds]=Verwiedern för Plasma sien JavaScript-Modulen Comment[nl]=Addons voor Javascript Plasma plugins diff --git a/scriptengines/javascript/data/plasma-scriptengine-applet-declarative.desktop b/scriptengines/javascript/data/plasma-scriptengine-applet-declarative.desktop index 4a565bd84..d78e7e46b 100644 --- a/scriptengines/javascript/data/plasma-scriptengine-applet-declarative.desktop +++ b/scriptengines/javascript/data/plasma-scriptengine-applet-declarative.desktop @@ -24,6 +24,7 @@ Name[kk]=Мәлімдеме виджеті Name[km]=ធាតុ​ក្រាហ្វិក​ដែល​ប្រកាស Name[ko]=Declarative 위젯 Name[lt]=Deklaratyvus valdiklis +Name[lv]=Deklaratīvais sīkrīks Name[nb]=Deklarativt skjermelement Name[nds]=Stüerelement för Verkloren Name[nl]=Widget voor declaratie @@ -77,6 +78,7 @@ Comment[km]=ធាតុ​ក្រាហ្វិក​ប្លា​ស្ Comment[kn]=QML ಹಾಗು ಜಾವಾ ಸ್ಕ್ರಿಪ್ಟ್ ನಲ್ಲಿ ಬರೆಯಲಾದ ಸ್ವಾಭಾವಿಕ ಪ್ಲಾಸ್ಮಾ ನಿಯಂತ್ರಣಾ ಸಂಪರ್ಕತಟ (ವಿಡ್ಗೆಟ್) Comment[ko]=QML과 자바스크립트로 작성된 Plasma 위젯 Comment[lt]=Nuosavas Plasma valdiklis parašytas QML ir JavaScript kalba +Comment[lv]=Plasma sīkrīks, rakstīts QML un JavaScript valodās Comment[nb]=Plasmaelement for dette systemet, skrevet i QML og JavaScript Comment[nds]=En orginaal Plasmaelement, schreven in QML un JavaScript Comment[nl]=Hier thuishorend Plasma-widget geschreven in QML en JavaScript diff --git a/scriptengines/javascript/declarative/packageaccessmanager.cpp b/scriptengines/javascript/declarative/packageaccessmanager.cpp index b9f9b0b8e..b32fa2546 100644 --- a/scriptengines/javascript/declarative/packageaccessmanager.cpp +++ b/scriptengines/javascript/declarative/packageaccessmanager.cpp @@ -76,7 +76,6 @@ QNetworkReply *PackageAccessManager::createRequest(QNetworkAccessManager::Operat (!m_auth->authorizeRequiredExtension("networkio"))) { return new ErrorReply(op, req); } else { - return KIO::AccessManager::createRequest(op, req, outgoingData); #ifndef PLASMA_NO_KIO return KIO::AccessManager::createRequest(op, req, outgoingData); #else diff --git a/scriptengines/javascript/plasmoid/appletinterface.cpp b/scriptengines/javascript/plasmoid/appletinterface.cpp index 5ee3fbb25..b09b52224 100644 --- a/scriptengines/javascript/plasmoid/appletinterface.cpp +++ b/scriptengines/javascript/plasmoid/appletinterface.cpp @@ -22,12 +22,14 @@ #include "appletinterface.h" #include +#include #include #include #include #include #include +#include #include #include #include @@ -412,6 +414,23 @@ AppletInterface::ItemStatus AppletInterface::status() const return (AppletInterface::ItemStatus)((int)(applet()->status())); } +/* +QString AppletInterface::downloadPath(const QString &file) +{ + KDesktopFile config(v.toVariant().value().path() + "/metadata.desktop"); + KConfigGroup cg = config.desktopGroup(); + const QString pluginName = cg.readEntry("X-KDE-PluginInfo-Name", QString()); + destination = KGlobalSettings::downloadPath() + "/Plasma/" + pluginName + '/'; +} +*/ + +QStringList AppletInterface::downloadedFiles() const +{ + const QString downloadDir = KGlobalSettings::downloadPath() + "/Plasma/" + applet()->pluginName(); + QDir dir(downloadDir); + return dir.entryList(QDir::Files | QDir::NoSymLinks | QDir::Readable); +} + void AppletInterface::gc() { QTimer::singleShot(0, m_appletScriptEngine, SLOT(collectGarbage())); diff --git a/scriptengines/javascript/plasmoid/appletinterface.h b/scriptengines/javascript/plasmoid/appletinterface.h index ccbb6aae6..f782b3549 100644 --- a/scriptengines/javascript/plasmoid/appletinterface.h +++ b/scriptengines/javascript/plasmoid/appletinterface.h @@ -304,6 +304,9 @@ enum IntervalAlignment { void setStatus(const ItemStatus &status); ItemStatus status() const; +// Q_INVOKABLE QString downloadPath(const QString &file); + Q_INVOKABLE QStringList downloadedFiles() const; + Q_SIGNALS: void releaseVisualFocus(); void configNeedsSaving(); diff --git a/scriptengines/javascript/plasmoid/declarativeappletscript.cpp b/scriptengines/javascript/plasmoid/declarativeappletscript.cpp index 005894a2f..72f83c809 100644 --- a/scriptengines/javascript/plasmoid/declarativeappletscript.cpp +++ b/scriptengines/javascript/plasmoid/declarativeappletscript.cpp @@ -390,6 +390,10 @@ void DeclarativeAppletScript::setupObjects() QScriptValue global = m_engine->globalObject(); + QScriptValue v = m_engine->newVariant(QVariant::fromValue(*applet()->package())); + global.setProperty("__plasma_package", v, + QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration); + m_self = m_engine->newQObject(m_interface); m_self.setScope(global); global.setProperty("plasmoid", m_self); diff --git a/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp b/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp index 112c26520..5804114d6 100644 --- a/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp +++ b/scriptengines/javascript/plasmoid/simplejavascriptapplet.cpp @@ -510,6 +510,10 @@ void SimpleJavaScriptApplet::setupObjects() global.setProperty("AnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::animationGroup)); global.setProperty("ParallelAnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::parallelAnimationGroup)); + QScriptValue v = m_engine->newVariant(QVariant::fromValue(*applet()->package())); + global.setProperty("__plasma_package", v, + QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration); + // Bindings for data engine bindI18N(m_engine); diff --git a/scriptengines/javascript/simplebindings/backportglobal.h b/scriptengines/javascript/simplebindings/backportglobal.h index 1a572499c..6f676a9f6 100644 --- a/scriptengines/javascript/simplebindings/backportglobal.h +++ b/scriptengines/javascript/simplebindings/backportglobal.h @@ -21,6 +21,10 @@ #include +#include +Q_DECLARE_METATYPE(QPixmap*) +Q_DECLARE_METATYPE(QPixmap) + #define DECLARE_SELF(Class, __fn__) \ Class* self = qscriptvalue_cast(ctx->thisObject()); \ if (!self) { \ diff --git a/scriptengines/javascript/simplebindings/painter.cpp b/scriptengines/javascript/simplebindings/painter.cpp index 0bc7cfe1b..6c4458331 100644 --- a/scriptengines/javascript/simplebindings/painter.cpp +++ b/scriptengines/javascript/simplebindings/painter.cpp @@ -50,6 +50,14 @@ static QScriptValue ctor(QScriptContext *ctx, QScriptEngine *eng) { if (ctx->argumentCount() > 0) { QPaintDevice *device = qscriptvalue_cast(ctx->argument(0)); + if (!device) { + QPixmap *pixmap = qscriptvalue_cast(ctx->argument(0)); + if (pixmap) { + return newPainter(eng, new QPainter(pixmap)); + } else { + return newPainter(eng, new QPainter()); + } + } return newPainter(eng, new QPainter(device)); } else { return newPainter(eng, new QPainter()); diff --git a/scriptengines/javascript/simplebindings/pixmap.cpp b/scriptengines/javascript/simplebindings/pixmap.cpp index 0719dc7d5..8894776e1 100644 --- a/scriptengines/javascript/simplebindings/pixmap.cpp +++ b/scriptengines/javascript/simplebindings/pixmap.cpp @@ -23,9 +23,6 @@ #include "backportglobal.h" #include "plasmoid/appletinterface.h" -Q_DECLARE_METATYPE(QPixmap*) -Q_DECLARE_METATYPE(QPixmap) - static QScriptValue ctor(QScriptContext *ctx, QScriptEngine *eng) { if (ctx->argumentCount() == 1 && ctx->argument(0).isString()) {