Merge branch 'master' into frameworks-scratch
Conflicts: CMakeLists.txt kwin/client.cpp kwin/effects/highlightwindow/highlightwindow.cpp kwin/libkwineffects/kwingltexture.cpp kwin/libkwineffects/kwinxrenderutils.cpp kwin/scene_opengl.cpp kwin/workspace.cpp plasma/desktop/applets/kickoff/CMakeLists.txt plasma/desktop/applets/taskmanager/package/contents/code/tools.js plasma/desktop/applets/taskmanager/package/contents/ui/Task.qml plasma/desktop/applets/taskmanager/package/contents/ui/main.qml plasma/desktop/applets/taskmanager/package/metadata.desktop plasma/desktop/applets/taskmanager/plugin/textlabel.h plasma/desktop/applets/tasks/CMakeLists.txt plasma/desktop/applets/tasks/package/metadata.desktop plasma/desktop/applets/tasks/tasks.cpp plasma/desktop/toolboxes/plasma-toolbox-desktoptoolbox.desktop plasma/generic/applets/activitybar/activitybar.cpp plasma/generic/wallpapers/color/plasma-wallpaper-color.desktop plasma/generic/wallpapers/image/plasma-wallpaper-image.desktop
This commit is contained in:
commit
969e6b85e7
59 changed files with 301 additions and 116 deletions
|
@ -352,6 +352,9 @@ void Client::destroyClient()
|
|||
|
||||
void Client::updateInputWindow()
|
||||
{
|
||||
if (!Xcb::Extensions::self()->isShapeInputAvailable())
|
||||
return;
|
||||
|
||||
QRegion region;
|
||||
|
||||
if (!noBorder()) {
|
||||
|
|
|
@ -12,6 +12,7 @@ Comment[de]=KWin-Fensterdekoration
|
|||
Comment[el]=Διακοσμήσεις παραθύρου KWin
|
||||
Comment[es]=Decoración de ventanas de KWin
|
||||
Comment[et]=KWini akna dekoratsioon
|
||||
Comment[eu]=KWin leihoen apaingarriak
|
||||
Comment[fi]=KWin-ikkunakoristus
|
||||
Comment[fr]=Décorations de fenêtres KWin
|
||||
Comment[ga]=Maisiúchán Fuinneog KWin
|
||||
|
|
|
@ -271,6 +271,7 @@ Decoration {
|
|||
}
|
||||
Text {
|
||||
id: caption
|
||||
textFormat: Text.PlainText
|
||||
anchors {
|
||||
top: parent.top
|
||||
left: leftButtonGroup.right
|
||||
|
|
|
@ -98,6 +98,7 @@ Comment[de]=Das klassische Design aus KDE 3
|
|||
Comment[el]=Το γνωστό κλασικό θέμα από το KDE 3
|
||||
Comment[es]=El tema clásico conocido desde KDE 3
|
||||
Comment[et]=Klassikaline KDE 3 ajast tuntud teema
|
||||
Comment[eu]=KDE 3tik ezaguna den gai klasikoa
|
||||
Comment[fi]=KDE 3:sta tuttu klassinen teema
|
||||
Comment[fr]=Le thème classique connu depuis KDE 3
|
||||
Comment[gl]=O tema clásico de KDE 3
|
||||
|
|
|
@ -961,7 +961,7 @@ void Toplevel::addDamageFull()
|
|||
return;
|
||||
|
||||
damage_region = rect();
|
||||
repaints_region = rect();
|
||||
repaints_region |= rect();
|
||||
|
||||
emit damaged(this, rect());
|
||||
}
|
||||
|
|
10
cursor.cpp
10
cursor.cpp
|
@ -227,13 +227,15 @@ void X11Cursor::doStopCursorTracking()
|
|||
|
||||
void X11Cursor::mousePolled()
|
||||
{
|
||||
const QPoint last = currentPos();
|
||||
const uint16_t lastMask = m_buttonMask;
|
||||
static QPoint lastPos = currentPos();
|
||||
static uint16_t lastMask = m_buttonMask;
|
||||
doGetPos(); // Update if needed
|
||||
if (last != currentPos() || lastMask != m_buttonMask) {
|
||||
emit mouseChanged(currentPos(), last,
|
||||
if (lastPos != currentPos() || lastMask != m_buttonMask) {
|
||||
emit mouseChanged(currentPos(), lastPos,
|
||||
x11ToQtMouseButtons(m_buttonMask), x11ToQtMouseButtons(lastMask),
|
||||
x11ToQtKeyboardModifiers(m_buttonMask), x11ToQtKeyboardModifiers(lastMask));
|
||||
lastPos = currentPos();
|
||||
lastMask = m_buttonMask;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1023,7 +1023,7 @@ int EffectsHandlerImpl::displayWidth() const
|
|||
|
||||
int EffectsHandlerImpl::displayHeight() const
|
||||
{
|
||||
return KWin::displayWidth();
|
||||
return KWin::displayHeight();
|
||||
}
|
||||
|
||||
EffectWindow* EffectsHandlerImpl::findWindow(WId id) const
|
||||
|
|
|
@ -123,6 +123,7 @@ CubeEffect::CubeEffect()
|
|||
connect(effects, SIGNAL(tabBoxAdded(int)), this, SLOT(slotTabBoxAdded(int)));
|
||||
connect(effects, SIGNAL(tabBoxClosed()), this, SLOT(slotTabBoxClosed()));
|
||||
connect(effects, SIGNAL(tabBoxUpdated()), this, SLOT(slotTabBoxUpdated()));
|
||||
connect(effects, SIGNAL(screenGeometryChanged(const QSize&)), this, SLOT(slotResetShaders()));
|
||||
|
||||
reconfigure(ReconfigureAll);
|
||||
}
|
||||
|
@ -290,6 +291,14 @@ void CubeEffect::slotWallPaperLoaded()
|
|||
watcher->deleteLater();
|
||||
}
|
||||
|
||||
void CubeEffect::slotResetShaders()
|
||||
{
|
||||
ShaderManager::instance()->resetShader(m_capShader, ShaderManager::GenericShader);
|
||||
ShaderManager::instance()->resetShader(m_reflectionShader, ShaderManager::GenericShader);
|
||||
ShaderManager::instance()->resetShader(cylinderShader, ShaderManager::GenericShader);
|
||||
ShaderManager::instance()->resetShader(sphereShader, ShaderManager::GenericShader);
|
||||
}
|
||||
|
||||
bool CubeEffect::loadShader()
|
||||
{
|
||||
if (!(GLPlatform::instance()->supports(GLSL) &&
|
||||
|
|
|
@ -136,6 +136,7 @@ private Q_SLOTS:
|
|||
void slotTabBoxClosed();
|
||||
void slotCubeCapLoaded();
|
||||
void slotWallPaperLoaded();
|
||||
void slotResetShaders();
|
||||
private:
|
||||
enum RotationDirection {
|
||||
Left,
|
||||
|
|
|
@ -51,11 +51,14 @@ DashboardEffect::~DashboardEffect()
|
|||
|
||||
void DashboardEffect::reconfigure(ReconfigureFlags)
|
||||
{
|
||||
DashboardConfig::self()->readConfig();
|
||||
brightness = DashboardConfig::brightness()/ 100.0;
|
||||
saturation = DashboardConfig::saturation()/ 100.0;
|
||||
blur = DashboardConfig::blur();
|
||||
|
||||
timeline.setDuration(animationTime<DashboardConfig>(500));
|
||||
if (transformWindow)
|
||||
effects->addRepaintFull();
|
||||
}
|
||||
|
||||
void DashboardEffect::paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data)
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="3">
|
||||
<widget class="QCheckBox" name="kcfg_DimGroup">
|
||||
<widget class="QCheckBox" name="kcfg_DimByGroup">
|
||||
<property name="text">
|
||||
<string>Apply effect to &groups</string>
|
||||
</property>
|
||||
|
@ -104,7 +104,7 @@
|
|||
<tabstop>kcfg_Strength</tabstop>
|
||||
<tabstop>kcfg_DimPanels</tabstop>
|
||||
<tabstop>kcfg_DimDesktop</tabstop>
|
||||
<tabstop>kcfg_DimGroup</tabstop>
|
||||
<tabstop>kcfg_DimByGroup</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections>
|
||||
|
|
|
@ -109,12 +109,15 @@ void HighlightWindowEffect::slotWindowAdded(EffectWindow* w)
|
|||
{
|
||||
if (!m_highlightedWindows.isEmpty()) {
|
||||
// The effect is activated thus we need to add it to the opacity hash
|
||||
if (w->isNormalWindow() || w->isDialog()) // Only fade out windows
|
||||
m_windowOpacity[w] = isInitiallyHidden(w) ? 0.0 : 0.15;
|
||||
else
|
||||
m_windowOpacity[w] = 1.0;
|
||||
foreach (const WId id, m_highlightedIds) {
|
||||
if (w == effects->findWindow(id)) {
|
||||
m_windowOpacity[w] = 1.0; // this window was demanded to be highlighted before it appeared
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_windowOpacity[w] = 0.15; // this window is not currently highlighted
|
||||
}
|
||||
slotPropertyNotify(w, m_atom); // Check initial value
|
||||
slotPropertyNotify(w, m_atom, w); // Check initial value
|
||||
}
|
||||
|
||||
void HighlightWindowEffect::slotWindowClosed(EffectWindow* w)
|
||||
|
@ -128,7 +131,7 @@ void HighlightWindowEffect::slotWindowDeleted(EffectWindow* w)
|
|||
m_windowOpacity.remove(w);
|
||||
}
|
||||
|
||||
void HighlightWindowEffect::slotPropertyNotify(EffectWindow* w, long a)
|
||||
void HighlightWindowEffect::slotPropertyNotify(EffectWindow* w, long a, EffectWindow *addedWindow)
|
||||
{
|
||||
if (a != m_atom)
|
||||
return; // Not our atom
|
||||
|
@ -138,7 +141,8 @@ void HighlightWindowEffect::slotPropertyNotify(EffectWindow* w, long a)
|
|||
effects->readRootProperty(m_atom, m_atom, 32);
|
||||
if (byteData.length() < 1) {
|
||||
// Property was removed, clearing highlight
|
||||
finishHighlighting();
|
||||
if (!addedWindow || w != addedWindow)
|
||||
finishHighlighting();
|
||||
return;
|
||||
}
|
||||
long* data = reinterpret_cast<long*>(byteData.data());
|
||||
|
@ -154,11 +158,13 @@ void HighlightWindowEffect::slotPropertyNotify(EffectWindow* w, long a)
|
|||
//foreach ( EffectWindow* e, m_highlightedWindows )
|
||||
// effects->setElevatedWindow( e, false );
|
||||
m_highlightedWindows.clear();
|
||||
m_highlightedIds.clear();
|
||||
for (int i = 0; i < length; i++) {
|
||||
m_highlightedIds << data[i];
|
||||
EffectWindow* foundWin = effects->findWindow(data[i]);
|
||||
if (!foundWin) {
|
||||
qDebug() << "Invalid window targetted for highlight. Requested:" << data[i];
|
||||
continue;
|
||||
continue; // might come in later.
|
||||
}
|
||||
m_highlightedWindows.append(foundWin);
|
||||
// TODO: We cannot just simply elevate the window as this will elevate it over
|
||||
|
|
|
@ -42,7 +42,7 @@ public Q_SLOTS:
|
|||
void slotWindowAdded(KWin::EffectWindow* w);
|
||||
void slotWindowClosed(KWin::EffectWindow *w);
|
||||
void slotWindowDeleted(KWin::EffectWindow *w);
|
||||
void slotPropertyNotify(KWin::EffectWindow* w, long atom);
|
||||
void slotPropertyNotify(KWin::EffectWindow* w, long atom, EffectWindow *addedWindow = NULL);
|
||||
|
||||
private:
|
||||
void prepareHighlighting();
|
||||
|
@ -56,6 +56,7 @@ private:
|
|||
long m_atom;
|
||||
QList<EffectWindow*> m_highlightedWindows;
|
||||
EffectWindow* m_monitorWindow;
|
||||
QList<WId> m_highlightedIds;
|
||||
|
||||
// Offscreen position cache
|
||||
/*QRect m_thumbArea; // Thumbnail area
|
||||
|
|
|
@ -59,6 +59,7 @@ InvertEffect::InvertEffect()
|
|||
connect(b, SIGNAL(triggered(bool)), this, SLOT(toggleWindow()));
|
||||
|
||||
connect(effects, SIGNAL(windowClosed(KWin::EffectWindow*)), this, SLOT(slotWindowClosed(KWin::EffectWindow*)));
|
||||
connect(effects, SIGNAL(screenGeometryChanged(const QSize&)), this, SLOT(resetShader()));
|
||||
}
|
||||
|
||||
InvertEffect::~InvertEffect()
|
||||
|
@ -178,6 +179,11 @@ bool InvertEffect::provides(Feature f)
|
|||
return f == ScreenInversion;
|
||||
}
|
||||
|
||||
void InvertEffect::resetShader()
|
||||
{
|
||||
ShaderManager::instance()->resetShader(m_shader, ShaderManager::GenericShader);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
#include "invert.moc"
|
||||
|
|
|
@ -54,6 +54,9 @@ public Q_SLOTS:
|
|||
void toggleWindow();
|
||||
void slotWindowClosed(KWin::EffectWindow *w);
|
||||
|
||||
private Q_SLOTS:
|
||||
void resetShader();
|
||||
|
||||
protected:
|
||||
bool loadData();
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ Name[da]=KScreen
|
|||
Name[de]=Kscreen
|
||||
Name[el]=Kscreen
|
||||
Name[es]=Kscreen
|
||||
Name[eu]=Kscreen
|
||||
Name[fi]=KScreen
|
||||
Name[fr]=KScreen
|
||||
Name[gl]=KScreen
|
||||
|
@ -15,8 +16,10 @@ Name[ia]=Kscreen
|
|||
Name[it]=Kscreen
|
||||
Name[kk]=Kscreen
|
||||
Name[ko]=Kscreen
|
||||
Name[nb]=Kscreen
|
||||
Name[nl]=Kscreen
|
||||
Name[pa]=ਕੇਸਕਰੀਨ
|
||||
Name[pl]=Kscreen
|
||||
Name[pt]=Kscreen
|
||||
Name[pt_BR]=KScreen
|
||||
Name[ru]=Kscreen
|
||||
|
@ -40,6 +43,7 @@ Comment[cs]=Pomocný efekt pro KScreen
|
|||
Comment[da]=Hjælpeeffekt til KScreen
|
||||
Comment[de]=Hilfseffekt für KScreen
|
||||
Comment[es]=Efecto auxiliar para KScreen
|
||||
Comment[eu]=KScreen-entzako efektu laguntzailea
|
||||
Comment[fi]=Avustajatehoste KScreenille
|
||||
Comment[fr]=Effet d'assistance pour KScreen
|
||||
Comment[gl]=Efecto auxiliar para KScreen.
|
||||
|
@ -48,8 +52,10 @@ Comment[ia]=Effecto de adjutante pro KScreen
|
|||
Comment[it]=Effetto di assistenza per KScreen
|
||||
Comment[kk]=KScreen-нің көмек эффекті
|
||||
Comment[ko]=KScreen 도우미 효과
|
||||
Comment[nb]=Hjelpereffekt for KScreen
|
||||
Comment[nl]=Effect van hulp voor KScreen
|
||||
Comment[pa]=ਕੇਸਕਰੀਨ ਲਈ ਮੱਦਦ ਪ੍ਰਭਾਵ
|
||||
Comment[pl]=Efekt pomocniczy dla KScreen
|
||||
Comment[pt]=Efeito auxiliar do KScreen
|
||||
Comment[pt_BR]=Efeito auxiliar do KScreen
|
||||
Comment[ru]=Вспомогательный эффект для KScreen
|
||||
|
|
|
@ -49,6 +49,7 @@ Name[de]=Maximieren
|
|||
Name[el]=Μεγιστοποίηση
|
||||
Name[es]=Maximizar
|
||||
Name[et]=Maksimeerimine
|
||||
Name[eu]=Maximizatu
|
||||
Name[fi]=Suurentaminen
|
||||
Name[fr]=Maximiser
|
||||
Name[ga]=Uasmhéadaigh
|
||||
|
|
|
@ -9,6 +9,7 @@ Name[de]=Animation für Mausklicks
|
|||
Name[el]=Εφέ κίνησης με κλικ του ποντικιού
|
||||
Name[es]=Animación del clic de ratón
|
||||
Name[et]=Hiireklõpsu animeerimine
|
||||
Name[eu]=Sagu-klikaren animazioa
|
||||
Name[fi]=Hiiren napsautuksen animointi
|
||||
Name[fr]=Animation du clic de la souris
|
||||
Name[gl]=Animación ao premer o rato
|
||||
|
@ -52,6 +53,7 @@ Comment[de]=Erzeugt bei jedem Mausklick eine Animation. Dies ist sinnvoll für B
|
|||
Comment[el]=Σχηματίζει εφέ κίνησης όποτε γίνεται κλικ σε κουμπί του ποντικιού. Αυτό είναι χρήσιμο για βιντεοσκόπηση οθόνης / παρουσιάσεις.
|
||||
Comment[es]=Crea una animación cada vez que se pulsa un botón del ratón. Esto resulta útil para las grabaciones de pantalla y para las presentaciones.
|
||||
Comment[et]=Animatsiooni loomine hiirenupu klõpsamise peale. See on kasulik näiteks ekraanisalvestuste või esitluste jaoks.
|
||||
Comment[eu]=Animazio bat sortzen du saguaren botoi bat klikatzen den bakoitzean. Erabilgarria da pantailaren grabaziorako/aurkezpenetarako.
|
||||
Comment[fi]=Näyttää animoinnin hiirtä napsautettaessa. Tästä on hyötyä näyttötallennuksissa ja esityksissä.
|
||||
Comment[fr]=Crée une animation associé à un clic sur un bouton de la souris. Ceci est utile pour les enregistrement d'écran ou les présentations.
|
||||
Comment[gl]=Crea unha animación cando se preme no botón do rato. Isto é útil nas presentacións e nas gravacións da pantalla.
|
||||
|
|
|
@ -16,6 +16,7 @@ Name[de]=Animation für Mausklicks
|
|||
Name[el]=Εφέ κίνησης με κλικ του ποντικιού
|
||||
Name[es]=Animación del clic de ratón
|
||||
Name[et]=Hiireklõpsu animeerimine
|
||||
Name[eu]=Sagu-klikaren animazioa
|
||||
Name[fi]=Hiiren napsautuksen animointi
|
||||
Name[fr]=Animation du clic de la souris
|
||||
Name[gl]=Animación ao premer o rato
|
||||
|
|
|
@ -26,7 +26,7 @@ var scaleInEffect = {
|
|||
},
|
||||
isScaleWindow: function (window) {
|
||||
"use strict";
|
||||
if (window.popupMenu || window.specialWindow || window.utility ||
|
||||
if (window.popupMenu || window.specialWindow || window.utility || window.minimized ||
|
||||
effect.isGrabbed(window, Effect.WindowAddedGrabRole)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ Name[da]=Skærmkant
|
|||
Name[de]=Bildschirmkante
|
||||
Name[el]=Άκρο οθόνης
|
||||
Name[es]=Borde de la pantalla
|
||||
Name[eu]=Pantailaren ertza
|
||||
Name[fi]=Näytön reuna
|
||||
Name[fr]=Bord de l'écran
|
||||
Name[gl]=Beira da pantalla
|
||||
|
@ -46,6 +47,7 @@ Comment[da]=Fremhæver en skærmkant når den nærmer sig
|
|||
Comment[de]=Bildschirmkante bei Annäherung hervorheben
|
||||
Comment[el]=Εμφανίζει τονισμένο το άκρο της οθόνης όταν το πλησιάζετε
|
||||
Comment[es]=Resalta el borde de la pantalla al aproximarse a él
|
||||
Comment[eu]=Pantailaren ertz bat nabarmentzen du hurbiltzerakoan
|
||||
Comment[fi]=Korostaa näytön reunaa sitä lähestyttäessä
|
||||
Comment[fr]=Mettre en valeur le bord de l'écran à l'approche
|
||||
Comment[gl]=Realza unha beira da pantalla cando se aproxima
|
||||
|
|
|
@ -155,8 +155,15 @@ void WindowGeometry::slotWindowStepUserMovedResized(EffectWindow *w, const QRect
|
|||
myExtraDirtyArea = QRect();
|
||||
|
||||
myCurrentGeometry = geometry;
|
||||
QPoint center = geometry.center();
|
||||
const QRect &r = geometry;
|
||||
const QRect &r2 = myOriginalGeometry;
|
||||
const QRect screen = effects->clientArea(ScreenArea, center, w->desktop());
|
||||
QRect expandedGeometry = w->expandedGeometry();
|
||||
expandedGeometry = geometry.adjusted(expandedGeometry.x() - w->x(),
|
||||
expandedGeometry.y() - w->y(),
|
||||
expandedGeometry.right() - w->geometry().right(),
|
||||
expandedGeometry.bottom() - w->geometry().bottom());
|
||||
|
||||
// sufficient for moves, resizes calculated otherwise
|
||||
int dx = r.x() - r2.x();
|
||||
|
@ -167,7 +174,9 @@ void WindowGeometry::slotWindowStepUserMovedResized(EffectWindow *w, const QRect
|
|||
myMeasure[0]->setText( i18nc(myCoordString_1, r.x(), r.y(), number(dx), number(dy) ) );
|
||||
else
|
||||
myMeasure[0]->setText( i18nc(myCoordString_0, r.x(), r.y() ) );
|
||||
myMeasure[0]->setPosition(w->expandedGeometry().topLeft() + QPoint(6,6)); // "6" is magic number because the unstyled effectframe has 5px padding
|
||||
QPoint pos = expandedGeometry.topLeft();
|
||||
pos = QPoint(qMax(pos.x(), screen.x()), qMax(pos.y(), screen.y()));
|
||||
myMeasure[0]->setPosition(pos + QPoint(6,6)); // "6" is magic number because the unstyled effectframe has 5px padding
|
||||
|
||||
// center ----------------------
|
||||
if (w->isUserResize()) {
|
||||
|
@ -188,15 +197,22 @@ void WindowGeometry::slotWindowStepUserMovedResized(EffectWindow *w, const QRect
|
|||
dy = r.bottom() - r2.bottom();
|
||||
} else
|
||||
myMeasure[1]->setText( i18nc(myCoordString_0, number(dx), number(dy) ) );
|
||||
|
||||
myMeasure[1]->setPosition(geometry.center());
|
||||
const int cdx = myMeasure[1]->geometry().width() / 2 + 3; // "3" = 6/2 is magic number because
|
||||
const int cdy = myMeasure[1]->geometry().height() / 2 + 3; // the unstyled effectframe has 5px padding
|
||||
center = QPoint(qMax(center.x(), screen.x() + cdx),
|
||||
qMax(center.y(), screen.y() + cdy));
|
||||
center = QPoint(qMin(center.x(), screen.right() - cdx),
|
||||
qMin(center.y(), screen.bottom() - cdy));
|
||||
myMeasure[1]->setPosition(center);
|
||||
|
||||
// lower right ----------------------
|
||||
if (w->isUserResize())
|
||||
myMeasure[2]->setText( i18nc(myCoordString_1, r.right(), r.bottom(), number(dx), number(dy) ) );
|
||||
else
|
||||
myMeasure[2]->setText( i18nc(myCoordString_0, r.right(), r.bottom() ) );
|
||||
myMeasure[2]->setPosition(w->expandedGeometry().bottomRight() - QPoint(6,6)); // "6" is magic number because the unstyled effectframe has 5px padding
|
||||
pos = expandedGeometry.bottomRight();
|
||||
pos = QPoint(qMin(pos.x(), screen.right()), qMin(pos.y(), screen.bottom()));
|
||||
myMeasure[2]->setPosition(pos - QPoint(6,6)); // "6" is magic number because the unstyled effectframe has 5px padding
|
||||
|
||||
myExtraDirtyArea |= myMeasure[0]->geometry();
|
||||
myExtraDirtyArea |= myMeasure[1]->geometry();
|
||||
|
|
|
@ -177,7 +177,6 @@ bool EglOnXBackend::initRenderingContext()
|
|||
const EGLint context_attribs_31_core[] = {
|
||||
EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
|
||||
EGL_CONTEXT_MINOR_VERSION_KHR, 1,
|
||||
EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
|
|
|
@ -1523,6 +1523,7 @@ void Unmanaged::configureNotifyEvent(xcb_configure_notify_event_t *e)
|
|||
addWorkspaceRepaint(visibleRect()); // damage old area
|
||||
QRect old = geom;
|
||||
geom = newgeom;
|
||||
emit geometryChanged(); // update shadow region
|
||||
addRepaintFull();
|
||||
if (old.size() != geom.size())
|
||||
discardWindowPixmap();
|
||||
|
|
15
geometry.cpp
15
geometry.cpp
|
@ -378,13 +378,16 @@ QPoint Workspace::adjustClientPosition(Client* c, QPoint pos, bool unrestricted,
|
|||
{
|
||||
QSize borderSnapZone(options->borderSnapZone(), options->borderSnapZone());
|
||||
QRect maxRect;
|
||||
int guideMaximized = MaximizeRestore;
|
||||
if (c->maximizeMode() != MaximizeRestore) {
|
||||
maxRect = clientArea(MovementArea, pos + c->rect().center(), c->desktop());
|
||||
maxRect = clientArea(MaximizeArea, pos + c->rect().center(), c->desktop());
|
||||
QRect geo = c->geometry();
|
||||
if (c->maximizeMode() & MaximizeHorizontal && (geo.x() == maxRect.left() || geo.right() == maxRect.right())) {
|
||||
guideMaximized |= MaximizeHorizontal;
|
||||
borderSnapZone.setWidth(qMax(borderSnapZone.width() + 2, maxRect.width() / 16));
|
||||
}
|
||||
if (c->maximizeMode() & MaximizeVertical && (geo.y() == maxRect.top() || geo.bottom() == maxRect.bottom())) {
|
||||
guideMaximized |= MaximizeVertical;
|
||||
borderSnapZone.setHeight(qMax(borderSnapZone.height() + 2, maxRect.height() / 16));
|
||||
}
|
||||
}
|
||||
|
@ -473,7 +476,8 @@ QPoint Workspace::adjustClientPosition(Client* c, QPoint pos, bool unrestricted,
|
|||
lrx = lx + (*l)->width();
|
||||
lry = ly + (*l)->height();
|
||||
|
||||
if (((cy <= lry) && (cy >= ly)) || ((ry >= ly) && (ry <= lry)) || ((cy <= ly) && (ry >= lry))) {
|
||||
if (!(guideMaximized & MaximizeHorizontal) &&
|
||||
(((cy <= lry) && (cy >= ly)) || ((ry >= ly) && (ry <= lry)) || ((cy <= ly) && (ry >= lry)))) {
|
||||
if ((sOWO ? (cx < lrx) : true) && (qAbs(lrx - cx) < snap) && (qAbs(lrx - cx) < deltaX)) {
|
||||
deltaX = qAbs(lrx - cx);
|
||||
nx = lrx;
|
||||
|
@ -484,7 +488,8 @@ QPoint Workspace::adjustClientPosition(Client* c, QPoint pos, bool unrestricted,
|
|||
}
|
||||
}
|
||||
|
||||
if (((cx <= lrx) && (cx >= lx)) || ((rx >= lx) && (rx <= lrx)) || ((cx <= lx) && (rx >= lrx))) {
|
||||
if (!(guideMaximized & MaximizeVertical) &&
|
||||
(((cx <= lrx) && (cx >= lx)) || ((rx >= lx) && (rx <= lrx)) || ((cx <= lx) && (rx >= lrx)))) {
|
||||
if ((sOWO ? (cy < lry) : true) && (qAbs(lry - cy) < snap) && (qAbs(lry - cy) < deltaY)) {
|
||||
deltaY = qAbs(lry - cy);
|
||||
ny = lry;
|
||||
|
@ -497,7 +502,7 @@ QPoint Workspace::adjustClientPosition(Client* c, QPoint pos, bool unrestricted,
|
|||
}
|
||||
|
||||
// Corner snapping
|
||||
if (nx == lrx || nx + cw == lx) {
|
||||
if (!(guideMaximized & MaximizeVertical) && (nx == lrx || nx + cw == lx)) {
|
||||
if ((sOWO ? (ry > lry) : true) && (qAbs(lry - ry) < snap) && (qAbs(lry - ry) < deltaY)) {
|
||||
deltaY = qAbs(lry - ry);
|
||||
ny = lry - ch;
|
||||
|
@ -507,7 +512,7 @@ QPoint Workspace::adjustClientPosition(Client* c, QPoint pos, bool unrestricted,
|
|||
ny = ly;
|
||||
}
|
||||
}
|
||||
if (ny == lry || ny + ch == ly) {
|
||||
if (!(guideMaximized & MaximizeHorizontal) && (ny == lry || ny + ch == ly)) {
|
||||
if ((sOWO ? (rx > lrx) : true) && (qAbs(lrx - rx) < snap) && (qAbs(lrx - rx) < deltaX)) {
|
||||
deltaX = qAbs(lrx - rx);
|
||||
nx = lrx - cw;
|
||||
|
|
|
@ -154,7 +154,7 @@ bool GlxBackend::initRenderingContext()
|
|||
const int attribs_31_core_robustness[] = {
|
||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_MINOR_VERSION_ARB, 1,
|
||||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB | GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB,
|
||||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB,
|
||||
GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, GLX_LOSE_CONTEXT_ON_RESET_ARB,
|
||||
0
|
||||
};
|
||||
|
@ -162,7 +162,6 @@ bool GlxBackend::initRenderingContext()
|
|||
const int attribs_31_core[] = {
|
||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_MINOR_VERSION_ARB, 1,
|
||||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
|
||||
0
|
||||
};
|
||||
|
||||
|
@ -222,6 +221,10 @@ bool GlxBackend::initBuffer()
|
|||
if (overlayWindow()->create()) {
|
||||
// Try to create double-buffered window in the overlay
|
||||
XVisualInfo* visual = glXGetVisualFromFBConfig(display(), fbconfig);
|
||||
if (!visual) {
|
||||
qCritical() << "Failed to get visual from fbconfig";
|
||||
return false;
|
||||
}
|
||||
XSetWindowAttributes attrs;
|
||||
attrs.colormap = XCreateColormap(display(), rootWindow(), visual->visual, AllocNone);
|
||||
window = XCreateWindow(display(), overlayWindow()->window(), 0, 0, displayWidth(), displayHeight(),
|
||||
|
|
|
@ -197,7 +197,7 @@ X-KDE-Keywords[ia]=kwin,fenestra,gerente,componente,effecto,effectos 3D,effectos
|
|||
X-KDE-Keywords[it]=kwin,finestra,gestore,composizione,effetto,effetti 3D,effetti 2D,OpenGL,XRender,impostazioni video,effetti grefici,effetti desktop,animazioni,animazioni varie, effetti del gestore delle finestre,effetto dello scambiafinestre, effetto dello scambiatore di desktop,animazioni,velocità animazioni,animazioni desktop,driver,impostazioni driver,disegno,rendering,effetto invertito,effetto vetro,effetto lente,effetto snap helper,effetto evidenzia mouse,effetto ingrandimento, effetto sfocatura,effetto quadro degli strumenti,effetto esplosione,effetto dissolvenza,effetto dissolvenza desktop,effetto caduta,effetto planatura,effetto evidenziazione finestra,effetto schermata di accesso, effetto disconnessione,effetto lampada magica,effetto animazione di minimizzazione,effetto tracciatura mouse, effetto scalatura,effetto istantanea,effetto foglio,effetto diapositiva,effetto scivolamento,effetto icone nella barra delle applicazioni,effetto miniatura su un lato,translucenza,effetto translucenza, trasparenza,effetto geometria finestra,effetto finestre tremolanti,effetto segnale di avvio,effetto finestra padre,effetto oscura finestra inattiva,effetto oscura schermo,effetto scivola all'indietro,gradevole,effetto gradevole,effetto mostra FPS,effetto ridisegno,effetto scambio cubi,effetto scambio copertina,effetto cubi del desktop,effetto animazione cubi del desktop,effetto griglia desktop,effetto scambiatore con inversione,effetto riquadro,effetto finestra presente,effetto ridimensionamento finestra
|
||||
X-KDE-Keywords[kk]=kwin,window,manager,compositing,effect,3D effects,2D effects,OpenGL,XRender,video settings,graphical effects,desktop effects,animations,various animations,window management effects,window switching effect,desktop switching effect,animations,animation speed,desktop animations,drivers,driver settings,rendering,render,invert effect,looking glass effect,magnifier effect,snap helper effect,track mouse effect,zoom effect,blur effect,dashboard effect,explosion effect,fade effect,fade desktop effect,fall apart effect,glide effect,highlight window effect,login effect,logout effect,magic lamp effect,minimize animation effect,mouse mark effect,scale in effect,screenshot effect,sheet effect,slide effect,sliding popups effect,taskbar thumbnails effect,thumbnail aside effect,translucency,translucency effect,transparency,window geometry effect,wobbly windows effect,startup feedback effect,dialog parent effect,dim inactive effect,dim screen effect,slide back effect,eye candy,candy,show FPS effect,show paint effect,box switch effect,cover switch effect,desktop cube effect,desktop cube animation effect,desktop grid effect,flip switch effect,outline effect,present windows effect,resize window effect
|
||||
X-KDE-Keywords[km]=kwin,window,manager,compositing,effect,3D effects,2D effects,OpenGL,XRender,video settings,graphical effects,desktop effects,animations,various animations,window management effects,window switching effect,desktop switching effect,animations,animation speed,desktop animations,drivers,driver settings,rendering,render,invert effect,looking glass effect,magnifier effect,snap helper effect,track mouse effect,zoom effect,blur effect,dashboard effect,explosion effect,fade effect,fade desktop effect,fall apart effect,glide effect,highlight window effect,login effect,logout effect,magic lamp effect,minimize animation effect,mouse mark effect,scale in effect,screenshot effect,sheet effect,slide effect,sliding popups effect,taskbar thumbnails effect,thumbnail aside effect,translucency,translucency effect,transparency,window geometry effect,wobbly windows effect,startup feedback effect,dialog parent effect,dim inactive effect,dim screen effect,slide back effect,eye candy,candy,show FPS effect,show paint effect,box switch effect,cover switch effect,desktop cube effect,desktop cube animation effect,desktop grid effect,flip switch effect,outline effect,present windows effect,resize window effect
|
||||
X-KDE-Keywords[nb]=kwin,vindusbehandler,sammensetting,effekt,3D-effekter,2D-effekter,OpenGL,XRender,videoinnstillinger,grafiske effekter,skrivebordseffekter,animasjoner,diverse animasjoner,vindusbytteeffekter,effekter ved skrivebordsbytte,animasjoner,animasjonsfart,skrivebordsanimasjoner,drivere,driverinnstillinger,opptegning,opptegner,inverteringseffekt,speileffekt,lupeeffekt,gripehjelpereffekt,musesporeffekt,forstørreeffekt,sløreffekt,kontrollpulteffekt,eksplosjonseffekt,uttoningseffekt,skrivebordtoningseffekt,henfallseffekt,glidereffekt,framhev vindu-effekt,innlogingseffekt,utloggingsefffekt,magisk lampe-effekt, animasjonseffekt ved vindusminimering,musmerkeeffekt,innskalerngseffekt,skjermdumpeffekt,ark-effekt,lysbildeeffekt,glidende oppspretteffekt,effekt for minibilder på oppgavelinja,effekt for minibilder på siden,gjennomskinnelighetseffekt,gjennomsiktighet,vindusgeometri-effekt,skjelvende vinduer-effekt,effekt for oppstartsmelding,effekt for foreldredialog,effekt for mørk inaktiv,effekt for mørk skjerm,gli tilbake-effekt,øyesnop,snop,vis FPS-effekt,vis malingseffekt,boksbytteeffekt,lokkbytteeffekt,skrivebordsterning-effekt,effek for animert skrivebordsterning,effekt for skrivebordsruter,effekt for flipp-bytte,omriss-effekt,effekt for vinduer tilstede,effekt for vinduer som endrer størrelse
|
||||
X-KDE-Keywords[nb]=kwin,vindusbehandler,sammensetting,effekt,3D-effekter,2D-effekter,OpenGL,XRender,videoinnstillinger,grafiske effekter,skrivebordseffekter,animasjoner,diverse animasjoner,vindusbytteeffekter,effekter ved skrivebordsbytte,animasjoner,animasjonsfart,skrivebordsanimasjoner,drivere,driverinnstillinger,opptegning,opptegner,inverteringseffekt,speileffekt,lupeeffekt,gripehjelpereffekt,musesporeffekt,forstørreeffekt,sløreffekt,kontrollpulteffekt,eksplosjonseffekt,uttoningseffekt,skrivebordtoningseffekt,henfallseffekt,glidereffekt,framhev vindu-effekt,innlogingseffekt,utloggingsefffekt,magisk lampe-effekt, animasjonseffekt ved vindusminimering,musmerkeeffekt,innskaleringseffekt,skjermdumpeffekt,ark-effekt,lysbildeeffekt,glidende oppspretteffekt,effekt for minibilder på oppgavelinja,effekt for minibilder på siden,gjennomskinnelighetseffekt,gjennomsiktighet,vindusgeometri-effekt,skjelvende vinduer-effekt,effekt for oppstartsmelding,effekt for foreldredialog,effekt for mørk inaktiv,effekt for mørk skjerm,gli tilbake-effekt,øyesnop,snop,vis FPS-effekt,vis malingseffekt,boksbytteeffekt,lokkbytteeffekt,skrivebordsterning-effekt,effek for animert skrivebordsterning,effekt for skrivebordsruter,effekt for flipp-bytte,omriss-effekt,effekt for vinduer tilstede,effekt for vinduer som endrer størrelse
|
||||
X-KDE-Keywords[nl]=kwin,venster,beheerder,compositing,effect,3D effecten,2D effecten,OpenGL,XRender,video-instellingen,grafische effecten,bureaubladeffecten,animaties,verrschillende animaties,vensterbeheereffecten,vensteromschakeleffect, bureaublad-omschakeleffect,animaties,animatiesnelheid,bureaubladanimaties,stuurprogramma's,stuurprogramma-instellingen,rendering,render,inversieeffect,vergrootglaseffect,vergrotingseffect,snaphelpereffect,trackmuiseffect,zoomeffect,vervagingseffect,dashboardeffect,explosie-effect,uitvaageffect,uitvaagbureaubladeffect,uiteenvaleffect,glijeffect,vebsteraccentueringseffect,aanmeldeffect,afmeldeffect,magische lampeffect,animatie-effect minimaliseren,muismarkeringseffect,inschaaleffect,schermafdrukeffect,bladeneffect,diaeffect,glijdende pop-upseffect,taakbalkminiatuureffect,miniatuur-opzijeffect,doorzichtigheid,doorzichtigheidseffect,transparantie,vensterafmetingeneffect,wiebelende vensterseffect,opstartterugkoppeleffect,dialoogoudereffect,dim bij inactiviteitseffect,dim het schermeffect,schuif terugeffect,oogstrelend,snoepgoed,FPS toneneffect,verf toneneffect,vak omschakeleffect,deksel schakelaareffect,bureaublad kubuseffect,bureaublad kubus animatie-effect,bureaubladrastereffect,omschakeleffect,omrandingeffect,huidig venstereffect, wijzig grootte van venstereffect
|
||||
X-KDE-Keywords[pl]=kwin,okno,menadżer,kompozycje,efekt,efekty 3D,efekty 2D,OpenGL,XRender, ustawienia wideo,efekty graficzne,efekty pulpitu,animacje,różne animacje,efekty zarządzania oknami,efekty przełączania okien,efekty przełączania pulpitów,animacje, szybkość animacji,animacje pulpitu,sterowniki,ustawienia sterowników,renderowania, efekt odwrócenia,szkło powiększające,efekt powiększenia,efekt pomocnika przyciągania, efekt śledzenia myszy,efekt przybliżenia,efekt rozmycia,efekt tablicy,efekt eksplozji,efekt zanikania,efekt zanikania pulpitu,efekt rozpadania,efekt slajdu,efekt podświetlania okna, efekt logowania,efekt wylogowywania,efekt magicznej lampy,efekt animacji minimalizacji, efekt znacznika myszy,efekt skalowania,efekt zrzutu ekranu,efekt arkusza,efekt slajdu,efekt wysuwających się elementów wyskakujących,efekt prześwitywania,przezroczystość,efekt geometrii okna,efekt chwiejnych okien,efekt odczuć przy starcie,efekt okna rodzica,efekt przyciemniania nieaktywnych,efekt przyciemniania ekranu,efekt przesuwania do tył,efekt pokazania ilości klatek na sekundę
|
||||
X-KDE-Keywords[pt]=kwin,janela,gestor,composição,efeito,efeitos 3D,efeitos 2D,OpenGL,XRender,configuração do vídeo,efeitos gráficos,efeitos do ecrã,animações,diversas animações,~efeitos de gestão das janelas,efeito de mudança da janela,efeito de mudança de ecrã,animações,velocidade da animação,animações do ecrã,controladores,configuração do controlador,desenho,efeito de inversão,efeito de lupa,efeito de lente,efeito de ajuste,efeito de seguimento do rato,efeito de ampliação,efeito de borrão,efeito de quadro,efeito de explosão,efeito de desvanecimento,efeito de desvanecimento do ecrã,efeito de queda,efeito de deslizamento,efeito de realce da janela,efeito de autenticação,efeito de encerramento da sessão,efeito de lâmpada mágica,efeito de animação da minimização,efeito de marcação do rato,efeito de ampliação,efeito de captura do ecrã,efeito de folha,efeito de deslizamento,efeito de janelas deslizantes,efeito de miniaturas das tarefas,efeito de miniatura ao lado,translucidez,efeito de translucidez,transparência,efeito de geometria da janela,efeito de janelas ondulantes,efeito da reacção ao arranque,efeito da janela-mãe,efeito de escurecimento da janela inactiva,efeito de escurecimento do ecrã,efeito de deslize para trás,efeitos visuais,visuais,efeito para mostrar FPS,efeito de pintura,efeito de mudança em caixa,efeito de mudança em capas,efeito de cubo do ecrã,efeito de animação do cubo do ecrã,efeito da grelha do ecrã,efeito de viragem de página,efeito de realce,efeito de apresentação das janelas,feito de dimensionamento das janelas
|
||||
|
|
|
@ -170,6 +170,7 @@ X-KDE-Keywords[de]=KWin,Kwm,Fenster,Manager,Rahmen,Design,Stile,Themes,Optik,Ers
|
|||
X-KDE-Keywords[el]=kwin,παράθυρο,διαχειριστής,περίγραμμα,στιλ,θέμα,εμφάνιση,αίσθηση,διάταξη,κουμπί,χειρισμός,άκρη,kwm,διακόσμηση
|
||||
X-KDE-Keywords[es]=kwin,ventana,gestor,borde,estilo,tema,aspecto,sensación,disposición,botón,asa,borde,kwm,decoración
|
||||
X-KDE-Keywords[et]=kwin,aken,haldur,piire,stiil,teema,välimus,paigutus,nupp,pide,serv,kwm,dekoratsioon
|
||||
X-KDE-Keywords[eu]=kwin,leiho,kudeatzaile,muga,estilo,gai,itxura,izaera,antolamendu,botoi,helduleku,ertz,kwm,apainketa
|
||||
X-KDE-Keywords[fi]=kwin,ikkuna,hallinta,ikkunointiohjelma,kehys,reunus,tyyli,teema,ulkoasu,toiminta,asettelu,painike,kahva,kulma,reuna,kwm,koriste
|
||||
X-KDE-Keywords[fr]=kwin, fenêtre, gestionnaire, composition, bordure, style, thème, apparence, comportement, disposition, bouton, prise en main, bord, kwm, décoration
|
||||
X-KDE-Keywords[ga]=kwin,fuinneog,bainisteoir,imlíne,stíl,téama,cuma,brath,leagan amach,cnaipe,hanla,ciumhais,kwm,maisiúchán
|
||||
|
|
|
@ -107,6 +107,7 @@ Comment[cs]=Nastavení činností myši na oknech
|
|||
Comment[da]=Indstilling af musehandlinger på vinduer
|
||||
Comment[de]=Maus-Aktionen für Fenster einrichten
|
||||
Comment[es]=Configurar las acciones del ratón sobre las ventanas
|
||||
Comment[eu]=Konfiguratu sagu-ekintzak leihoetan
|
||||
Comment[fi]=Ikkunoiden hiiritoimintojen asetukset
|
||||
Comment[fr]=Configurer les actions de souris pour les fenêtres
|
||||
Comment[gl]=Configura a accións do rato nas xanelas
|
||||
|
|
|
@ -208,7 +208,7 @@ X-KDE-Keywords[it]=fuoco,posizionamento,comportamento della finestra,animazione,
|
|||
X-KDE-Keywords[kk]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick
|
||||
X-KDE-Keywords[km]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick
|
||||
X-KDE-Keywords[ko]=focus,placement,window behavior,animation,raise,auto raise,windows,frame,titlebar,doubleclick,초점,위치,창 행동,애니메이션,올리기,창,프레임,제목 표시줄
|
||||
X-KDE-Keywords[nb]=fokus,plassering,vindusppførsel,animering,hev,autohev,vinduer,ramme,tittellinje,dobbeltklikk
|
||||
X-KDE-Keywords[nb]=fokus,plassering,vindusoppførsel,animering,hev,autohev,vinduer,ramme,tittellinje,dobbeltklikk
|
||||
X-KDE-Keywords[nl]=focus,plaatsing,venstegedrag,animatie,omhoog,automatisch omhoog,vensters,frame,titelbalk,dubbelklik
|
||||
X-KDE-Keywords[pl]=uaktywnienie,umieszczenie,zachowanie okna,animacja,wzniesienie,auto-wzniesienie, okna,ramka,pasek tytułu,podwójne kliknięcie
|
||||
X-KDE-Keywords[pt]=foco,colocação,comportamento da janela,animação,elevar,elevar automaticamente,janelas,contorno,barra de título,duplo-click
|
||||
|
|
|
@ -53,6 +53,7 @@ KWinScreenEdgesConfig::KWinScreenEdgesConfig(QWidget* parent, const QVariantList
|
|||
connect(m_ui->monitor, SIGNAL(changed()), this, SLOT(changed()));
|
||||
|
||||
connect(m_ui->desktopSwitchCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(changed()));
|
||||
connect(m_ui->activationDelaySpin, SIGNAL(valueChanged(int)), this, SLOT(sanitizeCooldown()));
|
||||
connect(m_ui->activationDelaySpin, SIGNAL(valueChanged(int)), this, SLOT(changed()));
|
||||
connect(m_ui->triggerCooldownSpin, SIGNAL(valueChanged(int)), this, SLOT(changed()));
|
||||
connect(m_ui->quickMaximizeBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
|
||||
|
@ -65,6 +66,8 @@ KWinScreenEdgesConfig::KWinScreenEdgesConfig(QWidget* parent, const QVariantList
|
|||
connect(m_ui->quickTileBox, SIGNAL(stateChanged(int)), this, SLOT(groupChanged()));
|
||||
|
||||
load();
|
||||
|
||||
sanitizeCooldown();
|
||||
}
|
||||
|
||||
KWinScreenEdgesConfig::~KWinScreenEdgesConfig()
|
||||
|
@ -146,6 +149,11 @@ void KWinScreenEdgesConfig::showEvent(QShowEvent* e)
|
|||
monitorShowEvent();
|
||||
}
|
||||
|
||||
void KWinScreenEdgesConfig::sanitizeCooldown()
|
||||
{
|
||||
m_ui->triggerCooldownSpin->setMinimum(m_ui->activationDelaySpin->value() + 50);
|
||||
}
|
||||
|
||||
// Copied from kcmkwin/kwincompositing/main.cpp
|
||||
bool KWinScreenEdgesConfig::effectEnabled(const QString& effect, const KConfigGroup& cfg) const
|
||||
{
|
||||
|
|
|
@ -56,7 +56,8 @@ public slots:
|
|||
virtual void defaults();
|
||||
protected:
|
||||
virtual void showEvent(QShowEvent* e);
|
||||
|
||||
private slots:
|
||||
void sanitizeCooldown();
|
||||
private:
|
||||
KWinScreenEdgesConfigForm* m_ui;
|
||||
KSharedConfigPtr m_config;
|
||||
|
|
|
@ -18,6 +18,7 @@ X-KDE-Keywords[de]=KWin-Skript
|
|||
X-KDE-Keywords[el]=σενάριο kwin
|
||||
X-KDE-Keywords[es]=guion de kwin
|
||||
X-KDE-Keywords[et]=kwini skript
|
||||
X-KDE-Keywords[eu]=kwin script-a
|
||||
X-KDE-Keywords[fi]=kwin-skripti
|
||||
X-KDE-Keywords[fr]=Script de KWin
|
||||
X-KDE-Keywords[ga]=Script kwin
|
||||
|
@ -63,6 +64,7 @@ Name[de]=KWin-Skripte
|
|||
Name[el]=Σενάρια KWin
|
||||
Name[es]=Guiones de KWin
|
||||
Name[et]=KWini skriptid
|
||||
Name[eu]=KWin script-ak
|
||||
Name[fi]=KWin-skriptit
|
||||
Name[fr]=Scripts de KWin
|
||||
Name[ga]=Scripteanna KWin
|
||||
|
@ -107,6 +109,7 @@ Comment[de]=KWin-Skripte verwalten
|
|||
Comment[el]=Διαχείριση σεναρίων KWin
|
||||
Comment[es]=Gestionar guiones de KWin
|
||||
Comment[et]=KWini skriptide haldamine
|
||||
Comment[eu]=Kudeatu KWin script-ak
|
||||
Comment[fi]=KWin-skriptien hallinta
|
||||
Comment[fr]=Gérer les scripts de KWin
|
||||
Comment[ga]=Bainistigh scripteanna KWin
|
||||
|
|
|
@ -201,7 +201,9 @@ Name[bs]=Reset grafike
|
|||
Name[ca]=Reinici dels gràfics
|
||||
Name[cs]=Resetovat grafiku
|
||||
Name[da]=Grafiknulstilling
|
||||
Name[de]=Grafik-Reset
|
||||
Name[es]=Reinicio gráfico
|
||||
Name[eu]=Grafikoak berrezarri
|
||||
Name[fi]=Grafiikan nollaus
|
||||
Name[fr]=Réinitialisation graphique
|
||||
Name[gl]=Reinicio dos gráficos
|
||||
|
@ -211,6 +213,7 @@ Name[it]=Azzeramento grafica
|
|||
Name[kk]=Графиканы ысыру
|
||||
Name[ko]=그래픽 초기화
|
||||
Name[lt]=Grafikos atstatymas
|
||||
Name[nb]=Grafikk tilbakestilt
|
||||
Name[nl]=Grafische reset
|
||||
Name[pa]=ਗਰਾਫਿਕਸ ਮੁੜ-ਸੈੱਟ
|
||||
Name[pl]=Reset grafiki
|
||||
|
@ -233,7 +236,9 @@ Comment=A graphics reset event occurred
|
|||
Comment[bs]=Grafički reset događaj se desio
|
||||
Comment[ca]=Ha ocorregut un esdeveniment de reinici dels gràfics
|
||||
Comment[da]=En grafiknulstillingshændelse fandt sted
|
||||
Comment[de]=Ein Zurücksetzen der Grafik ist aufgetreten
|
||||
Comment[es]=Ha ocurrido un evento de reinicio gráfico
|
||||
Comment[eu]=Grafikoak berrezartzeko gertaera bat jazo da
|
||||
Comment[fi]=Sattui grafiikan nollaustapahtuma
|
||||
Comment[fr]=Un évènement de réinitialisation graphique est intervenu
|
||||
Comment[gl]=Aconteceu un reinicio de gráficos
|
||||
|
@ -242,6 +247,7 @@ Comment[ia]=Il necessita un evento de reinitiar le graphic
|
|||
Comment[it]=Si è verificato un evento di azzeramento della grafica
|
||||
Comment[kk]=Графиканы ысыру оқиғасы болды
|
||||
Comment[ko]=그래픽 초기화 이벤트가 발생함
|
||||
Comment[nb]=Det har foregått en grafikk-tilbakestilling
|
||||
Comment[nl]=Een gebeurtenis van een grafische reset deed zich voor
|
||||
Comment[pl]=Nastąpiło zdarzenie resetu grafiki
|
||||
Comment[pt]=Ocorreu um evento de reinício gráfico
|
||||
|
|
|
@ -581,7 +581,8 @@ void GLPlatform::detect(OpenGLPlatformInterface platformInterface)
|
|||
GLXContext ctx = glXGetCurrentContext();
|
||||
m_directRendering = glXIsDirect(display(), ctx);
|
||||
|
||||
m_supportsGLSL = m_extensions.contains("GL_ARB_shader_objects") &&
|
||||
m_supportsGLSL = m_directRendering &&
|
||||
m_extensions.contains("GL_ARB_shader_objects") &&
|
||||
m_extensions.contains("GL_ARB_fragment_shader") &&
|
||||
m_extensions.contains("GL_ARB_vertex_shader");
|
||||
|
||||
|
|
|
@ -46,7 +46,10 @@ namespace KWin
|
|||
bool GLTexturePrivate::sNPOTTextureSupported = false;
|
||||
bool GLTexturePrivate::sFramebufferObjectSupported = false;
|
||||
bool GLTexturePrivate::sSaturationSupported = false;
|
||||
bool GLTexturePrivate::sTextureFormatBGRA = false;
|
||||
GLenum GLTexturePrivate::sTextureFormat = GL_RGBA; // custom dummy, GL_BGRA is not present on GLES
|
||||
uint GLTexturePrivate::s_textureObjectCounter = 0;
|
||||
uint GLTexturePrivate::s_fbo = 0;
|
||||
|
||||
|
||||
GLTexture::GLTexture()
|
||||
: d_ptr(new GLTexturePrivate())
|
||||
|
@ -97,11 +100,8 @@ GLTexture::GLTexture(int width, int height)
|
|||
glGenTextures(1, &d->m_texture);
|
||||
bind();
|
||||
#ifdef KWIN_HAVE_OPENGLES
|
||||
if (GLTexturePrivate::sTextureFormatBGRA) {
|
||||
glTexImage2D(d->m_target, 0, GL_BGRA_EXT, width, height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, 0);
|
||||
} else {
|
||||
glTexImage2D(d->m_target, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
|
||||
}
|
||||
glTexImage2D(d->m_target, 0, GLTexturePrivate::sTextureFormat, width, height,
|
||||
0, GLTexturePrivate::sTextureFormat, GL_UNSIGNED_BYTE, 0);
|
||||
#else
|
||||
glTexImage2D(d->m_target, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, 0);
|
||||
#endif
|
||||
|
@ -133,6 +133,7 @@ GLTexturePrivate::GLTexturePrivate()
|
|||
m_vbo = 0;
|
||||
m_filterChanged = true;
|
||||
m_wrapModeChanged = false;
|
||||
++s_textureObjectCounter;
|
||||
}
|
||||
|
||||
GLTexturePrivate::~GLTexturePrivate()
|
||||
|
@ -143,6 +144,11 @@ GLTexturePrivate::~GLTexturePrivate()
|
|||
if (m_texture != 0) {
|
||||
glDeleteTextures(1, &m_texture);
|
||||
}
|
||||
// Delete the FBO if this is the last Texture
|
||||
if (--s_textureObjectCounter == 0 && s_fbo) {
|
||||
glDeleteFramebuffers(1, &s_fbo);
|
||||
s_fbo = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void GLTexturePrivate::initStatic()
|
||||
|
@ -151,14 +157,17 @@ void GLTexturePrivate::initStatic()
|
|||
sNPOTTextureSupported = true;
|
||||
sFramebufferObjectSupported = true;
|
||||
sSaturationSupported = true;
|
||||
sTextureFormatBGRA = hasGLExtension(QStringLiteral("GL_EXT_texture_format_BGRA8888"));
|
||||
if (hasGLExtension(QStringLiteral("GL_EXT_texture_format_BGRA8888")))
|
||||
sTextureFormat = GL_BGRA_EXT;
|
||||
else
|
||||
sTextureFormat = GL_RGBA;
|
||||
#else
|
||||
sNPOTTextureSupported = hasGLExtension(QStringLiteral("GL_ARB_texture_non_power_of_two"));
|
||||
sFramebufferObjectSupported = hasGLExtension(QStringLiteral("GL_EXT_framebuffer_object"));
|
||||
sSaturationSupported = ((hasGLExtension(QStringLiteral("GL_ARB_texture_env_crossbar"))
|
||||
&& hasGLExtension(QStringLiteral("GL_ARB_texture_env_dot3"))) || hasGLVersion(1, 4))
|
||||
&& (glTextureUnitsCount >= 4) && glActiveTexture != NULL;
|
||||
sTextureFormatBGRA = true;
|
||||
sTextureFormat = GL_BGRA;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -215,11 +224,8 @@ bool GLTexture::load(const QImage& image, GLenum target)
|
|||
}
|
||||
bind();
|
||||
#ifdef KWIN_HAVE_OPENGLES
|
||||
if (GLTexturePrivate::sTextureFormatBGRA) {
|
||||
glTexImage2D(d->m_target, 0, GL_BGRA_EXT, img.width(), img.height(), 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, img.bits());
|
||||
} else {
|
||||
glTexImage2D(d->m_target, 0, GL_RGBA, img.width(), img.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img.bits());
|
||||
}
|
||||
glTexImage2D(d->m_target, 0, GLTexturePrivate::sTextureFormat, img.width(), img.height(),
|
||||
0, GLTexturePrivate::sTextureFormat, GL_UNSIGNED_BYTE, img.bits());
|
||||
#else
|
||||
glTexImage2D(d->m_target, 0, GL_RGBA8, img.width(), img.height(), 0,
|
||||
GL_BGRA, GL_UNSIGNED_BYTE, img.bits());
|
||||
|
@ -258,15 +264,8 @@ void GLTexture::update(const QImage &image, const QPoint &offset, const QRect &s
|
|||
const QImage &img = d->convertToGLFormat(tmpImage.isNull() ? image : tmpImage);
|
||||
|
||||
bind();
|
||||
#ifdef KWIN_HAVE_OPENGLES
|
||||
if (GLTexturePrivate::sTextureFormatBGRA) {
|
||||
glTexSubImage2D(d->m_target, 0, offset.x(), offset.y(), width, height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, img.bits());
|
||||
} else {
|
||||
glTexSubImage2D(d->m_target, 0, offset.x(), offset.y(), width, height, GL_RGBA, GL_UNSIGNED_BYTE, img.bits());
|
||||
}
|
||||
#else
|
||||
glTexSubImage2D(d->m_target, 0, offset.x(), offset.y(), width, height, GL_BGRA, GL_UNSIGNED_BYTE, img.bits());
|
||||
#endif
|
||||
glTexSubImage2D(d->m_target, 0, offset.x(), offset.y(), width, height,
|
||||
GLTexturePrivate::sTextureFormat, GL_UNSIGNED_BYTE, img.bits());
|
||||
checkGLError("update texture");
|
||||
unbind();
|
||||
setDirty();
|
||||
|
@ -428,6 +427,33 @@ GLenum GLTexture::filter() const
|
|||
return d->m_filter;
|
||||
}
|
||||
|
||||
void GLTexture::clear()
|
||||
{
|
||||
Q_D(GLTexture);
|
||||
if (!GLTexturePrivate::s_fbo && GLRenderTarget::supported() &&
|
||||
GLPlatform::instance()->driver() != Driver_Catalyst) // fail. -> bug #323065
|
||||
glGenFramebuffers(1, &GLTexturePrivate::s_fbo);
|
||||
|
||||
if (GLTexturePrivate::s_fbo) {
|
||||
// Clear the texture
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, GLTexturePrivate::s_fbo);
|
||||
glClearColor(0, 0, 0, 0);
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, d->m_texture, 0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
} else {
|
||||
if (const int size = width()*height()) {
|
||||
uint32_t *buffer = new uint32_t[size];
|
||||
memset(buffer, 0, size*sizeof(uint32_t));
|
||||
bind();
|
||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width(), height(),
|
||||
GLTexturePrivate::sTextureFormat, GL_UNSIGNED_BYTE, buffer);
|
||||
unbind();
|
||||
delete[] buffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool GLTexture::isDirty() const
|
||||
{
|
||||
Q_D(const GLTexture);
|
||||
|
@ -470,7 +496,7 @@ QImage GLTexturePrivate::convertToGLFormat(const QImage& img) const
|
|||
// Copied from Qt's QGLWidget::convertToGLFormat()
|
||||
QImage res;
|
||||
|
||||
if (sTextureFormatBGRA) {
|
||||
if (sTextureFormat != GL_RGBA) {
|
||||
if (QSysInfo::ByteOrder == QSysInfo::BigEndian) {
|
||||
res = QImage(img.size(), QImage::Format_ARGB32);
|
||||
QImage imgARGB32 = img.convertToFormat(QImage::Format_ARGB32_Premultiplied);
|
||||
|
|
|
@ -93,6 +93,11 @@ public:
|
|||
GLuint texture() const;
|
||||
GLenum target() const;
|
||||
GLenum filter() const;
|
||||
/** @short
|
||||
* Make the texture fully transparent
|
||||
* Warning: this clobbers the current framebuffer binding except on fglrx
|
||||
*/
|
||||
void clear();
|
||||
bool isDirty() const;
|
||||
void setFilter(GLenum filter);
|
||||
void setWrapMode(GLenum mode);
|
||||
|
|
|
@ -73,7 +73,9 @@ public:
|
|||
static bool sNPOTTextureSupported;
|
||||
static bool sFramebufferObjectSupported;
|
||||
static bool sSaturationSupported;
|
||||
static bool sTextureFormatBGRA;
|
||||
static GLenum sTextureFormat;
|
||||
static uint s_fbo;
|
||||
static uint s_textureObjectCounter;
|
||||
private:
|
||||
Q_DISABLE_COPY(GLTexturePrivate)
|
||||
};
|
||||
|
|
|
@ -786,6 +786,16 @@ void ShaderManager::resetAllShaders()
|
|||
}
|
||||
}
|
||||
|
||||
void ShaderManager::resetShader(GLShader *shader, ShaderType type)
|
||||
{
|
||||
if (!(shader && shader->isValid()))
|
||||
return;
|
||||
|
||||
pushShader(shader);
|
||||
resetShader(type);
|
||||
popShader();
|
||||
}
|
||||
|
||||
|
||||
void ShaderManager::pushShader(GLShader *shader)
|
||||
{
|
||||
|
|
|
@ -352,6 +352,12 @@ public:
|
|||
**/
|
||||
void resetAllShaders();
|
||||
|
||||
/**
|
||||
* Resets ShaderType @p type uniforms of a custom shader
|
||||
* @since 4.11.1
|
||||
*/
|
||||
void resetShader(GLShader *shader, ShaderType type);
|
||||
|
||||
/**
|
||||
* Creates a GLShader with a built-in vertex shader and a custom fragment shader.
|
||||
* @param vertex The generic vertex shader
|
||||
|
|
|
@ -108,6 +108,11 @@ static xcb_render_picture_t createPicture(xcb_pixmap_t pix, int depth)
|
|||
}
|
||||
|
||||
XRenderPicture::XRenderPicture(const QImage &img)
|
||||
{
|
||||
fromImage(img);
|
||||
}
|
||||
|
||||
void XRenderPicture::fromImage(const QImage &img)
|
||||
{
|
||||
const int depth = img.depth();
|
||||
xcb_pixmap_t xpix = xcb_generate_id(connection());
|
||||
|
|
|
@ -72,6 +72,7 @@ public:
|
|||
XRenderPicture(xcb_pixmap_t pix, int depth);
|
||||
operator xcb_render_picture_t();
|
||||
private:
|
||||
void fromImage(const QImage &img);
|
||||
KSharedPtr< XRenderPictureData > d;
|
||||
};
|
||||
|
||||
|
|
|
@ -377,6 +377,7 @@ bool Client::manage(xcb_window_t w, bool isMapped)
|
|||
if (!placementDone) {
|
||||
// Placement needs to be after setting size
|
||||
Placement::self()->place(this, area);
|
||||
dontKeepInArea = true;
|
||||
placementDone = true;
|
||||
}
|
||||
|
||||
|
@ -419,7 +420,7 @@ bool Client::manage(xcb_window_t w, bool isMapped)
|
|||
if (pseudo_max != Client::MaximizeRestore) {
|
||||
maximize((MaximizeMode)pseudo_max);
|
||||
// from now on, care about maxmode, since the maximization call will override mode for fix aspects
|
||||
dontKeepInArea = (max_mode == Client::MaximizeFull);
|
||||
dontKeepInArea |= (max_mode == Client::MaximizeFull);
|
||||
geom_restore = QRect(); // Use placement when unmaximizing ...
|
||||
if (!(max_mode & Client::MaximizeVertical)) {
|
||||
geom_restore.setY(y()); // ...but only for horizontal direction
|
||||
|
|
|
@ -28,6 +28,7 @@ DEALINGS IN THE SOFTWARE.
|
|||
#include "client.h"
|
||||
#include "deleted.h"
|
||||
#include "effects.h"
|
||||
#include <kwinglplatform.h>
|
||||
#include <kwinglutils.h>
|
||||
#include <kwinxrenderutils.h>
|
||||
#include <QPaintEngine>
|
||||
|
@ -306,21 +307,12 @@ void ImageBasedPaintRedirector::discardScratch()
|
|||
// ------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
unsigned int OpenGLPaintRedirector::s_count = 0;
|
||||
unsigned int OpenGLPaintRedirector::s_fbo = 0;
|
||||
|
||||
OpenGLPaintRedirector::OpenGLPaintRedirector(Client *c, QWidget *widget)
|
||||
: ImageBasedPaintRedirector(c, widget)
|
||||
{
|
||||
s_count++;
|
||||
|
||||
for (int i = 0; i < TextureCount; ++i)
|
||||
m_textures[i] = NULL;
|
||||
|
||||
if (!s_fbo && GLRenderTarget::supported())
|
||||
glGenFramebuffers(1, &s_fbo);
|
||||
|
||||
PaintRedirector::resizePixmaps();
|
||||
}
|
||||
|
||||
|
@ -328,12 +320,6 @@ OpenGLPaintRedirector::~OpenGLPaintRedirector()
|
|||
{
|
||||
for (int i = 0; i < TextureCount; ++i)
|
||||
delete m_textures[i];
|
||||
|
||||
// Delete the FBO if this is the last OpenGLPaintRedirector
|
||||
if (--s_count == 0 && s_fbo) {
|
||||
glDeleteFramebuffers(1, &s_fbo);
|
||||
s_fbo = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void OpenGLPaintRedirector::resizePixmaps(const QRect *rects)
|
||||
|
@ -351,8 +337,6 @@ void OpenGLPaintRedirector::resizePixmaps(const QRect *rects)
|
|||
}
|
||||
}
|
||||
|
||||
bool fbo_bound = false;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (m_textures[i] && m_textures[i]->size() == size[i])
|
||||
continue;
|
||||
|
@ -366,22 +350,8 @@ void OpenGLPaintRedirector::resizePixmaps(const QRect *rects)
|
|||
m_textures[i] = new GLTexture(size[i].width(), size[i].height());
|
||||
m_textures[i]->setYInverted(true);
|
||||
m_textures[i]->setWrapMode(GL_CLAMP_TO_EDGE);
|
||||
|
||||
if (s_fbo) {
|
||||
// Clear the texture
|
||||
if (!fbo_bound) {
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, s_fbo);
|
||||
glClearColor(0, 0, 0, 0);
|
||||
fbo_bound = true;
|
||||
}
|
||||
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_textures[i]->texture(), 0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
}
|
||||
m_textures[i]->clear();
|
||||
}
|
||||
|
||||
if (fbo_bound)
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
|
||||
void OpenGLPaintRedirector::preparePaint(const QPixmap &pending)
|
||||
|
|
|
@ -157,9 +157,6 @@ protected:
|
|||
private:
|
||||
QImage m_tempImage;
|
||||
GLTexture *m_textures[2];
|
||||
|
||||
static unsigned int s_fbo;
|
||||
static unsigned int s_count;
|
||||
};
|
||||
|
||||
class RasterXRenderPaintRedirector : public ImageBasedPaintRedirector
|
||||
|
|
|
@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#include <QTextStream>
|
||||
|
||||
#ifndef KCMRULES
|
||||
#include <kdecoration.h>
|
||||
#include "workspace.h"
|
||||
#include "client.h"
|
||||
#include "options.h"
|
||||
|
@ -96,6 +97,30 @@ void Placement::place(Client* c, QRect& area, Policy policy, Policy nextPlacemen
|
|||
placeMaximizing(c, area, nextPlacement);
|
||||
else
|
||||
placeSmart(c, area, nextPlacement);
|
||||
|
||||
if (options->borderSnapZone()) {
|
||||
// snap to titlebar / snap to window borders on inner screen edges
|
||||
const QRect geo(c->geometry());
|
||||
QPoint corner = geo.topLeft();
|
||||
const QPoint cp = c->clientPos();
|
||||
const QSize cs = geo.size() - c->clientSize();
|
||||
KDecorationDefines::Position titlePos = c->titlebarPosition();
|
||||
|
||||
const QRect fullRect = workspace()->clientArea(FullArea, c);
|
||||
if (!(c->maximizeMode() & KDecorationDefines::MaximizeHorizontal)) {
|
||||
if (titlePos != KDecorationDefines::PositionRight && geo.right() == fullRect.right())
|
||||
corner.rx() += cs.width() - cp.x();
|
||||
if (titlePos != KDecorationDefines::PositionLeft && geo.x() == fullRect.x())
|
||||
corner.rx() -= cp.x();
|
||||
}
|
||||
if (!(c->maximizeMode() & KDecorationDefines::MaximizeVertical)) {
|
||||
if (titlePos != KDecorationDefines::PositionBottom && geo.bottom() == fullRect.bottom())
|
||||
corner.ry() += cs.height() - cp.y();
|
||||
if (titlePos != KDecorationDefines::PositionTop && geo.y() == fullRect.y())
|
||||
corner.ry() -= cp.y();
|
||||
}
|
||||
c->move(corner);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -442,10 +467,7 @@ void Placement::placeCentered(Client* c, const QRect& area, Policy /*next*/)
|
|||
void Placement::placeZeroCornered(Client* c, const QRect& area, Policy /*next*/)
|
||||
{
|
||||
// get the maximum allowed windows space and desk's origin
|
||||
const QRect maxRect = checkArea(c, area);
|
||||
|
||||
// place the window
|
||||
c->move(QPoint(maxRect.left(), maxRect.top()));
|
||||
c->move(checkArea(c, area).topLeft());
|
||||
}
|
||||
|
||||
void Placement::placeUtility(Client* c, QRect& area, Policy /*next*/)
|
||||
|
|
|
@ -633,17 +633,14 @@ bool SceneOpenGL2::supported(OpenGLBackend *backend)
|
|||
SceneOpenGL2::SceneOpenGL2(OpenGLBackend *backend)
|
||||
: SceneOpenGL(Workspace::self(), backend)
|
||||
, m_lanczosFilter(NULL)
|
||||
, m_colorCorrection(new ColorCorrection(this))
|
||||
, m_colorCorrection()
|
||||
{
|
||||
if (!init_ok) {
|
||||
// base ctor already failed
|
||||
return;
|
||||
}
|
||||
// Initialize color correction before the shaders
|
||||
qDebug() << "Color correction:" << options->isColorCorrected();
|
||||
m_colorCorrection->setEnabled(options->isColorCorrected());
|
||||
connect(m_colorCorrection, SIGNAL(changed()), Compositor::self(), SLOT(addRepaintFull()));
|
||||
connect(m_colorCorrection, SIGNAL(errorOccured()), options, SLOT(setColorCorrected()), Qt::QueuedConnection);
|
||||
slotColorCorrectedChanged(false);
|
||||
connect(options, SIGNAL(colorCorrectedChanged()), this, SLOT(slotColorCorrectedChanged()), Qt::QueuedConnection);
|
||||
|
||||
if (!ShaderManager::instance()->isValid()) {
|
||||
|
@ -717,7 +714,7 @@ SceneOpenGL::Window *SceneOpenGL2::createWindow(Toplevel *t)
|
|||
|
||||
void SceneOpenGL2::finalDrawWindow(EffectWindowImpl* w, int mask, QRegion region, WindowPaintData& data)
|
||||
{
|
||||
if (m_colorCorrection->isEnabled()) {
|
||||
if (!m_colorCorrection.isNull() && m_colorCorrection->isEnabled()) {
|
||||
// Split the painting for separate screens
|
||||
const int numScreens = screens()->count();
|
||||
for (int screen = 0; screen < numScreens; ++ screen) {
|
||||
|
@ -755,12 +752,29 @@ void SceneOpenGL2::resetLanczosFilter()
|
|||
|
||||
ColorCorrection *SceneOpenGL2::colorCorrection()
|
||||
{
|
||||
return m_colorCorrection;
|
||||
return m_colorCorrection.data();
|
||||
}
|
||||
|
||||
void SceneOpenGL2::slotColorCorrectedChanged()
|
||||
void SceneOpenGL2::slotColorCorrectedChanged(bool recreateShaders)
|
||||
{
|
||||
m_colorCorrection->setEnabled(options->isColorCorrected());
|
||||
qDebug() << "Color correction:" << options->isColorCorrected();
|
||||
if (options->isColorCorrected() && m_colorCorrection.isNull()) {
|
||||
m_colorCorrection.reset(new ColorCorrection(this));
|
||||
if (!m_colorCorrection->setEnabled(true)) {
|
||||
m_colorCorrection.reset();
|
||||
return;
|
||||
}
|
||||
connect(m_colorCorrection.data(), SIGNAL(changed()), Compositor::self(), SLOT(addRepaintFull()));
|
||||
connect(m_colorCorrection.data(), SIGNAL(errorOccured()), options, SLOT(setColorCorrected()), Qt::QueuedConnection);
|
||||
if (recreateShaders) {
|
||||
// Reload all shaders
|
||||
ShaderManager::cleanup();
|
||||
ShaderManager::instance();
|
||||
}
|
||||
} else {
|
||||
m_colorCorrection.reset();
|
||||
}
|
||||
Compositor::self()->addRepaintFull();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1393,7 +1407,9 @@ void SceneOpenGL2Window::performPaint(int mask, QRegion region, WindowPaintData
|
|||
}
|
||||
}
|
||||
|
||||
static_cast<SceneOpenGL2*>(m_scene)->colorCorrection()->setupForOutput(data.screen());
|
||||
if (ColorCorrection *cc = static_cast<SceneOpenGL2*>(m_scene)->colorCorrection()) {
|
||||
cc->setupForOutput(data.screen());
|
||||
}
|
||||
|
||||
shader->setUniform(GLShader::WindowTransformation, transformation(mask, data));
|
||||
shader->setUniform(GLShader::Saturation, data.saturation());
|
||||
|
@ -1556,7 +1572,9 @@ void SceneOpenGL2Window::prepareStates(TextureType type, qreal opacity, qreal br
|
|||
shader->setUniform(GLShader::ModulationConstant, QVector4D(rgb, rgb, rgb, a));
|
||||
shader->setUniform(GLShader::Saturation, saturation);
|
||||
|
||||
static_cast<SceneOpenGL2*>(m_scene)->colorCorrection()->setupForOutput(screen);
|
||||
if (ColorCorrection *cc = static_cast<SceneOpenGL2*>(m_scene)->colorCorrection()) {
|
||||
cc->setupForOutput(screen);
|
||||
}
|
||||
}
|
||||
|
||||
void SceneOpenGL2Window::restoreStates(TextureType type, qreal opacity, qreal brightness, qreal saturation)
|
||||
|
@ -1569,7 +1587,9 @@ void SceneOpenGL2Window::restoreStates(TextureType type, qreal opacity, qreal br
|
|||
glDisable(GL_BLEND);
|
||||
}
|
||||
|
||||
static_cast<SceneOpenGL2*>(m_scene)->colorCorrection()->setupForOutput(-1);
|
||||
if (ColorCorrection *cc = static_cast<SceneOpenGL2*>(m_scene)->colorCorrection()) {
|
||||
cc->setupForOutput(-1);
|
||||
}
|
||||
}
|
||||
|
||||
//***************************************
|
||||
|
|
|
@ -127,7 +127,7 @@ protected:
|
|||
virtual void paintDesktop(int desktop, int mask, const QRegion ®ion, ScreenPaintData &data);
|
||||
|
||||
private Q_SLOTS:
|
||||
void slotColorCorrectedChanged();
|
||||
void slotColorCorrectedChanged(bool recreateShaders = true);
|
||||
void resetLanczosFilter();
|
||||
|
||||
private:
|
||||
|
@ -135,7 +135,7 @@ private:
|
|||
|
||||
private:
|
||||
LanczosFilter *m_lanczosFilter;
|
||||
ColorCorrection *m_colorCorrection;
|
||||
QScopedPointer<ColorCorrection> m_colorCorrection;
|
||||
GLuint vao;
|
||||
};
|
||||
|
||||
|
|
|
@ -591,7 +591,7 @@ void ScreenEdges::reconfigure()
|
|||
// TODO: migrate settings to a group ScreenEdges
|
||||
KConfigGroup windowsConfig = m_config->group("Windows");
|
||||
setTimeThreshold(windowsConfig.readEntry("ElectricBorderDelay", 150));
|
||||
setReActivationThreshold(windowsConfig.readEntry("ElectricBorderCooldown", 350));
|
||||
setReActivationThreshold(qMax(timeThreshold() + 50, windowsConfig.readEntry("ElectricBorderCooldown", 350)));
|
||||
int desktopSwitching = windowsConfig.readEntry("ElectricBorders", static_cast<int>(ElectricDisabled));
|
||||
if (desktopSwitching == ElectricDisabled) {
|
||||
setDesktopSwitching(false);
|
||||
|
|
|
@ -12,6 +12,7 @@ Comment[de]=KWin-Skript
|
|||
Comment[el]=Σενάριο KWin
|
||||
Comment[es]=Guion de KWin
|
||||
Comment[et]=KWini skript
|
||||
Comment[eu]=KWin script-a
|
||||
Comment[fi]=KWin-skripti
|
||||
Comment[fr]=Script KWin
|
||||
Comment[ga]=Script KWin
|
||||
|
|
|
@ -9,6 +9,7 @@ Name[de]=OSD-Arbeitsflächenwechsel
|
|||
Name[el]=OSD αλλαγής επιφάνειας εργασίας
|
||||
Name[es]=Información en pantalla sobre cambio de escritorio
|
||||
Name[et]=Töölaua muutmise ekraaniesitus
|
||||
Name[eu]=Mahaigain aldaketa OSD
|
||||
Name[fi]=Työpöydänvaihdon ilmoitus
|
||||
Name[fr]=OSD pour le changement de bureau
|
||||
Name[gl]=OSD de cambio de escritorio
|
||||
|
@ -50,6 +51,7 @@ Comment[de]=Ein On-Screen-Display (OSD), das den Wechsel der Arbeitsfläche anze
|
|||
Comment[el]=Μια ένδειξη στην οθόνη που δηλώνει την αλλαγή της επιφάνειας εργασίας
|
||||
Comment[es]=Una información en pantalla que indica el cambio de escritorio
|
||||
Comment[et]=Töölaua muutumist näitab ekraanikuva
|
||||
Comment[eu]=Mahaigain aldaketa adierazten duen pantailan erakusten den informazioa
|
||||
Comment[fi]=Näytölle ilmestyvä ilmoitus työpöydän vaihdosta
|
||||
Comment[fr]=Un affichage sur l'écran (OSD) indiquant le changement de bureau
|
||||
Comment[gl]=Un visor na pantalla que indica o cambio de escritorio
|
||||
|
|
|
@ -9,6 +9,7 @@ Name[de]=Video-Wand
|
|||
Name[el]=Τοίχος με οθόνες
|
||||
Name[es]=Panel de vídeo
|
||||
Name[et]=Videosein
|
||||
Name[eu]=Bideo-horma
|
||||
Name[fi]=Videoseinä
|
||||
Name[fr]=Mur de vidéos
|
||||
Name[ga]=Balla Físe
|
||||
|
@ -51,6 +52,7 @@ Comment[de]=Erweitert einen Videospieler im Vollbildmodus über alle Bildschirme
|
|||
Comment[el]=Απλώνει πλήρη οθόνη για το πρόγραμμα αναπαραγωγής βίντεο σε όλες τις προσαρτημένες οθόνες για να δημιουργήσει ένα Video Wall
|
||||
Comment[es]=Extiende el reproductor de vídeo a pantalla completa sobre todas las pantallas conectadas para crear un panel de vídeo
|
||||
Comment[et]=Täisekraan-videomängija laiendamine kõigile ühendatud ekraanile videoseina loomiseks
|
||||
Comment[eu]=Pantaila-beteko bideo jotzea lotutako pantaila guztietara zabaltzen du bideo-horma bat sortzeko
|
||||
Comment[fi]=Levittää koko näytön tilassa olevan videotoistimen kaikkiin yhdistettyihin näyttöihin luoden videoseinän
|
||||
Comment[fr]=Étend le lecteur vidéo en mode plein écran sur l'ensemble des écrans connectés afin de créer un mur de vidéos
|
||||
Comment[gl]=Estende un reprodutor de vídeo a pantalla completa por todas as pantallas anexas para crear unha parede de vídeo
|
||||
|
|
|
@ -6,6 +6,7 @@ Comment=KWin Desktop Switcher Layout
|
|||
Comment[bs]=Izgled KWin prebacivača radnih površina
|
||||
Comment[ca]=Disposició del commutador d'escriptoris del KWin
|
||||
Comment[da]=Layout til KWins skrivebordsskifter
|
||||
Comment[de]=Arbeitsflächenwechsler-Layout
|
||||
Comment[es]=Esquema del cambiador de escritorios de KWin
|
||||
Comment[fi]=KWinin työpöydänvalitsimen asettelu
|
||||
Comment[fr]=Une disposition du sélecteur de bureaux KWin
|
||||
|
|
|
@ -9,6 +9,7 @@ Name[de]=Große Symbole
|
|||
Name[el]=Μεγάλα εικονίδια
|
||||
Name[es]=Iconos grandes
|
||||
Name[et]=Suured ikoonid
|
||||
Name[eu]=Ikonoak handiak
|
||||
Name[fi]=Suuret kuvakkeet
|
||||
Name[fr]=Grandes icônes
|
||||
Name[ga]=Deilbhíní Móra
|
||||
|
|
|
@ -9,6 +9,7 @@ Name[de]=Kompakt
|
|||
Name[el]=Συμπαγές
|
||||
Name[es]=Compacto
|
||||
Name[et]=Kompaktne
|
||||
Name[eu]=Trinkoa
|
||||
Name[fi]=Tiivis
|
||||
Name[fr]=Synthétique
|
||||
Name[ga]=Dlúth
|
||||
|
|
|
@ -9,6 +9,7 @@ Name[de]=Raster
|
|||
Name[el]=Κάνναβος
|
||||
Name[es]=Rejilla
|
||||
Name[et]=Võrgustik
|
||||
Name[eu]=Sareta
|
||||
Name[fi]=Ruudukko
|
||||
Name[fr]=Grille
|
||||
Name[ga]=Greille
|
||||
|
@ -54,6 +55,7 @@ Comment[de]=Ein Fensterwechsler-Layout, das Vorschauen aller Fenster in einem Ra
|
|||
Comment[el]=Μια διάταξη εναλλαγής παραθύρων με όλα τα παράθυρα ως εικόνες επισκόπησης σε κάνναβο
|
||||
Comment[es]=Un esquema de cambiador de ventanas que muestra todas las ventanas como miniaturas en una rejilla
|
||||
Comment[et]=Aknavahetaja paigutus kõigi akende näitamisega pisipiltidena võrgustikus
|
||||
Comment[eu]=Leiho aldaketarako antolamendu bat leiho guztiak sareta batean koadro-txiki gisa erakusten dituena
|
||||
Comment[fi]=Tehtävänvalitsimen asettelu, joka näyttää kaikkien ikkunoiden pienoiskuvat ruudukossa
|
||||
Comment[fr]=Une disposition de sélecteur de fenêtres affichant toutes les fenêtres en miniatures dans une grille
|
||||
Comment[gl]=Unha disposición do alternador de xanelas que mostra nunha grella miniaturas das xanelas
|
||||
|
|
|
@ -9,6 +9,7 @@ Name[de]=Kleine Symbole
|
|||
Name[el]=Μικρά εικονίδια
|
||||
Name[es]=Iconos pequeños
|
||||
Name[et]=Väikesed ikoonid
|
||||
Name[eu]=Ikono txikiak
|
||||
Name[fi]=Pienet kuvakkeet
|
||||
Name[fr]=Petites icônes
|
||||
Name[ga]=Deilbhíní Beaga
|
||||
|
|
|
@ -436,8 +436,13 @@ Workspace::~Workspace()
|
|||
// TODO: grabXServer();
|
||||
|
||||
// Use stacking_order, so that kwin --replace keeps stacking order
|
||||
for (ToplevelList::iterator it = stacking_order.begin(), end = stacking_order.end(); it != end; ++it) {
|
||||
Client *c = qobject_cast<Client*>(*it);
|
||||
const ToplevelList stack = stacking_order;
|
||||
// "mutex" the stackingorder, since anything trying to access it from now on will find
|
||||
// many dangeling pointers and crash
|
||||
stacking_order.clear();
|
||||
|
||||
for (ToplevelList::const_iterator it = stack.constBegin(), end = stack.constEnd(); it != end; ++it) {
|
||||
Client *c = qobject_cast<Client*>(const_cast<Toplevel*>(*it));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1458,6 +1463,11 @@ QString Workspace::supportInformation() const
|
|||
} else {
|
||||
support.append(QStringLiteral("no\n"));
|
||||
}
|
||||
support.append(QStringLiteral("Active screen follows mouse: "));
|
||||
if (screens()->isCurrentFollowsMouse())
|
||||
support.append(QStringLiteral(" yes\n"));
|
||||
else
|
||||
support.append(QStringLiteral(" no\n"));
|
||||
support.append(QStringLiteral("Number of Screens: %1\n").arg(screens()->count()));
|
||||
for (int i=0; i<screens()->count(); ++i) {
|
||||
const QRect geo = screens()->geometry(i);
|
||||
|
@ -1555,6 +1565,11 @@ QString Workspace::supportInformation() const
|
|||
} else {
|
||||
support.append(QStringLiteral("OpenGL 2 Shaders are not used. Legacy OpenGL 1.x code path is used.\n"));
|
||||
}
|
||||
support.append(QStringLiteral("Painting blocks for vertical retrace: "));
|
||||
if (m_compositor->scene()->blocksForRetrace())
|
||||
support.append(QStringLiteral(" yes\n"));
|
||||
else
|
||||
support.append(QStringLiteral(" no\n"));
|
||||
break;
|
||||
}
|
||||
case XRenderCompositing:
|
||||
|
|
|
@ -244,7 +244,7 @@ inline xcb_get_input_focus_cookie_t get_input_focus(xcb_connection_t *c, xcb_win
|
|||
class CurrentInput : public Wrapper<xcb_get_input_focus_reply_t, xcb_get_input_focus_cookie_t, &xcb_get_input_focus_reply, &get_input_focus>
|
||||
{
|
||||
public:
|
||||
CurrentInput() : Wrapper<xcb_get_input_focus_reply_t, xcb_get_input_focus_cookie_t, &xcb_get_input_focus_reply, &get_input_focus>() {}
|
||||
CurrentInput() : Wrapper<xcb_get_input_focus_reply_t, xcb_get_input_focus_cookie_t, &xcb_get_input_focus_reply, &get_input_focus>(XCB_WINDOW_NONE) {}
|
||||
|
||||
inline xcb_window_t window() {
|
||||
if (isNull())
|
||||
|
|
Loading…
Reference in a new issue