Properly implement exception border size

wilder-pre-rebase
Hugo Pereira Da Costa 11 years ago
parent 67182a9cb2
commit f084153ef6
  1. 2
      windec/kdecoration2/breeze.h
  2. 72
      windec/kdecoration2/breezedecoration.cpp
  3. 24
      windec/kdecoration2/breezedecoration.h
  4. 2
      windec/kdecoration2/breezeexceptionlist.cpp
  5. 8
      windec/kdecoration2/breezesettingsdata.kcfg
  6. 10
      windec/kdecoration2/config/breezeexceptiondialog.cpp
  7. 8
      windec/kdecoration2/config/ui/breezeexceptiondialog.ui

@ -58,7 +58,7 @@ namespace Breeze
{ {
None = 0, None = 0,
TitleAlignment = 1<<0, TitleAlignment = 1<<0,
FrameBorder = 1<<4 BorderSize = 1<<4
}; };
} }

@ -23,6 +23,7 @@
#include "breeze.h" #include "breeze.h"
#include "breezehelper.h" #include "breezehelper.h"
#include "breezesettingsprovider.h"
#include "config-breeze.h" #include "config-breeze.h"
#include "config/breezeconfig.h" #include "config/breezeconfig.h"
@ -40,7 +41,6 @@
#include <KPluginFactory> #include <KPluginFactory>
#include <QPainter> #include <QPainter>
#include <QTextStream>
K_PLUGIN_FACTORY_WITH_JSON( K_PLUGIN_FACTORY_WITH_JSON(
BreezeDecoFactory, BreezeDecoFactory,
@ -61,7 +61,6 @@ namespace Breeze
Decoration::Decoration(QObject *parent, const QVariantList &args) Decoration::Decoration(QObject *parent, const QVariantList &args)
: KDecoration2::Decoration(parent, args) : KDecoration2::Decoration(parent, args)
, m_colorSettings(client().data()->palette()) , m_colorSettings(client().data()->palette())
, m_internalSettings(new InternalSettings())
, m_leftButtons(nullptr) , m_leftButtons(nullptr)
, m_rightButtons(nullptr) , m_rightButtons(nullptr)
, m_sizeGrip(nullptr) , m_sizeGrip(nullptr)
@ -188,35 +187,52 @@ namespace Breeze
} }
//________________________________________________________________ //________________________________________________________________
static int borderSize(const QSharedPointer<KDecoration2::DecorationSettings> &settings, bool bottom) int Decoration::borderSize(bool bottom) const
{ {
const int baseSize = settings->smallSpacing(); const int baseSize = settings()->smallSpacing();
switch (settings->borderSize()) {
case KDecoration2::BorderSize::None: return 0;
case KDecoration2::BorderSize::NoSides: return bottom ? baseSize : 0;
default:
case KDecoration2::BorderSize::Tiny: return baseSize;
case KDecoration2::BorderSize::Normal: return baseSize*2;
case KDecoration2::BorderSize::Large: return baseSize * 3;
case KDecoration2::BorderSize::VeryLarge: return baseSize * 4;
case KDecoration2::BorderSize::Huge: return baseSize * 5;
case KDecoration2::BorderSize::VeryHuge: return baseSize * 6;
case KDecoration2::BorderSize::Oversized: return baseSize * 10;
}
}
//________________________________________________________________ if( m_internalSettings && (m_internalSettings->mask() & BorderSize ) )
static int borderSize(const QSharedPointer<KDecoration2::DecorationSettings> &settings) {
{ switch (m_internalSettings->borderSize()) {
return borderSize(settings, false); case InternalSettings::BorderNone: return 0;
case InternalSettings::BorderNoSides: return bottom ? baseSize : 0;
default:
case InternalSettings::BorderTiny: return baseSize;
case InternalSettings::BorderNormal: return baseSize*2;
case InternalSettings::BorderLarge: return baseSize * 3;
case InternalSettings::BorderVeryLarge: return baseSize * 4;
case InternalSettings::BorderHuge: return baseSize * 5;
case InternalSettings::BorderVeryHuge: return baseSize * 6;
case InternalSettings::BorderOversized: return baseSize * 10;
}
} else {
switch (settings()->borderSize()) {
case KDecoration2::BorderSize::None: return 0;
case KDecoration2::BorderSize::NoSides: return bottom ? baseSize : 0;
default:
case KDecoration2::BorderSize::Tiny: return baseSize;
case KDecoration2::BorderSize::Normal: return baseSize*2;
case KDecoration2::BorderSize::Large: return baseSize * 3;
case KDecoration2::BorderSize::VeryLarge: return baseSize * 4;
case KDecoration2::BorderSize::Huge: return baseSize * 5;
case KDecoration2::BorderSize::VeryHuge: return baseSize * 6;
case KDecoration2::BorderSize::Oversized: return baseSize * 10;
}
}
} }
//________________________________________________________________ //________________________________________________________________
void Decoration::reconfigure() void Decoration::reconfigure()
{ {
m_internalSettings = SettingsProvider::self()->internalSettings( this );
// read internal settings // read internal settings
m_internalSettings->read(); // m_internalSettings->read();
// animation // animation
m_animation->setDuration( m_internalSettings->animationsDuration() ); m_animation->setDuration( m_internalSettings->animationsDuration() );
@ -225,7 +241,7 @@ namespace Breeze
recalculateBorders(); recalculateBorders();
// size grip // size grip
if( settings()->borderSize() == KDecoration2::BorderSize::None && m_internalSettings->drawSizeGrip() ) createSizeGrip(); if( hasNoBorders() && m_internalSettings->drawSizeGrip() ) createSizeGrip();
else deleteSizeGrip(); else deleteSizeGrip();
} }
@ -236,8 +252,8 @@ namespace Breeze
auto s = settings(); auto s = settings();
const auto c = client().data(); const auto c = client().data();
const Qt::Edges edges = c->adjacentScreenEdges(); const Qt::Edges edges = c->adjacentScreenEdges();
int left = isMaximizedHorizontally() || edges.testFlag(Qt::LeftEdge) ? 0 : borderSize(s); int left = isMaximizedHorizontally() || edges.testFlag(Qt::LeftEdge) ? 0 : borderSize();
int right = isMaximizedHorizontally() || edges.testFlag(Qt::RightEdge) ? 0 : borderSize(s); int right = isMaximizedHorizontally() || edges.testFlag(Qt::RightEdge) ? 0 : borderSize();
QFontMetrics fm(s->font()); QFontMetrics fm(s->font());
int top = qMax(fm.boundingRect(c->caption()).height(), buttonHeight() ); int top = qMax(fm.boundingRect(c->caption()).height(), buttonHeight() );
@ -250,19 +266,19 @@ namespace Breeze
// padding above // padding above
if (!isMaximized()) top += baseSize*TitleBar_BottomMargin; if (!isMaximized()) top += baseSize*TitleBar_BottomMargin;
int bottom = isMaximizedVertically() || edges.testFlag(Qt::BottomEdge) ? 0 : borderSize(s, true); int bottom = isMaximizedVertically() || edges.testFlag(Qt::BottomEdge) ? 0 : borderSize(true);
setBorders(QMargins(left, top, right, bottom)); setBorders(QMargins(left, top, right, bottom));
// extended sizes // extended sizes
const int extSize = s->largeSpacing(); const int extSize = s->largeSpacing();
int extSides = 0; int extSides = 0;
int extBottom = 0; int extBottom = 0;
if (s->borderSize() == KDecoration2::BorderSize::None) if( hasNoBorders() )
{ {
extSides = extSize; extSides = extSize;
extBottom = extSize; extBottom = extSize;
} else if (s->borderSize() == KDecoration2::BorderSize::NoSides) { } else if( hasNoSideBorders() ) {
extSides = extSize; extSides = extSize;

@ -28,6 +28,7 @@
#include <KDecoration2/Decoration> #include <KDecoration2/Decoration>
#include <KDecoration2/DecoratedClient> #include <KDecoration2/DecoratedClient>
#include <KDecoration2/DecorationSettings>
#include <QPalette> #include <QPalette>
#include <QPropertyAnimation> #include <QPropertyAnimation>
@ -113,19 +114,26 @@ namespace Breeze
void paintTitleBar(QPainter *painter, const QRect &repaintRegion); void paintTitleBar(QPainter *painter, const QRect &repaintRegion);
void createShadow(); void createShadow();
//*@name border size
//@{
int borderSize(bool bottom = false) const;
inline bool hasNoBorders( void ) const;
inline bool hasNoSideBorders( void ) const;
//@}
//*@name maximization modes //*@name maximization modes
//@{
inline bool isMaximized( void ) const; inline bool isMaximized( void ) const;
inline bool isMaximizedHorizontally( void ) const; inline bool isMaximizedHorizontally( void ) const;
inline bool isMaximizedVertically( void ) const; inline bool isMaximizedVertically( void ) const;
//@}
//*@name size grip //*@name size grip
//@{ //@{
void createSizeGrip( void ); void createSizeGrip( void );
void deleteSizeGrip( void ); void deleteSizeGrip( void );
SizeGrip* sizeGrip( void ) const SizeGrip* sizeGrip( void ) const
{ return m_sizeGrip; } { return m_sizeGrip; }
//@} //@}
ColorSettings m_colorSettings; ColorSettings m_colorSettings;
@ -146,6 +154,18 @@ namespace Breeze
}; };
bool Decoration::hasNoBorders( void ) const
{
if( m_internalSettings && m_internalSettings->mask() & BorderSize ) return m_internalSettings->borderSize() == InternalSettings::BorderNone;
else return settings()->borderSize() == KDecoration2::BorderSize::None;
}
bool Decoration::hasNoSideBorders( void ) const
{
if( m_internalSettings && m_internalSettings->mask() & BorderSize ) return m_internalSettings->borderSize() == InternalSettings::BorderNoSides;
else return settings()->borderSize() == KDecoration2::BorderSize::NoSides;
}
bool Decoration::isMaximized( void ) const { return client().data()->isMaximized() && !m_internalSettings->drawBorderOnMaximizedWindows(); } bool Decoration::isMaximized( void ) const { return client().data()->isMaximized() && !m_internalSettings->drawBorderOnMaximizedWindows(); }
bool Decoration::isMaximizedHorizontally( void ) const { return client().data()->isMaximizedHorizontally() && !m_internalSettings->drawBorderOnMaximizedWindows(); } bool Decoration::isMaximizedHorizontally( void ) const { return client().data()->isMaximizedHorizontally() && !m_internalSettings->drawBorderOnMaximizedWindows(); }
bool Decoration::isMaximizedVertically( void ) const { return client().data()->isMaximizedVertically() && !m_internalSettings->drawBorderOnMaximizedWindows(); } bool Decoration::isMaximizedVertically( void ) const { return client().data()->isMaximizedVertically() && !m_internalSettings->drawBorderOnMaximizedWindows(); }

