Window specific setting to skip window switchers (tabbox, present windows, desktop grid).

FEATURE: 171192
CCBUG: 179723

svn path=/trunk/KDE/kdebase/workspace/; revision=1122404
This commit is contained in:
Martin Gräßlin 2010-05-03 20:04:44 +00:00
parent 1a02507f50
commit fa7f160cb3
16 changed files with 280 additions and 194 deletions

View file

@ -1429,6 +1429,15 @@ void Client::setSkipPager( bool b )
updateWindowRules(); updateWindowRules();
} }
void Client::setSkipSwitcher( bool set )
{
set = rules()->checkSkipSwitcher( set );
if( set == skipSwitcher() )
return;
skip_switcher = set;
updateWindowRules();
}
void Client::setModal( bool m ) void Client::setModal( bool m )
{ // Qt-3.2 can have even modal normal windows :( { // Qt-3.2 can have even modal normal windows :(
if( modal == m ) if( modal == m )

View file

@ -179,6 +179,9 @@ class Client
bool skipPager() const; bool skipPager() const;
void setSkipPager( bool ); void setSkipPager( bool );
bool skipSwitcher() const;
void setSkipSwitcher( bool set );
bool keepAbove() const; bool keepAbove() const;
void setKeepAbove( bool ); void setKeepAbove( bool );
bool keepBelow() const; bool keepBelow() const;
@ -556,6 +559,7 @@ class Client
uint Pping : 1; ///< Does it support _NET_WM_PING? uint Pping : 1; ///< Does it support _NET_WM_PING?
uint input : 1; ///< Does the window want input in its wm_hints uint input : 1; ///< Does the window want input in its wm_hints
uint skip_pager : 1; uint skip_pager : 1;
uint skip_switcher : 1;
uint motif_may_resize : 1; uint motif_may_resize : 1;
uint motif_may_move : 1; uint motif_may_move : 1;
uint motif_may_close : 1; uint motif_may_close : 1;
@ -805,6 +809,11 @@ inline bool Client::skipPager() const
return skip_pager; return skip_pager;
} }
inline bool Client::skipSwitcher() const
{
return skip_switcher;
}
inline bool Client::keepAbove() const inline bool Client::keepAbove() const
{ {
return keep_above; return keep_above;

View file

@ -1544,6 +1544,13 @@ EffectWindowList EffectWindowImpl::mainWindows() const
return EffectWindowList(); return EffectWindowList();
} }
bool EffectWindowImpl::isSkipSwitcher() const
{
if( Client* c = dynamic_cast< Client* >( toplevel ))
return c->skipSwitcher();
return false;
}
WindowQuadList EffectWindowImpl::buildQuads( bool force ) const WindowQuadList EffectWindowImpl::buildQuads( bool force ) const
{ {
return sceneWindow()->buildQuads( force ); return sceneWindow()->buildQuads( force );

View file

@ -271,6 +271,8 @@ class EffectWindowImpl : public EffectWindow
virtual EffectWindow* findModal(); virtual EffectWindow* findModal();
virtual EffectWindowList mainWindows() const; virtual EffectWindowList mainWindows() const;
virtual bool isSkipSwitcher() const;
virtual WindowQuadList buildQuads( bool force = false ) const; virtual WindowQuadList buildQuads( bool force = false ) const;
virtual void minimize() const; virtual void minimize() const;

View file

@ -346,7 +346,7 @@ void DesktopGridEffect::paintWindow( EffectWindow* w, int mask, QRegion region,
d.xTranslate += qRound( newPos.x() - w->x() ); d.xTranslate += qRound( newPos.x() - w->x() );
d.yTranslate += qRound( newPos.y() - w->y() ); d.yTranslate += qRound( newPos.y() - w->y() );
if( isUsingPresentWindows() && w->isDock() ) if( isUsingPresentWindows() && ( w->isDock() || w->isSkipSwitcher() ) )
{ {
// fade out panels if present windows is used // fade out panels if present windows is used
d.opacity *= ( 1.0 - timeline.value() ); d.opacity *= ( 1.0 - timeline.value() );
@ -1200,7 +1200,7 @@ void DesktopGridEffect::setup()
foreach( EffectWindow* w, effects->stackingOrder() ) foreach( EffectWindow* w, effects->stackingOrder() )
{ {
if( w->isOnDesktop( i ) && w->screen() == j && !w->isDesktop() && !w->isDock() && if( w->isOnDesktop( i ) && w->screen() == j && !w->isDesktop() && !w->isDock() &&
w->visibleInClientGroup() ) w->visibleInClientGroup() && !w->isSkipSwitcher() )
{ {
manager.manage( w ); manager.manage( w );
} }

View file

@ -1670,6 +1670,8 @@ bool PresentWindowsEffect::isSelectableWindow( EffectWindow *w )
return false; return false;
if( !w->visibleInClientGroup() ) if( !w->visibleInClientGroup() )
return false; return false;
if( w->isSkipSwitcher() )
return false;
switch( m_mode ) switch( m_mode )
{ {
case ModeAllDesktops: case ModeAllDesktops:

View file

@ -96,6 +96,7 @@ RulesWidget::RulesWidget( QWidget* parent )
SETUP( noborder, set ); SETUP( noborder, set );
SETUP( skiptaskbar, set ); SETUP( skiptaskbar, set );
SETUP( skippager, set ); SETUP( skippager, set );
SETUP( skipswitcher, set );
SETUP( acceptfocus, force ); SETUP( acceptfocus, force );
SETUP( closeable, force ); SETUP( closeable, force );
SETUP( autogroup, force ); SETUP( autogroup, force );
@ -147,6 +148,7 @@ UPDATE_ENABLE_SLOT( below )
UPDATE_ENABLE_SLOT( noborder ) UPDATE_ENABLE_SLOT( noborder )
UPDATE_ENABLE_SLOT( skiptaskbar ) UPDATE_ENABLE_SLOT( skiptaskbar )
UPDATE_ENABLE_SLOT( skippager ) UPDATE_ENABLE_SLOT( skippager )
UPDATE_ENABLE_SLOT( skipswitcher )
UPDATE_ENABLE_SLOT( acceptfocus ) UPDATE_ENABLE_SLOT( acceptfocus )
UPDATE_ENABLE_SLOT( closeable ) UPDATE_ENABLE_SLOT( closeable )
UPDATE_ENABLE_SLOT( autogroup ) UPDATE_ENABLE_SLOT( autogroup )
@ -436,6 +438,7 @@ void RulesWidget::setRules( Rules* rules )
CHECKBOX_SET_RULE( noborder, ); CHECKBOX_SET_RULE( noborder, );
CHECKBOX_SET_RULE( skiptaskbar, ); CHECKBOX_SET_RULE( skiptaskbar, );
CHECKBOX_SET_RULE( skippager, ); CHECKBOX_SET_RULE( skippager, );
CHECKBOX_SET_RULE( skipswitcher, );
CHECKBOX_FORCE_RULE( acceptfocus, ); CHECKBOX_FORCE_RULE( acceptfocus, );
CHECKBOX_FORCE_RULE( closeable, ); CHECKBOX_FORCE_RULE( closeable, );
CHECKBOX_FORCE_RULE( autogroup, ); CHECKBOX_FORCE_RULE( autogroup, );
@ -530,6 +533,7 @@ Rules* RulesWidget::rules() const
CHECKBOX_SET_RULE( noborder, ); CHECKBOX_SET_RULE( noborder, );
CHECKBOX_SET_RULE( skiptaskbar, ); CHECKBOX_SET_RULE( skiptaskbar, );
CHECKBOX_SET_RULE( skippager, ); CHECKBOX_SET_RULE( skippager, );
CHECKBOX_SET_RULE( skipswitcher, );
CHECKBOX_FORCE_RULE( acceptfocus, ); CHECKBOX_FORCE_RULE( acceptfocus, );
CHECKBOX_FORCE_RULE( closeable, ); CHECKBOX_FORCE_RULE( closeable, );
CHECKBOX_FORCE_RULE( autogroup, ); CHECKBOX_FORCE_RULE( autogroup, );
@ -651,6 +655,7 @@ void RulesWidget::prefillUnusedValues( const KWindowInfo& info )
CHECKBOX_PREFILL( noborder,, info.frameGeometry() == info.geometry() ); CHECKBOX_PREFILL( noborder,, info.frameGeometry() == info.geometry() );
CHECKBOX_PREFILL( skiptaskbar,, info.state() & NET::SkipTaskbar ); CHECKBOX_PREFILL( skiptaskbar,, info.state() & NET::SkipTaskbar );
CHECKBOX_PREFILL( skippager,, info.state() & NET::SkipPager ); CHECKBOX_PREFILL( skippager,, info.state() & NET::SkipPager );
CHECKBOX_PREFILL( skipswitcher,, false );
//CHECKBOX_PREFILL( acceptfocus, ); //CHECKBOX_PREFILL( acceptfocus, );
//CHECKBOX_PREFILL( closeable, ); //CHECKBOX_PREFILL( closeable, );
//CHECKBOX_PREFILL( autogroup, ); //CHECKBOX_PREFILL( autogroup, );

View file

@ -70,6 +70,7 @@ class RulesWidget
void updateEnablenoborder(); void updateEnablenoborder();
void updateEnableskiptaskbar(); void updateEnableskiptaskbar();
void updateEnableskippager(); void updateEnableskippager();
void updateEnableskipswitcher();
void updateEnableacceptfocus(); void updateEnableacceptfocus();
void updateEnablecloseable(); void updateEnablecloseable();
void updateEnableautogroup(); void updateEnableautogroup();

View file

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>685</width> <width>685</width>
<height>441</height> <height>462</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout"> <layout class="QVBoxLayout">
@ -19,16 +19,8 @@
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="TabPage1" > <widget class="QWidget" name="TabPage1">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>681</width>
<height>416</height>
</rect>
</property>
<attribute name="title" >
<string>&amp;Window</string> <string>&amp;Window</string>
</attribute> </attribute>
<layout class="QGridLayout"> <layout class="QGridLayout">
@ -246,16 +238,8 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="TabPage2" > <widget class="QWidget" name="TabPage2">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>681</width>
<height>416</height>
</rect>
</property>
<attribute name="title" >
<string>Window &amp;Extra</string> <string>Window &amp;Extra</string>
</attribute> </attribute>
<layout class="QGridLayout"> <layout class="QGridLayout">
@ -542,16 +526,8 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="TabPage3" > <widget class="QWidget" name="TabPage3">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>681</width>
<height>416</height>
</rect>
</property>
<attribute name="title" >
<string>&amp;Geometry</string> <string>&amp;Geometry</string>
</attribute> </attribute>
<layout class="QGridLayout"> <layout class="QGridLayout">
@ -1088,16 +1064,8 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="TabPage4" > <widget class="QWidget" name="TabPage4">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>681</width>
<height>416</height>
</rect>
</property>
<attribute name="title" >
<string>&amp;Preferences</string> <string>&amp;Preferences</string>
</attribute> </attribute>
<layout class="QGridLayout"> <layout class="QGridLayout">
@ -1115,13 +1083,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0">
<widget class="QCheckBox" name="enable_skippager">
<property name="text">
<string>Skip pa&amp;ger</string>
</property>
</widget>
</item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QCheckBox" name="enable_skiptaskbar"> <widget class="QCheckBox" name="enable_skiptaskbar">
<property name="text"> <property name="text">
@ -1136,51 +1097,51 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="6" column="0">
<widget class="QCheckBox" name="enable_acceptfocus"> <widget class="QCheckBox" name="enable_acceptfocus">
<property name="text"> <property name="text">
<string>Accept &amp;focus</string> <string>Accept &amp;focus</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="7" column="0">
<widget class="QCheckBox" name="enable_closeable"> <widget class="QCheckBox" name="enable_closeable">
<property name="text"> <property name="text">
<string>&amp;Closeable</string> <string>&amp;Closeable</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0" > <item row="8" column="0">
<widget class="QCheckBox" name="enable_autogroup" > <widget class="QCheckBox" name="enable_autogroup">
<property name="text" > <property name="text">
<string>Autogroup with &amp;identical</string> <string>Autogroup with &amp;identical</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="0" > <item row="9" column="0">
<widget class="QCheckBox" name="enable_autogroupfg" > <widget class="QCheckBox" name="enable_autogroupfg">
<property name="text" > <property name="text">
<string>Autog&amp;roup in foreground</string> <string>Autog&amp;roup in foreground</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="0" > <item row="10" column="0">
<widget class="QCheckBox" name="enable_autogroupid" > <widget class="QCheckBox" name="enable_autogroupid">
<property name="text" > <property name="text">
<string>Autogroup by I&amp;D</string> <string>Autogroup by I&amp;D</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="0" > <item row="11" column="0">
<widget class="QCheckBox" name="enable_opacityactive" > <widget class="QCheckBox" name="enable_opacityactive">
<property name="text" > <property name="text">
<string>A&amp;ctive opacity in %</string> <string>A&amp;ctive opacity in %</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="1" > <item row="11" column="1">
<widget class="KComboBox" name="rule_opacityactive" > <widget class="KComboBox" name="rule_opacityactive">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<item> <item>
@ -1200,9 +1161,9 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="10" column="2" colspan="2" > <item row="11" column="2" colspan="2">
<widget class="KRestrictedLine" name="opacityactive" > <widget class="KRestrictedLine" name="opacityactive">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="validChars"> <property name="validChars">
@ -1260,7 +1221,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="2"> <item row="6" column="2">
<widget class="QCheckBox" name="acceptfocus"> <widget class="QCheckBox" name="acceptfocus">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -1270,7 +1231,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="2"> <item row="7" column="2">
<widget class="QCheckBox" name="closeable"> <widget class="QCheckBox" name="closeable">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -1280,102 +1241,36 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="2" > <item row="8" column="2">
<widget class="QCheckBox" name="autogroup" > <widget class="QCheckBox" name="autogroup">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="text" > <property name="text">
<string/> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="2" > <item row="9" column="2">
<widget class="QCheckBox" name="autogroupfg" > <widget class="QCheckBox" name="autogroupfg">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="text" > <property name="text">
<string/> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="2" > <item row="10" column="2">
<widget class="KLineEdit" name="autogroupid" > <widget class="KLineEdit" name="autogroupid">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="1" > <item row="10" column="1">
<widget class="KComboBox" name="rule_autogroupid" > <widget class="KComboBox" name="rule_autogroupid">
<property name="enabled" > <property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text" >
<string>Do Not Affect</string>
</property>
</item>
<item>
<property name="text" >
<string>Force</string>
</property>
</item>
<item>
<property name="text" >
<string>Force Temporarily</string>
</property>
</item>
</widget>
</item>
<item row="8" column="1" >
<widget class="KComboBox" name="rule_autogroupfg" >
<property name="enabled" >
<bool>false</bool>
</property>
<item>
<property name="text" >
<string>Do Not Affect</string>
</property>
</item>
<item>
<property name="text" >
<string>Force</string>
</property>
</item>
<item>
<property name="text" >
<string>Force Temporarily</string>
</property>
</item>
</widget>
</item>
<item row="7" column="1" >
<widget class="KComboBox" name="rule_autogroup" >
<property name="enabled" >
<bool>false</bool>
</property>
<item>
<property name="text" >
<string>Do Not Affect</string>
</property>
</item>
<item>
<property name="text" >
<string>Force</string>
</property>
</item>
<item>
<property name="text" >
<string>Force Temporarily</string>
</property>
</item>
</widget>
</item>
<item row="6" column="1" >
<widget class="KComboBox" name="rule_closeable" >
<property name="enabled" >
<bool>false</bool> <bool>false</bool>
</property> </property>
<item> <item>
@ -1395,7 +1290,73 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="5" column="1"> <item row="9" column="1">
<widget class="KComboBox" name="rule_autogroupfg">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>Do Not Affect</string>
</property>
</item>
<item>
<property name="text">
<string>Force</string>
</property>
</item>
<item>
<property name="text">
<string>Force Temporarily</string>
</property>
</item>
</widget>
</item>
<item row="8" column="1">
<widget class="KComboBox" name="rule_autogroup">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>Do Not Affect</string>
</property>
</item>
<item>
<property name="text">
<string>Force</string>
</property>
</item>
<item>
<property name="text">
<string>Force Temporarily</string>
</property>
</item>
</widget>
</item>
<item row="7" column="1">
<widget class="KComboBox" name="rule_closeable">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>Do Not Affect</string>
</property>
</item>
<item>
<property name="text">
<string>Force</string>
</property>
</item>
<item>
<property name="text">
<string>Force Temporarily</string>
</property>
</item>
</widget>
</item>
<item row="6" column="1">
<widget class="KComboBox" name="rule_acceptfocus"> <widget class="KComboBox" name="rule_acceptfocus">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -1602,7 +1563,7 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="14" column="1" > <item row="15" column="1">
<spacer> <spacer>
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -1618,9 +1579,9 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="11" column="1" > <item row="12" column="1">
<widget class="KComboBox" name="rule_opacityinactive" > <widget class="KComboBox" name="rule_opacityinactive">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<item> <item>
@ -1640,9 +1601,9 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="11" column="2" colspan="2" > <item row="12" column="2" colspan="2">
<widget class="KRestrictedLine" name="opacityinactive" > <widget class="KRestrictedLine" name="opacityinactive">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="validChars"> <property name="validChars">
@ -1650,16 +1611,16 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="0" > <item row="12" column="0">
<widget class="QCheckBox" name="enable_opacityinactive" > <widget class="QCheckBox" name="enable_opacityinactive">
<property name="text" > <property name="text">
<string>I&amp;nactive opacity in %</string> <string>I&amp;nactive opacity in %</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="0" > <item row="14" column="0">
<widget class="QCheckBox" name="enable_shortcut" > <widget class="QCheckBox" name="enable_shortcut">
<property name="text" > <property name="text">
<string>Shortcut</string> <string>Shortcut</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
@ -1667,9 +1628,9 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="1" > <item row="14" column="1">
<widget class="KComboBox" name="rule_shortcut" > <widget class="KComboBox" name="rule_shortcut">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<item> <item>
@ -1704,28 +1665,28 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="13" column="5" > <item row="14" column="5">
<widget class="QPushButton" name="shortcut_edit" > <widget class="QPushButton" name="shortcut_edit">
<property name="text" > <property name="text">
<string>Edit...</string> <string>Edit...</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="2" colspan="3" > <item row="14" column="2" colspan="3">
<widget class="KRestrictedLine" name="shortcut" > <widget class="KRestrictedLine" name="shortcut">
<property name="enabled" > <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="0"> <item row="13" column="0">
<widget class="QCheckBox" name="enable_tilingoption"> <widget class="QCheckBox" name="enable_tilingoption">
<property name="text"> <property name="text">
<string>T&amp;iling</string> <string>T&amp;iling</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="1"> <item row="13" column="1">
<widget class="KComboBox" name="rule_tilingoption"> <widget class="KComboBox" name="rule_tilingoption">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -1747,7 +1708,7 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="12" column="2"> <item row="13" column="2">
<widget class="KComboBox" name="tilingoption"> <widget class="KComboBox" name="tilingoption">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
@ -1764,18 +1725,71 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="4" column="0">
<widget class="QCheckBox" name="enable_skippager">
<property name="text">
<string>Skip pa&amp;ger</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="enable_skipswitcher">
<property name="text">
<string>Skip &amp;switcher</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="KComboBox" name="rule_skipswitcher">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>Do Not Affect</string>
</property>
</item>
<item>
<property name="text">
<string>Apply Initially</string>
</property>
</item>
<item>
<property name="text">
<string>Remember</string>
</property>
</item>
<item>
<property name="text">
<string>Force</string>
</property>
</item>
<item>
<property name="text">
<string>Apply Now</string>
</property>
</item>
<item>
<property name="text">
<string>Force Temporarily</string>
</property>
</item>
</widget>
</item>
<item row="5" column="2">
<widget class="QCheckBox" name="skipswitcher">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="TabPage5" > <widget class="QWidget" name="TabPage5">
<property name="geometry" > <attribute name="title">
<rect>
<x>0</x>
<y>0</y>
<width>681</width>
<height>416</height>
</rect>
</property>
<attribute name="title" >
<string>W&amp;orkarounds</string> <string>W&amp;orkarounds</string>
</attribute> </attribute>
<layout class="QGridLayout"> <layout class="QGridLayout">
@ -2195,7 +2209,7 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>
<class>KPushButton</class> <class>KPushButton</class>
<extends>QPushButton</extends> <extends>QPushButton</extends>
@ -2280,9 +2294,9 @@
<tabstop>enable_skippager</tabstop> <tabstop>enable_skippager</tabstop>
<tabstop>rule_skippager</tabstop> <tabstop>rule_skippager</tabstop>
<tabstop>skippager</tabstop> <tabstop>skippager</tabstop>
<tabstop>enable_acceptfocus</tabstop> <tabstop>enable_skipswitcher</tabstop>
<tabstop>rule_acceptfocus</tabstop> <tabstop>rule_skipswitcher</tabstop>
<tabstop>acceptfocus</tabstop> <tabstop>skipswitcher</tabstop>
<tabstop>enable_closeable</tabstop> <tabstop>enable_closeable</tabstop>
<tabstop>rule_closeable</tabstop> <tabstop>rule_closeable</tabstop>
<tabstop>closeable</tabstop> <tabstop>closeable</tabstop>
@ -2326,6 +2340,15 @@
<tabstop>enable_disableglobalshortcuts</tabstop> <tabstop>enable_disableglobalshortcuts</tabstop>
<tabstop>rule_disableglobalshortcuts</tabstop> <tabstop>rule_disableglobalshortcuts</tabstop>
<tabstop>disableglobalshortcuts</tabstop> <tabstop>disableglobalshortcuts</tabstop>
<tabstop>enable_autogroupfg</tabstop>
<tabstop>enable_autogroupid</tabstop>
<tabstop>autogroupfg</tabstop>
<tabstop>autogroupid</tabstop>
<tabstop>rule_autogroupid</tabstop>
<tabstop>rule_autogroupfg</tabstop>
<tabstop>enable_acceptfocus</tabstop>
<tabstop>rule_acceptfocus</tabstop>
<tabstop>acceptfocus</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>
<connections> <connections>

View file

@ -170,7 +170,7 @@ X-KDE-Library=kwin4_effect_cooleffect
#define KWIN_EFFECT_API_MAKE_VERSION( major, minor ) (( major ) << 8 | ( minor )) #define KWIN_EFFECT_API_MAKE_VERSION( major, minor ) (( major ) << 8 | ( minor ))
#define KWIN_EFFECT_API_VERSION_MAJOR 0 #define KWIN_EFFECT_API_VERSION_MAJOR 0
#define KWIN_EFFECT_API_VERSION_MINOR 133 #define KWIN_EFFECT_API_VERSION_MINOR 134
#define KWIN_EFFECT_API_VERSION KWIN_EFFECT_API_MAKE_VERSION( \ #define KWIN_EFFECT_API_VERSION KWIN_EFFECT_API_MAKE_VERSION( \
KWIN_EFFECT_API_VERSION_MAJOR, KWIN_EFFECT_API_VERSION_MINOR ) KWIN_EFFECT_API_VERSION_MAJOR, KWIN_EFFECT_API_VERSION_MINOR )
@ -999,6 +999,12 @@ class KWIN_EXPORT EffectWindow
virtual EffectWindow* findModal() = 0; virtual EffectWindow* findModal() = 0;
virtual EffectWindowList mainWindows() const = 0; virtual EffectWindowList mainWindows() const = 0;
/**
* Returns whether the window should be excluded from window switching effects.
* @since 4.5
*/
virtual bool isSkipSwitcher() const = 0;
/** /**
* Returns the unmodified window quad list. Can also be used to force rebuilding. * Returns the unmodified window quad list. Can also be used to force rebuilding.
*/ */

View file

@ -407,6 +407,7 @@ bool Client::manage( Window w, bool isMapped )
setKeepBelow( session->keepBelow ); setKeepBelow( session->keepBelow );
setSkipTaskbar( session->skipTaskbar, true ); setSkipTaskbar( session->skipTaskbar, true );
setSkipPager( session->skipPager ); setSkipPager( session->skipPager );
setSkipSwitcher( session->skipSwitcher );
setShade( session->shaded ? ShadeNormal : ShadeNone ); setShade( session->shaded ? ShadeNormal : ShadeNone );
setOpacity( session->opacity ); setOpacity( session->opacity );
if( session->maximized != MaximizeRestore ) if( session->maximized != MaximizeRestore )
@ -469,6 +470,7 @@ bool Client::manage( Window w, bool isMapped )
setKeepBelow( rules()->checkKeepBelow( info->state() & NET::KeepBelow, !isMapped )); setKeepBelow( rules()->checkKeepBelow( info->state() & NET::KeepBelow, !isMapped ));
setSkipTaskbar( rules()->checkSkipTaskbar( info->state() & NET::SkipTaskbar, !isMapped ), true ); setSkipTaskbar( rules()->checkSkipTaskbar( info->state() & NET::SkipTaskbar, !isMapped ), true );
setSkipPager( rules()->checkSkipPager( info->state() & NET::SkipPager, !isMapped )); setSkipPager( rules()->checkSkipPager( info->state() & NET::SkipPager, !isMapped ));
setSkipSwitcher( rules()->checkSkipSwitcher( false, !isMapped ));
if( info->state() & NET::DemandsAttention ) if( info->state() & NET::DemandsAttention )
demandAttention(); demandAttention();
if( info->state() & NET::Modal ) if( info->state() & NET::Modal )

View file

@ -61,6 +61,7 @@ Rules::Rules()
, shaderule( UnusedSetRule ) , shaderule( UnusedSetRule )
, skiptaskbarrule( UnusedSetRule ) , skiptaskbarrule( UnusedSetRule )
, skippagerrule( UnusedSetRule ) , skippagerrule( UnusedSetRule )
, skipswitcherrule( UnusedSetRule )
, aboverule( UnusedSetRule ) , aboverule( UnusedSetRule )
, belowrule( UnusedSetRule ) , belowrule( UnusedSetRule )
, fullscreenrule( UnusedSetRule ) , fullscreenrule( UnusedSetRule )
@ -165,6 +166,7 @@ void Rules::readFromCfg( const KConfigGroup& cfg )
READ_SET_RULE( shade,, false); READ_SET_RULE( shade,, false);
READ_SET_RULE( skiptaskbar,, false); READ_SET_RULE( skiptaskbar,, false);
READ_SET_RULE( skippager,, false); READ_SET_RULE( skippager,, false);
READ_SET_RULE( skipswitcher,, false);
READ_SET_RULE( above,, false); READ_SET_RULE( above,, false);
READ_SET_RULE( below,, false); READ_SET_RULE( below,, false);
READ_SET_RULE( fullscreen,, false); READ_SET_RULE( fullscreen,, false);
@ -253,6 +255,7 @@ void Rules::write( KConfigGroup& cfg ) const
WRITE_SET_RULE( shade, ); WRITE_SET_RULE( shade, );
WRITE_SET_RULE( skiptaskbar, ); WRITE_SET_RULE( skiptaskbar, );
WRITE_SET_RULE( skippager, ); WRITE_SET_RULE( skippager, );
WRITE_SET_RULE( skipswitcher, );
WRITE_SET_RULE( above, ); WRITE_SET_RULE( above, );
WRITE_SET_RULE( below, ); WRITE_SET_RULE( below, );
WRITE_SET_RULE( fullscreen, ); WRITE_SET_RULE( fullscreen, );
@ -293,6 +296,7 @@ bool Rules::isEmpty() const
&& shaderule == UnusedSetRule && shaderule == UnusedSetRule
&& skiptaskbarrule == UnusedSetRule && skiptaskbarrule == UnusedSetRule
&& skippagerrule == UnusedSetRule && skippagerrule == UnusedSetRule
&& skipswitcherrule == UnusedSetRule
&& aboverule == UnusedSetRule && aboverule == UnusedSetRule
&& belowrule == UnusedSetRule && belowrule == UnusedSetRule
&& fullscreenrule == UnusedSetRule && fullscreenrule == UnusedSetRule
@ -494,6 +498,11 @@ bool Rules::update( Client* c )
updated = updated || skippager != c->skipPager(); updated = updated || skippager != c->skipPager();
skippager = c->skipPager(); skippager = c->skipPager();
} }
if( skipswitcherrule == ( SetRule )Remember)
{
updated = updated || skipswitcher != c->skipSwitcher();
skipswitcher = c->skipSwitcher();
}
if( aboverule == ( SetRule )Remember) if( aboverule == ( SetRule )Remember)
{ {
updated = updated || above != c->keepAbove(); updated = updated || above != c->keepAbove();
@ -621,6 +630,7 @@ bool Rules::applyShade( ShadeMode& sh, bool init ) const
APPLY_RULE( skiptaskbar, SkipTaskbar, bool ) APPLY_RULE( skiptaskbar, SkipTaskbar, bool )
APPLY_RULE( skippager, SkipPager, bool ) APPLY_RULE( skippager, SkipPager, bool )
APPLY_RULE( skipswitcher, SkipSwitcher, bool )
APPLY_RULE( above, KeepAbove, bool ) APPLY_RULE( above, KeepAbove, bool )
APPLY_RULE( below, KeepBelow, bool ) APPLY_RULE( below, KeepBelow, bool )
APPLY_RULE( fullscreen, FullScreen, bool ) APPLY_RULE( fullscreen, FullScreen, bool )
@ -687,6 +697,7 @@ void Rules::discardUsed( bool withdrawn )
DISCARD_USED_SET_RULE( shade ); DISCARD_USED_SET_RULE( shade );
DISCARD_USED_SET_RULE( skiptaskbar ); DISCARD_USED_SET_RULE( skiptaskbar );
DISCARD_USED_SET_RULE( skippager ); DISCARD_USED_SET_RULE( skippager );
DISCARD_USED_SET_RULE( skipswitcher );
DISCARD_USED_SET_RULE( above ); DISCARD_USED_SET_RULE( above );
DISCARD_USED_SET_RULE( below ); DISCARD_USED_SET_RULE( below );
DISCARD_USED_SET_RULE( fullscreen ); DISCARD_USED_SET_RULE( fullscreen );
@ -811,6 +822,7 @@ CHECK_RULE( Minimize, bool )
CHECK_RULE( Shade, ShadeMode ) CHECK_RULE( Shade, ShadeMode )
CHECK_RULE( SkipTaskbar, bool ) CHECK_RULE( SkipTaskbar, bool )
CHECK_RULE( SkipPager, bool ) CHECK_RULE( SkipPager, bool )
CHECK_RULE( SkipSwitcher, bool )
CHECK_RULE( KeepAbove, bool ) CHECK_RULE( KeepAbove, bool )
CHECK_RULE( KeepBelow, bool ) CHECK_RULE( KeepBelow, bool )
CHECK_RULE( FullScreen, bool ) CHECK_RULE( FullScreen, bool )
@ -863,6 +875,7 @@ void Client::applyWindowRules()
setShade( shadeMode()); setShade( shadeMode());
setSkipTaskbar( skipTaskbar(), true ); setSkipTaskbar( skipTaskbar(), true );
setSkipPager( skipPager()); setSkipPager( skipPager());
setSkipSwitcher( skipSwitcher());
setKeepAbove( keepAbove()); setKeepAbove( keepAbove());
setKeepBelow( keepBelow()); setKeepBelow( keepBelow());
setFullScreen( isFullScreen(), true ); setFullScreen( isFullScreen(), true );

View file

@ -70,6 +70,7 @@ class WindowRules
ShadeMode checkShade( ShadeMode shade, bool init = false ) const; ShadeMode checkShade( ShadeMode shade, bool init = false ) const;
bool checkSkipTaskbar( bool skip, bool init = false ) const; bool checkSkipTaskbar( bool skip, bool init = false ) const;
bool checkSkipPager( bool skip, bool init = false ) const; bool checkSkipPager( bool skip, bool init = false ) const;
bool checkSkipSwitcher( bool skip, bool init = false ) const;
bool checkKeepAbove( bool above, bool init = false ) const; bool checkKeepAbove( bool above, bool init = false ) const;
bool checkKeepBelow( bool below, bool init = false ) const; bool checkKeepBelow( bool below, bool init = false ) const;
bool checkFullScreen( bool fs, bool init = false ) const; bool checkFullScreen( bool fs, bool init = false ) const;
@ -126,6 +127,7 @@ class Rules
bool applyShade( ShadeMode& shade, bool init ) const; bool applyShade( ShadeMode& shade, bool init ) const;
bool applySkipTaskbar( bool& skip, bool init ) const; bool applySkipTaskbar( bool& skip, bool init ) const;
bool applySkipPager( bool& skip, bool init ) const; bool applySkipPager( bool& skip, bool init ) const;
bool applySkipSwitcher( bool& skip, bool init ) const;
bool applyKeepAbove( bool& above, bool init ) const; bool applyKeepAbove( bool& above, bool init ) const;
bool applyKeepBelow( bool& below, bool init ) const; bool applyKeepBelow( bool& below, bool init ) const;
bool applyFullScreen( bool& fs, bool init ) const; bool applyFullScreen( bool& fs, bool init ) const;
@ -236,6 +238,8 @@ class Rules
SetRule skiptaskbarrule; SetRule skiptaskbarrule;
bool skippager; bool skippager;
SetRule skippagerrule; SetRule skippagerrule;
bool skipswitcher;
SetRule skipswitcherrule;
bool above; bool above;
SetRule aboverule; SetRule aboverule;
bool below; bool below;

2
sm.cpp
View file

@ -133,6 +133,7 @@ void Workspace::storeSession( KConfig* config, SMSavePhase phase )
cg.writeEntry( QString("keepBelow")+n, c->keepBelow() ); cg.writeEntry( QString("keepBelow")+n, c->keepBelow() );
cg.writeEntry( QString("skipTaskbar")+n, c->skipTaskbar( true ) ); cg.writeEntry( QString("skipTaskbar")+n, c->skipTaskbar( true ) );
cg.writeEntry( QString("skipPager")+n, c->skipPager() ); cg.writeEntry( QString("skipPager")+n, c->skipPager() );
cg.writeEntry( QString("skipSwitcher")+n, c->skipSwitcher() );
// not really just set by user, but name kept for back. comp. reasons // not really just set by user, but name kept for back. comp. reasons
cg.writeEntry( QString("userNoBorder")+n, c->noBorder() ); cg.writeEntry( QString("userNoBorder")+n, c->noBorder() );
cg.writeEntry( QString("windowType")+n, windowTypeToTxt( c->windowType())); cg.writeEntry( QString("windowType")+n, windowTypeToTxt( c->windowType()));
@ -208,6 +209,7 @@ void Workspace::loadSessionInfo()
info->keepBelow = cg.readEntry( QString("keepBelow")+n, false ); info->keepBelow = cg.readEntry( QString("keepBelow")+n, false );
info->skipTaskbar = cg.readEntry( QString("skipTaskbar")+n, false ); info->skipTaskbar = cg.readEntry( QString("skipTaskbar")+n, false );
info->skipPager = cg.readEntry( QString("skipPager")+n, false ); info->skipPager = cg.readEntry( QString("skipPager")+n, false );
info->skipSwitcher = cg.readEntry( QString("skipSwitcher")+n, false );
info->noBorder = cg.readEntry( QString("userNoBorder")+n, false ); info->noBorder = cg.readEntry( QString("userNoBorder")+n, false );
info->windowType = txtToWindowType( cg.readEntry( QString("windowType")+n, QString() ).toLatin1()); info->windowType = txtToWindowType( cg.readEntry( QString("windowType")+n, QString() ).toLatin1());
info->shortcut = cg.readEntry( QString("shortcut")+n, QString() ); info->shortcut = cg.readEntry( QString("shortcut")+n, QString() );

1
sm.h
View file

@ -58,6 +58,7 @@ struct SessionInfo
bool keepBelow; bool keepBelow;
bool skipTaskbar; bool skipTaskbar;
bool skipPager; bool skipPager;
bool skipSwitcher;
bool noBorder; bool noBorder;
NET::WindowType windowType; NET::WindowType windowType;
QString shortcut; QString shortcut;

View file

@ -130,7 +130,7 @@ TabBoxClient* TabBoxHandlerImpl::clientToAddToList( TabBoxClient* client, int de
addClient = true; addClient = true;
else else
addClient = current->isOnDesktop( desktop ); addClient = current->isOnDesktop( desktop );
addClient = addClient && current->wantsTabFocus(); addClient = addClient && current->wantsTabFocus() && !current->skipSwitcher();
if ( addClient ) if ( addClient )
{ // don't add windows that have modal dialogs { // don't add windows that have modal dialogs
Client* modal = current->findModal(); Client* modal = current->findModal();