Merge branch 'KDE/4.11'
This commit is contained in:
commit
7fce0006c0
12 changed files with 61 additions and 93 deletions
|
@ -313,8 +313,6 @@ if(OPENGL_FOUND)
|
||||||
if (DL_LIBRARY)
|
if (DL_LIBRARY)
|
||||||
target_link_libraries(kdeinit_kwin ${DL_LIBRARY})
|
target_link_libraries(kdeinit_kwin ${DL_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
# must be after opengl, to be initialized first by the linker
|
|
||||||
target_link_libraries(kdeinit_kwin kwinnvidiahack)
|
|
||||||
elseif(OPENGLES_FOUND)
|
elseif(OPENGLES_FOUND)
|
||||||
target_link_libraries(kdeinit_kwin ${kwinLibs} kwinglesutils ${OPENGLES_LIBRARIES})
|
target_link_libraries(kdeinit_kwin ${kwinLibs} kwinglesutils ${OPENGLES_LIBRARIES})
|
||||||
set_target_properties(kdeinit_kwin PROPERTIES COMPILE_FLAGS "-DKWIN_HAVE_OPENGLES")
|
set_target_properties(kdeinit_kwin PROPERTIES COMPILE_FLAGS "-DKWIN_HAVE_OPENGLES")
|
||||||
|
@ -333,18 +331,6 @@ if(OPENGLES_FOUND)
|
||||||
install(TARGETS kwin_gles ${INSTALL_TARGETS_DEFAULT_ARGS} )
|
install(TARGETS kwin_gles ${INSTALL_TARGETS_DEFAULT_ARGS} )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
########### next target ###############
|
|
||||||
|
|
||||||
set( kwinnvidiahack_LIB_SRCS
|
|
||||||
nvidiahack.cpp )
|
|
||||||
|
|
||||||
|
|
||||||
kde4_add_library(kwinnvidiahack SHARED ${kwinnvidiahack_LIB_SRCS})
|
|
||||||
|
|
||||||
set_target_properties(kwinnvidiahack PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION ${GENERIC_LIB_SOVERSION} )
|
|
||||||
set_target_properties(kwinnvidiahack PROPERTIES OUTPUT_NAME ${KWIN_NAME}nvidiahack)
|
|
||||||
install(TARGETS kwinnvidiahack ${INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY NAMELINK_SKIP)
|
|
||||||
|
|
||||||
########### install files ###############
|
########### install files ###############
|
||||||
|
|
||||||
install( FILES kwin.kcfg DESTINATION ${KCFG_INSTALL_DIR} RENAME ${KWIN_NAME}.kcfg )
|
install( FILES kwin.kcfg DESTINATION ${KCFG_INSTALL_DIR} RENAME ${KWIN_NAME}.kcfg )
|
||||||
|
|
|
@ -98,6 +98,7 @@ Compositor::Compositor(QObject* workspace)
|
||||||
connect(&unredirectTimer, SIGNAL(timeout()), SLOT(delayedCheckUnredirect()));
|
connect(&unredirectTimer, SIGNAL(timeout()), SLOT(delayedCheckUnredirect()));
|
||||||
connect(&compositeResetTimer, SIGNAL(timeout()), SLOT(restart()));
|
connect(&compositeResetTimer, SIGNAL(timeout()), SLOT(restart()));
|
||||||
connect(workspace, SIGNAL(configChanged()), SLOT(slotConfigChanged()));
|
connect(workspace, SIGNAL(configChanged()), SLOT(slotConfigChanged()));
|
||||||
|
connect(options, SIGNAL(unredirectFullscreenChanged()), SLOT(delayedCheckUnredirect()));
|
||||||
unredirectTimer.setSingleShot(true);
|
unredirectTimer.setSingleShot(true);
|
||||||
compositeResetTimer.setSingleShot(true);
|
compositeResetTimer.setSingleShot(true);
|
||||||
nextPaintReference.invalidate(); // Initialize the timer
|
nextPaintReference.invalidate(); // Initialize the timer
|
||||||
|
@ -705,7 +706,7 @@ void Compositor::checkUnredirect(bool force)
|
||||||
|
|
||||||
void Compositor::delayedCheckUnredirect()
|
void Compositor::delayedCheckUnredirect()
|
||||||
{
|
{
|
||||||
if (!hasScene() || m_scene->overlayWindow()->window() == None || !options->isUnredirectFullscreen())
|
if (!hasScene() || m_scene->overlayWindow()->window() == None || !(options->isUnredirectFullscreen() || sender() == options))
|
||||||
return;
|
return;
|
||||||
ToplevelList list;
|
ToplevelList list;
|
||||||
bool changed = forceUnredirectCheck;
|
bool changed = forceUnredirectCheck;
|
||||||
|
@ -1072,7 +1073,8 @@ void Toplevel::addWorkspaceRepaint(const QRect& r2)
|
||||||
bool Toplevel::updateUnredirectedState()
|
bool Toplevel::updateUnredirectedState()
|
||||||
{
|
{
|
||||||
assert(compositing());
|
assert(compositing());
|
||||||
bool should = shouldUnredirect() && !unredirectSuspend && !shape() && !hasAlpha() && opacity() == 1.0 &&
|
bool should = options->isUnredirectFullscreen() && shouldUnredirect() && !unredirectSuspend &&
|
||||||
|
!shape() && !hasAlpha() && opacity() == 1.0 &&
|
||||||
!static_cast<EffectsHandlerImpl*>(effects)->activeFullScreenEffect();
|
!static_cast<EffectsHandlerImpl*>(effects)->activeFullScreenEffect();
|
||||||
if (should == unredirect)
|
if (should == unredirect)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -59,9 +59,9 @@ install( TARGETS kwin_update_settings_411 DESTINATION ${LIB_INSTALL_DIR}/kconf_u
|
||||||
|
|
||||||
install( FILES fsp_workarounds_1.kwinrules DESTINATION ${DATA_INSTALL_DIR}/kwin/default_rules )
|
install( FILES fsp_workarounds_1.kwinrules DESTINATION ${DATA_INSTALL_DIR}/kwin/default_rules )
|
||||||
install( FILES pop.wav DESTINATION ${SOUND_INSTALL_DIR} )
|
install( FILES pop.wav DESTINATION ${SOUND_INSTALL_DIR} )
|
||||||
install( FILES kwin_fsp_workarounds_1.upd kwin_update_tabbox_settings.upd kwin_remove_effects.upd kwin_update_tabbox_qml_settings.upd kwin_remove_delay_focus.upd kwin_update_49.upd kwin_update_410.upd kwin_translate_activity_rule.upd
|
install( FILES kwin_fsp_workarounds_1.upd kwin_update_tabbox_settings.upd kwin_remove_effects.upd kwin_update_tabbox_qml_settings.upd kwin_remove_delay_focus.upd kwin_update_49.upd kwin_update_410.upd kwin_translate_activity_rule.upd kwin_translate_confrequest_rule.upd
|
||||||
kwin_update_411.upd
|
kwin_update_411.upd
|
||||||
DESTINATION ${KCONF_UPDATE_INSTALL_DIR} )
|
DESTINATION ${KCONF_UPDATE_INSTALL_DIR} )
|
||||||
install( PROGRAMS kwin_remove_delay_focus.sh kwin_translate_activity_rule.sh DESTINATION ${KCONF_UPDATE_INSTALL_DIR} )
|
install( PROGRAMS kwin_remove_delay_focus.sh kwin_translate_activity_rule.sh kwin_translate_confrequest_rule.sh DESTINATION ${KCONF_UPDATE_INSTALL_DIR} )
|
||||||
install( FILES stripTitle.js DESTINATION ${DATA_INSTALL_DIR}/kwin )
|
install( FILES stripTitle.js DESTINATION ${DATA_INSTALL_DIR}/kwin )
|
||||||
|
|
||||||
|
|
14
data/kwin_translate_confrequest_rule.sh
Executable file
14
data/kwin_translate_confrequest_rule.sh
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
COUNT=`kreadconfig --file kwinrulesrc --group General --key count`
|
||||||
|
if [ -z "$COUNT" ]; then
|
||||||
|
exit 0 # nothing to do for us
|
||||||
|
fi
|
||||||
|
|
||||||
|
# can you imaging how *much* faster sed is?
|
||||||
|
# it's however less reliable (installation, ini config, etc.)
|
||||||
|
|
||||||
|
for i in `seq 1 $COUNT`; do
|
||||||
|
if [ "`kreadconfig --file kwinrulesrc --group $i --key ignoregeometryrule`" = "2" ]; then
|
||||||
|
kwriteconfig --file kwinrulesrc --group $i --key ignoregeometryrule "3"
|
||||||
|
fi
|
||||||
|
done
|
2
data/kwin_translate_confrequest_rule.upd
Normal file
2
data/kwin_translate_confrequest_rule.upd
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Id=Kwin-4.11
|
||||||
|
Script=kwin_translate_confrequest_rule.sh
|
|
@ -232,7 +232,18 @@ void ShowFpsEffect::paintGL(int fps)
|
||||||
paintDrawSizeGraph(x, y);
|
paintDrawSizeGraph(x, y);
|
||||||
|
|
||||||
// Paint FPS numerical value
|
// Paint FPS numerical value
|
||||||
paintFPSText(fps);
|
if (fpsTextRect.isValid()) {
|
||||||
|
delete fpsText;
|
||||||
|
fpsText = new GLTexture(fpsTextImage(fps));
|
||||||
|
fpsText->bind();
|
||||||
|
ShaderBinder binder(ShaderManager::SimpleShader);
|
||||||
|
if (effects->compositingType() == OpenGL2Compositing) {
|
||||||
|
binder.shader()->setUniform("offset", QVector2D(0, 0));
|
||||||
|
}
|
||||||
|
fpsText->render(QRegion(fpsTextRect), fpsTextRect);
|
||||||
|
fpsText->unbind();
|
||||||
|
effects->addRepaint(fpsTextRect);
|
||||||
|
}
|
||||||
|
|
||||||
// Paint paint sizes
|
// Paint paint sizes
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
|
@ -284,6 +295,15 @@ void ShowFpsEffect::paintXrender(int fps)
|
||||||
|
|
||||||
// Paint amount of rendered pixels graph
|
// Paint amount of rendered pixels graph
|
||||||
paintDrawSizeGraph(x + FPS_WIDTH + MAX_TIME, y);
|
paintDrawSizeGraph(x + FPS_WIDTH + MAX_TIME, y);
|
||||||
|
|
||||||
|
// Paint FPS numerical value
|
||||||
|
if (fpsTextRect.isValid()) {
|
||||||
|
QImage textImg(fpsTextImage(fps));
|
||||||
|
XRenderPicture textPic(textImg);
|
||||||
|
xcb_render_composite(connection(), XCB_RENDER_PICT_OP_OVER, textPic, XCB_RENDER_PICTURE_NONE,
|
||||||
|
effects->xrenderBufferPicture(), 0, 0, 0, 0, fpsTextRect.x(), fpsTextRect.y(), textImg.width(), textImg.height());
|
||||||
|
effects->addRepaint(fpsTextRect);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -450,26 +470,16 @@ void ShowFpsEffect::postPaintScreen()
|
||||||
effects->addRepaint(fps_rect);
|
effects->addRepaint(fps_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowFpsEffect::paintFPSText(int fps)
|
QImage ShowFpsEffect::fpsTextImage(int fps)
|
||||||
{
|
{
|
||||||
if (!fpsTextRect.isValid())
|
|
||||||
return;
|
|
||||||
QImage im(100, 100, QImage::Format_ARGB32);
|
QImage im(100, 100, QImage::Format_ARGB32);
|
||||||
im.fill(0);
|
im.fill(Qt::transparent);
|
||||||
QPainter painter(&im);
|
QPainter painter(&im);
|
||||||
painter.setFont(textFont);
|
painter.setFont(textFont);
|
||||||
painter.setPen(textColor);
|
painter.setPen(textColor);
|
||||||
painter.drawText(QRect(0, 0, 100, 100), textAlign, QString::number(fps));
|
painter.drawText(QRect(0, 0, 100, 100), textAlign, QString::number(fps));
|
||||||
delete fpsText;
|
painter.end();
|
||||||
fpsText = new GLTexture(im);
|
return im;
|
||||||
fpsText->bind();
|
|
||||||
ShaderBinder binder(ShaderManager::SimpleShader);
|
|
||||||
if (effects->compositingType() == OpenGL2Compositing) {
|
|
||||||
binder.shader()->setUniform("offset", QVector2D(0, 0));
|
|
||||||
}
|
|
||||||
fpsText->render(QRegion(fpsTextRect), fpsTextRect);
|
|
||||||
fpsText->unbind();
|
|
||||||
effects->addRepaint(fpsTextRect);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -80,7 +80,7 @@ private:
|
||||||
void paintFPSGraph(int x, int y);
|
void paintFPSGraph(int x, int y);
|
||||||
void paintDrawSizeGraph(int x, int y);
|
void paintDrawSizeGraph(int x, int y);
|
||||||
void paintGraph(int x, int y, QList<int> values, QList<int> lines, bool colorize);
|
void paintGraph(int x, int y, QList<int> values, QList<int> lines, bool colorize);
|
||||||
void paintFPSText(int fps);
|
QImage fpsTextImage(int fps);
|
||||||
QTime t;
|
QTime t;
|
||||||
enum { NUM_PAINTS = 100 }; // remember time needed to paint this many paints
|
enum { NUM_PAINTS = 100 }; // remember time needed to paint this many paints
|
||||||
int paints[ NUM_PAINTS ]; // time needed to paint
|
int paints[ NUM_PAINTS ]; // time needed to paint
|
||||||
|
|
|
@ -145,7 +145,7 @@ void WindowGeometry::slotWindowStepUserMovedResized(EffectWindow *w, const QRect
|
||||||
{
|
{
|
||||||
if (iAmActivated && iAmActive && w == myResizeWindow) {
|
if (iAmActivated && iAmActive && w == myResizeWindow) {
|
||||||
if (myExtraDirtyArea.isValid())
|
if (myExtraDirtyArea.isValid())
|
||||||
w->addLayerRepaint(myExtraDirtyArea);
|
effects->addRepaint(myExtraDirtyArea);
|
||||||
|
|
||||||
myExtraDirtyArea = QRect();
|
myExtraDirtyArea = QRect();
|
||||||
|
|
||||||
|
@ -197,11 +197,9 @@ void WindowGeometry::slotWindowStepUserMovedResized(EffectWindow *w, const QRect
|
||||||
myExtraDirtyArea |= myMeasure[1]->geometry();
|
myExtraDirtyArea |= myMeasure[1]->geometry();
|
||||||
myExtraDirtyArea |= myMeasure[2]->geometry();
|
myExtraDirtyArea |= myMeasure[2]->geometry();
|
||||||
myExtraDirtyArea.adjust(-6,-6,6,6);
|
myExtraDirtyArea.adjust(-6,-6,6,6);
|
||||||
if (w->expandedGeometry().contains(myExtraDirtyArea))
|
|
||||||
myExtraDirtyArea = QRect();
|
|
||||||
|
|
||||||
if (myExtraDirtyArea.isValid())
|
if (myExtraDirtyArea.isValid())
|
||||||
w->addLayerRepaint(myExtraDirtyArea);
|
effects->addRepaint(myExtraDirtyArea);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,11 +109,15 @@ static xcb_render_picture_t createPicture(xcb_pixmap_t pix, int depth)
|
||||||
|
|
||||||
XRenderPicture::XRenderPicture(const QPixmap &pix)
|
XRenderPicture::XRenderPicture(const QPixmap &pix)
|
||||||
{
|
{
|
||||||
if (!Extensions::nonNativePixmaps()) {
|
if (Extensions::nonNativePixmaps()) {
|
||||||
|
XRenderPicture(pix.toImage());
|
||||||
|
} else {
|
||||||
d = new XRenderPictureData(createPicture(pix.handle(), pix.depth()));
|
d = new XRenderPictureData(createPicture(pix.handle(), pix.depth()));
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
QImage img(pix.toImage());
|
}
|
||||||
|
|
||||||
|
XRenderPicture::XRenderPicture(const QImage &img)
|
||||||
|
{
|
||||||
const int depth = img.depth();
|
const int depth = img.depth();
|
||||||
xcb_pixmap_t xpix = xcb_generate_id(connection());
|
xcb_pixmap_t xpix = xcb_generate_id(connection());
|
||||||
xcb_create_pixmap(connection(), depth, xpix, rootWindow(), img.width(), img.height());
|
xcb_create_pixmap(connection(), depth, xpix, rootWindow(), img.width(), img.height());
|
||||||
|
|
|
@ -70,6 +70,7 @@ public:
|
||||||
explicit XRenderPicture(xcb_render_picture_t pic = XCB_RENDER_PICTURE_NONE);
|
explicit XRenderPicture(xcb_render_picture_t pic = XCB_RENDER_PICTURE_NONE);
|
||||||
// TODO: Qt5 - replace QPixmap by QImage to make it more obvious that it uses PutImage
|
// TODO: Qt5 - replace QPixmap by QImage to make it more obvious that it uses PutImage
|
||||||
explicit XRenderPicture(const QPixmap &pix);
|
explicit XRenderPicture(const QPixmap &pix);
|
||||||
|
explicit XRenderPicture(const QImage &img);
|
||||||
XRenderPicture(xcb_pixmap_t pix, int depth);
|
XRenderPicture(xcb_pixmap_t pix, int depth);
|
||||||
operator xcb_render_picture_t();
|
operator xcb_render_picture_t();
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
/********************************************************************
|
|
||||||
KWin - the KDE window manager
|
|
||||||
This file is part of the KDE project.
|
|
||||||
|
|
||||||
Copyright (C) 2007 Lubos Lunak <l.lunak@kde.org>
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*********************************************************************/
|
|
||||||
|
|
||||||
// krazy:skip
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
The only purpose of this file is to be later in the link order than
|
|
||||||
(nvidia's) libGL, thus being initialized by the dynamic linker before it,
|
|
||||||
allowing it to set __GL_YIELD=NOTHING soon enough for libGL to notice it.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <kdefakes.h>
|
|
||||||
|
|
||||||
class kwinnvidiahack
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
kwinnvidiahack();
|
|
||||||
};
|
|
||||||
|
|
||||||
kwinnvidiahack::kwinnvidiahack()
|
|
||||||
{
|
|
||||||
const char* env = getenv("KWIN_NVIDIA_HACK");
|
|
||||||
#if 1 // turned on by default
|
|
||||||
if (env == NULL || env[ 0 ] != '0')
|
|
||||||
setenv("__GL_YIELD", "NOTHING", true);
|
|
||||||
#else // turned off by default
|
|
||||||
if (env != NULL && env[ 0 ] != '0')
|
|
||||||
setenv("__GL_YIELD", "NOTHING", true);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
kwinnvidiahack kwinnvidiahackinst;
|
|
|
@ -656,6 +656,9 @@ void Options::setUnredirectFullscreen(bool unredirectFullscreen)
|
||||||
if (m_unredirectFullscreen == unredirectFullscreen) {
|
if (m_unredirectFullscreen == unredirectFullscreen) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (GLPlatform::instance()->driver() == Driver_Intel) { // write back the value
|
||||||
|
KConfigGroup(KGlobal::config(), "Compositing").writeEntry("UnredirectFullscreen", false);
|
||||||
|
}
|
||||||
m_unredirectFullscreen = unredirectFullscreen;
|
m_unredirectFullscreen = unredirectFullscreen;
|
||||||
emit unredirectFullscreenChanged();
|
emit unredirectFullscreenChanged();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue