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,
TitleAlignment = 1<<0,
FrameBorder = 1<<4
BorderSize = 1<<4
};
}

@ -23,6 +23,7 @@
#include "breeze.h"
#include "breezehelper.h"
#include "breezesettingsprovider.h"
#include "config-breeze.h"
#include "config/breezeconfig.h"
@ -40,7 +41,6 @@
#include <KPluginFactory>
#include <QPainter>
#include <QTextStream>
K_PLUGIN_FACTORY_WITH_JSON(
BreezeDecoFactory,
@ -61,7 +61,6 @@ namespace Breeze
Decoration::Decoration(QObject *parent, const QVariantList &args)
: KDecoration2::Decoration(parent, args)
, m_colorSettings(client().data()->palette())
, m_internalSettings(new InternalSettings())
, m_leftButtons(nullptr)
, m_rightButtons(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();
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;
}
}
const int baseSize = settings()->smallSpacing();
//________________________________________________________________
static int borderSize(const QSharedPointer<KDecoration2::DecorationSettings> &settings)
{
return borderSize(settings, false);
if( m_internalSettings && (m_internalSettings->mask() & BorderSize ) )
{
switch (m_internalSettings->borderSize()) {
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()
{
m_internalSettings = SettingsProvider::self()->internalSettings( this );
// read internal settings
m_internalSettings->read();
// m_internalSettings->read();
// animation
m_animation->setDuration( m_internalSettings->animationsDuration() );
@ -225,7 +241,7 @@ namespace Breeze
recalculateBorders();
// size grip
if( settings()->borderSize() == KDecoration2::BorderSize::None && m_internalSettings->drawSizeGrip() ) createSizeGrip();
if( hasNoBorders() && m_internalSettings->drawSizeGrip() ) createSizeGrip();
else deleteSizeGrip();
}
@ -236,8 +252,8 @@ namespace Breeze
auto s = settings();
const auto c = client().data();
const Qt::Edges edges = c->adjacentScreenEdges();
int left = isMaximizedHorizontally() || edges.testFlag(Qt::LeftEdge) ? 0 : borderSize(s);
int right = isMaximizedHorizontally() || edges.testFlag(Qt::RightEdge) ? 0 : borderSize(s);
int left = isMaximizedHorizontally() || edges.testFlag(Qt::LeftEdge) ? 0 : borderSize();
int right = isMaximizedHorizontally() || edges.testFlag(Qt::RightEdge) ? 0 : borderSize();
QFontMetrics fm(s->font());
int top = qMax(fm.boundingRect(c->caption()).height(), buttonHeight() );
@ -250,19 +266,19 @@ namespace Breeze
// padding above
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));
// extended sizes
const int extSize = s->largeSpacing();
int extSides = 0;
int extBottom = 0;
if (s->borderSize() == KDecoration2::BorderSize::None)
if( hasNoBorders() )
{
extSides = extSize;
extBottom = extSize;
} else if (s->borderSize() == KDecoration2::BorderSize::NoSides) {
} else if( hasNoSideBorders() ) {
extSides = extSize;

@ -28,6 +28,7 @@
#include <KDecoration2/Decoration>
#include <KDecoration2/DecoratedClient>
#include <KDecoration2/DecorationSettings>
#include <QPalette>
#include <QPropertyAnimation>
@ -113,19 +114,26 @@ namespace Breeze
void paintTitleBar(QPainter *painter, const QRect &repaintRegion);
void createShadow();
//*@name border size
//@{
int borderSize(bool bottom = false) const;
inline bool hasNoBorders( void ) const;
inline bool hasNoSideBorders( void ) const;
//@}
//*@name maximization modes
//@{
inline bool isMaximized( void ) const;
inline bool isMaximizedHorizontally( void ) const;
inline bool isMaximizedVertically( void ) const;
//@}
//*@name size grip
//@{
void createSizeGrip( void );
void deleteSizeGrip( void );
SizeGrip* sizeGrip( void ) const
{ return m_sizeGrip; }
//@}
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::isMaximizedHorizontally( void ) const { return client().data()->isMaximizedHorizontally() && !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() );
// 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() );
// append to exceptions

@ -10,19 +10,19 @@
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
-->
<entry name="FrameBorder" type = "Enum">
<entry name="BorderSize" type = "Enum">
<choices>
<choice name="BorderNone" />
<choice name="BorderNoSide" />
<choice name="BorderNoSides" />
<choice name="BorderTiny" />
<choice name="BorderDefault" />
<choice name="BorderNormal" />
<choice name="BorderLarge" />
<choice name="BorderVeryLarge" />
<choice name="BorderHuge" />
<choice name="BorderVeryHuge" />
<choice name="BorderOversized" />
</choices>
<default>BorderNoSide</default>
<default>BorderNoSides</default>
</entry>
<!-- title alignment -->

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

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

Loading…
Cancel
Save