Commit graph

10275 commits

Author SHA1 Message Date
Thomas Lübking
1bda85f9f5 resize effect: use preMultiply function for color 2013-04-16 22:07:07 +02:00
Thomas Lübking
3faecf5075 fix effect script parsing
REVIEW: 109987
2013-04-16 22:07:07 +02:00
Thomas Lübking
8cf6e39eab general tabbox support for screenedges
REVIEW: 109362
BUG: 316288
FIXED-IN: 4.11
2013-04-16 22:07:07 +02:00
Thomas Lübking
c6ff7932c2 Tabbox: ask kwin about compositing
REVIEW: 109983
2013-04-16 22:07:06 +02:00
Thomas Lübking
70f9bc29f3 support bordersnapping per axis
a partially max'd client shall only receive aggressive snapping in
the max'd dimension

BUG: 318105
REVIEW: 109951
2013-04-16 22:07:06 +02:00
Thomas Lübking
56d39cb327 remove moveResizeMaximized GUI
REVIEW: 110000
2013-04-16 22:07:05 +02:00
Thomas Lübking
adf3509647 fix initial tabs in rules kcm 2013-04-16 22:07:05 +02:00
Ralf Jung
84c904d6f9 EGL backend: Check if implementation supports swap interval of 1 before setting it
REVIEW: 110023
2013-04-16 19:00:52 +02:00
Ralf Jung
c9f852a73f Fix tearing in video playback when using kwin_gles
REVIEW: 109973
2013-04-16 16:16:13 +02:00
Feng Chao
7854d12743 Fix Bug 316877 - Description text for the Slide Back effect is incorrect
Change "Slide back windows losing focus" to
"Slide back windows when another window is raised"

BUG: 316877
2013-04-16 20:44:49 +08:00
Martin Gräßlin
b88f7ad8ce Remove QDeclarativeView from DeclarativeScript
The view is never shown or used in any way except to create the
QDeclarativeEngine. So instead of using a view as a wrapper, let's create
a QDeclarativeEngine and a Component and create the script from the
Component.

To have Plasma.Dialog working we also need to add the created script item
to a QGraphicsScene.
2013-04-16 08:10:15 +02:00
Martin Gräßlin
edb074cbc2 Split out screen handling from Workspace into own class Screens
Following the approaches of other split out functionality Screens is a
singleton class created by Workspace.

The class takes over the responsibility for:
* screenChanged signal delayed by timer
* number of screens
* geometry of given screen
* active screen
* config option for active screen follows mouse

The class contains a small abstraction layer and has a concrete subclass
wrapping around QDesktopWidget, but the idea is to go more low level and
interact with XRandR directly to get more detailed information.

All over KWin the usage from QDesktopWidget is ported over to the new
Screens class.

REVIEW: 109839
2013-04-15 10:25:10 +02:00
Martin Gräßlin
27627bdccb Move killWindowId(Window) from Workspace to KillWindow
Only used from KillWindow and does not operate on private data of
Workspace.

At the same time port to XCB.

REVIEW: 109911
2013-04-15 10:09:04 +02:00
Martin Gräßlin
a27bbb9698 Forward declare KillWindow in workspace.h 2013-04-15 10:08:51 +02:00
Martin Gräßlin
2702c1930b Remove useless method Workspace::killWindow
Was just wrapping to slotKillWindow.
2013-04-15 10:08:51 +02:00
Martin Gräßlin
a442bd6416 DecorationPlugin becomes a QObject
This allows to move the slot to reset the decoration when compositing
got toggled from Workspace to DecorationPlugin and the custom cleanup
is no longer needed.

REVIEW: 109909
2013-04-15 10:04:09 +02:00
Martin Gräßlin
15546e11c2 Rename DecorationPlugin::noDecoration property to disabled 2013-04-15 09:59:09 +02:00
Martin Gräßlin
265b5523e2 Move decoration related methods from Workspace to DecorationPlugin
They were all just delegating to the DecorationPlugin.
2013-04-15 09:59:09 +02:00
Martin Gräßlin
d8e1b1c00e Rename plugins.(h|cpp) to decorations.(h|cpp) 2013-04-15 09:59:09 +02:00
Martin Gräßlin
724bfd4548 Make DeocrationPlugin a KWin singleton
Like so many other classes there is exactly one instance hold by
Workspace.
2013-04-15 09:59:09 +02:00
Martin Gräßlin
32be37bce3 Rename PluginMgr to DecorationPlugin
It's about the decorations not just *the* plugin.
2013-04-15 09:59:09 +02:00
Martin Gräßlin
0fb27fd12e Defines to create the boilerplate code for KWin's singleton classes
The define KWIN_SINGLETON adds to a class definition:

public:
    static Foo *create(QObject *parent = 0);
    static Foo *self() { return s_self; }
protected:
    explicit Foo(QObject *parent = 0);
private:
    static Foo *s_self;

There is an additional define KWIN_SINGLETON_VARIABLE to set a different
name than s_self.

The define KWIN_SINGLETON_FACTORY can be used to generate the create
method. It expands to:

Foo *Foo::s_self = 0;
Foo *Foo::create(QObject *parent)
{
    Q_ASSERT(!s_self);
    s_self = new Foo(parent);
    return s_self;
}

In addition there are defines to again set a different variable name and
to create an object of another inheriting class.

All the classes currently using this pattern are adjusted to use these
new defines. In a few places the name was adjusted. E.g. in Compositor
the factory method was called createCompositor instead of create.

REVIEW: 109865
2013-04-15 09:57:25 +02:00
Martin Gräßlin
76c6f75d80 Remove colormap handling from Client::windowEvent
This code never worked (git blame ends at 05507ee2). The event type is
ColormapNotify (32) and not ColormapChangeMask (1<<23).

Nobody noticed for years so it seems like unneeded to be fixed.

REVIEW: 109912
2013-04-15 09:46:15 +02:00
Script Kiddy
f515789b02 SVN_SILENT made messages (.desktop file) 2013-04-14 08:37:06 +02:00
Script Kiddy
99ceff018a SVN_SILENT made messages (.desktop file) 2013-04-13 10:11:47 +02:00
Martin Gräßlin
d503d9ffb6 Turn TabBox into a proper singleton
There is only one instance hold by Workspace which means it should follow
the common approach with ::self and ::create.

The hasTabBox is completely removed as it's rather useless and the same
as the ifdef around the usages any way.

REVIEW: 109851
2013-04-11 14:18:30 +02:00
Martin Gräßlin
6f113d84d3 Turn Scripting into a proper singleton
There is only one instance hold by Workspace which means it should follow
the common approach with ::self and ::create.

REVIEW: 109850
2013-04-11 14:01:39 +02:00
Martin Gräßlin
bac6edb269 Add Activities::nullUuid() to replace define in client.cpp
REVIEW: 109853
2013-04-11 13:01:53 +02:00
Martin Gräßlin
da85b5fdc7 Split out Activities related code from Workspace
All activities related code moves into new singleton class Activities.
This class gets only included into the build if the build option is
enabled which means there are less ifdefs all over the code and it also
handles better the moc doesn't like ifdef case.

The class holds the list of open and all activites, the current and the
previous activity and the KActivities::Controller. It also emits the
signals for any activities related changes.

Workspace still contains some activities related code. That is the
adjustment on change of current activity. Nevertheless the code looks
much cleaner now and does not contain the confusing naming conflict with
takeActivity() which existed before.

In all the places where Activities got used the code got adjusted and
quite often the ifdef got added with a fallback for the disabled case.
2013-04-11 13:01:36 +02:00
Martin Gräßlin
34d0df3e0a Remove Workspace::updateOnAllActivitiesOfTransients
Method is more or less just a clone of the Virtual Desktop variant and
not needed as toggleClientOnActivity already takes care of transients.
2013-04-11 13:01:36 +02:00
Martin Gräßlin
0cbc79193b Do not use stackingOrder in LanczosFilter to get all EffectWindows
LanczosFilter tries to discard all cached textures in the timer event by
getting the stacking order and iterating over it. But this approach seems
wrong from several aspects.

First of all the xStackingOrder does not include Deleted windows. So if
a cached texture still exists on an EffectWindow for a Deleted it would
not be discarded.

Also the xStackingOrder could result in an update from X because the
stacking order is currently considered dirty.

Last but not least the EffectsHandler::stackingOrder creates a temporary
list of EffectWindows - good for Effects but not necessarily useful
inside KWin core.

Instead the LanczosFilter gets the list of Clients, desktops, unmanaged
and deleted and iterates over them to check whether there is a texture to
discard.

REVIEW: 109954
2013-04-11 12:57:53 +02:00
Martin Gräßlin
504cb6fa4d Do not check compositing type in LanczosFilter
The LanczosFilter is only created by the SceneOpenGL2, so yes it is
OpenGL2 compositing - no need to check each frame.
2013-04-11 12:57:05 +02:00
Martin Gräßlin
caf340a607 Drop MouseClickEffect::supported
It returns true...

REVIEW: 109955
2013-04-11 12:56:07 +02:00
Fredrik Höglund
e4d60089c8 Merge branch 'KDE/4.10'
Conflicts:
	kwin/glxbackend.cpp
2013-04-09 20:12:07 +02:00
Fredrik Höglund
0168f7eacf kwin/glx: Avoid MSAA configs in initDrawableConfigs()
This is the same fix that was applied to initBufferConfigs() in commit
6cf057777555a5d0c834de3a0165a62916cf3b40.

CCBUG: 315089
2013-04-09 20:10:55 +02:00
Thomas Lübking
2935919cd8 TabBox: fix plasma theme workaround (tabbox)
BUG: 315064
FIXED-IN: 4.10.3
REVIEW: 108947
2013-04-09 19:00:41 +02:00
Thomas Lübking
e7050f64a8 fix flickable bounds when filtering
REVIEW: 105027
BUG: 318096
FIXED-IN: 4.10.3
2013-04-09 19:00:41 +02:00
Thomas Lübking
c0eab5b8e9 TabBox: fix plasma theme workaround (tabbox)
BUG: 315064
FIXED-IN: 4.10.3
REVIEW: 108947
2013-04-09 18:56:52 +02:00
Thomas Lübking
85691c519e fix flickable bounds when filtering
REVIEW: 105027
BUG: 318096
FIXED-IN: 4.10.3
2013-04-09 18:56:16 +02:00
Martin Gräßlin
10002e2006 Add "This effect is not a benchmark" to FPS Effect
Underneath the graph the text "This effect is not a benchmark" is
rendered.