@ -57,7 +57,7 @@ namespace Breeze
configuration->setMask( exception.mask() ); configuration->setMask( exception.mask() );
// propagate all features found in mask to the output configuration // propagate all features found in mask to the output configuration
if( exception.mask() & FrameBorder ) configuration->setFrameBorder( exception.frameBorder() ); if( exception.mask() & BorderSize ) configuration->setBorderSize( exception.borderSize() );
configuration->setHideTitleBar( exception.hideTitleBar() ); configuration->setHideTitleBar( exception.hideTitleBar() );
// append to exceptions // append to exceptions

@ -10,19 +10,19 @@
this one is used only for window specific settings, since the default is globally set by kwin this one is used only for window specific settings, since the default is globally set by kwin
the enumeration must be kept in sync with kwin's global settings the enumeration must be kept in sync with kwin's global settings
--> -->
<entry name="FrameBorder" type = "Enum"> <entry name="BorderSize" type = "Enum">
<choices> <choices>
<choice name="BorderNone" /> <choice name="BorderNone" />
<choice name="BorderNoSide" /> <choice name="BorderNoSides" />
<choice name="BorderTiny" /> <choice name="BorderTiny" />
<choice name="BorderDefault" /> <choice name="BorderNormal" />
<choice name="BorderLarge" /> <choice name="BorderLarge" />
<choice name="BorderVeryLarge" /> <choice name="BorderVeryLarge" />
<choice name="BorderHuge" /> <choice name="BorderHuge" />
<choice name="BorderVeryHuge" /> <choice name="BorderVeryHuge" />
<choice name="BorderOversized" /> <choice name="BorderOversized" />
</choices> </choices>
<default>BorderNoSide</default> <default>BorderNoSides</default>
</entry> </entry>
<!-- title alignment --> <!-- title alignment -->

