Merge branch 'Plasma/5.8'

This commit is contained in:
Martin Gräßlin 2016-11-03 08:51:49 +01:00
commit d1076fc5b9
11 changed files with 134 additions and 65 deletions

View file

@ -86,6 +86,7 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
Declarative
KCMUtils
KIO
TextWidgets
NewStuff
Service
XmlGui
@ -347,10 +348,10 @@ add_subdirectory(helpers)
########### next target ###############
set(kwin_KDEINIT_SRCS
workspace.cpp
workspace.cpp
dbusinterface.cpp
abstract_client.cpp
client.cpp
client.cpp
client_machine.cpp
cursor.cpp
debug_console.cpp
@ -363,25 +364,25 @@ set(kwin_KDEINIT_SRCS
pointer_input.cpp
touch_input.cpp
netinfo.cpp
placement.cpp
atoms.cpp
utils.cpp
layers.cpp
main.cpp
options.cpp
placement.cpp
atoms.cpp
utils.cpp
layers.cpp
main.cpp
options.cpp
outline.cpp
events.cpp
killwindow.cpp
geometrytip.cpp
events.cpp
killwindow.cpp
geometrytip.cpp
screens.cpp
shadow.cpp
sm.cpp
group.cpp
manage.cpp
sm.cpp
group.cpp
manage.cpp
overlaywindow.cpp
activation.cpp
useractions.cpp
geometry.cpp
activation.cpp
useractions.cpp
geometry.cpp
rules.cpp
composite.cpp
toplevel.cpp

View file

@ -666,7 +666,6 @@ void MoveResizeWindowTest::testAdjustClientGeometryOfAutohidingX11Panel()
QVERIFY(panelHiddenSpy.wait());
// now try to snap again
QEXPECT_FAIL("", "BUG 365892", Continue);
QCOMPARE(Workspace::self()->adjustClientPosition(testWindow, targetPoint, false), targetPoint);
// and destroy the panel again

View file

@ -12,6 +12,7 @@ target_link_libraries(kwin_mousemark_config
KF5::GlobalAccel
KF5::I18n
KF5::Service
KF5::TextWidgets
KF5::XmlGui
)

View file

@ -52,7 +52,7 @@ MouseMarkEffectConfig::MouseMarkEffectConfig(QWidget* parent, const QVariantList
{
m_ui = new MouseMarkEffectConfigForm(this);
m_ui->kcfg_LineWidth->setSuffix(ki18np(" pixel", " pixels").toString());
m_ui->kcfg_LineWidth->setSuffix(ki18np(" pixel", " pixels"));
QVBoxLayout* layout = new QVBoxLayout(this);

View file

@ -17,10 +17,10 @@
<string>Appearance</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>&amp;Width:</string>
<string>Wid&amp;th:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@ -30,26 +30,7 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="kcfg_LineWidth">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10</number>
</property>
<property name="value">
<number>3</number>
</property>
</widget>
</item>
<item row="1" column="0">
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>&amp;Color:</string>
@ -62,7 +43,7 @@
</property>
</widget>
</item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="KColorCombo" name="kcfg_Color">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -72,15 +53,24 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="KPluralHandlingSpinBox" name="kcfg_LineWidth">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10</number>
</property>
<property name="value">
<number>3</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="KShortcutsEditor" name="editor" native="true">
<property name="actionTypes">
<enum>KShortcutsEditor::GlobalAction</enum>
</property>
</widget>
<widget class="KShortcutsEditor" name="editor"/>
</item>
<item>
<widget class="QLabel" name="label_3">
@ -106,9 +96,14 @@
<customwidget>
<class>KShortcutsEditor</class>
<extends>QWidget</extends>
<header location="global">KShortcutsEditor</header>
<header>kshortcutseditor.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>KPluralHandlingSpinBox</class>
<extends>QSpinBox</extends>
<header>kpluralhandlingspinbox.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>

View file

@ -527,6 +527,8 @@ QPoint Workspace::adjustClientPosition(AbstractClient* c, QPoint pos, bool unres
continue;
if ((*l)->isMinimized())
continue; // is minimized
if (!(*l)->isShown(false))
continue;
if ((*l)->tabGroup() && (*l) != (*l)->tabGroup()->current())
continue; // is not active tab
if (!((*l)->isOnDesktop(c->desktop()) || c->isOnDesktop((*l)->desktop())))

View file

@ -492,7 +492,7 @@ bool ScriptedEffect::init(const QString &effectName, const QString &pathToScript
m_engine->globalObject().setProperty(QStringLiteral("effects"), effectsObject, QScriptValue::Undeletable);
m_engine->globalObject().setProperty(QStringLiteral("Effect"), m_engine->newQMetaObject(&ScriptedEffect::staticMetaObject));
#ifndef KWIN_UNIT_TEST
m_engine->globalObject().setProperty(QStringLiteral("KWin"), m_engine->newQMetaObject(&WorkspaceWrapper::staticMetaObject));
m_engine->globalObject().setProperty(QStringLiteral("KWin"), m_engine->newQMetaObject(&QtScriptWorkspaceWrapper::staticMetaObject));
#endif
m_engine->globalObject().setProperty(QStringLiteral("QEasingCurve"), m_engine->newQMetaObject(&QEasingCurve::staticMetaObject));
m_engine->globalObject().setProperty(QStringLiteral("effect"), m_engine->newQObject(this, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater), QScriptValue::Undeletable);

View file

@ -46,6 +46,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QMenu>
#include <QQmlContext>
#include <QQmlEngine>
#include <QQmlExpression>
#include <QtScript/QScriptEngine>
#include <QtScript/QScriptValue>
#include <QtCore/QStandardPaths>
@ -301,9 +302,9 @@ void KWin::Script::installScriptFunctions(QScriptEngine* engine)
QScriptValue assertNotNullFunc = engine->newFunction(kwinAssertNotNull);
engine->globalObject().setProperty(QStringLiteral("assertNotNull"), assertNotNullFunc);
// global properties
engine->globalObject().setProperty(QStringLiteral("KWin"), engine->newQMetaObject(&WorkspaceWrapper::staticMetaObject));
engine->globalObject().setProperty(QStringLiteral("KWin"), engine->newQMetaObject(&QtScriptWorkspaceWrapper::staticMetaObject));
QScriptValue workspace = engine->newQObject(Scripting::self()->workspaceWrapper(), QScriptEngine::QtOwnership,
QScriptEngine::ExcludeSuperClassContents | QScriptEngine::ExcludeDeleteLater);
QScriptEngine::ExcludeDeleteLater);
engine->globalObject().setProperty(QStringLiteral("workspace"), workspace, QScriptValue::Undeletable);
// install meta functions
KWin::MetaScripting::registration(engine);
@ -535,7 +536,7 @@ void KWin::ScriptUnloaderAgent::scriptUnload(qint64 id)
KWin::DeclarativeScript::DeclarativeScript(int id, QString scriptName, QString pluginName, QObject* parent)
: AbstractScript(id, scriptName, pluginName, parent)
, m_context(new QQmlContext(Scripting::self()->qmlEngine(), this))
, m_context(new QQmlContext(Scripting::self()->declarativeScriptSharedContext(), this))
, m_component(new QQmlComponent(Scripting::self()->qmlEngine(), this))
{
m_context->setContextProperty(QStringLiteral("KWin"), new JSEngineGlobalMethodsWrapper(this));
@ -630,7 +631,8 @@ KWin::Scripting::Scripting(QObject *parent)
: QObject(parent)
, m_scriptsLock(new QMutex(QMutex::Recursive))
, m_qmlEngine(new QQmlEngine(this))
, m_workspaceWrapper(new WorkspaceWrapper(this))
, m_declarativeScriptSharedContext(new QQmlContext(m_qmlEngine, this))
, m_workspaceWrapper(new QtScriptWorkspaceWrapper(this))
{
init();
QDBusConnection::sessionBus().registerObject(QStringLiteral("/Scripting"), this, QDBusConnection::ExportScriptableContents | QDBusConnection::ExportScriptableInvokables);
@ -655,6 +657,11 @@ void KWin::Scripting::init()
m_qmlEngine->rootContext()->setContextProperty(QStringLiteral("workspace"), m_workspaceWrapper);
m_qmlEngine->rootContext()->setContextProperty(QStringLiteral("options"), options);
m_declarativeScriptSharedContext->setContextProperty(QStringLiteral("workspace"), new DeclarativeScriptWorkspaceWrapper(this));
// QQmlListProperty interfaces only work via properties, rebind them as functions here
QQmlExpression expr(m_declarativeScriptSharedContext, nullptr, "workspace.clientList = function() { return workspace.clients }");
expr.evaluate();
}
void KWin::Scripting::start()

View file

@ -51,7 +51,7 @@ namespace KWin
class AbstractClient;
class Client;
class ScriptUnloaderAgent;
class WorkspaceWrapper;
class QtScriptWorkspaceWrapper;
class KWIN_EXPORT AbstractScript : public QObject
{
@ -362,7 +362,9 @@ public:
QQmlEngine *qmlEngine() const;
QQmlEngine *qmlEngine();
WorkspaceWrapper *workspaceWrapper() const;
QQmlContext *declarativeScriptSharedContext() const;
QQmlContext *declarativeScriptSharedContext();
QtScriptWorkspaceWrapper *workspaceWrapper() const;
AbstractScript *findScript(const QString &pluginName) const;
@ -381,7 +383,8 @@ private:
LoadScriptList queryScriptsToLoad();
static Scripting *s_self;
QQmlEngine *m_qmlEngine;
WorkspaceWrapper *m_workspaceWrapper;
QQmlContext *m_declarativeScriptSharedContext;
QtScriptWorkspaceWrapper *m_workspaceWrapper;
};
inline
@ -397,7 +400,19 @@ QQmlEngine *Scripting::qmlEngine()
}
inline
WorkspaceWrapper *Scripting::workspaceWrapper() const
QQmlContext *Scripting::declarativeScriptSharedContext() const
{
return m_declarativeScriptSharedContext;
}
inline
QQmlContext *Scripting::declarativeScriptSharedContext()
{
return m_declarativeScriptSharedContext;
}
inline
QtScriptWorkspaceWrapper *Scripting::workspaceWrapper() const
{
return m_workspaceWrapper;
}

View file

@ -90,12 +90,12 @@ void WorkspaceWrapper::setNumberOfDesktops(int count)
VirtualDesktopManager::self()->setCount(count);
}
#define GETTER( rettype, getterName ) \
rettype WorkspaceWrapper::getterName( ) const { \
#define GETTER( klass, rettype, getterName ) \
rettype klass::getterName( ) const { \
return Workspace::self()->getterName(); \
}
GETTER(KWin::AbstractClient*, activeClient)
GETTER(QList< KWin::Client* >, clientList)
GETTER(WorkspaceWrapper, KWin::AbstractClient*, activeClient)
GETTER(QtScriptWorkspaceWrapper, QList< KWin::Client* >, clientList)
#undef GETTER
@ -324,4 +324,28 @@ QSize WorkspaceWrapper::virtualScreenSize() const
return screens()->size();
}
QtScriptWorkspaceWrapper::QtScriptWorkspaceWrapper(QObject* parent)
: WorkspaceWrapper(parent) {}
QQmlListProperty<KWin::Client> DeclarativeScriptWorkspaceWrapper::clients()
{
return QQmlListProperty<KWin::Client>(this, 0, &DeclarativeScriptWorkspaceWrapper::countClientList, &DeclarativeScriptWorkspaceWrapper::atClientList);
}
int DeclarativeScriptWorkspaceWrapper::countClientList(QQmlListProperty<KWin::Client> *clients)
{
Q_UNUSED(clients)
return Workspace::self()->clientList().size();
}
KWin::Client *DeclarativeScriptWorkspaceWrapper::atClientList(QQmlListProperty<KWin::Client> *clients, int index)
{
Q_UNUSED(clients)
return Workspace::self()->clientList().at(index);
}
DeclarativeScriptWorkspaceWrapper::DeclarativeScriptWorkspaceWrapper(QObject* parent)
: WorkspaceWrapper(parent) {}
} // KWin

View file

@ -26,6 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QSize>
#include <QStringList>
#include <QRect>
#include <QtQml/QQmlListProperty>
#include <kwinglobals.h>
namespace KWin
@ -198,7 +199,10 @@ public:
ElectricNone
};
protected:
explicit WorkspaceWrapper(QObject* parent = nullptr);
public:
#define GETTERSETTERDEF( rettype, getter, setter ) \
rettype getter() const; \
void setter( rettype val );
@ -222,10 +226,6 @@ void setter( rettype val );
QSize virtualScreenSize() const;
QRect virtualScreenGeometry() const;
/**
* List of Clients currently managed by KWin.
**/
Q_INVOKABLE QList< KWin::Client* > clientList() const;
/**
* Returns the geometry a Client can use with the specified option.
* This method should be preferred over other methods providing screen sizes as the
@ -349,6 +349,31 @@ private Q_SLOTS:
void setupClientConnections(KWin::Client* client);
};
class QtScriptWorkspaceWrapper : public WorkspaceWrapper
{
Q_OBJECT
public:
/**
* List of Clients currently managed by KWin.
**/
Q_INVOKABLE QList< KWin::Client* > clientList() const;
explicit QtScriptWorkspaceWrapper(QObject* parent = nullptr);
};
class DeclarativeScriptWorkspaceWrapper : public WorkspaceWrapper
{
Q_OBJECT
Q_PROPERTY(QQmlListProperty<KWin::Client> clients READ clients)
public:
QQmlListProperty<KWin::Client> clients();
static int countClientList(QQmlListProperty<KWin::Client> *clients);
static KWin::Client *atClientList(QQmlListProperty<KWin::Client> *clients, int index);
explicit DeclarativeScriptWorkspaceWrapper(QObject* parent = nullptr);
};
}
#endif