Commit graph

11564 commits

Author SHA1 Message Date
l10n daemon script
1885a90393 SVN_SILENT made messages (.desktop file) 2013-11-24 06:42:15 +00:00
l10n daemon script
8484628fd0 SVN_SILENT made messages (.desktop file) 2013-11-24 04:09:32 +00:00
Martin Gräßlin
2e3eb5402b Fallback to XRender if scene-graph uses GUI thread for OpenGL rendering
This is a workaround fo QTBUG-34898 and affects the VirtualBox driver
and SandyBridge Mobile. OpenGL compositing is just not possible and
crashes as soon as there is anything rendered with QtQuick. This change
should be reverted once the Qt bug is fixed.

To nevertheless use OpenGL one can as always use the KWIN_COMPOSE env
variable, though this will result in crashes. An alternative is to set
QT_OPENGL_NO_SANITY_CHECK which forces Qt into using the threaded
rendering. At least for Sandybridge this seems to be a workable solution
as it's only causing flickering in fullscreen and KWin doesn't use any
fullscreen QtQuick elements.
2013-11-23 10:54:41 +01:00
Martin Gräßlin
b7be3cb621 Better handling for making the compositing OpenGL context current
With QtQuick2 it's possible that the scene graph rendering context either
lives in an own thread or uses the main GUI thread. In the latter case
it's the same thread as our compositing OpenGL context lives in. This
means our basic assumption that between two rendering passes the context
stays current does not hold.

The code already ensured that before we start a rendering pass the
context is made current, but there are many more possible cases. If we
use OpenGL in areas not triggered by the rendering loop but in response
to other events the context needs to be made current. This includes the
loading and unloading of effects (some effects use OpenGL in the static
effect check, in the ctor and dtor), background loading of texture data,
lazy loading after first usage invoked by shortcut, etc. etc.

To properly handle these cases new methods are added to EffectsHandler
to make the compositing OpenGL context current. These calls delegate down
into the scene. On non-OpenGL scenes they are noop, but on OpenGL they go
into the backend and make the context current. In addition they ensure
that Qt doesn't think that it's QOpenGLContext is current by calling
doneCurrent() on the QOpenGLContext::currentContext(). This unfortunately
causes an additional call to makeCurrent with a null context, but there
is no other way to tell Qt - it doesn't notice when a different context
is made current with low level API calls. In the multi-threaded
architecture this doesn't matter as ::currentContext() returns null.

A short evaluation showed that a transition to QOpenGLContext doesn't
seem feasible. Qt only supports either GLX or EGL while KWin supports
both and when entering the transition phase for Wayland, it would become
extremely tricky if our native platform is X11, but we want a Wayland
EGL context. A future solution might be to have a "KWin-QPA plugin" which
uses either xcb or Wayland and hides everything from Qt.

The API documentation is extended to describe when the effects-framework
ensures that an OpenGL context is current. The effects are changed to
make the context current in cases where it's not guaranteed. This has
been done by looking for creation or deletion of GLTextures and Shaders.
If there are other OpenGL usages outside the rendering loop, ctor/dtor
this needs to be changed, too.
2013-11-23 10:54:41 +01:00
l10n daemon script
4abba66bf0 SVN_SILENT made messages (.desktop file) 2013-11-23 06:30:36 +00:00
l10n daemon script
551988ebd4 SVN_SILENT made messages (.desktop file) 2013-11-23 03:52:00 +00:00
Fredrik Höglund
76adeb6a13 kwin: Optimize WindowQuadList::makeGrid()
This is the same optimization that was done in makeRegularGrid()
in 45782d387ab894c682b4ccc220e596c8b72c4167.
2013-11-21 23:38:43 +01:00
Fredrik Höglund
006529d8b2 kwin: Optimize WindowQuadList::makeRegularGrid()
Instead of looping over every quad for every grid cell and checking
for possible intersections, loop over the quads once and compute
the top left corner of the first intersecting grid cell. Then loop over
all the intersecting cells from that point and create the sub quads.

This new algorithm also preserves the order of the quads in the
original list.
2013-11-21 23:37:10 +01:00
Àlex Fiestas
1a1a79ca87 Make everything use org.kde.kded5 for now
NOBODY should use org.kde.kded5 but instead directly the service
register by its own modulem, but for now let's just switch to .kded5
so we can get this running fast.
2013-11-21 11:51:38 +01:00
Casian Andrei
b5b7fac056 Fix check for no button pressed in Client::buttonReleaseEvent()
There is a check in Client::buttonReleaseEvent() for the state of the
mouse buttons compared to the button masks for button 1, 2, 3 (X11
button indices).