@ -39,7 +39,7 @@ namespace Breeze
connect( buttonBox->button( QDialogButtonBox::Cancel ), SIGNAL(clicked()), this, SLOT(close()) ); connect( buttonBox->button( QDialogButtonBox::Cancel ), SIGNAL(clicked()), this, SLOT(close()) );
// store checkboxes from ui into list // store checkboxes from ui into list
m_checkboxes.insert( FrameBorder, frameBorderCheckBox ); m_checkboxes.insert( BorderSize, borderSizeCheckBox );
// detect window properties // detect window properties
connect( detectDialogButton, SIGNAL(clicked()), SLOT(selectWindowProperties()) ); connect( detectDialogButton, SIGNAL(clicked()), SLOT(selectWindowProperties()) );
@ -47,7 +47,7 @@ namespace Breeze
// connections // connections
connect( exceptionType, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); connect( exceptionType, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) );
connect( exceptionEditor, SIGNAL(textChanged(QString)), SLOT(updateChanged()) ); connect( exceptionEditor, SIGNAL(textChanged(QString)), SLOT(updateChanged()) );
connect( frameBorderComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) ); connect( borderSizeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()) );
for( CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter ) for( CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter )
{ connect( iter.value(), SIGNAL(clicked()), SLOT(updateChanged()) ); } { connect( iter.value(), SIGNAL(clicked()), SLOT(updateChanged()) ); }
@ -65,7 +65,7 @@ namespace Breeze
// type // type
exceptionType->setCurrentIndex(m_exception->exceptionType() ); exceptionType->setCurrentIndex(m_exception->exceptionType() );
exceptionEditor->setText( m_exception->exceptionPattern() ); exceptionEditor->setText( m_exception->exceptionPattern() );
frameBorderComboBox->setCurrentIndex( m_exception->frameBorder() ); borderSizeComboBox->setCurrentIndex( m_exception->borderSize() );
hideTitleBar->setChecked( m_exception->hideTitleBar() ); hideTitleBar->setChecked( m_exception->hideTitleBar() );
// mask // mask
@ -81,7 +81,7 @@ namespace Breeze
{ {
m_exception->setExceptionType( exceptionType->currentIndex() ); m_exception->setExceptionType( exceptionType->currentIndex() );
m_exception->setExceptionPattern( exceptionEditor->text() ); m_exception->setExceptionPattern( exceptionEditor->text() );
m_exception->setFrameBorder( frameBorderComboBox->currentIndex() ); m_exception->setBorderSize( borderSizeComboBox->currentIndex() );
m_exception->setHideTitleBar( hideTitleBar->isChecked() ); m_exception->setHideTitleBar( hideTitleBar->isChecked() );
// mask // mask
@ -101,7 +101,7 @@ namespace Breeze
bool modified( false ); bool modified( false );
if( m_exception->exceptionType() != exceptionType->currentIndex() ) modified = true; if( m_exception->exceptionType() != exceptionType->currentIndex() ) modified = true;
else if( m_exception->exceptionPattern() != exceptionEditor->text() ) modified = true; else if( m_exception->exceptionPattern() != exceptionEditor->text() ) modified = true;
else if( m_exception->frameBorder() != frameBorderComboBox->currentIndex() ) modified = true; else if( m_exception->borderSize() != borderSizeComboBox->currentIndex() ) modified = true;
else if( m_exception->hideTitleBar() != hideTitleBar->isChecked() ) modified = true; else if( m_exception->hideTitleBar() != hideTitleBar->isChecked() ) modified = true;
else else
{ {

@ -84,7 +84,7 @@
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QCheckBox" name="frameBorderCheckBox"> <widget class="QCheckBox" name="borderSizeCheckBox">
<property name="text"> <property name="text">
<string>Border size:</string> <string>Border size:</string>
</property> </property>
@ -98,7 +98,7 @@
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="frameBorderComboBox"> <widget class="QComboBox" name="borderSizeComboBox">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
@ -212,9 +212,9 @@
</hints> </hints>
</connection> </connection>
<connection> <connection>
<sender>frameBorderCheckBox</sender> <sender>borderSizeCheckBox</sender>
<signal>toggled(bool)</signal> <signal>toggled(bool)</signal>
<receiver>frameBorderComboBox</receiver> <receiver>borderSizeComboBox</receiver>
<slot>setEnabled(bool)</slot> <slot>setEnabled(bool)</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">

Loading…
Cancel
Save