Merge branch 'master' into plasma/keyboard_applet_svgtext/mart
This commit is contained in:
commit
a12acccd3b
15 changed files with 151 additions and 100 deletions
30
HACKING
30
HACKING
|
@ -168,35 +168,9 @@ there is e.g. an extensive section related to window management).
|
|||
Coding style:
|
||||
=============
|
||||
|
||||
There are these rules for patches for KWin:
|
||||
KWin follows the kdelibs coding style. See: http://techbase.kde.org/Policies/Kdelibs_Coding_Style
|
||||
|
||||
- the code should be relatively nice and clean. Seriously. Rationale: Any messy code can be hard to comprehend,
|
||||
but if the code is in a window manager it will be twice as difficult.
|
||||
|
||||
- unless the functionality of the code is obvious, there should be either at least a short comment explaining
|
||||
what it does, or it should be obvious from the commit log. If there's a hack needed, if there's a potentional
|
||||
problem, if something is just a temporary fix, say so. Comments like "this clever trick is necessary"
|
||||
don't count. See above for rationale. I needed more than two years to understand all of KWin,
|
||||
and there were parts I never got and had to rewrite in order to fix a problem with them.
|
||||
|
||||
- indentation is 4 spaces, not tabs. Rationale: The code looks like a mess if this is not consistent.
|
||||
|
||||
- { and } enclosing a block are aligned with the block, neither with the above level nor there is any
|
||||
trailing { (i.e. { and } are indented in the same column like the code they surround). See above for rationale.
|
||||
If this feel weird or whatever, put them wherever you want first and when the changes are done, check
|
||||
"svn diff" and fix it. If I can handle about half a dozen different formatting styles when working
|
||||
on various parts of KDE, this shouldn't be that much work for you (and yes, I've even done
|
||||
the "fix-before-submit" thing).
|
||||
|
||||
- there is not space before (, i.e. it's "foo(", not "foo (". Rationale: This makes it simpler to grep for functions.
|
||||
|
||||
- a null pointer is NULL, not a zero. Not that I really insist on this one, but the only reason for using 0
|
||||
is being way too lazy to type. Rationale: NULL says it's a pointer, and with many compilers it actually is a pointer,
|
||||
making it possible to detect some mistakes.
|
||||
|
||||
That's all. Bonus points if you try to follow the existing coding style in general, but I don't think
|
||||
I really care about the rest, as long as these rules are followed. If I find out I care about more,
|
||||
I'll add them here.
|
||||
The source repository was reformatted with git commit 4fd08556a1702462335f4f1307da663c2c54b2c2
|
||||
|
||||
|
||||
Branches:
|
||||
|
|
|
@ -2148,7 +2148,8 @@ void Client::updateAllowedActions(bool force)
|
|||
return;
|
||||
// TODO: This could be delayed and compressed - It's only for pagers etc. anyway
|
||||
info->setAllowedActions(allowed_actions);
|
||||
// TODO: This should also tell the decoration, so that it can update the buttons
|
||||
if (decoration)
|
||||
decoration->reset(KDecoration::SettingButtons);
|
||||
}
|
||||
|
||||
void Client::autoRaise()
|
||||
|
|
|
@ -152,8 +152,10 @@ void BoxSwitchEffect::paintWindowsBox(const QRegion& region)
|
|||
{
|
||||
if ((mAnimateSwitch && !mProxyActivated) || (mProxyActivated && mProxyAnimateSwitch))
|
||||
thumbnailFrame->setSelection(highlight_area);
|
||||
else
|
||||
thumbnailFrame->setSelection(windows[ selected_window ]->area);
|
||||
else {
|
||||
ItemInfo *info = windows.value(selected_window, 0);
|
||||
thumbnailFrame->setSelection(info ? info->area : QRect());
|
||||
}
|
||||
thumbnailFrame->render(region);
|
||||
|
||||
if ((mAnimateSwitch && !mProxyActivated) || (mProxyActivated && mProxyAnimateSwitch)) {
|
||||
|
@ -271,8 +273,9 @@ void BoxSwitchEffect::windowGeometryShapeChanged(EffectWindow* w, const QRect& o
|
|||
{
|
||||
if (mActivated) {
|
||||
if (mMode == TabBoxWindowsMode || mMode == TabBoxWindowsAlternativeMode) {
|
||||
if (windows.contains(w) && w->size() != old.size()) {
|
||||
effects->addRepaint(windows[ w ]->area);
|
||||
ItemInfo *info = windows.value( w, 0L );
|
||||
if (info && w->size() != old.size()) {
|
||||
effects->addRepaint(info->area);
|
||||
}
|
||||
} else {
|
||||
if (w->isOnAllDesktops()) {
|
||||
|
@ -357,24 +360,25 @@ void BoxSwitchEffect::tabBoxUpdated()
|
|||
}
|
||||
}
|
||||
}
|
||||
if (windows.contains(selected_window))
|
||||
effects->addRepaint(windows.value(selected_window)->area);
|
||||
if (ItemInfo *info = windows.value(selected_window, 0))
|
||||
effects->addRepaint(info->area);
|
||||
selected_window->addRepaintFull();
|
||||
}
|
||||
setSelectedWindow(effects->currentTabBoxWindow());
|
||||
if (windows.contains(selected_window))
|
||||
effects->addRepaint(windows.value(selected_window)->area);
|
||||
selected_window->addRepaintFull();
|
||||
if (ItemInfo *info = windows.value(selected_window, 0))
|
||||
effects->addRepaint(info->area);
|
||||
if (selected_window) // @Martin can effects->currentTabBoxWindow() be NULL?
|
||||
selected_window->addRepaintFull();
|
||||
effects->addRepaint(text_area);
|
||||
} else if (mMode != TabBoxWindowsMode && mMode != TabBoxWindowsAlternativeMode) {
|
||||
// DesktopMode
|
||||
if (desktops.contains(selected_desktop))
|
||||
effects->addRepaint(desktops.value(selected_desktop)->area);
|
||||
if (ItemInfo *info = desktops.value(selected_desktop, 0))
|
||||
effects->addRepaint(info->area);
|
||||
selected_desktop = effects->currentTabBoxDesktop();
|
||||
if (!mProxyActivated || mProxyShowText)
|
||||
thumbnailFrame->setText(effects->desktopName(selected_desktop));
|
||||
if (desktops.contains(selected_desktop))
|
||||
effects->addRepaint(desktops.value(selected_desktop)->area);
|
||||
if (ItemInfo *info = desktops.value(selected_desktop, 0))
|
||||
effects->addRepaint(info->area);
|
||||
effects->addRepaint(text_area);
|
||||
if (effects->currentTabBoxDesktopList() == original_desktops)
|
||||
return;
|
||||
|
@ -476,12 +480,13 @@ void BoxSwitchEffect::windowClosed(EffectWindow* w)
|
|||
if (w == selected_window) {
|
||||
setSelectedWindow(0);
|
||||
}
|
||||
if (windows.contains(w)) {
|
||||
QHash<EffectWindow*, ItemInfo*>::iterator it = windows.find(w);
|
||||
if (it != windows.end()) {
|
||||
w->refWindow();
|
||||
referrencedWindows.append(w);
|
||||
original_windows.removeAll(w);
|
||||
delete windows[ w ];
|
||||
windows.remove(w);
|
||||
delete *it; *it = 0;
|
||||
windows.erase( it );
|
||||
effects->addRepaintFull();
|
||||
}
|
||||
}
|
||||
|
@ -595,11 +600,13 @@ void BoxSwitchEffect::calculateItemSizes()
|
|||
if (!ordered_windows.at(i))
|
||||
continue;
|
||||
EffectWindow* w = ordered_windows.at(i);
|
||||
windows[ w ] = new ItemInfo();
|
||||
ItemInfo *info = windows.value(w, 0);
|
||||
if (!info)
|
||||
windows[ w ] = info = new ItemInfo();
|
||||
|
||||
windows[ w ]->iconFrame = effects->effectFrame(EffectFrameUnstyled, false);
|
||||
windows[ w ]->iconFrame->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||
windows[ w ]->iconFrame->setIcon(w->icon());
|
||||
info->iconFrame = effects->effectFrame(EffectFrameUnstyled, false);
|
||||
info->iconFrame->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||
info->iconFrame->setIcon(w->icon());
|
||||
|
||||
float moveIndex = i;
|
||||
if (animation && timeLine.value() < 0.5) {
|
||||
|
@ -610,16 +617,17 @@ void BoxSwitchEffect::calculateItemSizes()
|
|||
}
|
||||
if (ordered_windows.count() % 2 == 0)
|
||||
moveIndex += 0.5;
|
||||
windows[ w ]->area = QRect(frame_area.x() + moveIndex * item_max_size.width() + offset,
|
||||
frame_area.y(),
|
||||
item_max_size.width(), item_max_size.height());
|
||||
windows[ w ]->clickable = windows[ w ]->area;
|
||||
info->area = QRect(frame_area.x() + moveIndex * item_max_size.width() + offset,
|
||||
frame_area.y(),
|
||||
item_max_size.width(), item_max_size.height());
|
||||
info->clickable = info->area;
|
||||
}
|
||||
if (ordered_windows.count() % 2 == 0) {
|
||||
right_window = ordered_windows.last();
|
||||
}
|
||||
if (!highlight_is_set) {
|
||||
highlight_area = windows[ selected_window ]->area;
|
||||
ItemInfo *info = windows.value(selected_window, 0);
|
||||
highlight_area = info ? info->area : QRect();
|
||||
highlight_is_set = true;
|
||||
}
|
||||
} else {
|
||||
|
@ -627,41 +635,46 @@ void BoxSwitchEffect::calculateItemSizes()
|
|||
if (!original_windows.at(i))
|
||||
continue;
|
||||
EffectWindow* w = original_windows.at(i);
|
||||
windows[ w ] = new ItemInfo();
|
||||
ItemInfo *info = windows.value(w, 0);
|
||||
if (!info)
|
||||
windows[ w ] = info = new ItemInfo();
|
||||
|
||||
windows[ w ]->iconFrame = effects->effectFrame(EffectFrameUnstyled, false);
|
||||
windows[ w ]->iconFrame->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||
windows[ w ]->iconFrame->setIcon(w->icon());
|
||||
info->iconFrame = effects->effectFrame(EffectFrameUnstyled, false);
|
||||
info->iconFrame->setAlignment(Qt::AlignTop | Qt::AlignLeft);
|
||||
info->iconFrame->setIcon(w->icon());
|
||||
|
||||
windows[ w ]->area = QRect(frame_area.x() + i * item_max_size.width(),
|
||||
frame_area.y(),
|
||||
item_max_size.width(), item_max_size.height());
|
||||
windows[ w ]->clickable = windows[ w ]->area;
|
||||
info->area = QRect(frame_area.x() + i * item_max_size.width(),
|
||||
frame_area.y(),
|
||||
item_max_size.width(), item_max_size.height());
|
||||
info->clickable = info->area;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
desktops.clear();
|
||||
for (int i = 0; i < original_desktops.count(); i++) {
|
||||
int it = original_desktops.at(i);
|
||||
desktops[ it ] = new ItemInfo();
|
||||
ItemInfo *info = desktops.value( it, 0 );
|
||||
if (!info)
|
||||
desktops[ it ] = info = new ItemInfo();
|
||||
|
||||
desktops[ it ]->area = QRect(frame_area.x() + i * item_max_size.width(),
|
||||
frame_area.y(),
|
||||
item_max_size.width(), item_max_size.height());
|
||||
desktops[ it ]->clickable = desktops[ it ]->area;
|
||||
info->area = QRect(frame_area.x() + i * item_max_size.width(),
|
||||
frame_area.y(),
|
||||
item_max_size.width(), item_max_size.height());
|
||||
info->clickable = info->area;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BoxSwitchEffect::paintWindowThumbnail(EffectWindow* w)
|
||||
{
|
||||
if (!windows.contains(w))
|
||||
ItemInfo *info = windows.value(w, 0);
|
||||
if (!info)
|
||||
return;
|
||||
WindowPaintData data(w);
|
||||
|
||||
setPositionTransformations(data,
|
||||
windows[ w ]->thumbnail, w,
|
||||
windows[ w ]->area.adjusted(highlight_margin, highlight_margin, -highlight_margin, -highlight_margin),
|
||||
info->thumbnail, w,
|
||||
info->area.adjusted(highlight_margin, highlight_margin, -highlight_margin, -highlight_margin),
|
||||
Qt::KeepAspectRatio);
|
||||
|
||||
if (animation && (w == edge_window) && (windows.size() % 2 == 1)) {
|
||||
|
@ -698,7 +711,7 @@ void BoxSwitchEffect::paintWindowThumbnail(EffectWindow* w)
|
|||
// paint one part of the thumbnail
|
||||
effects->paintWindow(w,
|
||||
PAINT_WINDOW_OPAQUE | PAINT_WINDOW_TRANSFORMED | PAINT_WINDOW_LANCZOS,
|
||||
windows[ w ]->thumbnail, data);
|
||||
info->thumbnail, data);
|
||||
|
||||
QRect secondThumbnail;
|
||||
|
||||
|
@ -733,12 +746,12 @@ void BoxSwitchEffect::paintWindowThumbnail(EffectWindow* w)
|
|||
}
|
||||
}
|
||||
setPositionTransformations(data,
|
||||
windows[ w ]->thumbnail, w,
|
||||
info->thumbnail, w,
|
||||
secondThumbnail.adjusted(highlight_margin, highlight_margin, -highlight_margin, -highlight_margin),
|
||||
Qt::KeepAspectRatio);
|
||||
effects->paintWindow(w,
|
||||
PAINT_WINDOW_OPAQUE | PAINT_WINDOW_TRANSFORMED | PAINT_WINDOW_LANCZOS,
|
||||
windows[ w ]->thumbnail, data);
|
||||
info->thumbnail, data);
|
||||
} else if ((windows.size() % 2 == 0) && (w == right_window)) {
|
||||
// in case of even number of thumbnails:
|
||||
// the window on the right is painted one half on left and on half on the right side
|
||||
|
@ -779,7 +792,7 @@ void BoxSwitchEffect::paintWindowThumbnail(EffectWindow* w)
|
|||
data.quads = leftQuads;
|
||||
effects->drawWindow(w,
|
||||
PAINT_WINDOW_OPAQUE | PAINT_WINDOW_TRANSFORMED | PAINT_WINDOW_LANCZOS,
|
||||
windows[ w ]->thumbnail, data);
|
||||
info->thumbnail, data);
|
||||
|
||||
// right quads are painted on left side of frame
|
||||
data.quads = rightQuads;
|
||||
|
@ -788,28 +801,28 @@ void BoxSwitchEffect::paintWindowThumbnail(EffectWindow* w)
|
|||
(float)item_max_size.width() * 0.5 + animationOffset,
|
||||
frame_area.y(), item_max_size.width(), item_max_size.height());
|
||||
setPositionTransformations(data,
|
||||
windows[ w ]->thumbnail, w,
|
||||
info->thumbnail, w,
|
||||
secondThumbnail.adjusted(highlight_margin, highlight_margin, -highlight_margin, -highlight_margin),
|
||||
Qt::KeepAspectRatio);
|
||||
effects->drawWindow(w,
|
||||
PAINT_WINDOW_OPAQUE | PAINT_WINDOW_TRANSFORMED | PAINT_WINDOW_LANCZOS,
|
||||
windows[ w ]->thumbnail, data);
|
||||
info->thumbnail, data);
|
||||
} else {
|
||||
effects->drawWindow(w,
|
||||
PAINT_WINDOW_OPAQUE | PAINT_WINDOW_TRANSFORMED | PAINT_WINDOW_LANCZOS,
|
||||
windows[ w ]->thumbnail, data);
|
||||
info->thumbnail, data);
|
||||
}
|
||||
}
|
||||
|
||||
void BoxSwitchEffect::paintDesktopThumbnail(int iDesktop)
|
||||
{
|
||||
if (!desktops.contains(iDesktop))
|
||||
ItemInfo *info = desktops.value(iDesktop, 0);
|
||||
if (!info)
|
||||
return;
|
||||
|
||||
ScreenPaintData data;
|
||||
QRect region;
|
||||
QRect r = desktops[ iDesktop ]->area.adjusted(highlight_margin, highlight_margin,
|
||||
-highlight_margin, -highlight_margin);
|
||||
QRect r = info->area.adjusted(highlight_margin, highlight_margin, -highlight_margin, -highlight_margin);
|
||||
QSize size = QSize(displayWidth(), displayHeight());
|
||||
|
||||
size.scale(r.size(), Qt::KeepAspectRatio);
|
||||
|
@ -829,7 +842,8 @@ void BoxSwitchEffect::paintDesktopThumbnail(int iDesktop)
|
|||
|
||||
void BoxSwitchEffect::paintWindowIcon(EffectWindow* w)
|
||||
{
|
||||
if (!windows.contains(w))
|
||||
ItemInfo *info = windows.value(w, 0);
|
||||
if (!info)
|
||||
return;
|
||||
// Don't render null icons
|
||||
if (w->icon().isNull()) {
|
||||
|
@ -838,24 +852,24 @@ void BoxSwitchEffect::paintWindowIcon(EffectWindow* w)
|
|||
|
||||
int width = w->icon().width();
|
||||
int height = w->icon().height();
|
||||
int x = windows[ w ]->area.x() + windows[ w ]->area.width() - width - highlight_margin;
|
||||
int y = windows[ w ]->area.y() + windows[ w ]->area.height() - height - highlight_margin;
|
||||
int x = info->area.x() + info->area.width() - width - highlight_margin;
|
||||
int y = info->area.y() + info->area.height() - height - highlight_margin;
|
||||
if ((windows.size() % 2 == 0)) {
|
||||
if (w == right_window) {
|
||||
// in case of right window the icon has to be painted on the left side of the frame
|
||||
x = frame_area.x() + windows[ w ]->area.width() * 0.5 - width - highlight_margin;
|
||||
x = frame_area.x() + info->area.width() * 0.5 - width - highlight_margin;
|
||||
if (animation) {
|
||||
if (timeLine.value() <= 0.5) {
|
||||
if (direction == Left) {
|
||||
x -= windows[ w ]->area.width() * timeLine.value();
|
||||
x -= info->area.width() * timeLine.value();
|
||||
x = qMax(x, frame_area.x());
|
||||
} else
|
||||
x += windows[ w ]->area.width() * timeLine.value();
|
||||
x += info->area.width() * timeLine.value();
|
||||
} else {
|
||||
if (direction == Left)
|
||||
x += windows[ w ]->area.width() * (1.0 - timeLine.value());
|
||||
x += info->area.width() * (1.0 - timeLine.value());
|
||||
else {
|
||||
x -= windows[ w ]->area.width() * (1.0 - timeLine.value());
|
||||
x -= info->area.width() * (1.0 - timeLine.value());
|
||||
x = qMax(x, frame_area.x());
|
||||
}
|
||||
}
|
||||
|
@ -866,20 +880,20 @@ void BoxSwitchEffect::paintWindowIcon(EffectWindow* w)
|
|||
if (animation && w == edge_window) {
|
||||
if (timeLine.value() < 0.5) {
|
||||
if (direction == Left)
|
||||
x += windows[ w ]->area.width() * timeLine.value();
|
||||
x += info->area.width() * timeLine.value();
|
||||
else
|
||||
x -= windows[ w ]->area.width() * timeLine.value();
|
||||
x -= info->area.width() * timeLine.value();
|
||||
} else {
|
||||
if (direction == Left)
|
||||
x -= windows[ w ]->area.width() * (1.0 - timeLine.value());
|
||||
x -= info->area.width() * (1.0 - timeLine.value());
|
||||
else
|
||||
x += windows[ w ]->area.width() * (1.0 - timeLine.value());
|
||||
x += info->area.width() * (1.0 - timeLine.value());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
windows[ w ]->iconFrame->setPosition(QPoint(x, y));
|
||||
windows[ w ]->iconFrame->render(infiniteRegion(), 1.0, 0.75);
|
||||
info->iconFrame->setPosition(QPoint(x, y));
|
||||
info->iconFrame->render(infiniteRegion(), 1.0, 0.75);
|
||||
}
|
||||
|
||||
void* BoxSwitchEffect::proxy()
|
||||
|
|
|
@ -32,6 +32,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#include "resize/resize_config.h"
|
||||
#include "showfps/showfps_config.h"
|
||||
#include "thumbnailaside/thumbnailaside_config.h"
|
||||
#include "windowgeometry/windowgeometry_config.h"
|
||||
#include "zoom/zoom_config.h"
|
||||
|
||||
#ifdef KWIN_HAVE_OPENGL_COMPOSITING
|
||||
|
@ -67,6 +68,7 @@ KWIN_EFFECT_CONFIG_MULTIPLE(builtins,
|
|||
KWIN_EFFECT_CONFIG_SINGLE(showfps, ShowFpsEffectConfig)
|
||||
KWIN_EFFECT_CONFIG_SINGLE(translucency, TranslucencyEffectConfig)
|
||||
KWIN_EFFECT_CONFIG_SINGLE(thumbnailaside, ThumbnailAsideEffectConfig)
|
||||
KWIN_EFFECT_CONFIG_SINGLE(windowgeometry, WindowGeometryConfig)
|
||||
KWIN_EFFECT_CONFIG_SINGLE(zoom, ZoomEffectConfig)
|
||||
|
||||
#ifdef KWIN_HAVE_OPENGL_COMPOSITING
|
||||
|
|
|
@ -240,6 +240,7 @@ void HighlightWindowEffect::prepareHighlighting()
|
|||
foreach (EffectWindow * w, effects->stackingOrder())
|
||||
if (!m_windowOpacity.contains(w)) // Just in case we are still finishing from last time
|
||||
m_windowOpacity[w] = isInitiallyHidden(w) ? 0.0 : 1.0;
|
||||
m_highlightedWindows.at(0)->addRepaintFull();
|
||||
}
|
||||
|
||||
void HighlightWindowEffect::finishHighlighting()
|
||||
|
@ -247,6 +248,8 @@ void HighlightWindowEffect::finishHighlighting()
|
|||
m_finishing = true;
|
||||
m_monitorWindow = NULL;
|
||||
m_highlightedWindows.clear();
|
||||
if (!m_windowOpacity.isEmpty())
|
||||
m_windowOpacity.constBegin().key()->addRepaintFull();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -125,7 +125,7 @@ Comment[nn]=Snu fargane på skrivebordet og vindauge
|
|||
Comment[pa]=ਡੈਸਕਟਾਪ ਅਤੇ ਵਿੰਡੋ ਦੇ ਰੰਗ ਬਦਲੋ
|
||||
Comment[pl]=Odwrócenie kolorów pulpitu i okien
|
||||
Comment[pt]=Inverte a cor do ecrã e das janelas
|
||||
Comment[pt_BR]=Inverte as cores da área de trabalho e das janelas
|
||||
Comment[pt_BR]=Inverte as cores das janelas e da área de trabalho
|
||||
Comment[ro]=Inversează culoarea biroului și a ferestrelor
|
||||
Comment[ru]=Инверсия цвета рабочего стола и окон
|
||||
Comment[si]=වැඩතල හා කවුළු වල වර්ණ යටිකුරු කරන්න
|
||||
|
|
|
@ -126,7 +126,7 @@ Comment[nn]=Ton inn skrivebordet ved innlogging
|
|||
Comment[pa]=ਜਦੋਂ ਲਾਗਇਨ ਕਰਨਾ ਹੋਵੇ ਤਾਂ ਹੌਲੀ ਹੌਲੀ ਡੈਸਕਟਾਪ ਨੂੰ ਫਿੱਕਾ ਕਰੋ
|
||||
Comment[pl]=Płynne rozjaśnienie do pulpitu podczas logowania
|
||||
Comment[pt]=Desvanecer suavemente para o ecrã ao ligar-se
|
||||
Comment[pt_BR]=Suaviza o desaparecimento da área de trabalho ao fazer login
|
||||
Comment[pt_BR]=Suaviza o desaparecimento da área de trabalho ao fazer a autenticação
|
||||
Comment[ro]=Estompează lin biroul la autentificare
|
||||
Comment[ru]=Плавное проявление рабочего стола при входе в систему
|
||||
Comment[si]=පිවිසීමේදී වැඩතලයට සුමුදු අවපැහැකිරීමක් ලබාදෙන්න
|
||||
|
|
|
@ -318,6 +318,7 @@ void LogoutEffect::windowClosed(EffectWindow* w)
|
|||
|
||||
void LogoutEffect::windowDeleted(EffectWindow* w)
|
||||
{
|
||||
windows.removeAll(w);
|
||||
ignoredWindows.removeAll(w);
|
||||
if (w == logoutWindow)
|
||||
logoutWindow = NULL;
|
||||
|
|
|
@ -126,7 +126,7 @@ Comment[nn]=Ton ut skrivebordet ved utlogging
|
|||
Comment[pa]=ਜਦੋਂ ਲਾਗ-ਆਉਟ ਡਾਈਲਾਗ ਵੇਖਾਉਣਾ ਹੋਵੇ ਤਾਂ ਡੈਸਕਟਾਪ ਨੂੰ ਡਿ-ਸੈਚੂਰੇਟ ਕਰੋ
|
||||
Comment[pl]=Zmniejszenie nasycenia kolorów podczas pokazywania okna wylogowania
|
||||
Comment[pt]=Reduzir a saturação do ecrã ao mostrar a janela de fim de sessão
|
||||
Comment[pt_BR]=Reduz a saturação da área de trabalho ao mostrar o diálogo de logout
|
||||
Comment[pt_BR]=Reduz a saturação da área de trabalho ao mostrar o diálogo de desligamento
|
||||
Comment[ro]=Desaturează biroul la afișarea dialogului de ieșire
|
||||
Comment[ru]=Плавное обесцвечивание экрана при выходе из сеанса
|
||||
Comment[si]=පිටවීමෙ සංවාදය පෙන්වන විට වැඩතලය අසංතෘප්ත කරන්න
|
||||
|
|
|
@ -120,7 +120,7 @@ Comment[nn]=Vis miniatyrbilete av vindauge når peikaren er over ikona på oppg
|
|||
Comment[pa]=ਵਿੰਡੋ ਥੰਮਨੇਲ ਵੇਖੋ, ਜਦੋਂ ਕਿ ਹੋਵਰਿੰਗ ਟਾਸਕਬਾਰ ਐਂਟਰੀ ਉੱਤੇ ਹੋਵੇ।
|
||||
Comment[pl]=Pokazuje miniaturki okien, kiedy kursor znajduje się na ich pozycji w pasku zadań
|
||||
Comment[pt]=Mostrar as miniaturas das janelas ao passar sobre os elementos da barra de tarefas
|
||||
Comment[pt_BR]=Mostra miniaturas das janelas quando o cursor passar sobre os itens da barra de tarefas
|
||||
Comment[pt_BR]=Mostra miniaturas das janelas quando o ponteiro do mouse passar sobre os itens da barra de tarefas
|
||||
Comment[ro]=Afișează miniaturile ferestrelor cînd cursorul planează deasupra înregistrărilor din bara de procese
|
||||
Comment[ru]=Показывать миниатюру окна при наведении мышью на элемент панели задач
|
||||
Comment[si]=ක්රියා තීරු ඇතුළත්කිරීම් වලට ඉහළින් හැසිරෙන විට කවුළු කුඩා රූ පෙන්වන්න
|
||||
|
|
|
@ -122,6 +122,14 @@ DEF2("Window Quick Tile Left", I18N_NOOP("Quick Tile Window to the Left"),
|
|||
0, slotWindowQuickTileLeft());
|
||||
DEF2("Window Quick Tile Right", I18N_NOOP("Quick Tile Window to the Right"),
|
||||
0, slotWindowQuickTileRight());
|
||||
DEF2("Window Quick Tile Top Left", I18N_NOOP("Quick Tile Window to the Top Left"),
|
||||
0, slotWindowQuickTileTopLeft());
|
||||
DEF2("Window Quick Tile Bottom Left", I18N_NOOP("Quick Tile Window to the Bottom Left"),
|
||||
0, slotWindowQuickTileBottomLeft());
|
||||
DEF2("Window Quick Tile Top Right", I18N_NOOP("Quick Tile Window to the Top Right"),
|
||||
0, slotWindowQuickTileTopRight());
|
||||
DEF2("Window Quick Tile Bottom Right", I18N_NOOP("Quick Tile Window to the Bottom Right"),
|
||||
0, slotWindowQuickTileBottomRight());
|
||||
DEF2("Switch Window Up", I18N_NOOP("Switch to Window Above"),
|
||||
Qt::META + Qt::ALT + Qt::Key_Up, slotSwitchWindowUp());
|
||||
DEF2("Switch Window Down", I18N_NOOP("Switch to Window Below"),
|
||||
|
|
|
@ -94,9 +94,10 @@ void initGL()
|
|||
// Get OpenGL version
|
||||
QString glversionstring = QString((const char*)glGetString(GL_VERSION));
|
||||
QStringList glversioninfo = glversionstring.left(glversionstring.indexOf(' ')).split('.');
|
||||
while (glversioninfo.count() < 3)
|
||||
glversioninfo << "0";
|
||||
#ifndef KWIN_HAVE_OPENGLES
|
||||
glVersion = MAKE_GL_VERSION(glversioninfo[0].toInt(), glversioninfo[1].toInt(),
|
||||
glversioninfo.count() > 2 ? glversioninfo[2].toInt() : 0);
|
||||
glVersion = MAKE_GL_VERSION(glversioninfo[0].toInt(), glversioninfo[1].toInt(), glversioninfo[2].toInt());
|
||||
#endif
|
||||
// Get list of supported OpenGL extensions
|
||||
glExtensions = QString((const char*)glGetString(GL_EXTENSIONS)).split(' ');
|
||||
|
|
|
@ -700,6 +700,38 @@ void Workspace::slotWindowQuickTileRight()
|
|||
active_client->setQuickTileMode(QuickTileRight, true);
|
||||
}
|
||||
|
||||
void Workspace::slotWindowQuickTileTopLeft()
|
||||
{
|
||||
if (!active_client) {
|
||||
return;
|
||||
}
|
||||
active_client->setQuickTileMode(QuickTileTopLeft, true);
|
||||
}
|
||||
|
||||
void Workspace::slotWindowQuickTileTopRight()
|
||||
{
|
||||
if (!active_client) {
|
||||
return;
|
||||
}
|
||||
active_client->setQuickTileMode(QuickTileTopRight, true);
|
||||
}
|
||||
|
||||
void Workspace::slotWindowQuickTileBottomLeft()
|
||||
{
|
||||
if (!active_client) {
|
||||
return;
|
||||
}
|
||||
active_client->setQuickTileMode(QuickTileBottomLeft, true);
|
||||
}
|
||||
|
||||
void Workspace::slotWindowQuickTileBottomRight()
|
||||
{
|
||||
if (!active_client) {
|
||||
return;
|
||||
}
|
||||
active_client->setQuickTileMode(QuickTileBottomRight, true);
|
||||
}
|
||||
|
||||
int Workspace::packPositionLeft(const Client* cl, int oldx, bool left_edge) const
|
||||
{
|
||||
int newx = clientArea(MovementArea, cl).left();
|
||||
|
|
|
@ -587,6 +587,13 @@ void SceneOpenGL::flushBuffer(int mask, QRegion damage)
|
|||
glXCopySubBuffer(display(), glxbuffer, r.x(), y, r.width(), r.height());
|
||||
}
|
||||
} else {
|
||||
// if a shader is bound, copy pixels results in a black screen
|
||||
// therefore unbind the shader and restore after copying the pixels
|
||||
GLint shader = 0;
|
||||
if (ShaderManager::instance()->isShaderBound()) {
|
||||
glGetIntegerv(GL_CURRENT_PROGRAM, &shader);
|
||||
glUseProgram(0);
|
||||
}
|
||||
// no idea why glScissor() is used, but Compiz has it and it doesn't seem to hurt
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
glDrawBuffer(GL_FRONT);
|
||||
|
@ -608,6 +615,10 @@ void SceneOpenGL::flushBuffer(int mask, QRegion damage)
|
|||
glBitmap(0, 0, 0, 0, -xpos, -ypos, NULL); // move position back to 0,0
|
||||
glDrawBuffer(GL_BACK);
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
// rebind previously bound shader
|
||||
if (ShaderManager::instance()->isShaderBound()) {
|
||||
glUseProgram(shader);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
waitSync();
|
||||
|
|
|
@ -764,6 +764,10 @@ public slots:
|
|||
void slotWindowShrinkVertical();
|
||||
void slotWindowQuickTileLeft();
|
||||
void slotWindowQuickTileRight();
|
||||
void slotWindowQuickTileTopLeft();
|
||||
void slotWindowQuickTileTopRight();
|
||||
void slotWindowQuickTileBottomLeft();
|
||||
void slotWindowQuickTileBottomRight();
|
||||
|
||||
void slotWalkThroughDesktops();
|
||||
void slotWalkBackThroughDesktops();
|
||||
|
|
Loading…
Reference in a new issue