The check was:
if ((state & (Button1Mask & Button2Mask & Button3Mask)) == 0) { ... }
<=> if (state & 0 == 0) <=> if (true)

This change assumes what the check was supposed to be and fixes the problem. The correct fix was proposed by Thomas.

REVIEW: 113359
2013-11-21 08:25:33 +02:00
Raul Fernandes
697180dda0 Avoids unnecessary searchs for info of the window
We already have the info variable. Why search for it again?
Patch reviewed in https://git.reviewboard.kde.org/r/113872/
2013-11-19 09:49:17 -02:00
Martin Gräßlin
9aca68cef1 [kwin/effects] Do not link Qt::Quick for the config modules
Not used.
2013-11-19 12:20:21 +01:00
Martin Gräßlin
7c2448227a [libkwineffects] Improving linking of kwinglutils library
Only needs:
* Qt5::DBus for the communication with color correction
* Qt5::X11Extras for access to XCB, pulls in needed Qt5::Gui
* XCB component XCB for xcb calls in kwinglobals.h
2013-11-19 12:12:57 +01:00
Eike Hein
2b0147f87d Merge branch 'KDE/4.11' 2013-11-19 00:01:56 +01:00
Martin Gräßlin
e1b5716228 [kwin] Adjust to API-changes in NETRootInfo 2013-11-18 13:58:35 +01:00
Martin Gräßlin
ce674ed509 [kwin] Window -> xcb_window_t or WId 2013-11-18 13:57:46 +01:00
Martin Gräßlin
d6a69aea4f [kwin] NETRootInfo::setDesktopGeometry doesn't expect a desktop argument any more 2013-11-18 13:57:06 +01:00
Martin Gräßlin
ba66fd9ef6 [kwin] NETWinInfo2 becomes NETWinInfo
And takes a xcb_connection_t instead of Display. Also our own class
is adjusted to no longer need the connection being passed in.
2013-11-18 13:56:28 +01:00
Martin Gräßlin
4a4ec0decd [kwin] Add XLib includes where still needed
No longer included through netwm.
2013-11-18 13:52:38 +01:00
Martin Gräßlin
20d03d5754 [kcmkwindesktop] Adjust to changes in NETRootInfo 2013-11-18 13:50:18 +01:00
Martin Gräßlin
2c9e21a983 [kwin] Use XCB Atom enum definition instead of XLib's one 2013-11-18 13:48:31 +01:00
l10n daemon script
7e368e1ef3 SVN_SILENT made messages (.desktop file) 2013-11-18 04:14:01 +00:00
l10n daemon script
d36319ebbe SVN_SILENT made messages (.desktop file) 2013-11-17 06:36:34 +00:00
l10n daemon script
833d1f85c2 SVN_SILENT made messages (.desktop file) 2013-11-17 04:07:54 +00:00
l10n daemon script
2e9d94d959 SVN_SILENT made messages (.desktop file) 2013-11-16 03:51:10 +00:00
Hugo Pereira Da Costa
a4b4d696f1 use QApp->setOverrideCursor when detecting window 2013-11-15 16:54:15 +01:00
Bhushan Shah
78c83642c4 Revert "use ecm_mark_as_test in kwin"
This reverts commit 659ee81a092a7efe0e56544277f9863485a3dec7.

somehow tests are not running on kwin
2013-11-15 13:38:35 +05:30
Aleix Pol
7b110f0671 Improve CMake usage
It's basically a run of the port-cmake.sh script in here, mostly the changes
are the following:
- Using KF5::* targets
- Using the proper macros, following recent developments in frameworks
2013-11-15 13:37:47 +01:00
l10n daemon script
38b62ce928 SVN_SILENT made messages (.desktop file) 2013-11-15 04:26:15 +00:00
Bhushan Shah
3257f55850 use ecm_mark_as_test in kwin
REVIEW: 113861
2013-11-14 15:34:01 +05:30
Martin Gräßlin
719923d410 [kwin/aurorae] Add mutex locker around access to the render buffer
We were facing crashes when the buffer image was being read from and
written to at the same time.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
73e0a6586c [aurorae] Use enum type for Decoration Buttons
Defines the DecorationButton type in DecorationOptions (needs to be
re-defined due to QML limitations) and exports the buttons as a
QList<int> property (again QML limitations).