REVIEW: 109869
2013-04-09 13:27:08 +02:00
Luca Beltrame
cfd36fb32e Merge remote-tracking branch 'origin/KDE/4.10'
Conflicts:
	plasma/generic/applets/lock_logout/metadata.desktop [scripty]
2013-04-08 20:26:05 +02:00
Àlex Fiestas
8116322f93 Make activities really optional in KWin
KWin is already able to work without activities but there was some code
left in the rules GUI.

REVIEW: 109815
2013-04-08 17:43:57 +02:00
Script Kiddy
8381581c5a SVN_SILENT made messages (.desktop file) 2013-04-08 13:32:53 +02:00
Martin Gräßlin
8fa3f8daa8 Model to provide easy access to KWin's Clients from QML
A new ClientModel is added which provides multiple different views on
KWin's Clients. The model is organized as a tree model supporting the
following levels:
* activities
* virtual desktops
* screens
* none

The levels can be ordered in whatever way one wants. That is the tree
structure can have an ordering of activities then virtual desktops or
the other way around.

In addition the model provides Exclusion flags  to exclude clients of
certain types. E.g. it's possible to exclude all windows which are not on
the current desktop or all windows which are of type dock.

The model gets automatically updated whenever a Client is added/removed
or changes a state in a way that it should be excluded/included.

The ClientModel is not directly exported to QML. Instead there are
specific sub classes for certain common orderings. This solutions is
chosen to workaround some limitations of QML. The initial idea was to
use a property taking a list of the levels, but this doesn't work because
we are not notified when the QDeclarativeListProperty changes.

Currently the following models are provided to QML:
* ClientModel -> no restrictions
* ClientModelByScreen -> ordering by screen
* ClientModelByScreenAndDesktop -> screen, then desktop

These can be used to get all Clients:
ClientModel {
}

Or to get the classic Present Windows on current desktop:
ClientModelByScreen {
    exclusions: ClientModel.OtherDesktopsExclusion | ClientModel.NotAcceptingFocusExclusion | ...
}

Or to get the classic Present Windows on all desktops:
ClientModelByScreen {
    exclusions: ClientModel.NotAcceptingFocusExclusion | ...
}

Or our well known desktop grid:
ClientModelByScreenAndDesktop {
    id: desktopGrid
    exclusions: ClientModel.NotAcceptingFocusExclusion | ...
}

To support filtering as known by the Present Windows effect one can use
a ClientFilterModel, which is a QSortFilterProxyModel filtering on
window caption, role and class:
ClientFilterModel {
    id: filterModel
    clientModel: desktopGrid
    filter: filterItem.text
}

In case it's a tree level obviously QML does not support this correctly.
So we need to use a VisualDataModel:
VisualDataModel {
    id: clientModel
    model: filterModel
    Component.onCompleted: {
        clientModel.rootIndex = modelIndex(0);
        clientModel.rootIndex = modelIndex(0);
        clientModel.delegate = thumbnailDelegate;
    }
}

As we can see, the rootIndex has to be set to the level which contains
the Clients. Also it seems to be important to create the delegate after
the model index has been set. The idea is to have only one ClientModel
and multiple VisualDataModels if multiple views on the data is needed.

The model has been tested with a painful modeltest session. It looks good
so far modulo the listed limitations and that modeltest is not liking
closing Yakuake in the ClientModelByScreenAndDesktop setup, though it
works fine in real world testing.

REVIEW: 109604
2013-04-08 10:30:45 +02:00
Martin Gräßlin
6351472d28 Add a client property to ThumbnailItem
Makes it a little bit easier to use a ThumbnailItem for a Client. E.g.
ThumbnailItem {
    client: model.client
}

instead of mapping the windowIds, which is rather uncomfty.
2013-04-08 10:30:45 +02:00
Martin Gräßlin
15b84c54f8 Support saturation/brightness in ThumbnailItem
Two new properties saturation and brightness are added to the
ThumbnailItem which can be set from QML.

The properties are honoured by the Scene when rendering the thumbnail.
2013-04-08 10:30:45 +02:00
Script Kiddy
e793067ab6 SVN_SILENT made messages (.desktop file) 2013-04-08 09:00:12 +02:00
Thomas Lübking
2e2e13d89e add dummy if no window for tab attach is available
BUG: 306451
FIXED-IN: 4.11
REVIEW: 109782
2013-04-07 14:47:10 +02:00
Thomas Lübking
b3adc6254b snap maximized windows to border
BUG: 317845
REVIEW: 109864
2013-04-07 14:47:10 +02:00
Script Kiddy
40e1d36f5b SVN_SILENT made messages (.desktop file) 2013-04-07 08:20:59 +02:00