The main purpose of the opengl testapp was to set the environment
variable LIBGL_ALWAYS_INDIRECT if direct rendering is not supported
before glx gets initialized.
With Qt5 we may no longer set this environment variable. QtQuick
requires direct rendering. On IvyBridge QtQuick is crashing if the
variable is set. Thus we are no longer allowed to set it and thus the
complete test becomes pointless.
The test app basically whitelisted most drivers anyway, the only
drivers which were problematic are the proprietary Catalyst drivers.
It that's still a problem we can also disable OpenGL compositing on
those drivers through the recommendation in the GLPlatform.
This also means that the KWIN_DIRECT_GL variable is no longer useful.
If the user actions menu is closed Qt looks for a QWidget at the mouse
position. If it finds one it tries to activate and raise it. If the
QWidget at the mouse position is a window decoration, it gets raised
above the Client. This makes the window unfortunately unusable.
To prevent this from happening we listen for the ZOrderChange event
in our event filter on the decoration widget and unconditionally lower
the decoration widget again - we never want the decoration widget to
be above our Client, so we can just always lower it. We have to use
the low level functionality and cannot use QWidget::lower as that would
result in a loop.
Not the best solution, but at least TabBox works each time it's invoked.
It doesn't make much of a difference as the QML is reparsed anyway at
each show.
Hiding and Showing the close window button all the time can result in
the window not having a proper content. To fix this issue we keep the
window around, but just don't show it. For this the CloseWindowView
inherits from QObject and delegates the needed calls to the nested
QQuickView.
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
The configChanged() signal was declared in both KDecorationOptions and
Options, while Options recently became derived from KDecorationOptions.
This created confusion for QMetaObjectPrivate which was spitting a
couple of error messages.
Remove configChanged() signal declaration from Options, rely on the one
from the base class Options.
Create a special notify signal for focusPolicyIsResonableChanged,
directly connected to the configChanged() signal.
REVIEW: 113336
- B2 linked to the wrong slot (instead of changed signal)
- border size change was not written (for B2, Laptop etc)
- Aurorae didn't recreate decos when required
BUG: 325946
FIXED-IN: 4.11.3
REVIEW: 113229
* KDE/4.11:
Remove assertion in KDecorationUnstable's constructor.
SVN_SILENT made messages (.desktop file)
Cursor Theme KCM: Show correct resize cursor in preview for themes without a file called "size_fdiag"
Fixed missing signal/slot connection:
Fix zoom effect cursor position on initial zoom in.
SVN_SILENT made messages (.desktop file)
Don't show borders for a maximized Laptop client
Always use PositionCenter for maximized windows
Fix click on trash plasmoid when on desktop and widgets are unlocked
Conflicts:
kwin/clients/aurorae/src/aurorae.cpp
kwin/libkdecorations/kdecoration.cpp
plasma/desktop/applets/trash/trash.cpp
plasma/desktop/toolboxes/plasma-toolbox-desktoptoolbox.desktop
plasma/desktop/toolboxes/plasma-toolbox-paneltoolbox.desktop
plasma/generic/wallpapers/color/plasma-wallpaper-color.desktop
plasma/generic/wallpapers/image/plasma-wallpaper-image.desktop
Follow-up to c146941, which stopped exporting KDecorationBridgeUnstable.
The way the typeinfo and object comparisons are performed in a dynamic_cast
are not entirely defined in any ABI spec (or the C++ standard), and the
situation gets trickier when a hidden symbol (KDecorationBridgeUnstable)
gets passed between a program such as kwin or kcmshell4 and a dlopen()ed
library like kwin3_laptop.so: kwin is unaware of the symbol in
kwin3_laptop.so and vice-versa, so stricter implementations of the C++
runtime can choose to make the dynamic_cast call fail and return 0.
This was a source of crashes on GCC for a long time [1][2] until its
developers chose to make the typeinfo comparison in libstdc++ >= 4.5.x less
strict and just perform a string comparison of the type names by default.
[1] http://article.gmane.org/gmane.comp.gcc.patches/189813
[2] http://gcc.gnu.org/ml/gcc/2002-05/msg01970.html
It does not make things more correct, though, and after c146941 KWin started
crashing when built in debug mode and run with libcxxrt, another C++ runtime
implementation, since it performed a stricted typeinfo comparison by
default.
Simply removing the dynamic_cast should be fine: it is in an assertion, so
the code is not essential, and the assertion itself is not entirely correct.
Additionally, the assertion has already been removed from the master branch
in commit 4702bbd.
REVIEW: 113296
As KWin indirectly uses Qt's OpenGL through QtQuick we need to ensure
to not mix OpenGL and OpenGLES. So we have to built KWin only against
OpenGL if Qt is built against OpenGL and we have to built KWin only
against GLESv2 if Qt is built against GLESv2.
This means the kwin_gles binary is no more. There is only kwin which
either links GL or GLESv2.
The logic to use $INCLUDE_INSTALL_DIR/KDE doesn't work there, since the
plasma includes land in a different path on the jenkins setup. Let's see
if this fixes it.