All QML files are switched from string to the new enum type.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
07294b49f2 [kcmdeco] Use new DecorationButton types for describing the buttons
Rather heavy change to get the kcm to no longer use the string based
definition of the buttons on the left and right.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
b73d90cf78 [kdecorations] Introduce an enum for decoration buttons instead of characters
A new enum is introduced which defines all the buttons known to KWin.
The defaultTitleButton methods return a list of DecorationButtons instead
of a string which needs to be parsed by the decoration. The same for the
actual title buttons. The reading/storing of the buttons is unchanged,
that is the same characters are used and mapped to the button types.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
79d36fe4e9 [kdecorations] Drop KCommonDecoration::defaultButtons(Left|Right)
Just forwards to static method in KDecorationOptions, thus any user can
also just use this static method directly.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
529fcf0c46 [aurorae] Drop default title buttons left/right from theme config
Nowhere used inside Aurorae.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
5012f9e83a [oxygen] Drop redefining the default decoration buttons
There is no difference between Oxygen and default KDecoration, so
it's not needed. It's also conceptionally wrong: decorations should
not be able to change the global default.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
47857bb9f3 [oxygen] Use new update mechanism of KDecoration in the Button
This allows to have the button animations working in the preview.

Needs to change the reference to Client to non-const.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
f03104ac17 [kcmdeco] Connect PreviewItem to factory's recreateDeco signal 2013-11-14 09:41:52 +01:00
Martin Gräßlin
3ea18be574 [kcmdeco] Move KDecorationPreviewOptions into the Model
We need to have it around and not in the Preview widget to be able
to update the options when the buttons change.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
aab6037c4a [kcmdeco] KIcon -> QIcon::fromTheme 2013-11-14 09:41:52 +01:00
Martin Gräßlin
b150d9ddc1 [kcmdeco] Clean up includes 2013-11-14 09:41:52 +01:00
Martin Gräßlin
a98dbd7460 [kcmdeco] Drop the old preview code
All the rendering to QPixmap code in the Model and the Preview is
deleted as it's no longer used.

The model still has the plugin for the border size functionality.
This probably needs a change in the API to make it completely bound
to the decoration and not a global thing.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
1674824e79 [kcmdeco] Introduce a new PreviewItem for rendering QWidget based decos in QML
Using a QQuickPaintedItem for the rendering. The item gets the library
name from the model and loads the decoration with its own decoration
plugin. Thus each preview has its own plugin which eliminates the need to
constantly recreate the decoration as it is done with the preview.

Having a QQuickItem gives new possibilities. The item accepts hover
events and forwards them as enter and leave events to the widgets inside
the decoration. By that the mouse interaction of e.g. Oxygen is still
functional. If the decoration uses the new update approach the bridge is
forwarding the updates to the item and triggering a repaint so we even
have animations in the preview although the widget is never shown.
2013-11-14 09:41:52 +01:00
Martin Gräßlin
612709d9d3 [aurorae] Use QWindow based API instead of wrapping in a QWidget
Works quite decently already, but some things do not work properly yet,
e.g. doubleclick on decoration is not noticed.
2013-11-14 09:41:51 +01:00
Martin Gräßlin
54bbbff2bf [decorations] Cancel move/resize on titlebar double click 2013-11-14 09:41:51 +01:00
Martin Gräßlin
695697ebbd [decorations] Allow Client to use QWindow based decorations
Shared implementation using the delegating methods in KDecoration
which uses either QWindow or QWidget where possible.
2013-11-14 09:41:51 +01:00
Martin Gräßlin
f8b9b98345 [decorations] Allow decorations to use a QWindow instead of QWidget
A setMainWindow() method is added which behaves similar to
setMainWidget(). In addition a few convenient methods are added which
can be used by KWin core to show/hide the decoration without caring
whether the decoration uses a QWindow or QWidget.
2013-11-14 09:41:51 +01:00
Martin Gräßlin
8ecb69cd8c [decorations] Add a KDecoration::window() returning the QWindow
KWin core can access the QWindow of the decoration instead of the
QWidget. This is a preparation step to allow QWidget based window
decorations without any QWidgets at all.

KWin core makes already use of this new accessor to get the window Id
which is also on QWidgets provided through the QWindow.
2013-11-14 09:41:50 +01:00
Martin Gräßlin
d6bf62eb3e [kdecorations] Drop initialParentWidget()
No longer needed for creating the preview and not set in our main
bridge. Thus it can go and we just use NULL as the parent widget.
2013-11-14 09:41:50 +01:00