Merge branch 'master' into color2

This commit is contained in:
Casian Andrei 2012-08-22 21:56:44 +03:00
commit 17965a9fd9
94 changed files with 1187 additions and 296 deletions

View file

@ -195,7 +195,7 @@ elseif(OPENGLES_FOUND)
endif(OPENGL_FOUND)
install(TARGETS kdeinit_kwin ${INSTALL_TARGETS_DEFAULT_ARGS} )
#install(TARGETS kwin ${INSTALL_TARGETS_DEFAULT_ARGS} )
install(TARGETS kwin ${INSTALL_TARGETS_DEFAULT_ARGS} )
if(OPENGLES_FOUND)
kde4_add_kdeinit_executable( kwin_gles ${kwin_KDEINIT_SRCS})

View file

@ -414,7 +414,7 @@ Client *Workspace::clientUnderMouse(int screen) const
}
// rule out clients which are not really visible.
// the screen test is rather superflous for xrandr & twinview since the geometry would differ -> TODO: might be dropped
// the screen test is rather superfluous for xrandr & twinview since the geometry would differ -> TODO: might be dropped
if (!(client->isShown(false) && client->isOnCurrentDesktop() &&
client->isOnCurrentActivity() && client->isOnScreen(screen)))
continue;

View file

@ -85,6 +85,9 @@ bool AuroraeFactory::reset(unsigned long changed)
if (changed & SettingButtons) {
emit buttonsChanged();
}
if (changed & SettingFont){
emit titleFontChanged();
}
const KConfig conf("auroraerc");
const KConfigGroup group(&conf, "Engine");
const QString themeName = group.readEntry("ThemeName", "example-deco");
@ -161,6 +164,16 @@ bool AuroraeFactory::customButtonPositions()
return options()->customButtonPositions();
}
QFont AuroraeFactory::activeTitleFont()
{
return options()->font();
}
QFont AuroraeFactory::inactiveTitleFont()
{
return options()->font(false);
}
AuroraeFactory *AuroraeFactory::s_instance = NULL;
/*******************************************************
@ -193,6 +206,7 @@ void AuroraeClient::init()
createMainWidget();
widget()->setAttribute(Qt::WA_TranslucentBackground);
widget()->setAttribute(Qt::WA_NoSystemBackground);
widget()->installEventFilter(this);
m_view = new QGraphicsView(m_scene, widget());
m_view->setAttribute(Qt::WA_TranslucentBackground);
m_view->setWindowFlags(Qt::X11BypassWindowManagerHint);
@ -213,6 +227,23 @@ void AuroraeClient::init()
connect(AuroraeFactory::instance()->theme(), SIGNAL(themeChanged()), SLOT(themeChanged()));
}
bool AuroraeClient::eventFilter(QObject *object, QEvent *event)
{
// we need to filter the wheel events on the decoration
// QML does not yet provide a way to accept wheel events, this will change with Qt 5
// TODO: remove in KDE5
// see BUG: 304248
if (object != widget() || event->type() != QEvent::Wheel) {
return KDecorationUnstable::eventFilter(object, event);
}
QWheelEvent *wheel = static_cast<QWheelEvent*>(event);
if (mousePosition(wheel->pos()) == PositionCenter) {
titlebarMouseWheelOperation(wheel->delta());
return true;
}
return false;
}
void AuroraeClient::activeChange()
{
emit activeChanged();
@ -437,6 +468,34 @@ void AuroraeClient::doCloseWindow()
KDecorationUnstable::closeWindow();
}
void AuroraeClient::maximize(int button)
{
// a maximized window does not need to have a window decoration
// in that case we need to delay handling by one cycle
// BUG: 304870
QMetaObject::invokeMethod(qobject_cast< KDecorationUnstable* >(this),
"doMaximzie",
Qt::QueuedConnection,
Q_ARG(int, button));
}
void AuroraeClient::doMaximzie(int button)
{
KDecorationUnstable::maximize(static_cast<Qt::MouseButton>(button));
}
void AuroraeClient::titlebarDblClickOperation()
{
// the double click operation can result in a window being maximized
// see maximize
QMetaObject::invokeMethod(qobject_cast< KDecorationUnstable* >(this), "doTitlebarDblClickOperation", Qt::QueuedConnection);
}
void AuroraeClient::doTitlebarDblClickOperation()
{
KDecorationUnstable::titlebarDblClickOperation();
}
} // namespace Aurorae
extern "C"

View file

@ -41,6 +41,8 @@ class AuroraeFactory : public QObject, public KDecorationFactoryUnstable
Q_PROPERTY(QString leftButtons READ leftButtons NOTIFY buttonsChanged)
Q_PROPERTY(QString rightButtons READ rightButtons NOTIFY buttonsChanged)
Q_PROPERTY(bool customButtonPositions READ customButtonPositions NOTIFY buttonsChanged)
Q_PROPERTY(QFont activeTitleFont READ activeTitleFont NOTIFY titleFontChanged)
Q_PROPERTY(QFont inactiveTitleFont READ inactiveTitleFont NOTIFY titleFontChanged)
public:
~AuroraeFactory();
@ -58,12 +60,16 @@ public:
QString rightButtons();
bool customButtonPositions();
QFont activeTitleFont();
QFont inactiveTitleFont();
private:
AuroraeFactory();
void init();
Q_SIGNALS:
void buttonsChanged();
void titleFontChanged();
private:
static AuroraeFactory *s_instance;
@ -105,6 +111,7 @@ class AuroraeClient : public KDecorationUnstable
public:
AuroraeClient(KDecorationBridge* bridge, KDecorationFactory* factory);
virtual ~AuroraeClient();
virtual bool eventFilter(QObject *object, QEvent *event);
virtual void activeChange();
virtual void borders(int& left, int& right, int& top, int& bottom) const;
virtual void captionChange();
@ -144,10 +151,14 @@ public slots:
void titleReleased(Qt::MouseButton button, Qt::MouseButtons buttons);
void titleMouseMoved(Qt::MouseButton button, Qt::MouseButtons buttons);
void closeWindow();
void titlebarDblClickOperation();
void maximize(int button);
private slots:
void themeChanged();
void doCloseWindow();
void doTitlebarDblClickOperation();
void doMaximzie(int button);
private:
QGraphicsView *m_view;

View file

@ -141,8 +141,9 @@ Decoration {
horizontalAlignment: auroraeTheme.horizontalAlignment
verticalAlignment: auroraeTheme.verticalAlignment
elide: Text.ElideRight
height: auroraeTheme.titleHeight
height: Math.max(auroraeTheme.titleHeight, auroraeTheme.buttonHeight * auroraeTheme.buttonSizeFactor)
color: decoration.active ? auroraeTheme.activeTextColor : auroraeTheme.inactiveTextColor
font: decoration.active ? options.activeTitleFont : options.inactiveTitleFont
anchors {
left: leftButtonGroup.right
right: rightButtonGroup.left
@ -155,7 +156,13 @@ Decoration {
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
anchors.fill: parent
onDoubleClicked: decoration.titlebarDblClickOperation()
onPressed: decoration.titlePressed(mouse.button, mouse.buttons)
onPressed: {
if (mouse.button == Qt.LeftButton) {
mouse.accepted = false;
} else {
decoration.titlePressed(mouse.button, mouse.buttons);
}
}
onReleased: decoration.titleReleased(mouse.button, mouse.buttons)
}
Behavior on color {

View file

@ -187,7 +187,7 @@ void Workspace::slotCompositingOptionsInitialized()
fpsInterval = qMax((fpsInterval / vBlankInterval) * vBlankInterval, vBlankInterval);
} else
vBlankInterval = 1 << 10; // no sync - DO NOT set "0", would cause div-by-zero segfaults.
m_timeSinceLastVBlank = fpsInterval - 1; // means "start now" - we dont't have even a slight idea when the first vsync will occur
m_timeSinceLastVBlank = fpsInterval - 1; // means "start now" - we don't have even a slight idea when the first vsync will occur
checkCompositeTimer();
XCompositeRedirectSubwindows(display(), rootWindow(), CompositeRedirectManual);
new EffectsHandlerImpl(scene->compositingType()); // sets also the 'effects' pointer

View file

@ -1359,9 +1359,9 @@ void EffectsHandlerImpl::reconfigureEffect(const QString& name)
}
}
bool EffectsHandlerImpl::isEffectLoaded(const QString& name)
bool EffectsHandlerImpl::isEffectLoaded(const QString& name) const
{
for (QVector< EffectPair >::iterator it = loaded_effects.begin(); it != loaded_effects.end(); ++it)
for (QVector< EffectPair >::const_iterator it = loaded_effects.constBegin(); it != loaded_effects.constEnd(); ++it)
if ((*it).first == name)
return true;
@ -1430,6 +1430,28 @@ void EffectsHandlerImpl::slotHideOutline()
emit hideOutline();
}
QString EffectsHandlerImpl::supportInformation(const QString &name) const
{
if (!isEffectLoaded(name)) {
return QString();
}
for (QVector< EffectPair >::const_iterator it = loaded_effects.constBegin(); it != loaded_effects.constEnd(); ++it) {
if ((*it).first == name) {
QString support((*it).first + ":\n");
const QMetaObject *metaOptions = (*it).second->metaObject();
for (int i=0; i<metaOptions->propertyCount(); ++i) {
const QMetaProperty property = metaOptions->property(i);
if (QLatin1String(property.name()) == "objectName") {
continue;
}
support.append(QLatin1String(property.name()) % ": " % (*it).second->property(property.name()).toString() % '\n');
}
return support;
}
}
return QString();
}
//****************************************
// EffectWindowImpl
//****************************************

View file

@ -167,7 +167,8 @@ public:
void toggleEffect(const QString& name);
void unloadEffect(const QString& name);
void reconfigureEffect(const QString& name);
bool isEffectLoaded(const QString& name);
bool isEffectLoaded(const QString& name) const;
QString supportInformation(const QString& name) const;
QStringList loadedEffects() const;
QStringList listOfEffects() const;

View file

@ -672,5 +672,10 @@ void BlurEffect::doCachedBlur(EffectWindow *w, const QRegion& region, const floa
shader->unbind();
}
int BlurEffect::blurRadius() const
{
return shader->radius();
}
} // namespace KWin

View file

@ -35,6 +35,8 @@ class BlurShader;
class BlurEffect : public KWin::Effect
{
Q_OBJECT
Q_PROPERTY(int blurRadius READ blurRadius)
Q_PROPERTY(bool cacheTexture READ isCacheTexture)
public:
BlurEffect();
~BlurEffect();
@ -48,6 +50,12 @@ public:
void drawWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data);
void paintEffectFrame(EffectFrame *frame, QRegion region, double opacity, double frameOpacity);
// for dynamic setting extraction
int blurRadius() const;
bool isCacheTexture() const {
return m_shouldCache;
}
public Q_SLOTS:
void slotWindowAdded(KWin::EffectWindow *w);
void slotWindowDeleted(KWin::EffectWindow *w);

View file

@ -93,7 +93,7 @@ Comment[eo]=Montri miniaturojn de fenestroj en alt+taba fenestr-ŝanĝilo
Comment[es]=Muestra miniaturas de ventanas en el conmutador de ventanas alt+tab
Comment[et]=Akende pisipiltide näitamine Alt+TAB aknavahetajas
Comment[eu]=Bistaratu leihoen koadro-txikiak alt+tab leiho aldatzailean
Comment[fi]=Näyttää ikkunoiden pienoiskuvat Alt+Sarkain-ikkunanvaihdossa
Comment[fi]=Näyttää ikkunoiden pienoiskuvat Alt+Sarkain-tehtävänvalitsimessa
Comment[fr]=Affiche des aperçus des fenêtres dans le changeur de fenêtres en utilisant la combinaison « Alt+Tab »
Comment[fy]=Lit finsterminiatueren sjen ûnder rinnen troch finsters mei Alt+Tab
Comment[ga]=Taispeáin mionsamhlacha fuinneog sa mhalartóir fuinneog Alt+Táb

View file

@ -912,47 +912,62 @@ void CoverSwitchEffect::windowInputMouseEvent(Window w, QEvent* e)
// we don't want click events during animations
if (animation)
return;
QPoint pos = static_cast< QMouseEvent* >(e)->pos();
QMouseEvent* event = static_cast< QMouseEvent* >(e);
// determine if a window has been clicked
// not interested in events above a fullscreen window (ignoring panel size)
if (pos.y() < (area.height()*scaleFactor - area.height()) * 0.5f *(1.0f / scaleFactor))
return;
switch (event->button()) {
case Qt::XButton1: // wheel up
selectPreviousWindow();
break;
case Qt::XButton2: // wheel down
selectNextWindow();
break;
case Qt::LeftButton:
case Qt::RightButton:
case Qt::MidButton:
default:
QPoint pos = event->pos();
// if there is no selected window (that is no window at all) we cannot click it
if (!selected_window)
return;
if (pos.x() < (area.width()*scaleFactor - selected_window->width()) * 0.5f *(1.0f / scaleFactor)) {
float availableSize = (area.width() * scaleFactor - area.width()) * 0.5f * (1.0f / scaleFactor);
for (int i = 0; i < leftWindows.count(); i++) {
int windowPos = availableSize / leftWindows.count() * i;
if (pos.x() < windowPos)
continue;
if (i + 1 < leftWindows.count()) {
if (pos.x() > availableSize / leftWindows.count()*(i + 1))
continue;
}
effects->setTabBoxWindow(leftWindows[i]);
// determine if a window has been clicked
// not interested in events above a fullscreen window (ignoring panel size)
if (pos.y() < (area.height()*scaleFactor - area.height()) * 0.5f *(1.0f / scaleFactor))
return;
}
}
if (pos.x() > area.width() - (area.width()*scaleFactor - selected_window->width()) * 0.5f *(1.0f / scaleFactor)) {
float availableSize = (area.width() * scaleFactor - area.width()) * 0.5f * (1.0f / scaleFactor);
for (int i = 0; i < rightWindows.count(); i++) {
int windowPos = area.width() - availableSize / rightWindows.count() * i;
if (pos.x() > windowPos)
continue;
if (i + 1 < rightWindows.count()) {
if (pos.x() < area.width() - availableSize / rightWindows.count()*(i + 1))
continue;
}
effects->setTabBoxWindow(rightWindows[i]);
// if there is no selected window (that is no window at all) we cannot click it
if (!selected_window)
return;
if (pos.x() < (area.width()*scaleFactor - selected_window->width()) * 0.5f *(1.0f / scaleFactor)) {
float availableSize = (area.width() * scaleFactor - area.width()) * 0.5f * (1.0f / scaleFactor);
for (int i = 0; i < leftWindows.count(); i++) {
int windowPos = availableSize / leftWindows.count() * i;
if (pos.x() < windowPos)
continue;
if (i + 1 < leftWindows.count()) {
if (pos.x() > availableSize / leftWindows.count()*(i + 1))
continue;
}
effects->setTabBoxWindow(leftWindows[i]);
return;
}
}
if (pos.x() > area.width() - (area.width()*scaleFactor - selected_window->width()) * 0.5f *(1.0f / scaleFactor)) {
float availableSize = (area.width() * scaleFactor - area.width()) * 0.5f * (1.0f / scaleFactor);
for (int i = 0; i < rightWindows.count(); i++) {
int windowPos = area.width() - availableSize / rightWindows.count() * i;
if (pos.x() > windowPos)
continue;
if (i + 1 < rightWindows.count()) {
if (pos.x() < area.width() - availableSize / rightWindows.count()*(i + 1))
continue;
}
effects->setTabBoxWindow(rightWindows[i]);
return;
}
}
break;
}
}
@ -1009,24 +1024,33 @@ void CoverSwitchEffect::updateCaption()
void CoverSwitchEffect::slotTabBoxKeyEvent(QKeyEvent *event)
{
if (!mActivated || !selected_window) {
return;
}
const int index = effects->currentTabBoxWindowList().indexOf(selected_window);
int newIndex = index;
if (event->type() == QEvent::KeyPress) {
switch (event->key()) {
case Qt::Key_Left:
newIndex = (index - 1);
selectPreviousWindow();
break;
case Qt::Key_Right:
newIndex = (index + 1);
selectNextWindow();
break;
default:
// nothing
break;
}
}
}
void CoverSwitchEffect::selectNextOrPreviousWindow(bool forward)
{
if (!mActivated || !selected_window) {
return;
}
const int index = effects->currentTabBoxWindowList().indexOf(selected_window);
int newIndex = index;
if (forward) {
++newIndex;
} else {
--newIndex;
}
if (newIndex == effects->currentTabBoxWindowList().size()) {
newIndex = 0;
} else if (newIndex < 0) {

View file

@ -86,7 +86,7 @@ Comment[eo]=Montri iPod-an efekton kiel alt+tab fenestr-ŝanĝilo
Comment[es]=Muestra un efecto de cover flow en el conmutador de ventanas alt+tab
Comment[et]=Cover Flow efekti näitamine Alt+TAB aknavahetajas
Comment[eu]=Alt+tab leiho aldatzailearentzako estalki isuri efektua bistaratzen du
Comment[fi]=Näyttää levykansitehosteen Alt+Sarkain-ikkunanvaihdossa
Comment[fi]=Näyttää levykansitehosteen Alt+Sarkain-tehtävänvalitsimessa
Comment[fr]=Affiche un effet de défilement circulaire dans le changeur de fenêtres en utilisant la combinaison « Alt+Tab »
Comment[fy]=Lit finsters as lânkommende albumhoezen sjen ûnder it rinnen troch de finsters mei Alt+Tab
Comment[ga]=Taispeáin maisíocht le Sruth Clúdach sa mhalartóir fuinneog Alt+Táb

View file

@ -38,6 +38,18 @@ class CoverSwitchEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int animationDuration READ configuredAnimationDuration)
Q_PROPERTY(bool animateSwitch READ isAnimateSwitch)
Q_PROPERTY(bool animateStart READ isAnimateStart)
Q_PROPERTY(bool animateStop READ isAnimateStop)
Q_PROPERTY(bool reflection READ isReflection)
Q_PROPERTY(bool windowTitle READ isWindowTitle)
Q_PROPERTY(qreal zPosition READ windowZPosition)
Q_PROPERTY(bool dynamicThumbnails READ isDynamicThumbnails)
Q_PROPERTY(int thumbnailWindows READ configurredThumbnailWindows)
Q_PROPERTY(bool primaryTabBox READ isPrimaryTabBox)
Q_PROPERTY(bool secondaryTabBox READ isSecondaryTabBox)
// TODO: mirror colors
public:
CoverSwitchEffect();
~CoverSwitchEffect();
@ -52,6 +64,41 @@ public:
static bool supported();
// for properties
int configuredAnimationDuration() const {
return animationDuration;
}
bool isAnimateSwitch() const {
return animateSwitch;
}
bool isAnimateStart() const {
return animateStart;
}
bool isAnimateStop() const {
return animateStop;
}
bool isReflection() const {
return reflection;
}
bool isWindowTitle() const {
return windowTitle;
}
qreal windowZPosition() const {
return zPosition;
}
bool isDynamicThumbnails() const {
return dynamicThumbnails;
}
int configurredThumbnailWindows() const {
return thumbnailWindows;
}
bool isPrimaryTabBox() const {
return primaryTabBox;
}
bool isSecondaryTabBox() const {
return secondaryTabBox;
}
public Q_SLOTS:
void slotWindowClosed(KWin::EffectWindow *c);
void slotTabBoxAdded(int mode);
@ -65,6 +112,9 @@ private:
void paintWindowCover(EffectWindow* w, bool reflectedWindow, WindowPaintData& data);
void paintFrontWindow(EffectWindow* frontWindow, int width, int leftWindows, int rightWindows, bool reflectedWindow);
void paintWindows(const EffectWindowList& windows, bool left, bool reflectedWindows, EffectWindow* additionalWindow = NULL);
void selectNextOrPreviousWindow(bool forward);
inline void selectNextWindow() { selectNextOrPreviousWindow(true); }
inline void selectPreviousWindow() { selectNextOrPreviousWindow(false); }
void abort();
/**
* Updates the caption of the caption frame.

View file

@ -1167,7 +1167,8 @@ void CubeEffect::postPaintScreen()
delete m_cubeCapBuffer;
m_cubeCapBuffer = NULL;
desktopNameFrame->free();
if (desktopNameFrame)
desktopNameFrame->free();
}
effects->addRepaintFull();
}

View file

@ -38,6 +38,23 @@ class CubeEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(qreal cubeOpacity READ configuredCubeOpacity)
Q_PROPERTY(bool opacityDesktopOnly READ isOpacityDesktopOnly)
Q_PROPERTY(bool displayDesktopName READ isDisplayDesktopName)
Q_PROPERTY(bool reflection READ isReflection)
Q_PROPERTY(int rotationDuration READ configuredRotationDuration)
Q_PROPERTY(QColor backgroundColor READ configuredBackgroundColor)
Q_PROPERTY(QColor capColor READ configuredCapColor)
Q_PROPERTY(bool paintCaps READ isPaintCaps)
Q_PROPERTY(bool closeOnMouseRelease READ isCloseOnMouseRelease)
Q_PROPERTY(qreal zPosition READ configuredZPosition)
Q_PROPERTY(bool useForTabBox READ isUseForTabBox)
Q_PROPERTY(bool invertKeys READ isInvertKeys)
Q_PROPERTY(bool invertMouse READ isInvertMouse)
Q_PROPERTY(qreal capDeformationFactor READ configuredCapDeformationFactor)
Q_PROPERTY(bool useZOrdering READ isUseZOrdering)
Q_PROPERTY(bool texturedCaps READ isTexturedCaps)
// TODO: electric borders: not a registered type
public:
CubeEffect();
~CubeEffect();
@ -58,6 +75,56 @@ public:
void unregisterCubeInsideEffect(CubeInsideEffect* effect);
static bool supported();
// for properties
qreal configuredCubeOpacity() const {
return cubeOpacity;
}
bool isOpacityDesktopOnly() const {
return opacityDesktopOnly;
}
bool isDisplayDesktopName() const {
return displayDesktopName;
}
bool isReflection() const {
return reflection;
}
int configuredRotationDuration() const {
return rotationDuration;
}
QColor configuredBackgroundColor() const {
return backgroundColor;
}
QColor configuredCapColor() const {
return capColor;
}
bool isPaintCaps() const {
return paintCaps;
}
bool isCloseOnMouseRelease() const {
return closeOnMouseRelease;
}
qreal configuredZPosition() const {
return zPosition;
}
bool isUseForTabBox() const {
return useForTabBox;
}
bool isInvertKeys() const {
return invertKeys;
}
bool isInvertMouse() const {
return invertMouse;
}
qreal configuredCapDeformationFactor() const {
return capDeformationFactor;
}
bool isUseZOrdering() const {
return useZOrdering;
}
bool isTexturedCaps() const {
return texturedCaps;
}
private slots:
void toggleCube();
void toggleCylinder();

View file

@ -33,6 +33,11 @@ class CubeSlideEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int rotationDuration READ configuredRotationDuration)
Q_PROPERTY(bool dontSlidePanels READ isDontSlidePanels)
Q_PROPERTY(bool dontSlideStickyWindows READ isDontSlideStickyWindows)
Q_PROPERTY(bool usePagerLayout READ isUsePagerLayout)
Q_PROPERTY(bool useWindowMoving READ isUseWindowMoving)
public:
CubeSlideEffect();
~CubeSlideEffect();
@ -46,6 +51,22 @@ public:
static bool supported();
// for properties
int configuredRotationDuration() const {
return rotationDuration;
}
bool isDontSlidePanels() const {
return dontSlidePanels;
}
bool isDontSlideStickyWindows() const {
return dontSlideStickyWindows;
}
bool isUsePagerLayout() const {
return usePagerLayout;
}
bool isUseWindowMoving() const {
return useWindowMoving;
}
private Q_SLOTS:
void slotDesktopChanged(int old, int current);
void slotWindowStepUserMovedResized(KWin::EffectWindow *w);

View file

@ -156,11 +156,6 @@ void DashboardEffect::slotWindowActivated(EffectWindow *w)
transformWindow = true;
window = w;
if (blur) {
w->setData(WindowBlurBehindRole, w->geometry());
w->setData(WindowForceBlurRole, QVariant(true));
}
effects->addRepaintFull();
} else {
if (transformWindow) {
@ -175,6 +170,10 @@ void DashboardEffect::slotWindowAdded(EffectWindow* w)
if (isDashboard(w)) {
// Tell other windowAdded() effects to ignore this window
w->setData(WindowAddedGrabRole, QVariant::fromValue(static_cast<void*>(this)));
if (blur) {
w->setData(WindowBlurBehindRole, w->geometry());
w->setData(WindowForceBlurRole, QVariant(true));
}
activateAnimation = true;
deactivateAnimation = false;

View file

@ -34,6 +34,9 @@ namespace KWin
class DashboardEffect : public KWin::Effect
{
Q_OBJECT
Q_PROPERTY(qreal brightness READ configuredBrightness)
Q_PROPERTY(qreal saturation READ configuredSaturation)
Q_PROPERTY(bool blur READ isBlur)
public:
DashboardEffect();
~DashboardEffect();
@ -45,6 +48,16 @@ public:
virtual void unpropagate();
virtual bool isActive() const;
// for properties
qreal configuredBrightness() const {
return brightness;
}
qreal configuredSaturation() const {
return saturation;
}
bool isBlur() const {
return blur;
}
public Q_SLOTS:
void slotWindowAdded(KWin::EffectWindow* c);
void slotWindowClosed(KWin::EffectWindow *c);

View file

@ -63,6 +63,13 @@ class DesktopGridEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int zoomDuration READ configuredZoomDuration)
Q_PROPERTY(int border READ configuredBorder)
Q_PROPERTY(Qt::Alignment desktopNameAlignment READ configuredDesktopNameAlignment)
Q_PROPERTY(int layoutMode READ configuredLayoutMode)
Q_PROPERTY(int customLayoutRows READ configuredCustomLayoutRows)
Q_PROPERTY(bool usePresentWindows READ isUsePresentWindows)
// TODO: electric borders
public:
DesktopGridEffect();
~DesktopGridEffect();
@ -79,6 +86,25 @@ public:
enum { LayoutPager, LayoutAutomatic, LayoutCustom }; // Layout modes
// for properties
int configuredZoomDuration() const {
return zoomDuration;
}
int configuredBorder() const {
return border;
}
Qt::Alignment configuredDesktopNameAlignment() const {
return desktopNameAlignment;
}
int configuredLayoutMode() const {
return layoutMode;
}
int configuredCustomLayoutRows() const {
return customLayoutRows;
}
bool isUsePresentWindows() const {
return m_usePresentWindows;
}
private slots:
void toggle();
// slots for global shortcut changed

View file

@ -38,6 +38,7 @@ class DialogParentEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int changeTime READ configuredChangeTime)
public:
DialogParentEffect();
virtual void reconfigure(ReconfigureFlags);
@ -48,6 +49,10 @@ public:
virtual bool isActive() const;
// for properties
int configuredChangeTime() const {
return changeTime;
}
public Q_SLOTS:
void slotWindowClosed(KWin::EffectWindow *c);
void slotWindowActivated(KWin::EffectWindow *c);

View file

@ -34,12 +34,33 @@ class DimInactiveEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(bool dimPanels READ isDimPanels)
Q_PROPERTY(bool dimDesktop READ isDimDesktop)
Q_PROPERTY(bool dimKeepAbove READ isDimKeepAbove)
Q_PROPERTY(bool dimByGroup READ isDimByGroup)
Q_PROPERTY(int dimStrength READ configuredDimStrength)
public:
DimInactiveEffect();
virtual void reconfigure(ReconfigureFlags);
virtual void prePaintScreen(ScreenPrePaintData& data, int time);
virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data);
// for properties
bool isDimPanels() const {
return dim_panels;
}
bool isDimDesktop() const {
return dim_desktop;
}
bool isDimKeepAbove() const {
return dim_keepabove;
}
bool isDimByGroup() const {
return dim_by_group;
}
int configuredDimStrength() const {
return dim_strength;
}
public Q_SLOTS:
void slotWindowActivated(KWin::EffectWindow* c);
void slotWindowDeleted(KWin::EffectWindow *w);

View file

@ -30,6 +30,7 @@ class FallApartEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int blockSize READ configuredBlockSize)
public:
FallApartEffect();
virtual void reconfigure(ReconfigureFlags);
@ -39,6 +40,10 @@ public:
virtual void postPaintScreen();
virtual bool isActive() const;
// for properties
int configuredBlockSize() const {
return blockSize;
}
public Q_SLOTS:
void slotWindowClosed(KWin::EffectWindow *c);
void slotWindowDeleted(KWin::EffectWindow *w);

View file

@ -641,6 +641,7 @@ void FlipSwitchEffect::setActive(bool activate, FlipSwitchMode mode)
switch(m_mode) {
case TabboxMode:
m_selectedWindow = effects->currentTabBoxWindow();
m_input = effects->createFullScreenInputWindow(this, Qt::ArrowCursor);
break;
case CurrentDesktopMode:
m_selectedWindow = effects->activeWindow();
@ -687,8 +688,7 @@ void FlipSwitchEffect::setActive(bool activate, FlipSwitchMode mode)
}
} else
m_startStopTimeLine.setCurveShape(QTimeLine::EaseInOutCurve);
if (mode != TabboxMode)
effects->destroyInputWindow(m_input);
effects->destroyInputWindow(m_input);
if (m_hasKeyboardGrab) {
effects->ungrabKeyboard();
m_hasKeyboardGrab = false;
@ -827,14 +827,37 @@ void FlipSwitchEffect::adjustWindowMultiScreen(const KWin::EffectWindow* w, Wind
}
} else {
if (clientRect.width() != fullRect.width() && clientRect.x() < rect.x()) {
data.translate(- clientRect.width());
data.translate(- (m_screenArea.x() - clientRect.x()));
}
if (clientRect.height() != fullRect.height() && clientRect.y() < m_screenArea.y()) {
data.translate(0.0, - clientRect.height());
data.translate(0.0, - (m_screenArea.y() - clientRect.y()));
}
}
}
void FlipSwitchEffect::selectNextOrPreviousWindow(bool forward)
{
if (!m_active || !m_selectedWindow) {
return;
}
const int index = effects->currentTabBoxWindowList().indexOf(m_selectedWindow);
int newIndex = index;
if (forward) {
++newIndex;
} else {
--newIndex;
}
if (newIndex == effects->currentTabBoxWindowList().size()) {
newIndex = 0;
} else if (newIndex < 0) {
newIndex = effects->currentTabBoxWindowList().size() -1;
}
if (index == newIndex) {
return;
}
effects->setTabBoxWindow(effects->currentTabBoxWindowList().at(newIndex));
}
//*************************************************************
// Keyboard handling
@ -937,35 +960,21 @@ void FlipSwitchEffect::grabbedKeyboardEvent(QKeyEvent* e)
void FlipSwitchEffect::slotTabBoxKeyEvent(QKeyEvent *event)
{
if (!m_active || !m_selectedWindow) {
return;
}
const int index = effects->currentTabBoxWindowList().indexOf(m_selectedWindow);
int newIndex = index;
if (event->type() == QEvent::KeyPress) {
switch (event->key()) {
case Qt::Key_Up:
case Qt::Key_Left:
newIndex = (index - 1);
selectPreviousWindow();
break;
case Qt::Key_Down:
case Qt::Key_Right:
newIndex = (index + 1);
selectNextWindow();
break;
default:
// nothing
break;
}
}
if (newIndex == effects->currentTabBoxWindowList().size()) {
newIndex = 0;
} else if (newIndex < 0) {
newIndex = effects->currentTabBoxWindowList().size() -1;
}
if (index == newIndex) {
return;
}
effects->setTabBoxWindow(effects->currentTabBoxWindowList().at(newIndex));
}
bool FlipSwitchEffect::isActive() const
@ -989,6 +998,37 @@ void FlipSwitchEffect::updateCaption()
}
}
//*************************************************************
// Mouse handling
//*************************************************************
void FlipSwitchEffect::windowInputMouseEvent(Window w, QEvent* e)
{
assert(w == m_input);
Q_UNUSED(w);
if (e->type() != QEvent::MouseButtonPress)
return;
// we don't want click events during animations
if (m_animation)
return;
QMouseEvent* event = static_cast< QMouseEvent* >(e);
switch (event->button()) {
case Qt::XButton1: // wheel up
selectPreviousWindow();
break;
case Qt::XButton2: // wheel down
selectNextWindow();
break;
case Qt::LeftButton:
case Qt::RightButton:
case Qt::MidButton:
default:
// TODO: Change window on mouse button click
break;
}
}
//*************************************************************
// Item Info
//*************************************************************

View file

@ -84,7 +84,7 @@ Comment[eo]=Turni inter la fenestroj kiuj estas en la stako de la alt+taba fenes
Comment[es]=Cambia entre las ventanas apiladas con el conmutador de ventanas alt+tab
Comment[et]=Lehitseb läbi pinus asuvate akende Alt+TAB abil
Comment[eu]=Irauli pila baten dauden leihoak alt+tab leiho aldatzailearekin
Comment[fi]=Vaihda niiden ikkunoiden välillä, jotka ovat Alt+Sarkain-ikkunavaihtajan pinossa
Comment[fi]=Vaihda niiden ikkunoiden välillä, jotka ovat Alt+Sarkain-tehtävävalitsimen pinossa
Comment[fr]=Affiche le changeur de fenêtres « Alt + Tab » avec les fenêtres empilées en perspective
Comment[fy]=Lit de finsters stapele sjen ûnder it trochrinnen fan de finsters mei Alt+Tab
Comment[ga]=Ransaíonn fuinneoga i gcruach sa mhalartóir fuinneog Alt+Táb

View file

@ -35,6 +35,14 @@ class FlipSwitchEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(bool tabBox READ isTabBox)
Q_PROPERTY(bool tabBoxAlternative READ isTabBoxAlternative)
Q_PROPERTY(int duration READ duration)
Q_PROPERTY(int angle READ angle)
Q_PROPERTY(qreal xPosition READ xPosition)
Q_PROPERTY(qreal yPosition READ yPosition)
Q_PROPERTY(bool windowTitle READ isWindowTitle)
// TODO: electric borders
public:
FlipSwitchEffect();
~FlipSwitchEffect();
@ -47,9 +55,33 @@ public:
virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data);
virtual bool borderActivated(ElectricBorder border);
virtual void grabbedKeyboardEvent(QKeyEvent* e);
virtual void windowInputMouseEvent(Window w, QEvent* e);
virtual bool isActive() const;
static bool supported();
// for properties
bool isTabBox() const {
return m_tabbox;
}
bool isTabBoxAlternative() const {
return m_tabboxAlternative;
}
int duration() const {
return m_timeLine.duration();
}
int angle() const {
return m_angle;
}
qreal xPosition() const {
return m_xPosition;
}
qreal yPosition() const {
return m_yPosition;
}
bool isWindowTitle() const {
return m_windowTitle;
}
private Q_SLOTS:
void toggleActiveCurrent();
void toggleActiveAllDesktops();
@ -77,6 +109,9 @@ private:
bool isSelectableWindow(EffectWindow *w) const;
void scheduleAnimation(const SwitchingDirection& direction, int distance = 1);
void adjustWindowMultiScreen(const EffectWindow *w, WindowPaintData& data);
void selectNextOrPreviousWindow(bool forward);
inline void selectNextWindow() { selectNextOrPreviousWindow(true); }
inline void selectPreviousWindow() { selectNextOrPreviousWindow(false); }
/**
* Updates the caption of the caption frame.
* Taking care of rewording the desktop client.

View file

@ -34,6 +34,9 @@ class GlideEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int duration READ configuredDuration)
Q_PROPERTY(int effect READ configuredEffect)
Q_PROPERTY(int angle READ configuredAngle)
public:
GlideEffect();
~GlideEffect();
@ -45,6 +48,17 @@ public:
virtual bool isActive() const;
static bool supported();
// for properties
int configuredDuration() const {
return duration;
}
int configuredEffect() const {
return effect;
}
int configuredAngle() const {
return angle;
}
public Q_SLOTS:
void slotWindowAdded(KWin::EffectWindow* c);
void slotWindowClosed(KWin::EffectWindow *c);

View file

@ -23,4 +23,4 @@ set( kwin4_effect_builtins_config_sources ${kwin4_effect_builtins_config_sources
# .desktop files
install( FILES
login/login_config.desktop
DESTINATION ${SERVICES_INSTALL_DIR}/kwin )
DESTINATION ${SERVICES_INSTALL_DIR}/kwin )

View file

@ -31,6 +31,7 @@ class LoginEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(bool fadeToBlack READ isFadeToBlack)
public:
LoginEffect();
virtual void prePaintScreen(ScreenPrePaintData& data, int time);
@ -40,6 +41,10 @@ public:
virtual void reconfigure(ReconfigureFlags);
virtual bool isActive() const;
// for properties
bool isFadeToBlack() const {
return m_fadeToBlack;
}
public Q_SLOTS:
void slotWindowClosed(KWin::EffectWindow *w);

View file

@ -36,6 +36,7 @@ class LogoutEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(bool useBlur READ isUseBlur)
public:
LogoutEffect();
~LogoutEffect();
@ -45,6 +46,11 @@ public:
virtual void postPaintScreen();
virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data);
virtual bool isActive() const;
// for properties
bool isUseBlur() const {
return useBlur;
}
public Q_SLOTS:
void slotWindowAdded(KWin::EffectWindow* w);
void slotWindowClosed(KWin::EffectWindow *w);

View file

@ -40,6 +40,7 @@ class GLVertexBuffer;
class LookingGlassEffect : public Effect
{
Q_OBJECT
Q_PROPERTY(int initialRadius READ initialRadius)
public:
LookingGlassEffect();
virtual ~LookingGlassEffect();
@ -52,6 +53,10 @@ public:
static bool supported();
// for properties
int initialRadius() const {
return initialradius;
}
public slots:
void toggle();
void zoomIn();

View file

@ -32,6 +32,7 @@ class MagicLampEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int animationDuration READ animationDuration)
public:
MagicLampEffect();
@ -44,6 +45,10 @@ public:
static bool supported();
// for properties
int animationDuration() const {
return mAnimationDuration;
}
public Q_SLOTS:
void slotWindowDeleted(KWin::EffectWindow *w);
void slotWindowMinimized(KWin::EffectWindow *w);

View file

@ -34,6 +34,8 @@ class MagnifierEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(QSize magnifierSize READ magnifierSize)
Q_PROPERTY(qreal targetZoom READ targetZoom)
public:
MagnifierEffect();
virtual ~MagnifierEffect();
@ -43,6 +45,14 @@ public:
virtual void postPaintScreen();
virtual bool isActive() const;
static bool supported();
// for properties
QSize magnifierSize() const {
return magnifier_size;
}
qreal targetZoom() const {
return target_zoom;
}
private slots:
void zoomIn();
void zoomOut();

View file

@ -32,12 +32,22 @@ class MouseMarkEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int width READ configuredWidth)
Q_PROPERTY(QColor color READ configuredColor)
public:
MouseMarkEffect();
~MouseMarkEffect();
virtual void reconfigure(ReconfigureFlags);
virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data);
virtual bool isActive() const;
// for properties
int configuredWidth() const {
return width;
}
QColor configuredColor() const {
return color;
}
private slots:
void clear();
void clearLast();

View file

@ -6,6 +6,7 @@ Name[ca@valencia]=Contorn
Name[cs]=Obrys
Name[da]=Omrids
Name[de]=Umriss
Name[el]=Περίγραμμα
Name[es]=Contorno
Name[et]=Kontuur
Name[eu]=Zirriborroa
@ -53,6 +54,7 @@ Comment[ca@valencia]=Efecte auxiliar per dibuixar un contorn
Comment[cs]=Pomocný efekt pro vykreslení obrysu
Comment[da]=Hjælpeeffekt til at rendere et omrids
Comment[de]=Hilfseffekt, der einen Umriss zeichnet.
Comment[el]=Εφέ αποτύπωσης ενός περιγράμματος
Comment[es]=Efecto de ayuda para representar un contorno
Comment[et]=Abiefekt kontuuri renderdamiseks
Comment[eu]=Zirriborro bat errendatzeko efektu laguntzailea

View file

@ -67,6 +67,23 @@ class PresentWindowsEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int layoutMode READ layoutMode)
Q_PROPERTY(bool showCaptions READ isShowCaptions)
Q_PROPERTY(bool showIcons READ isShowIcons)
Q_PROPERTY(bool doNotCloseWindows READ isDoNotCloseWindows)
Q_PROPERTY(bool ignoreMinimized READ isIgnoreMinimized)
Q_PROPERTY(int accuracy READ accuracy)
Q_PROPERTY(bool fillGaps READ isFillGaps)
Q_PROPERTY(int fadeDuration READ fadeDuration)
Q_PROPERTY(bool showPanel READ isShowPanel)
Q_PROPERTY(int leftButtonWindow READ leftButtonWindow)
Q_PROPERTY(int rightButtonWindow READ rightButtonWindow)
Q_PROPERTY(int middleButtonWindow READ middleButtonWindow)
Q_PROPERTY(int leftButtonDesktop READ leftButtonDesktop)
Q_PROPERTY(int middleButtonDesktop READ middleButtonDesktop)
Q_PROPERTY(int rightButtonDesktop READ rightButtonDesktop)
Q_PROPERTY(bool dragToClose READ isDragToClose)
// TODO: electric borders
private:
// Structures
struct WindowData {
@ -130,6 +147,55 @@ public:
DesktopShowDesktopAction = 3 // Minimizes all windows
};
// for properties
int layoutMode() const {
return m_layoutMode;
}
bool isShowCaptions() const {
return m_showCaptions;
}
bool isShowIcons() const {
return m_showIcons;
}
bool isDoNotCloseWindows() const {
return m_doNotCloseWindows;
}
bool isIgnoreMinimized() const {
return m_ignoreMinimized;
}
int accuracy() const {
return m_accuracy;
}
bool isFillGaps() const {
return m_fillGaps;
}
int fadeDuration() const {
return m_fadeDuration;
}
bool isShowPanel() const {
return m_showPanel;
}
int leftButtonWindow() const {
return m_leftButtonWindow;
}
int rightButtonWindow() const {
return m_rightButtonWindow;
}
int middleButtonWindow() const {
return m_middleButtonWindow;
}
int leftButtonDesktop() const {
return m_leftButtonDesktop;
}
int middleButtonDesktop() const {
return m_middleButtonDesktop;
}
int rightButtonDesktop() const {
return m_rightButtonDesktop;
}
bool isDragToClose() const {
return m_dragToClose;
}
public slots:
void setActive(bool active);
void toggleActive() {

View file

@ -30,6 +30,8 @@ class ResizeEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(bool textureScale READ isTextureScale)
Q_PROPERTY(bool outline READ isOutline)
public:
ResizeEffect();
~ResizeEffect();
@ -42,6 +44,13 @@ public:
virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data);
virtual void reconfigure(ReconfigureFlags);
bool isTextureScale() const {
return m_features & TextureScale;
}
bool isOutline() const {
return m_features & Outline;
}
public Q_SLOTS:
void slotWindowStartUserMovedResized(KWin::EffectWindow *w);
void slotWindowStepUserMovedResized(KWin::EffectWindow *w, const QRect &geometry);

View file

@ -15,7 +15,7 @@ Name[es]=Captura de pantalla
Name[et]=Ekraanipilt
Name[eu]=Pantaila-argazkia
Name[fa]=عکس صفحه
Name[fi]=Ruudun kaappaus
Name[fi]=Kuvankaappaus
Name[fr]=Capture d'écran
Name[ga]=Seat den Scáileán
Name[he]=צילום מסך

View file

@ -33,6 +33,7 @@ class SheetEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int duration READ configuredDuration)
public:
SheetEffect();
virtual void reconfigure(ReconfigureFlags);
@ -44,6 +45,10 @@ public:
static bool supported();
// for properties
int configuredDuration() const {
return duration;
}
public Q_SLOTS:
void slotWindowAdded(KWin::EffectWindow* c);
void slotWindowClosed(KWin::EffectWindow *c);

View file

@ -33,6 +33,14 @@ class GLTexture;
class ShowFpsEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(qreal alpha READ configuredAlpha)
Q_PROPERTY(int x READ configuredX)
Q_PROPERTY(int y READ configuredY)
Q_PROPERTY(QRect fpsTextRect READ configuredFpsTextRect)
Q_PROPERTY(int textAlign READ configuredTextAlign)
Q_PROPERTY(QFont textFont READ configuredTextFont)
Q_PROPERTY(QColor textColor READ configuredTextColor)
public:
ShowFpsEffect();
virtual void reconfigure(ReconfigureFlags);
@ -41,6 +49,29 @@ public:
virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data);
virtual void postPaintScreen();
enum { INSIDE_GRAPH, NOWHERE, TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT }; // fps text position
// for properties
qreal configuredAlpha() const {
return alpha;
}
int configuredX() const {
return x;
}
int configuredY() const {
return y;
}
QRect configuredFpsTextRect() const {
return fpsTextRect;
}
int configuredTextAlign() const {
return textAlign;
}
QFont configuredTextFont() const {
return textFont;
}
QColor configuredTextColor() const {
return textColor;
}
private:
void paintGL(int fps);
#ifdef KWIN_HAVE_XRENDER_COMPOSITING

View file

@ -33,6 +33,8 @@ class SlidingPopupsEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int fadeInTime READ fadeInTime)
Q_PROPERTY(int fadeOutTime READ fadeOutTime)
public:
SlidingPopupsEffect();
~SlidingPopupsEffect();
@ -44,6 +46,13 @@ public:
virtual bool isActive() const;
// TODO react also on virtual desktop changes
// for properties
int fadeInTime() const {
return mFadeInTime;
}
int fadeOutTime() const {
return mFadeOutTime;
}
public Q_SLOTS:
void slotWindowAdded(KWin::EffectWindow *c);
void slotWindowClosed(KWin::EffectWindow *c);

View file

@ -165,6 +165,8 @@ void StartupFeedbackEffect::prePaintScreen(ScreenPrePaintData& data, int time)
}
data.paint.unite(m_dirtyRect);
m_dirtyRect = QRect();
m_currentGeometry = feedbackRect();
data.paint.unite(m_currentGeometry);
}
effects->prePaintScreen(data, time);
}
@ -311,12 +313,12 @@ void StartupFeedbackEffect::start(const QString& icon)
if (!m_active)
effects->startMousePolling();
m_active = true;
m_dirtyRect = m_currentGeometry = feedbackRect();
QPixmap iconPixmap = KIconLoader::global()->loadIcon(icon, KIconLoader::Small, 0,
KIconLoader::DefaultState, QStringList(), 0, true); // return null pixmap if not found
if (iconPixmap.isNull())
iconPixmap = SmallIcon("system-run");
prepareTextures(iconPixmap);
m_dirtyRect = m_currentGeometry = feedbackRect();
effects->addRepaintFull();
}

View file

@ -39,10 +39,28 @@ class ThumbnailAsideEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(int maxWidth READ configuredMaxWidth)
Q_PROPERTY(int spacing READ configuredSpacing)
Q_PROPERTY(qreal opacity READ configuredOpacity)
Q_PROPERTY(int screen READ configuredScreen)
public:
ThumbnailAsideEffect();
virtual void reconfigure(ReconfigureFlags);
virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data);
// for properties
int configuredMaxWidth() const {
return maxwidth;
}
int configuredSpacing() const {
return spacing;
}
qreal configuredOpacity() const {
return opacity;
}
int configuredScreen() const {
return screen;
}
private slots:
void toggleCurrentThumbnail();
void slotWindowClosed(KWin::EffectWindow *w);

View file

@ -138,9 +138,12 @@ void TrackMouseEffect::paintScreen(int mask, QRegion region, ScreenPaintData& da
matrix.translate(p.x(), p.y(), 0.0);
matrix.rotate(i ? -2*m_angle : m_angle, 0, 0, 1.0);
matrix.translate(-p.x(), -p.y(), 0.0);
if (shader)
if (shader) {
shader->setUniform(GLShader::ModelViewMatrix, matrix);
else
shader->setUniform(GLShader::Saturation, 1.0);
shader->setUniform(GLShader::ModulationConstant, QVector4D(1.0, 1.0, 1.0, 1.0));
shader->setUniform(GLShader::AlphaToOne, 0);
} else
pushMatrix(matrix);
m_texture[i]->bind();
m_texture[i]->render(region, m_lastRect[i]);

View file

@ -34,6 +34,8 @@ class TrackMouseEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers)
Q_PROPERTY(bool mousePolling READ isMousePolling)
public:
TrackMouseEffect();
virtual ~TrackMouseEffect();
@ -42,6 +44,14 @@ public:
virtual void postPaintScreen();
virtual void reconfigure(ReconfigureFlags);
virtual bool isActive() const;
// for properties
Qt::KeyboardModifiers modifiers() const {
return m_modifiers;
}
bool isMousePolling() const {
return m_mousePolling;
}
private slots:
void toggle();
void slotMouseChanged(const QPoint& pos, const QPoint& old,

View file

@ -31,12 +31,61 @@ class TranslucencyEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(qreal decoration READ configuredDecoration)
Q_PROPERTY(qreal moveResize READ configuredMoveResize)
Q_PROPERTY(qreal dialogs READ configuredDialogs)
Q_PROPERTY(qreal inactive READ configuredInactive)
Q_PROPERTY(qreal comboboxPopups READ configuredComboboxPopups)
Q_PROPERTY(qreal menus READ configuredMenus)
Q_PROPERTY(bool individualMenuConfig READ isIndividualMenuConfig)
Q_PROPERTY(qreal dropDownMenus READ configuredDropDownMenus)
Q_PROPERTY(qreal popupMenus READ configuredPopupMenus)
Q_PROPERTY(qreal tornOffMenus READ configuredTornOffMenus)
Q_PROPERTY(int moveResizeDuration READ configuredMoveResizeDuration)
Q_PROPERTY(int activeInactiveDuration READ configuredActiveInactiveDuration)
public:
TranslucencyEffect();
virtual void reconfigure(ReconfigureFlags);
virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time);
virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data);
// for properties
qreal configuredDecoration() const {
return decoration;
}
qreal configuredMoveResize() const {
return moveresize;
}
qreal configuredDialogs() const {
return dialogs;
}
qreal configuredInactive() const {
return inactive;
}
qreal configuredComboboxPopups() const {
return comboboxpopups;
}
qreal configuredMenus() const {
return menus;
}
bool isIndividualMenuConfig() const {
return individualmenuconfig;
}
qreal configuredDropDownMenus() const {
return dropdownmenus;
}
qreal configuredPopupMenus() const {
return popupmenus;
}
qreal configuredTornOffMenus() const {
return tornoffmenus;
}
int configuredMoveResizeDuration() const {
return moveresize_timeline.duration();
}
int configuredActiveInactiveDuration() const {
return activeinactive_timeline.duration();
}
public Q_SLOTS:
void slotWindowActivated(KWin::EffectWindow* w);
void slotWindowStartStopUserMovedResized(KWin::EffectWindow *w);

View file

@ -29,6 +29,8 @@ namespace KWin
class WindowGeometry : public Effect
{
Q_OBJECT
Q_PROPERTY(bool handlesMoves READ isHandlesMoves)
Q_PROPERTY(bool handlesResizes READ isHandlesResizes)
public:
WindowGeometry();
~WindowGeometry();
@ -40,6 +42,13 @@ public:
void paintScreen(int mask, QRegion region, ScreenPaintData &data);
virtual bool isActive() const;
// for properties
bool isHandlesMoves() const {
return iHandleMoves;
}
bool isHandlesResizes() const {
return iHandleResizes;
}
private slots:
void toggle();
void slotWindowStartUserMovedResized(KWin::EffectWindow *w);

View file

@ -25,6 +25,22 @@ struct ParameterSet;
class WobblyWindowsEffect : public Effect
{
Q_OBJECT
Q_PROPERTY(qreal stiffness READ stiffness)
Q_PROPERTY(qreal drag READ drag)
Q_PROPERTY(qreal moveFactor READ moveFactor)
Q_PROPERTY(qreal xTesselation READ xTesselation)
Q_PROPERTY(qreal yTesselation READ yTesselation)
Q_PROPERTY(qreal minVelocity READ minVelocity)
Q_PROPERTY(qreal maxVelocity READ maxVelocity)
Q_PROPERTY(qreal stopVelocity READ stopVelocity)
Q_PROPERTY(qreal minAcceleration READ minAcceleration)
Q_PROPERTY(qreal maxAcceleration READ maxAcceleration)
Q_PROPERTY(qreal stopAcceleration READ stopAcceleration)
Q_PROPERTY(bool moveEffectEnabled READ isMoveEffectEnabled)
Q_PROPERTY(bool openEffectEnabled READ isOpenEffectEnabled)
Q_PROPERTY(bool closeEffectEnabled READ isCloseEffectEnabled)
Q_PROPERTY(bool moveWobble READ isMoveWobble)
Q_PROPERTY(bool resizeWobble READ isResizeWobble)
public:
WobblyWindowsEffect();
@ -57,6 +73,55 @@ public:
static bool supported();
// for properties
qreal stiffness() const {
return m_stiffness;
}
qreal drag() const {
return m_drag;
}
qreal moveFactor() const {
return m_move_factor;
}
qreal xTesselation() const {
return m_xTesselation;
}
qreal yTesselation() const {
return m_yTesselation;
}
qreal minVelocity() const {
return m_minVelocity;
}
qreal maxVelocity() const {
return m_maxVelocity;
}
qreal stopVelocity() const {
return m_stopVelocity;
}
qreal minAcceleration() const {
return m_minAcceleration;
}
qreal maxAcceleration() const {
return m_maxAcceleration;
}
qreal stopAcceleration() const {
return m_stopAcceleration;
}
bool isMoveEffectEnabled() const {
return m_moveEffectEnabled;
}
bool isOpenEffectEnabled() const {
return m_openEffectEnabled;
}
bool isCloseEffectEnabled() const {
return m_closeEffectEnabled;
}
bool isMoveWobble() const {
return m_moveWobble;
}
bool isResizeWobble() const {
return m_resizeWobble;
}
public Q_SLOTS:
void slotWindowAdded(KWin::EffectWindow *w);
void slotWindowClosed(KWin::EffectWindow *w);

View file

@ -36,6 +36,14 @@ class ZoomEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(qreal zoomFactor READ configuredZoomFactor)
Q_PROPERTY(int mousePointer READ configuredMousePointer)
Q_PROPERTY(int mouseTracking READ configuredMouseTracking)
Q_PROPERTY(bool enableFocusTracking READ isEnableFocusTracking)
Q_PROPERTY(bool followFocus READ isFollowFocus)
Q_PROPERTY(int focusDelay READ configuredFocusDelay)
Q_PROPERTY(qreal moveFactor READ configuredMoveFactor)
Q_PROPERTY(qreal targetZoom READ targetZoom)
public:
ZoomEffect();
virtual ~ZoomEffect();
@ -44,6 +52,31 @@ public:
virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data);
virtual void postPaintScreen();
virtual bool isActive() const;
// for properties
qreal configuredZoomFactor() const {
return zoomFactor;
}
int configuredMousePointer() const {
return mousePointer;
}
int configuredMouseTracking() const {
return mouseTracking;
}
bool isEnableFocusTracking() const {
return enableFocusTracking;
}
bool isFollowFocus() const {
return followFocus;
}
int configuredFocusDelay() const {
return focusDelay;
}
qreal configuredMoveFactor() const {
return moveFactor;
}
qreal targetZoom() const {
return target_zoom;
}
private slots:
inline void zoomIn() { zoomIn(-1.0); };
void zoomIn(double to);

View file

@ -64,7 +64,9 @@ void Workspace::desktopResized()
{
QRect geom;
for (int i = 0; i < QApplication::desktop()->screenCount(); i++) {
geom |= QApplication::desktop()->screenGeometry(i);
//do NOT use - QApplication::desktop()->screenGeometry(i) there could be a virtual geometry
// see bug #302783
geom |= QApplication::desktop()->screen(i)->geometry();
}
NETSize desktop_geometry;
desktop_geometry.width = geom.width();
@ -2535,7 +2537,8 @@ bool Client::startMoveResize()
geom_restore = geometry(); // "restore" to current geometry
setMaximize(false, false);
}
}
} else if (quick_tile_mode != QuickTileNone) // no longer now - we move, resize is handled below
setQuickTileMode(QuickTileNone); // otherwise we mess every second tile, bug #303937
} else if ((maximizeMode() == MaximizeFull && options->electricBorderMaximize()) ||
(quick_tile_mode != QuickTileNone && isMovable() && mode == PositionCenter)) {
// Exit quick tile mode when the user attempts to move a tiled window, cannot use isMove() yet

View file

@ -184,6 +184,7 @@ Comment[zh_TW]=設定桌面效果
X-KDE-Keywords=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[ca]=kwin,finestra,gestor,composició,efecte,efectes 3D,efectes 2D,OpenGL,XRender,arranjament de vídeo,efectes gràfics,efectes d'escriptori,animacions,animacions diverses,efectes de gestió de finestra,efecte de canvi de finestra,efecte de canvi d'escriptori,animacions,velocitat d'animació,animacions d'escriptori,controladors,configuració de controladors,renderització,render,efecte d'inversió,efecte d'aparença de vidre,efecte de lupa,efecte ajudant de desplaçament,efecte de seguiment de ratolí,efecte de zoom,efecte de difuminat,efecte de tauler,efecte d'explosió,efecte d'esvaïment,efecte d'esvaïment d'escriptori,efecte de trencament,efecte de lliscament,efecte de ressaltat de finestra,efecte de connexió,efecte de desconnexió,efecte de làmpada màgica,efecte d'animació de minimització,efecte de marca de ratolí,efecte d'apropament,efecte de captura de pantalla,efecte de full,efecte de diapositiva,efecte de missatges emergents lliscants,efecte de miniatures de barra de tasques,efecte de miniatures laterals,translucidesa,efecte de translucidesa,transparència,efecte de geometria de finestra,efecte de finestres sacsejades,efecte de confirmació d'engegada,efecte de diàleg principal,efecte d'enfosquiment d'inactiu,efecte d'enfosquiment de pantalla, efecte de diapositiva prèvia,decoració,efecte per mostrar FPS,efecte de mostra de pintat,efecte de canvi de caixa,efecte de canvi de coberta,efecte de cub d'escriptori,efecte d'animació de cub d'escriptori,efecte de graella d'escriptori,efecte de canvi en roda,efecte de contorn,efecte de presentació de finestres,efecte de redimensió de finestra
X-KDE-Keywords[da]=kwin,vindue,vindueshåndtering,compositing,effekter,3D-effekter,2D-effekter,OpenGL,XRender,grafiske effekter,skrivebordseffekter,animationer,diverse animationer,vindueshåndteringseffekter,effekt til skift af vinduer,effekt til skrivebordsskift,animationshastighed,skrivebordsanimationer,drivere,driverindstillinger,rendering,render,invertereffect,kikkerteffekt,forstørrelsesglaseffekt,hægtehjælpereffekt,følg musen-effekt,zoomeffect,sløreffekt,instrumentbræt,eksplosionseffekt,fade-effect,svæve-effect,fremhæv vindue-effekt,login-effekt,log ud-effekt,magisk lampe-effekt,minimer-effekt,musemærke-effekt,skalerind-effekt,skærmbillede-effekt,glide-effekt,glidende pop-op-effekt,opgavelinjeminiaturer-effekt,gennemsigtighed,transparens,ugennemsigtighed,vinduesgeometri-effekt,wobbly,blævrende vinduer,eye candy,øjeguf,vis FPS-effekt,cube,terning,gitter
X-KDE-Keywords[es]=kwin,ventana,gestor,composición,efecto,efectos 3D,efectos 2D,OpenGL,XRender,preferencias de vídeo,efectos gráficos,efectos del escritorio,animaciones,animaciones diversas,efectos de la gestión de ventanas,efecto de cambio de ventana,efecto de cambio de escritorio,velocidad de animación,animaciones del escritorio,controladores,preferencias del controlador,renderización,renderizar,efecto de inversión,efecto de espejo,efecto de lupa,efecto auxiliar de instantánea,efecto de seguimiento del ratón,efecto de ampliación,efecto borroso,efecto del tablero de mandos,efecto de explosión,efecto de desvanecimiento,efecto de desvanecimiento del escritorio,efecto de romper en pedazos,efecto de planeo,efecto de resaltar ventanas,efecto de inicio de sesion,efecto de final de sesión,efecto de lámpara mágica,efecto de animación al minimizar,efecto de marcas del ratón,efecto de escalado,efecto de captura de pantalla,efecto de hoja,efecto de deslizamiento,efecto de ventanas emergentes deslizantes,efecto de miniaturas de la barra de tareas,efecto de miniaturas laterales,transparencia,efecto de transparencia,efecto de geometría de las ventanas,efecto de ventanas gelatinosas,efecto de notificación de inicio,efecto de padre de la ventana,efecto de oscurecer inactiva,efecto de oscurecer la pantalla,efecto atrás,efectos atractivos,efecto de mostrar FPS,efecto de mostrar pintura,efecto de selección de ventana en caja,efecto de selección de ventana en modo carátula,efecto de cubo del escritorio,efecto de animación del cubo del escritorio,efecto de rejilla del escritorio,efecto de selección de ventana en modo cascada,efecto de contorno,efecto de presentación de ventanas,efecto de cambiar tamaño de las ventanas
X-KDE-Keywords[et]=kwin,aken,hakdur,komposiit,efekt,3D efektid,ruumilised efektid,2D efektid,OpenGL,XRender,videoseadistused,graafikaefektid,töölauaefektid,animatsioonid,eri animatsioonid,aknahaldusefektid,akna lülitamise efekt,töölaua lülitamise efekt,animatsioonid,animatsiooni kiirus,töölauaanimatsioonid,draiverid,draiveri seadistused,renderdamine,renderdus,inverteerimisefekt,pikksilmaefekt,suurendusklaasiefekt,tõmbe abistaja efekt,hiire jälgimise efekt,suurendusefekt,häguefekt,vidinavaate efekt,plahvatuseefekt,hääbumisefekt,töölaua kadumise efekt,lagunemise efekt,liuglemisefekt,akna esiletõstmise efekt,sisselogimisefekt,väljalogimisefekt,maagilise laterna efekt,minimeerimisanimatsiooni efekt,hiirega tähistamise efekt,skaleerimisefekt,ekraanipildi efekt,leheefekt,slaidiefekt,liuglevate hüpikakende efekt,tegumiriba pisipiltide efekt,kõrvalasuvate pisipiltide efekt,läbipaistvus,läbipaistvuseefekt,akende geomeetria efekt,vonklevate akende efekt,käivitamise tagasiside efekt,dialoogi eellase efekt,tuhmi mitteaktiivse efekt,tuhmi ekraani efekt,tagasiliugumise efekt,silmarõõm,FPS-i näitamise efekt,joonistamise näitamise efekt,kastina lülitamise efekt,vaiplülitamise efekt,töölauakuubiku efekt, töölauakuubiku animatsiooni efekt,töölauavõrgustiku efekt,pööramisega lülitamise efekt,kontuuriefekt,aktiivsete akende efekt, akende suuruse muutmise efekt
X-KDE-Keywords[hu]=kwin,ablak,kezelő,kompozitálás,hatás,3D hatás,2D hatás,OpenGL,XRender,videobeállítások,grafikai hatások,asztali hatások,animációk,különféle animációk,ablakkezelő hatások,ablakváltó hatások,asztalváltó hatások,animációk,animáció sebesség,asztali animációk,meghajtók,meghajtó beállítások,leképezés,renderelés,fordított hatás,tükörhatás,nagyító hatás,elkapás segítő hatás,egérkövetés hatás,nagyítás hatás,elmosás hatás,áttekintő hatás,robbanás hatás,elhalványulás hatás,asztal elhalványulása hatás,széteső hatás,csúszás hatás,ablak kiemelése hatás,belépés hatás,kilépés hatás,varázslámpa hatás,minimalizálás animáció hatás,egérjelölés hatás,méretezés hatás,képernyőkép hatás,munkalap hatás,dia hatás,csúszó felugrók hatás,feladatsáv bélyegképek hatás,bélyegképek félre hatás,áttetszőség,áttetszőség hatás,átlátszóság,ablak geometria hatás,ingó ablak hatás,indulási visszajelzés hatás,párbeszédablak szülő hatás,dim inaktív hatás,dim kijelző hatás,dia vissza hatás,látványelem,édesség,FPS megjelenítése hatás,festék megjelenése hatás,dobozváltás hatás,eltakarás váltás hatás,asztal kocka hatás,asztal kockaanimáció hatás,asztal rács hatás,tükrözésváltás hatás,körvonal hatás,jelenlegi ablakok hatás,ablak átméretezése hatás
X-KDE-Keywords[ia]=kwin,fenestra,gerente,componente,effecto,effectos 3D,effectos 2D,OpenGL,XRender,preferentias de video,effectos graphic,effectos de scriptorio,animationes,varie animationes,effectos de gestion de genestra,effecto de commutation de fenestra, effecto de commutation de scriptorio,animationes,velocitate de animation,animationes de scriptorio,drivers, preferentias de driver,rendering,render,effecto de inverter,effecto speculo,effecto aggrandor,effecto de adjuta de photo (snap),effecto de tracia de mus,effecto zoom,effecto indistincte,effecto tabuliero,effecto explosion,effecto discolorate,effect de scriptorio discolorate,effecto de collapsar,effecto glissante, effecto de fenestra evidentiare,effecto de authenticar se,effecto de clauder session ,effecto lampada magic,minimisa effecto de animation,effecto de marca de mus,effecto de scalar,effecto de captura schermo,effecto folio,effecto diapositiva, effecto de popups glissante,effecto de miniatura de barra de carga,effecto de miniatura a parte,translucentia, effecto translucentia,transparentia, effecto de geometria de fenestra, effecto de fenestra tremulante,effecto de retro action, effecto de geniytor de dialogo, effecto inactive obscur, effecto de schermo obscur,effecto de retro glissar,eye candy,candy,monstra effecto FPS,monstra effecto pictura, effecto commuta cassa,effecto de commuta coperturat,effecto cubo de scriptorio,animation de cubo de scriptorio,effecto grillia de scriptorio,effecto flip switch,effecto contorno,effecto de fenestra actual,effect de fenestra redimensionante

View file

@ -37,6 +37,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <KStandardDirs>
#include "kwindecoration.h"
/* WARNING -------------------------------------------------------------------------
* it is *ABSOLUTELY* mandatory to manage loadPlugin() and destroyPreviousPlugin()
* using disablePreview()
*
* loadPlugin() moves the present factory pointer to "old_fact" which is then deleted
* by the succeeding destroyPreviousPlugin()
*
* So if you loaded a new plugin and that changed the current factory, call disablePreview()
* BEFORE the following destroyPreviousPlugin() destroys the factory for the current m_preview->deco->factory
* (which is invoked on deco deconstruction)
* WARNING ------------------------------------------------------------------------ */
namespace KWin
{
@ -192,10 +204,12 @@ QVariant DecorationModel::data(const QModelIndex& index, int role) const
return static_cast< int >(m_decorations[ index.row()].borderSize);
case BorderSizesRole: {
QList< QVariant > sizes;
if (m_plugins->loadPlugin(m_decorations[ index.row()].libraryName) &&
m_plugins->factory() != NULL) {
const bool mustDisablePreview = m_plugins->factory() && m_plugins->factory() == m_preview->factory();
if (m_plugins->loadPlugin(m_decorations[index.row()].libraryName) && m_plugins->factory()) {
foreach (KDecorationDefines::BorderSize size, m_plugins->factory()->borderSizes()) // krazy:exclude=foreach
sizes << int(size);
if (mustDisablePreview) // it's nuked with destroyPreviousPlugin()
m_preview->disablePreview(); // so we need to get rid of m_preview->deco first
m_plugins->destroyPreviousPlugin();
}
return sizes;
@ -312,6 +326,9 @@ void DecorationModel::regeneratePreview(const QModelIndex& index, const QSize& s
document.setHtml(html);
bool enabled = false;
bool loaded;
// m_preview->deco management is not required
// either the deco loads and the following recreateDecoration will sanitize decos (on new factory)
// or the deco does not load and destroyPreviousPlugin() is not called
if ((loaded = m_plugins->loadPlugin(data.libraryName)) && m_preview->recreateDecoration(m_plugins)) {
enabled = true;
m_preview->enablePreview();

View file

@ -121,6 +121,7 @@ KWinDecorationModule::KWinDecorationModule(QWidget* parent, const QVariantList &
connect(m_ui->decorationList->verticalScrollBar(), SIGNAL(valueChanged(int)), SLOT(updateViewPosition(int)));
m_ui->decorationList->installEventFilter(this);
m_ui->decorationList->viewport()->installEventFilter(this);
KAboutData *about =
new KAboutData(I18N_NOOP("kcmkwindecoration"), 0,
@ -404,6 +405,10 @@ bool KWinDecorationModule::eventFilter(QObject *o, QEvent *e)
return true;
}
}
} else if (m_ui->decorationList->viewport()) {
if (e->type() == QEvent::Wheel) {
return static_cast<QWheelEvent*>(e)->orientation() == Qt::Horizontal;
}
}
return KCModule::eventFilter(o, e);
}

View file

@ -166,7 +166,7 @@ X-KDE-Keywords[da]=kwin,vindueshåndtering,window,manager,kant,stil,tema,udseend
X-KDE-Keywords[de]=KWin,Kwm,Fenster,Manager,Rahmen,Design,Stile,Themes,Optik,Erscheinungsbild,Layout,Knöpfe,Ränder,Dekorationen
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[fi]=kwin,ikkuna,hallinta,ikkunaohjelma,kehys,reunus,tyyli,teema,ulkoasu,käyttäytyminen,asettelu,painike,kahva,kulma,reuna,kwm,koriste
X-KDE-Keywords[fi]=kwin,ikkuna,hallinta,ikkunaohjelma,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
X-KDE-Keywords[hu]=kwin,ablak,kezelő,szegély,stílus,téma,kinézet,megjelenés,elrendezés,gomb,kezel,szél,kwm,dekoráció

View file

@ -103,6 +103,11 @@ void KDecorationPreview::disablePreview()
no_preview->show();
}
KDecorationFactory *KDecorationPreview::factory() const
{
return deco[Active] ? deco[Active]->factory() : 0;
}
void KDecorationPreview::paintEvent(QPaintEvent* e)
{
Q_UNUSED(e);

View file

@ -50,6 +50,7 @@ public:
bool recreateDecoration(KDecorationPlugins* plugin);
void enablePreview();
void disablePreview();
KDecorationFactory *factory() const;
void setPreviewMask(const QRegion&, int, bool);
QRegion unobscuredRegion(bool, const QRegion&) const;
QRect windowGeometry(bool) const;

View file

@ -125,7 +125,7 @@ Comment[es]=Configuración del teclado y del ratón
Comment[et]=Klaviatuuri ja hiire seadistamine
Comment[eu]=Konfiguratu teklatua eta saguaren ezarpenak
Comment[fa]=پیکربندی تنظیمات صفحه کلید و موشی
Comment[fi]=Muokkaa näppäimistön ja hiiren asetuksia
Comment[fi]=Näppäimistön ja hiiren asetukset
Comment[fr]=Configuration des paramètres du clavier et de la souris
Comment[fy]=Hjir kinne jo de ynstellings fan toetseboerd en mûs ynstelle
Comment[ga]=Cumraigh socruithe an mhéarchláir agus na luiche

View file

@ -189,6 +189,7 @@ Comment[zh_TW]=設定進階視窗管理功能
X-KDE-Keywords=shading,border,hover,active borders,tiling,tabs,tabbing,window tabbing,window grouping,window tiling,window placement,placement of windows,window advanced behavior
X-KDE-Keywords[ca]=ombra,vora,passar per sobre,vores actives,mosaic,pestanyes,pestanyes de finestra,agrupació de finestres,mosaic de finestres,col·locació de finestres,comportament avançat de finestra
X-KDE-Keywords[da]=kant,hover,aktive kanter,tiling,faneblade,vinduesfaneblade,gruppering af vinduer,vinduesplacering,placering af vinduer,avanceret vinduesopførsel
X-KDE-Keywords[es]=sombra,borde,pasada,bordes activos,mosaico,pestañas,páginas en pestañas,pestañas de páginas,agrupación de ventanas,ventanas en mosaico,posicionamiento de ventanas,comportamiento avanzado de las ventanas
X-KDE-Keywords[et]=varjamine,piire,kohalviibimine,aktiivsed piirded,paanimine,kaardid,aknad kaartidena,akende rühmitamine,akende paanimine,akende paigutus, akende täpne käitumine
X-KDE-Keywords[fi]=shading,border,hover,active borders,tiling,tabs,tabbing,window tabbing,window grouping,window tiling,window placement,placement of windows,window advanced behavior,varjostus,raja,kohdistus,aktiiviset reunat,välilehdet,ikkunoiden ryhmittely,ikkunoiden sijoittelu,ikkunoiden lisäasetukset
X-KDE-Keywords[hu]=árnyékolás,szegély,lebegés,aktív szegélyek,csempézés,bejárás,ablakbejárás,ablakcsoportosítás,ablakcsempézés,ablakelhelyezés,ablakok elhelyezése,ablak speciális viselkedése

View file

@ -186,6 +186,7 @@ Comment[zh_TW]=設定視窗焦點政策
X-KDE-Keywords=focus,placement,auto raise,raise,click raise,keyboard,CDE,alt-tab,all desktop,focus follows mouse,focus prevention,focus stealing,focus policy,window focus behavior,window screen behavior
X-KDE-Keywords[ca]=focus,col·locació,elevació automàtica,elevació,elevació en clic,teclat,CDE,alt-tab,tots els escriptoris,focus segueix el ratolí,prevenció de focus,robatori de focus,política de focus,comportament de focus de finestra,comportament de pantalla de finestra
X-KDE-Keywords[da]=fokus,placering,autohæv,hæv,klikhæv,tastatur,CDE,alt-tab,alle skriveborde,fokus følger mus,fokusforhindring,stjæler fokus,fokuspolitik,opførsel for vinduesfokus
X-KDE-Keywords[es]=foco,posicionamiento,auto levantar,levantar,clic para levantar,teclado,CDE,alt-tab,todo el escritorio,el foco sigue al ratón,prevención de foco,robo del foco,política del foco,comportamiento del foco de las ventanas,comportamiento de la pantalla de ventanas
X-KDE-Keywords[et]=fookus,asetus,paigutus,automaatne esiletoomine,klõpsuga esiletoomine,klaviatuur,CDE,alt-tab,kõik töölauad,fookus järgib hiirt,fookuse vältimine,fookuse röövimine,fookuse reegel,akna fookuse käitumine
X-KDE-Keywords[hu]=fókusz,elhelyezés,automatikus felemelés,felemelés,kattintásra felemelés,billentyűzet,CDE,alt-tab,összes asztal,egérkövető fókusz,fókuszmegelőzés,fókuszlopás,fókusz házirend,ablakfókusz működése,ablakképernyő működése
X-KDE-Keywords[ia]=focus,placiamento,auto raise,raise,click raise,clavierp,CDE,alt-tab,all desktop,focus seque mus,prevention de focus,focus stealing,politica de focus,comportamento de foco de fenestra,comportamento de schermo de fenestra

View file

@ -37,7 +37,7 @@ Name[es]=Comportamiento de la ventana
Name[et]=Akende käitumine
Name[eu]=Leihoen portaera
Name[fa]=رفتار پنجره
Name[fi]=Ikkunoiden käyttäytyminen
Name[fi]=Ikkunoiden toiminta
Name[fr]=Comportement des fenêtres
Name[fy]=Finstergedrach
Name[ga]=Oibriú na bhFuinneog
@ -196,7 +196,7 @@ X-KDE-Keywords[da]=fokus,placering,vinduesopførsel,animation,hæv,autohæv,vind
X-KDE-Keywords[de]=Aktivierung,Platzierung,Fensterverhalten,Animation,Nach vorn/hinten, Fenster,Rahmen,Umrandung,Titelleiste,Doppelklick
X-KDE-Keywords[es]=foco,localización,comportamiento de la ventana,animación,elevación,autoelevación,ventanas,marco,barra de título,doble clic
X-KDE-Keywords[et]=fookus,asetus,paigutus,akende käitumine,animeerimine,animatsioon,esiletoomine,automaatne esiletoomine,aknad,raam,tiitliriba,topeltklõps
X-KDE-Keywords[fi]=kohdistus,sijoittelu,sijoitus,ikkunoiden käyttäytyminen,animaatio,nosta,automaattinen nosto,ikkunat,kehys,otsikkopalkki,kaksoisnapsautus,tuplanapsautus,kaksoisklikkaus,tuplaklikkaus
X-KDE-Keywords[fi]=kohdistus,sijoittelu,sijoitus,ikkunoiden toiminta,animaatio,nosta,automaattinen nosto,ikkunat,kehys,otsikkopalkki,kaksoisnapsautus,tuplanapsautus,kaksoisklikkaus,tuplaklikkaus
X-KDE-Keywords[fr]=focus,placement,comportement de la fenêtre,animation,agrandissement,agrandissement automatique,fenêtres,cadre,barre de titre,double clic
X-KDE-Keywords[ga]=fócas,láithriú,oibriú na bhfuinneog,beochan,ardaigh,uathardaigh,fuinneoga,fráma,ceannteideal,déchliceáil
X-KDE-Keywords[hu]=fókus,elhelyezés,ablakműködés,animáció,felemelés,automatikus felemelés,ablakok,keret,címsor,dupla kattintás

View file

@ -165,7 +165,7 @@ X-KDE-Keywords[da]=størrelse,position,tilstand,vinduesopførsel,vinduer,specifi
X-KDE-Keywords[de]=Größe,Position,Status,Fensterverhalten,Fenster,Regeln
X-KDE-Keywords[es]=tamaño,posición,estado,comportamiento de la ventana,ventanas,específicos,soluciones,recordatorio,reglas
X-KDE-Keywords[et]=suurus,asukoht,olek,akende käitumine,aknad,meeldejätmine,reeglid
X-KDE-Keywords[fi]=koko,sijainti,tila,ikkunan käyttäytyminen,ikkunat,erikoisasetukset,ikkunakohtaiset,korjaukset,muista,muistaminen,säännöt
X-KDE-Keywords[fi]=koko,sijainti,tila,ikkunoiden toiminta,ikkunat,erikoisasetukset,ikkunakohtaiset,korjaukset,muista,muistaminen,säännöt
X-KDE-Keywords[fr]=taille,position,état,comportement de la fenêtre,fenêtres,spécifique,contournements,rappel,règles
X-KDE-Keywords[ga]=méid,ionad,staid,oibriú na bhfuinneog,fuinneoga,sainiúil,réitigh seiftithe,meabhraigh,rialacha
X-KDE-Keywords[hu]=méret,elhelyezkedés,állapot,ablakműködés,ablakok,specifikus,kerülő megoldások,megjegyzés,szabályok

View file

@ -61,6 +61,7 @@ Name[pa]=KWin ਸਕ੍ਰਿਪਟ
Name[pl]=Skrypty KWin
Name[pt]=Programas do KWin
Name[pt_BR]=Scripts do KWin
Name[sk]=KWin skripty
Name[sl]=Skripti KWin
Name[sr]=Квинове скрипте
Name[sr@ijekavian]=Квинове скрипте
@ -78,9 +79,10 @@ Comment[ca]=Gestiona scripts del KWin
Comment[cs]=Spravovat skripty KWinu
Comment[da]=Håndtér KWin-scripts
Comment[de]=KWin-Skripte verwalten
Comment[el]=Διαχείριση σεναρίων KWin
Comment[es]=Gestionar guiones de KWin
Comment[et]=KWini skriptide haldamine
Comment[fi]=Hallitse KWin-skriptejä
Comment[fi]=KWin-skriptien hallinta
Comment[hu]=KWin szkriptek kezelése
Comment[ia]=Gere scriptos de KWin
Comment[it]=Gestione script kwin

View file

@ -267,18 +267,12 @@ void KWinTabBoxConfig::loadConfig(const KConfigGroup& config, KWin::TabBox::TabB
config.readEntry<int>("MultiScreenMode", TabBoxConfig::defaultMultiScreenMode())));
tabBoxConfig.setClientSwitchingMode(TabBoxConfig::ClientSwitchingMode(
config.readEntry<int>("SwitchingMode", TabBoxConfig::defaultSwitchingMode())));
tabBoxConfig.setLayout(TabBoxConfig::LayoutMode(
config.readEntry<int>("LayoutMode", TabBoxConfig::defaultLayoutMode())));
tabBoxConfig.setShowOutline(config.readEntry<bool>("ShowOutline", TabBoxConfig::defaultShowOutline()));
tabBoxConfig.setShowTabBox(config.readEntry<bool>("ShowTabBox", TabBoxConfig::defaultShowTabBox()));
tabBoxConfig.setHighlightWindows(config.readEntry<bool>("HighlightWindows", TabBoxConfig::defaultHighlightWindow()));
tabBoxConfig.setMinWidth(config.readEntry<int>("MinWidth", TabBoxConfig::defaultMinWidth()));
tabBoxConfig.setMinHeight(config.readEntry<int>("MinHeight", TabBoxConfig::defaultMinHeight()));
tabBoxConfig.setLayoutName(config.readEntry<QString>("LayoutName", TabBoxConfig::defaultLayoutName()));
tabBoxConfig.setSelectedItemLayoutName(config.readEntry<QString>("SelectedLayoutName", TabBoxConfig::defaultSelectedItemLayoutName()));
}
void KWinTabBoxConfig::saveConfig(KConfigGroup& config, const KWin::TabBox::TabBoxConfig& tabBoxConfig)
@ -291,18 +285,13 @@ void KWinTabBoxConfig::saveConfig(KConfigGroup& config, const KWin::TabBox::TabB
config.writeEntry("ShowDesktopMode", int(tabBoxConfig.showDesktopMode()));
config.writeEntry("MultiScreenMode", int(tabBoxConfig.clientMultiScreenMode()));
config.writeEntry("SwitchingMode", int(tabBoxConfig.clientSwitchingMode()));
config.writeEntry("LayoutMode", int(tabBoxConfig.layout()));
config.writeEntry("LayoutName", tabBoxConfig.layoutName());
config.writeEntry("SelectedLayoutName", tabBoxConfig.selectedItemLayoutName());
// check boxes
config.writeEntry("ShowOutline", tabBoxConfig.isShowOutline());
config.writeEntry("ShowTabBox", tabBoxConfig.isShowTabBox());
config.writeEntry("HighlightWindows", tabBoxConfig.isHighlightWindows());
// spin boxes
config.writeEntry("MinWidth", tabBoxConfig.minWidth());
config.writeEntry("MinHeight", tabBoxConfig.minHeight());
config.sync();
}

View file

@ -56,4 +56,4 @@ Item {
}
visible: true
}
}
}

View file

@ -7125,8 +7125,10 @@ Action=Popup
[Event/fullscreen]
Name=Window Fullscreen Set
Name[ca]=Estableix a pantalla completa
Name[cs]=Okno nastaveno na celou obrazovku
Name[da]=Fuldskærmsvindue sat
Name[el]=Ορίστηκε πλήρης οθόνη
Name[es]=Ventana a pantalla completa activa
Name[et]=Aken täisekraanirežiimis
Name[fi]=Ikkunan koko näytön tila asetettu
Name[hu]=Ablak teljes képernyőre állítása
@ -7153,9 +7155,11 @@ Name[zh_CN]=窗口全屏已设置
Name[zh_TW]=已設定成全螢幕
Comment=A window has been set to fullscreen
Comment[ca]=Una finestra s'ha definit a pantalla completa
Comment[cs]=Okno bylo nastaveno na celou obrazovku
Comment[da]=Et vindue er blevet sat til fuldskærm
Comment[de]=Ein Fenster ist in den Vollbildmodus versetzt worden
Comment[el]=Ένα παράθυρο ορίστηκε σε πλήρης οθόνη
Comment[es]=Una ventana se ha activado a pantalla completa
Comment[et]=Aken on viidud täisekraani
Comment[fi]=Ikkuna on asetettu koko näytön tilaan
Comment[hu]=Az ablak teljes képernyőre lett állítva
@ -7185,8 +7189,10 @@ Comment[zh_TW]=已將視窗設定成全螢幕
[Event/unfullscreen]
Name=Window Fullscreen Restored
Name[ca]=Finestra a pantalla completa restaurada
Name[cs]=Okno obnoveno z celé obrazovky
Name[da]=Fuldskærmsvindue gendannet
Name[el]=Επαναφορά παραθύρου πλήρης οθόνης
Name[es]=Ventana a pantalla completa restaurada
Name[et]=Aken on täisekraanist taastatud
Name[fi]=Ikkunan koko näytön tila palautettu
Name[hu]=Az ablak teljes képernyőről visszaállítva
@ -7213,9 +7219,11 @@ Name[zh_CN]=窗口全屏已恢复
Name[zh_TW]=已還原全螢幕
Comment=A window has been restored from fullscreen
Comment[ca]=Una finestra s'ha restaurat des de pantalla completa
Comment[cs]=Okno bylo obnoveno z celé obrazovky
Comment[da]=Et vindue er blevet gendannet fra fuldskærm
Comment[de]=Ein Fenster ist aus dem Vollbildmodus wiederhergestellt worden
Comment[el]=Ένα παράθυρο επανήλθε από πλήρης οθόνη
Comment[es]=Una ventana se ha restaurado desde pantalla completa
Comment[et]=Aken on täisekraanist taastatud
Comment[fi]=Ikkuna on palautettu koko näytön tilasta
Comment[hu]=Az ablak vissza lett állítva a teljes képernyőről

View file

@ -228,7 +228,7 @@ bool KDecorationPlugins::loadPlugin(QString nameStr)
if (!create_ptr) { // this means someone probably attempted to load "some" kwin plugin/lib as deco
// and thus cheated on the "isLoaded" shortcut -> try the default and yell a warning
if (nameStr != defaultPlugin) {
kWarning(1212) << i18n("The library %1 was attempted to be load as decoration plugin but is NOT", nameStr);
kWarning(1212) << i18n("The library %1 was attempted to be loaded as a decoration plugin but it is NOT", nameStr);
return loadPlugin(defaultPlugin);
} else {
// big time trouble!

View file

@ -58,6 +58,10 @@
<method name="listOfEffects">
<arg type="as" direction="out"/>
</method>
<method name="supportInformationForEffect">
<arg name="name" type="s" direction="in"/>
<arg type="s" direction="out"/>
</method>
<method name="compositingActive">
<arg type="b" direction="out"/>
</method>

View file

@ -633,7 +633,7 @@ void SceneOpenGL::screenGeometryChanged(const QSize &size)
m_overlayWindow->setup(buffer);
XSync(display(), false); // ensure X11 stuff has applied ////
glXMakeCurrent(display(), glxbuffer, ctxbuffer); // reactivate context ////
glViewport(0,0, size.width(), size.height()); // adjust viewport last - should btw. be superflous on the Pixmap buffer - iirc glXCreatePixmap sets the context anyway. ////
glViewport(0,0, size.width(), size.height()); // adjust viewport last - should btw. be superfluous on the Pixmap buffer - iirc glXCreatePixmap sets the context anyway. ////
}
ShaderManager::instance()->resetAllShaders();
m_resetModelViewProjectionMatrix = true;

View file

@ -22,6 +22,7 @@ Comment[pa]=KWin ਸਕ੍ਰਿਪਟ
Comment[pl]=Skrypt KWin
Comment[pt]=Programa do KWin
Comment[pt_BR]=Script do KWin
Comment[sk]=KWin skript
Comment[sl]=Skript KWin
Comment[sr]=Квинова скрипта
Comment[sr@ijekavian]=Квинова скрипта

View file

@ -1,8 +1,10 @@
[Desktop Entry]
Name=Desktop Change OSD
Name[ca]=OSD de canvi d'escriptori
Name[cs]=OSD změny plochy
Name[da]=OSD til skrivebordsskift
Name[el]=OSD αλλαγής επιφάνειας εργασίας
Name[es]=Información en pantalla sobre cambio de escritorio
Name[et]=Töölaua muutmise ekraaniesitus
Name[fi]=Työpöydänvaihdon ilmoitus
Name[hu]=Asztal változtatás OSD
@ -29,9 +31,12 @@ Name[zh_CN]=桌面更改屏幕显示
Name[zh_TW]=
Comment=An on screen display indicating the desktop change
Comment[ca]=En un missatge per pantalla indicant el canvi d'escriptori
Comment[cs]=Displej označující změnu plochy
Comment[da]=Et on-screen-display som indikerer skift af skrivebord
Comment[es]=Una información en pantalla que indica el cambio de escritorio
Comment[et]=Töölaua muutumist näitab ekraanikuva
Comment[fi]=Näytölle ilmestyvä ilmoitus työpöydän vaihdosta
Comment[hu]=Egy képernyőn megjelenő kijelzés, amely jelzi az asztal változásait
Comment[ia]=Un monstrator sur le schermo indicante le modification de scriptorio
Comment[it]=Un display sullo schermo che indica il cambio di desktop
Comment[kk]=Үстел ауыстыруын көрсететін экран дисплейі

View file

@ -1,7 +1,9 @@
[Desktop Entry]
Name=Synchronize Skip Switcher with Taskbar
Name[ca]=Sincronitza el «Ignora el commutador» amb la barra de tasques
Name[cs]=Synchronizovat přepínač přeskakování s pruhem úloh
Name[da]=Synkronisér skip-skifter med opgavelinjen
Name[es]=Sincronizar «Omitir cambiador» con la barra de tareas
Name[et]=Vahelejätmise lülitaja sünkroonimine tegumiribaga
Name[hu]=Skip-váltó szinkronizálása a feladatsávval
Name[ia]=Synchronisa Commutator de salto con Barra de carga
@ -26,8 +28,11 @@ Name[x-test]=xxSynchronize Skip Switcher with Taskbarxx
Name[zh_TW]=
Comment=Hides all windows marked as Skip Taskbar to be also excluded from window switchers (e.g. Alt+Tab)
Comment[ca]=Oculta totes les finestres marcades com a «Ignora la barra de tasques» que també s'excloguin del commutador de finestres (p. ex. Alt+Tab)
Comment[cs]=Skryje všechna okna označená k přeskočení v pruhu úloh také pro přepínače oken (např. Alt+Tab)
Comment[da]=Skjuler alle vinduer der er markeret som "Skip opgavelinje", så de også udelades fra vinduesskiftere (f.eks. Alt+Tab)
Comment[es]=Oculta todas las ventanas marcadas como «Omitir barra de tareas» para que también sean excluidas de los selectores de ventana (por ejemplo, Alt+Tab)
Comment[et]=Kõigi tegumiribalt väljajäetavaks märgitud akende peitmine, et neid ei kaasataks ka aknavahetajatesse (nt Alt+Tab)
Comment[hu]=A Skip feladatsávként megjelölt összes ablak elrejtése, kivéve az ablakváltókat (például Alt+Tab)
Comment[ia]=Cela omne fenestras marcate como barra de cargas de salto pro anque esser excludite ex commutatores de fenestra (p.ex.Alt+Tab)
Comment[it]=Nascondi tutte le finestre marcate come Salta barra delle applicazioni che sono escluse anche dallo scambiafinestre (es. Alt+Tab)
Comment[kk]=Көрсетілмейтін деп белгіленген бүкіл терезелерін терезе ауыстырғышында да (мысалы, Alt-Tab дегенде) көрсетпеу

View file

@ -5,6 +5,7 @@ Name[cs]=Video stěna
Name[da]=Videovæg
Name[de]=Video-Wand
Name[el]=Τοίχος με οθόνες
Name[es]=Panel de vídeo
Name[et]=Videosein
Name[fi]=Videoseinä
Name[hu]=Videófal
@ -31,6 +32,7 @@ Name[zh_TW]=影像牆
Comment=Spans fullscreen video player over all attached screens to create a Video Wall
Comment[ca]=Expandeix el reproductor de vídeo a pantalla completa per totes les pantalles enganxades per crear un mur de vídeo.
Comment[da]=Udfolder videoafspiller i fuldskærm over alle tilsluttede skærme og danner derved en videovæg
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[fi]=Levittää koko näytön tilassa olevan videotoistimen kaikkiin yhdistettyihin näyttöihin luoden videoseinän
Comment[hu]=Kiterjeszti a teljes képernyős videólejátszót az összes csatolt kijelzőre, hogy videófalat hozzon létre

View file

@ -106,39 +106,13 @@ QString ClientModel::longestCaption() const
int ClientModel::columnCount(const QModelIndex& parent) const
{
Q_UNUSED(parent)
int count = 1;
switch(tabBox->config().layout()) {
case TabBoxConfig::HorizontalLayout:
count = m_clientList.count();
break;
case TabBoxConfig::VerticalLayout:
count = 1;
break;
case TabBoxConfig::HorizontalVerticalLayout:
count = qRound(sqrt(float(m_clientList.count())));
if (count * count < m_clientList.count())
count++;
break;
}
return qMax(count, 1);
return 1;
}
int ClientModel::rowCount(const QModelIndex& parent) const
{
Q_UNUSED(parent)
int count = 1;
switch(tabBox->config().layout()) {
case TabBoxConfig::HorizontalLayout:
count = 1;
break;
case TabBoxConfig::VerticalLayout:
count = m_clientList.count();
break;
case TabBoxConfig::HorizontalVerticalLayout:
count = qRound(sqrt(float(m_clientList.count())));
break;
}
return qMax(count, 1);
return m_clientList.count();
}
QModelIndex ClientModel::parent(const QModelIndex& child) const

View file

@ -64,41 +64,13 @@ QVariant DesktopModel::data(const QModelIndex& index, int role) const
int DesktopModel::columnCount(const QModelIndex& parent) const
{
Q_UNUSED(parent)
int count = 1;
switch(tabBox->config().layout()) {
case TabBoxConfig::HorizontalLayout:
count = m_desktopList.count();
break;
case TabBoxConfig::VerticalLayout:
count = 1;
break;
case TabBoxConfig::HorizontalVerticalLayout:
count = qRound(sqrt(float(m_desktopList.count())));
if (count * count < m_desktopList.count())
count++;
// TODO: pager layout?
break;
}
return qMax(count, 1);
return 1;
}
int DesktopModel::rowCount(const QModelIndex& parent) const
{
Q_UNUSED(parent)
int count = 1;
switch(tabBox->config().layout()) {
case TabBoxConfig::HorizontalLayout:
count = 1;
break;
case TabBoxConfig::VerticalLayout:
count = m_desktopList.count();
break;
case TabBoxConfig::HorizontalVerticalLayout:
count = qRound(sqrt(float(m_desktopList.count())));
// TODO: pager layout?
break;
}
return qMax(count, 1);
return m_desktopList.count();
}
QModelIndex DesktopModel::parent(const QModelIndex& child) const

View file

@ -6,6 +6,8 @@ Comment=KWin Window Switcher Layout
Comment[ca]=Disposició del commutador de finestres del KWin
Comment[da]=Layout til KWins vinduesskifter
Comment[de]=Fensterwechsler-Layout
Comment[el]=Διάταξη εναλλαγής παραθύρων Kwin
Comment[es]=Esquema del cambiador de ventanas de KWin
Comment[et]=KWini aknavahetaja paigutus
Comment[fi]=KWinin tehtävänvalitsimen asettelu
Comment[hu]=KWin ablakváltó elrendezés

View file

@ -63,6 +63,7 @@ Item {
}
}
Item {
id: captionFrame
anchors {
top: icons.bottom
left: parent.left
@ -73,11 +74,23 @@ Item {
bottomMargin: background.margins.bottom
}
Text {
function constrainWidth() {
if (textItem.width > textItem.maxWidth && textItem.width > 0 && textItem.maxWidth > 0) {
textItem.width = textItem.maxWidth;
} else {
textItem.width = undefined;
}
}
function calculateMaxWidth() {
textItem.maxWidth = bigIconsTabBox.width - captionFrame.anchors.leftMargin - captionFrame.anchors.rightMargin - captionFrame.anchors.rightMargin;
}
id: textItem
property int maxWidth: 0
text: icons.currentItem ? icons.currentItem.data.caption : ""
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: theme.textColor
elide: Text.ElideMiddle
font {
bold: true
}
@ -85,6 +98,15 @@ Item {
verticalCenter: parent.verticalCenter
horizontalCenter: parent.horizontalCenter
}
onTextChanged: textItem.constrainWidth()
Component.onCompleted: textItem.calculateMaxWidth()
Connections {
target: bigIconsTabBox
onWidthChanged: {
textItem.calculateMaxWidth();
textItem.constrainWidth();
}
}
}
}
}

View file

@ -19,6 +19,7 @@ Name[pa]=ਵੱਡੇ ਆਈਕਾਨ
Name[pl]=Duże ikony
Name[pt]=Ícones Grandes
Name[pt_BR]=Ícones grandes
Name[sk]=Veľké ikony
Name[sl]=Velike ikone
Name[sr]=Велике иконе
Name[sr@ijekavian]=Велике иконе
@ -35,10 +36,12 @@ Comment=A window switcher layout using large icons to represent the window
Comment[ca]=Una disposició del commutador de finestres que utilitza icones grans per representar la finestra
Comment[da]=Et vinduesskifter-layout som bruger store ikoner til at repræsentere vinduet
Comment[de]=Ein Fensterwechsler-Layout, das große Symbole zur Darstellung der Fenster verwendet
Comment[es]=Un esquema de cambiador de ventanas que usa iconos grandes para representar las ventanas
Comment[et]=Aknavahetaja paigutus suurte, aknaid tähistavate ikoonidega
Comment[fi]=Tehtävänvalitsimen asettelu, jossa ikkunat esitetään suurilla kuvakkeilla
Comment[hu]=Egy ablakváltó elrendezés, amely nagy ikonokat használ az ablak ábrázolásához
Comment[ia]=Un disposition de commutator de fenestra usante icones grande pro representar le fenestra
Comment[it]=Una disposizione di cambiafinestre che usa icone grandi per rappresentare le finestre
Comment[kk]=Терезелерді үлкен таңбашалармен белгілейтін терезе ауыстырғышының қалыпы
Comment[km]=
Comment[nb]=En vindusbytterutforming som bruker store ikoner for å representere vinduer

View file

@ -35,10 +35,12 @@ Comment=A compact window switcher layout
Comment[ca]=Una disposició del commutador de finestres compacta
Comment[da]=Et kompakt layout til vinduesskifter
Comment[de]=Ein kompaktes Fensterwechsler-Layout
Comment[es]=Un esquema de cambiador de ventanas compacto
Comment[et]=Kompaktne aknavahetaja paigutus
Comment[fi]=Tiivis tehtävänvalitsimen asettelu
Comment[hu]=Egy kompakt ablakváltó elrendezés
Comment[ia]=Un disposition de commutator de fenestra compacte
Comment[it]=Una disposizione compatta di cambiafinestre
Comment[kk]=Ықшамды терезе ауыстырғышының қалыпы
Comment[km]=
Comment[nb]=En kompakt utforming av vindusbytter

View file

@ -19,6 +19,7 @@ Name[pa]=ਜਾਣਕਾਰੀ
Name[pl]=Informacyjny
Name[pt]=Informativa
Name[pt_BR]=Informativo
Name[sk]=Informatívne
Name[sl]=Informativno
Name[sr]=Информативно
Name[sr@ijekavian]=Информативно
@ -34,10 +35,12 @@ Name[zh_TW]=資訊提供
Comment=An informative window switcher layout including desktop name
Comment[ca]=Una disposició del commutador de finestres informativa que inclou el nom d'escriptori
Comment[da]=Et informativt vinduesskifter-layout som medtager navnet på skrivebordet
Comment[es]=Un esquema de cambiador de ventanas informativo que incluye el nombre del escritorio
Comment[et]=Informatiivne aknavahetaja paigutus koos töölauanimedega
Comment[fi]=Informatiivinen tehtävänvalitsimen asettelu, joka näyttää myös työpöydän nimen
Comment[hu]=Egy informatív ablakváltó elrendezés az asztal nevét tartalmazva
Comment[ia]=Un disposition de commutator de fenestra informative includente nomine de scriptorio
Comment[it]=Una disposizione informative di cambiafinestre che include il nome del desktop
Comment[kk]=Мәліметті терезе ауыстырғышының қалыпы
Comment[km]=
Comment[nb]=En informativ utforming av vindusbytter som tar med skrivebordsnavnet

View file

@ -4,6 +4,7 @@ Name[ca]=Graella
Name[cs]=Mřížka
Name[da]=Gitter
Name[de]=Raster
Name[el]=Κάνναβος
Name[es]=Rejilla
Name[et]=Võrgustik
Name[fi]=Ruudukko
@ -19,6 +20,7 @@ Name[pa]=ਗਰਿੱਡ
Name[pl]=Siatka
Name[pt]=Grelha
Name[pt_BR]=Grade
Name[sk]=Mriežka
Name[sl]=Mreža
Name[sr]=Мрежа
Name[sr@ijekavian]=Мрежа
@ -35,10 +37,12 @@ Comment=A Window Switcher layout showing all windows as thumbnails in a grid
Comment[ca]=Una disposició del commutador de finestres que mostra totes les finestres com a miniatures en una graella
Comment[da]=Et vinduesskifter-layout som viser alle vinduer som miniaturer i et gitter
Comment[de]=Ein Fensterwechsler-Layout, das Vorschauen aller Fenster in einem Raster anzeigt
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[fi]=Tehtävänvalitsimen asettelu, joka näyttää kaikkien ikkunoiden pienoiskuvat ruudukossa
Comment[hu]=Egy ablakváltó elrendezés, amely az összes ablakot rácsban jeleníti meg bélyegképekként
Comment[ia]=Un disposition de commutator de fenestra monstrante fenestras como miniaturas in un grillia
Comment[it]=Una disposizione di cambiafinestre che mostra tutte le finestre come miniature in una griglia
Comment[kk]=Бүкіл терезе нобайлары тор құрып көрсететілін терезе ауыстырғышының қалыпы
Comment[km]=
Comment[nb]=En vindusbytterutforming som viser alle vinduer som minibilder i et rutenett

View file

@ -19,6 +19,7 @@ Name[pa]=ਛੋਟੇ ਆਈਕਾਨ
Name[pl]=Małe ikony
Name[pt]=Ícones Pequenos
Name[pt_BR]=Ícones pequenos
Name[sk]=Malé ikony
Name[sl]=Majhne ikone
Name[sr]=Мале иконе
Name[sr@ijekavian]=Мале иконе
@ -34,10 +35,12 @@ Comment=A window switcher layout using small icons to represent the window
Comment[ca]=Una disposició del commutador de finestres que utilitza icones petites per representar la finestra
Comment[da]=Et vinduesskifter-layout som bruger små ikoner til at repræsentere vinduet
Comment[de]=Ein Fensterwechsler-Layout, das kleine Symbole zur Darstellung der Fenster verwendet
Comment[es]=Un esquema de cambiador de ventanas que usa iconos pequeños para representar las ventanas
Comment[et]=Aknavahetaja paigutus väikeste, aknaid tähistavate ikoonidega
Comment[fi]=Tehtävänvalitsimen asettelu, jossa ikkunat esitetään pienillä kuvakkeilla
Comment[hu]=Egy ablakváltó elrendezés, amely kis ikonokat használ az ablak ábrázolásához
Comment[ia]=Un disposition de commutator de fenestra usante parve icones pro representar le fenestra
Comment[it]=Una disposizione di cambiafinestre che usa icone piccole per rappresentare le finestre
Comment[kk]=Терезелерді шағын таңбашалармен белгілейтін терезе ауыстырғышының қалыпы
Comment[km]=
Comment[nb]=En vindusbytterutforming som bruker små ikoner for å representere vinduer

View file

@ -1,6 +1,7 @@
[Desktop Entry]
Name=Text Icons
Name[ca]=Icones de text
Name[cs]=Textové ikony
Name[da]=Tekstikoner
Name[de]=Text-Symbole
Name[es]=Iconos de texto
@ -32,10 +33,12 @@ Comment=A window switcher layout only showing window captions
Comment[ca]=Una disposició del commutador de finestres que només mostra els títols de finestra
Comment[da]=Et vinduesskifter-layout som kun viser vinduestitler
Comment[de]=Ein Fensterwechsler-Layout, das nur die Titel der Fenster anzeigt
Comment[es]=Un esquema de cambiador de ventanas que solo muestra los títulos de las ventanas
Comment[et]=Aknavahetaja paigutus ainult aknatiitlite näitamisega
Comment[fi]=Tehtävänvalitsimen asettelu, jossa näytetään vain ikkunoiden otsikot
Comment[hu]=Egy ablakváltó elrendezés, amely csak az ablakfeliratokat jeleníti meg
Comment[ia]=Un disposition de commutator de fenestra monstrante solo legendas de fenestra
Comment[it]=Una disposizione di cambiafinestre che mostra solo i titoli delle finestre
Comment[kk]=Тек атауын көрсететін терезе ауыстырғышының қалыпы
Comment[km]=
Comment[nb]=En vindusbytterutforming som bare viser vindustekster

View file

@ -34,10 +34,12 @@ Comment=A window switcher layout using live thumbnails
Comment[ca]=Una disposició del commutador de finestres que utilitza miniatures animades
Comment[da]=Et vinduesskifter-layout som bruger aktive miniaturer
Comment[de]=Ein Fensterwechsler-Layout, das Live-Vorschauen verwendet
Comment[es]=Un esquema de cambiador de ventanas que usa miniaturas en tiempo real
Comment[et]=Aknavahetaja paigutus reaalajas pisipiltidega
Comment[fi]=Tehtävänvalitsimen asettelu, joka käyttää pienoiskuvia
Comment[hu]=Egy ablakváltó elrendezés, amely élő bélyegképeket használ
Comment[ia]=Un disposition de commutator de fenestra usante miniaturas vive
Comment[it]=Una disposizione di cambiafinestre che usa miniature dinamiche
Comment[kk]="Тірі" нобайларын көрсететілін терезе ауыстырғышының қалыпы
Comment[km]=
Comment[nb]=En vindusbytterutforming som bruker sanntids minibilder

View file

@ -1,12 +1,14 @@
[Desktop Entry]
Name=Window Strip
Name[ca]=Cinta de finestres
Name[cs]=Pruh oken
Name[da]=Vinduesstribe
Name[es]=Tira de ventanas
Name[et]=Aknariba
Name[fi]=Ikkunanauha
Name[hu]=Ablakszalag
Name[ia]=Lista de fenestra
Name[it]=Striscia di finestre
Name[kk]=Терезе жолағы
Name[km]=
Name[nb]=Vindusstripe
@ -28,10 +30,13 @@ Name[zh_TW]=視窗帶
Comment=Window switcher layout for Plasma Active
Comment[ca]=Disposició del commutador de finestres pel Plasma Active
Comment[da]=Et vinduesskifter-layout til Plasma Active
Comment[el]=Διάταξη εναλλαγής παραθύρων για το Plasma Active
Comment[es]=Esquema de cambiador de ventanas para Plasma Active
Comment[et]=Plasma Active'i aknavahetaja paigutus
Comment[fi]=Plasma Activen tehtävänvalitsimen asettelu
Comment[hu]=Ablakváltó elrendezés a Plazma aktívhoz
Comment[ia]=Disposition de commutator de fenestra per Plasma Active
Comment[it]=Disposizione di cambiafinestre per Plasma Active
Comment[kk]=Plasma Activt-тың терезе ауыстырғышының қалыпы
Comment[km]=
Comment[nb]=Vindusbytterutforming for Plasma Active

View file

@ -405,7 +405,6 @@ TabBox::TabBox(QObject *parent)
m_defaultConfig.setShowDesktopMode(TabBoxConfig::DoNotShowDesktopClient);
m_defaultConfig.setClientMultiScreenMode(TabBoxConfig::IgnoreMultiScreen);
m_defaultConfig.setClientSwitchingMode(TabBoxConfig::FocusChainSwitching);
m_defaultConfig.setLayout(TabBoxConfig::VerticalLayout);
m_alternativeConfig = TabBoxConfig();
m_alternativeConfig.setTabBoxMode(TabBoxConfig::ClientTabBox);
@ -416,7 +415,6 @@ TabBox::TabBox(QObject *parent)
m_alternativeConfig.setShowDesktopMode(TabBoxConfig::DoNotShowDesktopClient);
m_alternativeConfig.setClientMultiScreenMode(TabBoxConfig::IgnoreMultiScreen);
m_alternativeConfig.setClientSwitchingMode(TabBoxConfig::FocusChainSwitching);
m_alternativeConfig.setLayout(TabBoxConfig::VerticalLayout);
m_defaultCurrentApplicationConfig = m_defaultConfig;
m_defaultCurrentApplicationConfig.setClientApplicationsMode(TabBoxConfig::AllWindowsCurrentApplication);
@ -429,14 +427,12 @@ TabBox::TabBox(QObject *parent)
m_desktopConfig.setShowTabBox(true);
m_desktopConfig.setShowDesktopMode(TabBoxConfig::DoNotShowDesktopClient);
m_desktopConfig.setDesktopSwitchingMode(TabBoxConfig::MostRecentlyUsedDesktopSwitching);
m_desktopConfig.setLayout(TabBoxConfig::VerticalLayout);
m_desktopListConfig = TabBoxConfig();
m_desktopListConfig.setTabBoxMode(TabBoxConfig::DesktopTabBox);
m_desktopListConfig.setShowTabBox(true);
m_desktopListConfig.setShowDesktopMode(TabBoxConfig::DoNotShowDesktopClient);
m_desktopListConfig.setDesktopSwitchingMode(TabBoxConfig::StaticDesktopSwitching);
m_desktopListConfig.setLayout(TabBoxConfig::VerticalLayout);
m_tabBox = new TabBoxHandlerImpl(this);
QTimer::singleShot(0, this, SLOT(handlerReady()));
connect(m_tabBox, SIGNAL(selectedIndexChanged()), SIGNAL(itemSelected()));

View file

@ -32,7 +32,6 @@ public:
, highlightWindows(TabBoxConfig::defaultHighlightWindow())
, showOutline(TabBoxConfig::defaultShowOutline())
, tabBoxMode(TabBoxConfig::ClientTabBox)
, layout(TabBoxConfig::defaultLayoutMode())
, clientDesktopMode(TabBoxConfig::defaultDesktopMode())
, clientActivitiesMode(TabBoxConfig::defaultActivitiesMode())
, clientApplicationsMode(TabBoxConfig::defaultApplicationsMode())
@ -41,10 +40,7 @@ public:
, clientMultiScreenMode(TabBoxConfig::defaultMultiScreenMode())
, clientSwitchingMode(TabBoxConfig::defaultSwitchingMode())
, desktopSwitchingMode(TabBoxConfig::MostRecentlyUsedDesktopSwitching)
, minWidth(TabBoxConfig::defaultMinWidth())
, minHeight(TabBoxConfig::defaultMinHeight())
, layoutName(TabBoxConfig::defaultLayoutName())
, selectedItemLayoutName(TabBoxConfig::defaultSelectedItemLayoutName()) {
, layoutName(TabBoxConfig::defaultLayoutName()) {
}
~TabBoxConfigPrivate() {
}
@ -53,7 +49,6 @@ public:
bool showOutline;
TabBoxConfig::TabBoxMode tabBoxMode;
TabBoxConfig::LayoutMode layout;
TabBoxConfig::ClientDesktopMode clientDesktopMode;
TabBoxConfig::ClientActivitiesMode clientActivitiesMode;
TabBoxConfig::ClientApplicationsMode clientApplicationsMode;
@ -62,10 +57,7 @@ public:
TabBoxConfig::ClientMultiScreenMode clientMultiScreenMode;
TabBoxConfig::ClientSwitchingMode clientSwitchingMode;
TabBoxConfig::DesktopSwitchingMode desktopSwitchingMode;
int minWidth;
int minHeight;
QString layoutName;
QString selectedItemLayoutName;
};
TabBoxConfig::TabBoxConfig()
@ -84,17 +76,14 @@ TabBoxConfig& TabBoxConfig::operator=(const KWin::TabBox::TabBoxConfig& object)
d->highlightWindows = object.isHighlightWindows();
d->showOutline = object.isShowOutline();
d->tabBoxMode = object.tabBoxMode();
d->layout = object.layout();
d->clientDesktopMode = object.clientDesktopMode();
d->clientActivitiesMode = object.clientActivitiesMode();
d->clientApplicationsMode = object.clientApplicationsMode();
d->clientMinimizedMode = object.clientMinimizedMode();
d->showDesktopMode = object.showDesktopMode();
d->clientMultiScreenMode = object.clientMultiScreenMode();
d->clientSwitchingMode = object.clientSwitchingMode();
d->desktopSwitchingMode = object.desktopSwitchingMode();
d->selectedItemLayoutName = object.selectedItemLayoutName();
d->minWidth = object.minWidth();
d->minHeight = object.minHeight();
d->layoutName = object.layoutName();
return *this;
}
@ -139,16 +128,6 @@ TabBoxConfig::TabBoxMode TabBoxConfig::tabBoxMode() const
return d->tabBoxMode;
}
void TabBoxConfig::setLayout(TabBoxConfig::LayoutMode layout)
{
d->layout = layout;
}
TabBoxConfig::LayoutMode TabBoxConfig::layout() const
{
return d->layout;
}
TabBoxConfig::ClientDesktopMode TabBoxConfig::clientDesktopMode() const
{
return d->clientDesktopMode;
@ -229,26 +208,6 @@ void TabBoxConfig::setDesktopSwitchingMode(DesktopSwitchingMode switchingMode)
d->desktopSwitchingMode = switchingMode;
}
int TabBoxConfig::minWidth() const
{
return d->minWidth;
}
void TabBoxConfig::setMinWidth(int value)
{
d->minWidth = value;
}
int TabBoxConfig::minHeight() const
{
return d->minHeight;
}
void TabBoxConfig::setMinHeight(int value)
{
d->minHeight = value;
}
QString& TabBoxConfig::layoutName() const
{
return d->layoutName;
@ -259,15 +218,5 @@ void TabBoxConfig::setLayoutName(const QString& name)
d->layoutName = name;
}
QString& TabBoxConfig::selectedItemLayoutName() const
{
return d->selectedItemLayoutName;
}
void TabBoxConfig::setSelectedItemLayoutName(const QString& name)
{
d->selectedItemLayoutName = name;
}
} // namespace TabBox
} // namespace KWin

View file

@ -51,15 +51,6 @@ class TabBoxConfigPrivate;
class TabBoxConfig
{
public:
/**
* LayoutMode defines how the items will be displayed in the
* main TableView of the TabBox.
*/
enum LayoutMode {
VerticalLayout, ///< Items are laid out vertically
HorizontalLayout, ///< Items are laid out horizontally
HorizontalVerticalLayout ///< Items are laid out in a tabular. Number of columns might be greater by one than number of rows
};
/**
* ClientDesktopMode defines whether windows from the current desktop or from all
* desktops are included in the TabBoxClient List in the TabBoxClientModel
@ -169,12 +160,6 @@ public:
*/
TabBoxMode tabBoxMode() const;
/**
* @return The currently used layout
* @see setLayout
* @see defaultLayoutMode
*/
LayoutMode layout() const;
/**
* @return The current ClientDesktopMode
* This option only applies for TabBoxMode ClientTabBox.
* @see setClientDesktopMode
@ -230,29 +215,10 @@ public:
*/
DesktopSwitchingMode desktopSwitchingMode() const;
/**
* @return The minimum width in percent of screen width the TabBox should use.
* @see setMinWidth
* @see minHeight
* @see defaultMinWidth
*/
int minWidth() const;
/**
* @return The minimum height in percent of screen height the TabBox should use.
* @see setMinHeight
* @see minWidth
* @see defaultMinHeight
*/
int minHeight() const;
/**
* @return Then name of the current ItemLayout
* @see setlayoutName
*/
QString& layoutName() const;
/**
* @return Then name of the current ItemLayout for selected Item view
* @see setlayoutName
*/
QString& selectedItemLayoutName() const;
// setters
/**
@ -279,11 +245,6 @@ public:
*/
void setTabBoxMode(TabBoxMode mode);
/**
* @param layout The new LayoutMode to be used.
* @see layout
*/
void setLayout(LayoutMode layout);
/**
* @param desktopMode The new ClientDesktopMode to be used.
* This option only applies for TabBoxMode ClientTabBox.
* @see clientDesktopMode
@ -332,25 +293,10 @@ public:
*/
void setDesktopSwitchingMode(DesktopSwitchingMode switchingMode);
/**
* @param value The minimum width of TabBox in percent of screen width.
* @see minWidth
*/
void setMinWidth(int value);
/**
* @param value The minimum height of TabBox in percent of screen height.
* @see minHeight
*/
void setMinHeight(int value);
/**
* @param name The new ItemLayout config name
* @see layoutName
*/
void setLayoutName(const QString& name);
/**
* @param name The new ItemLayout config name for the selected item view
* @see selectedItemLayoutName
*/
void setSelectedItemLayoutName(const QString& name);
// some static methods to access default values
static ClientDesktopMode defaultDesktopMode() {
@ -374,9 +320,6 @@ public:
static ClientSwitchingMode defaultSwitchingMode() {
return FocusChainSwitching;
}
static LayoutMode defaultLayoutMode() {
return VerticalLayout;
}
static bool defaultShowTabBox() {
return true;
}
@ -386,18 +329,9 @@ public:
static bool defaultHighlightWindow() {
return true;
}
static int defaultMinWidth() {
return 20;
}
static int defaultMinHeight() {
return 20;
}
static QString defaultLayoutName() {
return QString("thumbnails");
}
static QString defaultSelectedItemLayoutName() {
return QString("Text");
}
private:
TabBoxConfigPrivate* d;
};

View file

@ -124,7 +124,11 @@ void TabBoxHandlerPrivate::updateOutline()
q->hideOutline();
return;
}
TabBoxClient* c = static_cast< TabBoxClient* >(m_clientModel->data(index, ClientModel::ClientRole).value<void *>());
const QVariant client = m_clientModel->data(index, ClientModel::ClientRole);
if (!client.isValid()) {
return;
}
TabBoxClient* c = static_cast< TabBoxClient* >(client.value<void *>());
q->showOutline(QRect(c->x(), c->y(), c->width(), c->height()));
}

View file

@ -15,3 +15,21 @@ set( testTabBoxClientModel_SRCS
kde4_add_unit_test( testTabBoxClientModel TESTNAME testTabBoxClientModel ${testTabBoxClientModel_SRCS} )
target_link_libraries( testTabBoxClientModel ${KDE4_KDEUI_LIBS} ${QT_QTDECLARATIVE_LIBRARY} ${X11_LIBRARIES} ${QT_QTTEST_LIBRARY} )
########################################################
# Test TabBox::TabBoxHandler
########################################################
set( testTabBoxHandler_SRCS
../clientmodel.cpp
../desktopmodel.cpp
../tabboxconfig.cpp
../tabboxhandler.cpp
test_tabbox_handler.cpp
mock_declarative.cpp
mock_tabboxhandler.cpp
mock_tabboxclient.cpp
)
kde4_add_unit_test( testTabBoxHandler TESTNAME testTabBoxHandler ${testTabBoxHandler_SRCS} )
target_link_libraries( testTabBoxHandler ${KDE4_KDEUI_LIBS} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY} ${QT_QTTEST_LIBRARY} ${X11_LIBRARIES} )

View file

@ -0,0 +1,55 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2012 Martin Gräßlin <mgraesslin@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#include "mock_tabboxhandler.h"
#include "clientmodel.h"
#include <QtTest/QtTest>
using namespace KWin;
class TestTabBoxHandler : public QObject
{
Q_OBJECT
private slots:
/**
* Test to verify that update outline does not crash
* if the ModelIndex for which the outline should be
* shown is not valid. That is accessing the Pointer
* to the Client returns an invalid QVariant.
* BUG: 304620
**/
void testDontCrashUpdateOutlineNullClient();
};
void TestTabBoxHandler::testDontCrashUpdateOutlineNullClient()
{
MockTabBoxHandler tabboxhandler;
TabBox::TabBoxConfig config;
config.setTabBoxMode(TabBox::TabBoxConfig::ClientTabBox);
config.setShowOutline(true);
config.setShowTabBox(false);
config.setHighlightWindows(false);
tabboxhandler.setConfig(config);
// now show the tabbox which will attempt to show the outline
tabboxhandler.show();
}
QTEST_MAIN(TestTabBoxHandler)
#include "test_tabbox_handler.moc"

View file

@ -104,6 +104,15 @@ bool TabGroup::add(Client* c, Client *other, bool after, bool becomeVisible)
if (effects)
static_cast<EffectsHandlerImpl*>(effects)->slotTabAdded(c->effectWindow(), other->effectWindow());
// next: aling the client states BEFORE adding it to the group
// otherwise the caused indirect state changes would be taken as the dominating ones and break
// the main client
// example: QuickTiling is aligned to None, this restores the former QuickTiled size and alignes
// all other windows in the group - including the actual main client! - to this size and thus
// breaks the actually required alignment to the main windows geometry (because that now has the
// restored geometry of the formerly Q'tiled window) - bug #303937
updateStates(m_current, All, c);
int index = other ? m_clients.indexOf(other) : m_clients.size();
index += after;
if (index > m_clients.size())
@ -114,7 +123,6 @@ bool TabGroup::add(Client* c, Client *other, bool after, bool becomeVisible)
c->setTabGroup(this); // Let the client know which group it belongs to
updateMinMaxSize();
updateStates(m_current, All, c);
if (!becomeVisible)
c->setClientShown(false);
@ -268,7 +276,7 @@ void TabGroup::updateMinMaxSize()
m_maxSize = m_maxSize.boundedTo((*i)->maxSize());
}
// TODO: this actually resolves a conflict that should be catched when adding?
// TODO: this actually resolves a conflict that should be caught when adding?
m_maxSize = m_maxSize.expandedTo(m_minSize);
// calculate this _once_ to get a common size.
@ -286,12 +294,14 @@ void TabGroup::blockStateUpdates(bool more) {
more ? ++m_stateUpdatesBlocked : --m_stateUpdatesBlocked;
if (m_stateUpdatesBlocked < 0) {
m_stateUpdatesBlocked = 0;
qWarning("TabGroup: Something is messed up with TabGroup::blockStateUpdates() invokation\nReleased more than blocked!");
qWarning("TabGroup: Something is messed up with TabGroup::blockStateUpdates() invocation\nReleased more than blocked!");
}
}
void TabGroup::updateStates(Client* main, States states, Client* only)
{
if (main == only)
return; // there's no need to only align "us" to "us"
if (m_stateUpdatesBlocked > 0) {
m_pendingUpdates |= states;
return;
@ -300,10 +310,16 @@ void TabGroup::updateStates(Client* main, States states, Client* only)
states |= m_pendingUpdates;
m_pendingUpdates = TabGroup::None;
ClientList toBeRemoved;
for (ClientList::const_iterator i = m_clients.constBegin(), end = m_clients.constEnd(); i != end; ++i) {
ClientList toBeRemoved, onlyDummy;
ClientList *list = &m_clients;
if (only) {
onlyDummy << only;
list = &onlyDummy;
}
for (ClientList::const_iterator i = list->constBegin(), end = list->constEnd(); i != end; ++i) {
Client *c = (*i);
if (c != main && (!only || c == only)) {
if (c != main) {
if ((states & Minimized) && c->isMinimized() != main->isMinimized()) {
if (main->isMinimized())
c->minimize(true);

View file

@ -214,6 +214,7 @@ void Workspace::discardPopup()
delete popup;
popup = NULL;
desk_popup = NULL;
screen_popup = NULL;
activity_popup = NULL;
switch_to_tab_popup = NULL;
add_tabs_popup = NULL;
@ -251,6 +252,12 @@ void Workspace::clientPopupAboutToShow()
} else {
initDesktopPopup();
}
if (numScreens() == 1 || (!active_popup_client->isMovable() && !active_popup_client->isMovableAcrossScreens())) {
delete screen_popup;
screen_popup = NULL;
} else {
initScreenPopup();
}
#ifdef KWIN_BUILD_ACTIVITIES
updateActivityList(true, false, "showHideActivityMenu");
#endif
@ -407,6 +414,23 @@ void Workspace::initDesktopPopup()
action->setText(i18n("Move To &Desktop"));
}
void Workspace::initScreenPopup()
{
if (screen_popup) {
return;
}
screen_popup = new QMenu(popup);
screen_popup->setFont(KGlobalSettings::menuFont());
connect(screen_popup, SIGNAL(triggered(QAction*)), SLOT(slotSendToScreen(QAction*)));
connect(screen_popup, SIGNAL(aboutToShow()), SLOT(screenPopupAboutToShow()));
QAction *action = screen_popup->menuAction();
// set it as the first item after desktop
popup->insertAction(activity_popup ? activity_popup->menuAction() : mMinimizeOpAction, action);
action->setText(i18n("Move To &Screen"));
}
/*!
Creates activity popup.
I'm going with checkable ones instead of "copy to" and "move to" menus; I *think* it's an easier way.
@ -474,6 +498,33 @@ void Workspace::desktopPopupAboutToShow()
action->setEnabled(false);
}
/*!
Adjusts the screen popup to the current values and the location of
the popup client.
*/
void Workspace::screenPopupAboutToShow()
{
if (!screen_popup) {
return;
}
screen_popup->clear();
QActionGroup *group = new QActionGroup(screen_popup);
for (int i = 0; i<numScreens(); ++i) {
// TODO: retrieve the screen name?
// assumption: there are not more than 9 screens attached.
QAction *action = screen_popup->addAction(i18nc("@item:inmenu List of all Screens to send a window to",
"Screen &%1", (i+1)));
action->setData(i);
action->setCheckable(true);
if (active_popup_client && i == active_popup_client->screen()) {
action->setChecked(true);
}
group->addAction(action);
}
}
/*!
Adjusts the activity popup to the current values and the location of
the popup client.
@ -997,6 +1048,13 @@ QStringList Workspace::listOfEffects() const
return listModules;
}
QString Workspace::supportInformationForEffect(const QString& name) const
{
if (effects)
return static_cast<EffectsHandlerImpl*>(effects)->supportInformation(name);
return QString();
}
void Workspace::slotActivateAttentionWindow()
{
if (attention_chain.count() > 0)
@ -1396,6 +1454,24 @@ void Workspace::slotSendToDesktop(QAction *action)
}
/*!
Sends the popup client to screen \a screen
Internal slot for the window operation menu
*/
void Workspace::slotSendToScreen(QAction *action)
{
const int screen = action->data().toInt();
if (!active_popup_client) {
return;
}
if (screen >= numScreens()) {
return;
}
sendClientToScreen(active_popup_client, screen);
}
/*!
Toggles whether the popup client is on the \a activity

View file

@ -131,6 +131,7 @@ Workspace::Workspace(bool restore)
, popup(0)
, advanced_popup(0)
, desk_popup(0)
, screen_popup(NULL)
, activity_popup(0)
, add_tabs_popup(0)
, switch_to_tab_popup(0)
@ -2343,6 +2344,12 @@ QString Workspace::supportInformation() const
foreach (const QString &effect, activeEffects()) {
support.append(effect % '\n');
}
support.append("\nEffect Settings:\n");
support.append( "----------------\n");
foreach (const QString &effect, loadedEffects()) {
support.append(supportInformationForEffect(effect));
support.append('\n');
}
} else {
support.append("Compositing is not active\n");
}

View file

@ -380,6 +380,7 @@ public:
void toggleEffect(const QString& name);
void reconfigureEffect(const QString& name);
void unloadEffect(const QString& name);
QString supportInformationForEffect(const QString& name) const;
void updateCompositeBlocking(Client* c = NULL);
QStringList loadedEffects() const;
@ -632,9 +633,11 @@ private slots:
void entabPopupClient(QAction*);
void selectPopupClientTab(QAction*);
void desktopPopupAboutToShow();
void screenPopupAboutToShow();
void activityPopupAboutToShow();
void clientPopupAboutToShow();
void slotSendToDesktop(QAction*);
void slotSendToScreen(QAction*);
void slotToggleOnActivity(QAction*);
void clientPopupActivated(QAction*);
void configureWM();
@ -715,6 +718,7 @@ private:
void init();
void initShortcuts();
void initDesktopPopup();
void initScreenPopup();
void initActivityPopup();
void initTabbingPopups();
void restartKWin(const QString &reason);
@ -842,6 +846,7 @@ private:
QMenu* popup;
QMenu* advanced_popup;
QMenu* desk_popup;
QMenu* screen_popup;
QMenu* activity_popup;
QMenu* add_tabs_popup; // Menu to add the group to other group
QMenu* switch_to_tab_popup; // Menu to change tab