Darrell Anderson 12 years ago
commit 4d3d242043

@ -1,6 +1,6 @@
<!DOCTYPE UI><UI version="3.3" stdsetdef="1"> <!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>MenuTabBase</class> <class>MenuTabBase</class>
<widget class="TQWidget"> <widget class="TQWidget">
<property name="name"> <property name="name">
<cstring>MenuTabBase</cstring> <cstring>MenuTabBase</cstring>
</property> </property>
@ -32,7 +32,7 @@
<cstring>textLabel1</cstring> <cstring>textLabel1</cstring>
</property> </property>
<property name="text"> <property name="text">
<string>Start menu style:</string> <string>TDE menu style:</string>
</property> </property>
<property name="buddy" stdset="0"> <property name="buddy" stdset="0">
<cstring>comboMenuStyle</cstring> <cstring>comboMenuStyle</cstring>
@ -91,14 +91,6 @@
<property name="name"> <property name="name">
<cstring>unnamed</cstring> <cstring>unnamed</cstring>
</property> </property>
<widget class="TQCheckBox" row="0" column="0">
<property name="name">
<cstring>m_openOnHover</cstring>
</property>
<property name="text">
<string>Open menu on mouse hover</string>
</property>
</widget>
<widget class="TQButtonGroup"> <widget class="TQButtonGroup">
<property name="name"> <property name="name">
<cstring>kcfg_MenuEntryFormat</cstring> <cstring>kcfg_MenuEntryFormat</cstring>
@ -171,31 +163,26 @@
</widget> </widget>
</grid> </grid>
</widget> </widget>
<widget class="TQCheckBox"> <widget class="TQPushButton" colspan="4">
<property name="name"> <property name="name">
<cstring>kcfg_UseSidePixmap</cstring> <cstring>m_editKMenuButton</cstring>
</property> </property>
<property name="text"> <property name="text">
<string>Show side ima&amp;ge</string> <string>Edit &amp;TDE Menu</string>
</property>
<property name="checked">
<bool>true</bool>
</property> </property>
<property name="whatsThis" stdset="0"> <property name="whatsThis" stdset="0">
<string>&lt;qt&gt;When this option is selected an image will appear down the left-hand side of the TDE Menu. The image will be tinted according to your color settings. <string>Start the editor for the TDE Menu. Here you can add, edit, remove and hide applications.</string>
&lt;p&gt;&lt;b&gt;Tip&lt;/b&gt;: You can customize the image that appears in the TDE Menu by putting an image file called kside.png and a tileable image file called kside_tile.png in $TDEHOME/share/apps/kicker/pics.&lt;/qt&gt;</string>
</property> </property>
</widget> </widget>
<spacer> <spacer>
<property name="name"> <property name="name">
<cstring>spacer8</cstring> <cstring>Spacer10</cstring>
</property> </property>
<property name="orientation"> <property name="orientation">
<enum>Vertical</enum> <enum>Vertical</enum>
</property> </property>
<property name="sizeType"> <property name="sizeType">
<enum>MinimumExpanding</enum> <enum>Expanding</enum>
</property> </property>
<property name="sizeHint"> <property name="sizeHint">
<size> <size>
@ -204,12 +191,79 @@
</size> </size>
</property> </property>
</spacer> </spacer>
<widget class="TQCheckBox" row="0" column="0" colspan="2"> </vbox>
</widget>
<widget class="KListView">
<column>
<property name="text">
<string>Optional Menus</string>
</property>
<property name="clickable">
<bool>true</bool>
</property>
<property name="resizable">
<bool>true</bool>
</property>
</column>
<property name="name">
<cstring>m_subMenus</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>7</vsizetype>
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="fullWidth">
<bool>true</bool>
</property>
<property name="whatsThis" stdset="0">
<string>This is a list of the dynamic menus that can be displayed in the TDE menu in addition to the normal applications. Use the checkboxes to add or remove menus.</string>
</property>
</widget>
<widget class="TQLayoutWidget" row="2" column="0" colspan="2">
<property name="name">
<cstring>Layout5</cstring>
</property>
<vbox>
<widget class="TQCheckBox">
<property name="name">
<cstring>m_openOnHover</cstring>
</property>
<property name="text">
<string>Open menu on mouse hover</string>
</property>
</widget>
<widget class="TQCheckBox">
<property name="name">
<cstring>kcfg_UseSidePixmap</cstring>
</property>
<property name="text">
<string>Show side ima&amp;ge</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="whatsThis" stdset="0">
<string>&lt;qt&gt;When this option is selected an image will appear down the left-hand side of the TDE Menu. The image will be tinted according to your color settings.
&lt;p&gt;&lt;b&gt;Tip&lt;/b&gt;: You can customize the image that appears in the TDE Menu by putting an image file called kside.png and a tileable image file called kside_tile.png in $TDEHOME/share/apps/kicker/pics.&lt;/qt&gt;</string>
</property>
</widget>
<widget class="TQCheckBox">
<property name="name"> <property name="name">
<cstring>kcfg_ShowKMenuText</cstring> <cstring>kcfg_ShowKMenuText</cstring>
</property> </property>
<property name="text"> <property name="text">
<string>Display text in TDE Menu button</string> <string>Display text in menu button</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -246,10 +300,10 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="text">
<string>TDE Menu button icon:</string> <string>Menu button icon:</string>
</property> </property>
</widget> </widget>
<widget class="KPushButton" row="3" column="3" colspan="2"> <widget class="KPushButton" row="3" column="3" colspan="1">
<property name="name"> <property name="name">
<cstring>btnCustomKMenuIcon</cstring> <cstring>btnCustomKMenuIcon</cstring>
</property> </property>
@ -317,7 +371,7 @@
<cstring>kcfg_ButtonFont</cstring> <cstring>kcfg_ButtonFont</cstring>
</property> </property>
</widget> </widget>
<spacer row="3" column="3"> <spacer row="4" column="3">
<property name="name"> <property name="name">
<cstring>spacer6</cstring> <cstring>spacer6</cstring>
</property> </property>
@ -352,56 +406,8 @@
</size> </size>
</property> </property>
</spacer> </spacer>
<widget class="TQPushButton">
<property name="name">
<cstring>m_editKMenuButton</cstring>
</property>
<property name="text">
<string>Edit &amp;TDE Menu</string>
</property>
<property name="whatsThis" stdset="0">
<string>Start the editor for the TDE Menu. Here you can add, edit, remove and hide applications.</string>
</property>
</widget>
</vbox> </vbox>
</widget> </widget>
<widget class="KListView">
<column>
<property name="text">
<string>Optional Menus</string>
</property>
<property name="clickable">
<bool>true</bool>
</property>
<property name="resizable">
<bool>true</bool>
</property>
</column>
<property name="name">
<cstring>m_subMenus</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>7</vsizetype>
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="fullWidth">
<bool>true</bool>
</property>
<property name="whatsThis" stdset="0">
<string>This is a list of the dynamic menus that can be displayed in the TDE menu in addition to the normal applications. Use the checkboxes to add or remove menus.</string>
</property>
</widget>
</hbox> </hbox>
</widget> </widget>
<grid> <grid>
@ -709,10 +715,10 @@
</widget> </widget>
</grid> </grid>
</vbox> </vbox>
</widget> </widget>
<customwidgets> <customwidgets>
</customwidgets> </customwidgets>
<tabstops> <tabstops>
<tabstop>m_formatSimple</tabstop> <tabstop>m_formatSimple</tabstop>
<tabstop>m_formatNameDesc</tabstop> <tabstop>m_formatNameDesc</tabstop>
<tabstop>m_formDescName</tabstop> <tabstop>m_formDescName</tabstop>
@ -724,16 +730,16 @@
<tabstop>kcfg_RecentVsOften</tabstop> <tabstop>kcfg_RecentVsOften</tabstop>
<tabstop>m_showFrequent</tabstop> <tabstop>m_showFrequent</tabstop>
<tabstop>kcfg_NumVisibleEntries</tabstop> <tabstop>kcfg_NumVisibleEntries</tabstop>
</tabstops> </tabstops>
<includes> <includes>
<include location="global" impldecl="in implementation">klistview.h</include> <include location="global" impldecl="in implementation">klistview.h</include>
<include location="global" impldecl="in implementation">knuminput.h</include> <include location="global" impldecl="in implementation">knuminput.h</include>
<include location="local" impldecl="in implementation">kdialog.h</include> <include location="local" impldecl="in implementation">kdialog.h</include>
</includes> </includes>
<layoutdefaults spacing="6" margin="11"/> <layoutdefaults spacing="6" margin="11"/>
<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/> <layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
<includehints> <includehints>
<includehint>klistview.h</includehint> <includehint>klistview.h</includehint>
<includehint>knuminput.h</includehint> <includehint>knuminput.h</includehint>
</includehints> </includehints>
</UI> </UI>

@ -118,6 +118,25 @@ TQStringList TaskbarConfig::i18nGroupModeList()
return i18nList; return i18nList;
} }
// These are the strings that are actually stored in the config file.
const TQStringList& TaskbarConfig::showTaskStatesList()
{
static TQStringList list(
TQStringList() << I18N_NOOP("Any") << I18N_NOOP("Only Stopped")
<< I18N_NOOP("Only Running"));
return list;
}
// Get a translated version of the above string list.
TQStringList TaskbarConfig::i18nShowTaskStatesList()
{
TQStringList i18nList;
for( TQStringList::ConstIterator it = showTaskStatesList().begin(); it != showTaskStatesList().end(); ++it ) {
i18nList << i18n((*it).latin1());
}
return i18nList;
}
TaskbarConfig::TaskbarConfig(TQWidget *parent, const char* name, const TQStringList&) TaskbarConfig::TaskbarConfig(TQWidget *parent, const char* name, const TQStringList&)
: KCModule(TaskBarFactory::instance(), parent, name) : KCModule(TaskBarFactory::instance(), parent, name)
{ {
@ -151,6 +170,7 @@ TaskbarConfig::TaskbarConfig(TQWidget *parent, const char* name, const TQStringL
m_widget->kcfg_MiddleButtonAction->insertStringList(list); m_widget->kcfg_MiddleButtonAction->insertStringList(list);
m_widget->kcfg_RightButtonAction->insertStringList(list); m_widget->kcfg_RightButtonAction->insertStringList(list);
m_widget->kcfg_GroupTasks->insertStringList(i18nGroupModeList()); m_widget->kcfg_GroupTasks->insertStringList(i18nGroupModeList());
m_widget->kcfg_ShowTaskStates->insertStringList(i18nShowTaskStatesList());
connect(m_widget->kcfg_GroupTasks, TQT_SIGNAL(activated(int)), connect(m_widget->kcfg_GroupTasks, TQT_SIGNAL(activated(int)),
this, TQT_SLOT(slotUpdateComboBox())); this, TQT_SLOT(slotUpdateComboBox()));

@ -73,6 +73,8 @@ private:
static TQStringList i18nActionList(); static TQStringList i18nActionList();
static const TQStringList& groupModeList(); static const TQStringList& groupModeList();
static TQStringList i18nGroupModeList(); static TQStringList i18nGroupModeList();
static const TQStringList& showTaskStatesList();
static TQStringList i18nShowTaskStatesList();
TaskbarConfigUI *m_widget; TaskbarConfigUI *m_widget;
}; };

@ -107,13 +107,40 @@ By default the taskbar groups windows when it is full.</string>
</widget> </widget>
<widget class="TQLabel" row="7" column="0" rowspan="1" colspan="2"> <widget class="TQLabel" row="7" column="0" rowspan="1" colspan="2">
<property name="name"> <property name="name">
<cstring>groupTasksLabel</cstring> <cstring>showTaskStatesLabel</cstring>
</property> </property>
<property name="text"> <property name="text">
<string>&amp;Group similar tasks:</string> <string>&amp;Group similar tasks:</string>
</property> </property>
<property name="buddy" stdset="0"> <property name="buddy" stdset="0">
<cstring>kcfg_GroupTasks</cstring> <cstring>kcfg_ShowTaskStates</cstring>
</property>
</widget>
<widget class="TQComboBox" row="8" column="2">
<property name="name">
<cstring>kcfg_ShowTaskStates</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="whatsThis" stdset="0">
<string>The taskbar can show and/or hide tasks based on their current process state. Select &lt;em&gt;Any&lt;/em&gt; to show all tasks regardless of current state.</string>
</property>
</widget>
<widget class="TQLabel" row="8" column="0" rowspan="1" colspan="2">
<property name="name">
<cstring>groupTasksLabel</cstring>
</property>
<property name="text">
<string>&amp;Show tasks with state:</string>
</property>
<property name="buddy" stdset="0">
<cstring>kcfg_ShowTaskStates</cstring>
</property> </property>
</widget> </widget>
<widget class="TQCheckBox" row="4" column="0" rowspan="1" colspan="3"> <widget class="TQCheckBox" row="4" column="0" rowspan="1" colspan="3">
@ -161,12 +188,12 @@ By default this option is selected.</string>
By default, this option is selected and all windows are shown.</string> By default, this option is selected and all windows are shown.</string>
</property> </property>
</widget> </widget>
<widget class="TQComboBox" row="8" column="2"> <widget class="TQComboBox" row="9" column="2">
<property name="name"> <property name="name">
<cstring>appearance</cstring> <cstring>appearance</cstring>
</property> </property>
</widget> </widget>
<widget class="TQLabel" row="8" column="0" rowspan="1" colspan="2"> <widget class="TQLabel" row="9" column="0" rowspan="1" colspan="2">
<property name="name"> <property name="name">
<cstring>textLabel1</cstring> <cstring>textLabel1</cstring>
</property> </property>
@ -177,7 +204,7 @@ By default, this option is selected and all windows are shown.</string>
<cstring>appearance</cstring> <cstring>appearance</cstring>
</property> </property>
</widget> </widget>
<widget class="TQCheckBox" row="9" column="0" rowspan="1" colspan="2"> <widget class="TQCheckBox" row="10" column="0" rowspan="1" colspan="2">
<property name="name"> <property name="name">
<cstring>kcfg_UseCustomColors</cstring> <cstring>kcfg_UseCustomColors</cstring>
</property> </property>
@ -191,7 +218,7 @@ By default, this option is selected and all windows are shown.</string>
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
<widget class="TQLayoutWidget" row="10" column="0" rowspan="1" colspan="3"> <widget class="TQLayoutWidget" row="11" column="0" rowspan="1" colspan="3">
<property name="name"> <property name="name">
<cstring>layout9</cstring> <cstring>layout9</cstring>
</property> </property>
@ -199,23 +226,17 @@ By default, this option is selected and all windows are shown.</string>
<property name="name"> <property name="name">
<cstring>unnamed</cstring> <cstring>unnamed</cstring>
</property> </property>
<spacer row="1" column="2"> <widget class="TQLabel" row="0" column="0">
<property name="name"> <property name="name">
<cstring>spacer11_2</cstring> <cstring>inactiveTaskTextColorLabel</cstring>
</property>
<property name="orientation">
<enum>Horizontal</enum>
</property> </property>
<property name="sizeType"> <property name="text">
<enum>Expanding</enum> <string>Inacti&amp;ve task text color:</string>
</property> </property>
<property name="sizeHint"> <property name="buddy" stdset="0">
<size> <cstring>kcfg_InactiveTaskTextColor</cstring>
<width>191</width>
<height>20</height>
</size>
</property> </property>
</spacer> </widget>
<widget class="KColorButton" row="0" column="1"> <widget class="KColorButton" row="0" column="1">
<property name="name"> <property name="name">
<cstring>kcfg_InactiveTaskTextColor</cstring> <cstring>kcfg_InactiveTaskTextColor</cstring>
@ -241,26 +262,18 @@ By default, this option is selected and all windows are shown.</string>
</size> </size>
</property> </property>
</spacer> </spacer>
<widget class="KColorButton" row="2" column="1"> <widget class="TQLabel" row="0" column="3">
<property name="name"> <property name="name">
<cstring>kcfg_TaskBackgroundColor</cstring> <cstring>activeTaskTextColorLabel</cstring>
</property>
<property name="text">
<string></string>
</property>
</widget>
<widget class="TQLabel" row="2" column="0">
<property name="name">
<cstring>taskBackgroundColorLabel</cstring>
</property> </property>
<property name="text"> <property name="text">
<string>&amp;Background color:</string> <string>Active task te&amp;xt color:</string>
</property> </property>
<property name="buddy" stdset="0"> <property name="buddy" stdset="0">
<cstring>kcfg_TaskBackgroundColor</cstring> <cstring>kcfg_ActiveTaskTextColor</cstring>
</property> </property>
</widget> </widget>
<widget class="KColorButton" row="1" column="1"> <widget class="KColorButton" row="0" column="4">
<property name="name"> <property name="name">
<cstring>kcfg_ActiveTaskTextColor</cstring> <cstring>kcfg_ActiveTaskTextColor</cstring>
</property> </property>
@ -268,29 +281,43 @@ By default, this option is selected and all windows are shown.</string>
<string></string> <string></string>
</property> </property>
</widget> </widget>
<widget class="TQLabel" row="0" column="0"> <spacer row="0" column="5">
<property name="name"> <property name="name">
<cstring>inactiveTaskTextColorLabel</cstring> <cstring>spacer11_2</cstring>
</property>
<property name="orientation">
<enum>Horizontal</enum>
</property>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property name="sizeHint">
<size>
<width>191</width>
<height>20</height>
</size>
</property>
</spacer>
<widget class="TQLabel" row="0" column="6">
<property name="name">
<cstring>taskBackgroundColorLabel</cstring>
</property> </property>
<property name="text"> <property name="text">
<string>Inacti&amp;ve task text color:</string> <string>&amp;Background color:</string>
</property> </property>
<property name="buddy" stdset="0"> <property name="buddy" stdset="0">
<cstring>kcfg_InactiveTaskTextColor</cstring> <cstring>kcfg_TaskBackgroundColor</cstring>
</property> </property>
</widget> </widget>
<widget class="TQLabel" row="1" column="0"> <widget class="KColorButton" row="0" column="7">
<property name="name"> <property name="name">
<cstring>activeTaskTextColorLabel</cstring> <cstring>kcfg_TaskBackgroundColor</cstring>
</property> </property>
<property name="text"> <property name="text">
<string>Active task te&amp;xt color:</string> <string></string>
</property>
<property name="buddy" stdset="0">
<cstring>kcfg_ActiveTaskTextColor</cstring>
</property> </property>
</widget> </widget>
<spacer row="2" column="2"> <spacer row="0" column="8">
<property name="name"> <property name="name">
<cstring>spacer12</cstring> <cstring>spacer12</cstring>
</property> </property>
@ -471,6 +498,7 @@ By default, this option is selected and all windows are shown.</string>
<tabstop>kcfg_ShowIcon</tabstop> <tabstop>kcfg_ShowIcon</tabstop>
<tabstop>kcfg_ShowWindowListBtn</tabstop> <tabstop>kcfg_ShowWindowListBtn</tabstop>
<tabstop>kcfg_GroupTasks</tabstop> <tabstop>kcfg_GroupTasks</tabstop>
<tabstop>kcfg_ShowTaskStates</tabstop>
<tabstop>appearance</tabstop> <tabstop>appearance</tabstop>
<tabstop>kcfg_UseCustomColors</tabstop> <tabstop>kcfg_UseCustomColors</tabstop>
<tabstop>kcfg_InactiveTaskTextColor</tabstop> <tabstop>kcfg_InactiveTaskTextColor</tabstop>

@ -53,12 +53,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
TaskBar::TaskBar( TQWidget *parent, const char *name ) TaskBar::TaskBar( TQWidget *parent, const char *name )
: Panner( parent, name ), : Panner( parent, name ),
m_showAllWindows(false), m_showAllWindows(false),
m_cycleWheel(false),
m_currentScreen(-1), m_currentScreen(-1),
m_showOnlyCurrentScreen(false), m_showOnlyCurrentScreen(false),
m_sortByDesktop(false), m_sortByDesktop(false),
m_cycleWheel(false),
m_showIcon(false), m_showIcon(false),
m_showOnlyIconified(false), m_showOnlyIconified(false),
m_showTaskStates(0),
m_textShadowEngine(0), m_textShadowEngine(0),
m_ignoreUpdates(false), m_ignoreUpdates(false),
m_relayoutTimer(0, "TaskBar::m_relayoutTimer") m_relayoutTimer(0, "TaskBar::m_relayoutTimer")
@ -237,12 +238,14 @@ void TaskBar::configure()
bool wasCycleWheel = m_cycleWheel; bool wasCycleWheel = m_cycleWheel;
bool wasShowIcon = m_showIcon; bool wasShowIcon = m_showIcon;
bool wasShowOnlyIconified = m_showOnlyIconified; bool wasShowOnlyIconified = m_showOnlyIconified;
int wasShowTaskStates = m_showTaskStates;
m_showAllWindows = TaskBarSettings::showAllWindows(); m_showAllWindows = TaskBarSettings::showAllWindows();
m_sortByDesktop = m_showAllWindows && TaskBarSettings::sortByDesktop(); m_sortByDesktop = m_showAllWindows && TaskBarSettings::sortByDesktop();
m_showIcon = TaskBarSettings::showIcon(); m_showIcon = TaskBarSettings::showIcon();
m_showOnlyIconified = TaskBarSettings::showOnlyIconified(); m_showOnlyIconified = TaskBarSettings::showOnlyIconified();
m_cycleWheel = TaskBarSettings::cycleWheel(); m_cycleWheel = TaskBarSettings::cycleWheel();
m_showTaskStates = TaskBarSettings::showTaskStates();
m_currentScreen = -1; // Show all screens or re-get our screen m_currentScreen = -1; // Show all screens or re-get our screen
m_showOnlyCurrentScreen = (TaskBarSettings::showCurrentScreenOnly() && m_showOnlyCurrentScreen = (TaskBarSettings::showCurrentScreenOnly() &&
@ -266,7 +269,8 @@ void TaskBar::configure()
wasSortByDesktop != m_sortByDesktop || wasSortByDesktop != m_sortByDesktop ||
wasShowIcon != m_showIcon || wasShowIcon != m_showIcon ||
wasCycleWheel != m_cycleWheel || wasCycleWheel != m_cycleWheel ||
wasShowOnlyIconified != m_showOnlyIconified) wasShowOnlyIconified != m_showOnlyIconified ||
wasShowTaskStates != m_showTaskStates)
{ {
// relevant settings changed, update our task containers // relevant settings changed, update our task containers
for (TaskContainer::Iterator it = containers.begin(); for (TaskContainer::Iterator it = containers.begin();
@ -597,7 +601,8 @@ void TaskBar::windowChanged(Task::Ptr task)
if (!container || if (!container ||
(!m_showAllWindows && (!m_showAllWindows &&
!container->onCurrentDesktop() && !container->onCurrentDesktop() &&
!container->isVisibleTo(this))) !container->isVisibleTo(this)) ||
container->isHidden())
{ {
return; return;
} }
@ -926,10 +931,13 @@ int TaskBar::containerCount() const
{ {
if ((m_showAllWindows || (*it)->onCurrentDesktop()) && if ((m_showAllWindows || (*it)->onCurrentDesktop()) &&
((showScreen() == -1) || ((*it)->isOnScreen()))) ((showScreen() == -1) || ((*it)->isOnScreen())))
{
if (!(*it)->isHidden())
{ {
i++; i++;
} }
} }
}
return i; return i;
} }
@ -944,10 +952,13 @@ int TaskBar::taskCount() const
{ {
if ((m_showAllWindows || (*it)->onCurrentDesktop()) && if ((m_showAllWindows || (*it)->onCurrentDesktop()) &&
((showScreen() == -1) || ((*it)->isOnScreen()))) ((showScreen() == -1) || ((*it)->isOnScreen())))
{
if (!(*it)->isHidden())
{ {
i += (*it)->filteredTaskCount(); i += (*it)->filteredTaskCount();
} }
} }
}
return i; return i;
} }
@ -1048,7 +1059,8 @@ TaskContainer::List TaskBar::filteredContainers()
TaskContainer* c = *it; TaskContainer* c = *it;
if ((m_showAllWindows || c->onCurrentDesktop()) && if ((m_showAllWindows || c->onCurrentDesktop()) &&
(!m_showOnlyIconified || c->isIconified()) && (!m_showOnlyIconified || c->isIconified()) &&
((showScreen() == -1) || c->isOnScreen())) ((showScreen() == -1) || c->isOnScreen()) &&
(!c->isHidden()))
{ {
list.append(c); list.append(c);
c->show(); c->show();

@ -117,6 +117,7 @@ private:
bool m_sortByDesktop; bool m_sortByDesktop;
bool m_showIcon; bool m_showIcon;
bool m_showOnlyIconified; bool m_showOnlyIconified;
int m_showTaskStates;
ArrowType arrowType; ArrowType arrowType;
TaskContainer::List containers; TaskContainer::List containers;
TaskContainer::List m_hiddenContainers; TaskContainer::List m_hiddenContainers;
@ -128,8 +129,8 @@ private:
void reGroup(); void reGroup();
KGlobalAccel* keys; KGlobalAccel* keys;
KTextShadowEngine* m_textShadowEngine; KTextShadowEngine* m_textShadowEngine;
TQTimer m_relayoutTimer;
bool m_ignoreUpdates; bool m_ignoreUpdates;
TQTimer m_relayoutTimer;
TQImage m_blendGradient; TQImage m_blendGradient;
}; };

@ -37,6 +37,22 @@
<label>Group similar tasks:</label> <label>Group similar tasks:</label>
<whatsthis>The taskbar can group similar windows into single buttons. When one of these window group buttons are clicked on a menu appears showing all the windows in that group. This can be especially useful with the <em>Show all windows</em> option.\n\nYou can set the taskbar to <strong>Never</strong> group windows, to <strong>Always</strong> group windows or to group windows only <strong>When the Taskbar is Full</strong>.\n\nBy default the taskbar groups windows when it is full.</whatsthis> <whatsthis>The taskbar can group similar windows into single buttons. When one of these window group buttons are clicked on a menu appears showing all the windows in that group. This can be especially useful with the <em>Show all windows</em> option.\n\nYou can set the taskbar to <strong>Never</strong> group windows, to <strong>Always</strong> group windows or to group windows only <strong>When the Taskbar is Full</strong>.\n\nBy default the taskbar groups windows when it is full.</whatsthis>
</entry> </entry>
<entry key="ShowTaskStates" type="Enum" >
<choices>
<choice name="ShowAll">
<label>Any</label>
</choice>
<choice name="ShowStopped">
<label>Only Stopped</label>
</choice>
<choice name="ShowRunning">
<label>Only Running</label>
</choice>
</choices>
<default>ShowAll</default>
<label>Show tasks with state:</label>
<whatsthis>The taskbar can show and/or hide tasks based on their current process state. Select <em>Any</em> to show all tasks regardless of current state.</whatsthis>
</entry>
<entry key="SortByDesktop" type="Bool" > <entry key="SortByDesktop" type="Bool" >
<default>true</default> <default>true</default>
<label>Sort windows by desktop</label> <label>Sort windows by desktop</label>

@ -34,6 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <tqstyle.h> #include <tqstyle.h>
#include <tqstylesheet.h> #include <tqstylesheet.h>
#include <tqtooltip.h> #include <tqtooltip.h>
#include <tqfile.h>
#include <kapplication.h> #include <kapplication.h>
#include <kdebug.h> #include <kdebug.h>
@ -43,6 +44,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <kiconloader.h> #include <kiconloader.h>
#include <kimageeffect.h> #include <kimageeffect.h>
#ifdef Q_WS_X11
#include <X11/Xlib.h>
#include <netwm.h>
#include <fixx11h.h>
#endif
#include "global.h" #include "global.h"
#include "kickerSettings.h" #include "kickerSettings.h"
#include "paneldrag.h" #include "paneldrag.h"
@ -54,6 +61,57 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "taskcontainer.h" #include "taskcontainer.h"
#include "taskcontainer.moc" #include "taskcontainer.moc"
static Bool netwm_atoms_created = False;
static Atom net_wm_pid = 0;
static const int netAtomCount = 1;
static void create_atoms(Display *d) {
static const char * const names[netAtomCount] =
{
"_NET_WM_PID"
};
Atom atoms[netAtomCount], *atomsp[netAtomCount] =
{
&net_wm_pid
};
assert( !netwm_atoms_created );
int i = netAtomCount;
while (i--)
atoms[i] = 0;
XInternAtoms(d, (char **) names, netAtomCount, False, atoms);
i = netAtomCount;
while (i--)
*atomsp[i] = atoms[i];
netwm_atoms_created = True;
}
bool is_process_resumable(pid_t pid) {
TQFile procStatFile(TQString("/proc/%1/stat").arg(pid));
if (procStatFile.open(IO_ReadOnly)) {
TQByteArray statRaw = procStatFile.readAll();
procStatFile.close();
TQString statString(statRaw);
TQStringList statFields = TQStringList::split(" ", statString, TRUE);
TQString tcomm = statFields[1];
TQString state = statFields[2];
if( state == "T" ) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
TaskContainer::TaskContainer(Task::Ptr task, TaskBar* bar, TaskContainer::TaskContainer(Task::Ptr task, TaskBar* bar,
TQWidget *parent, const char *name) TQWidget *parent, const char *name)
: TQToolButton(parent, name), : TQToolButton(parent, name),
@ -117,6 +175,8 @@ TaskContainer::TaskContainer(Startup::Ptr startup, PixmapList& startupFrames,
void TaskContainer::init() void TaskContainer::init()
{ {
if (!netwm_atoms_created) create_atoms(TQPaintDevice::x11AppDisplay());
setWFlags(TQt::WNoAutoErase); setWFlags(TQt::WNoAutoErase);
setBackgroundMode(NoBackground); setBackgroundMode(NoBackground);
animBg = TQPixmap(16, 16); animBg = TQPixmap(16, 16);
@ -432,6 +492,11 @@ bool TaskContainer::isEmpty()
return (tasks.isEmpty() && !m_startup); return (tasks.isEmpty() && !m_startup);
} }
bool TaskContainer::isHidden()
{
return ((m_filteredTasks.count() < 1) && !m_startup);
}
TQString TaskContainer::id() TQString TaskContainer::id()
{ {
return sid; return sid;
@ -1477,8 +1542,59 @@ void TaskContainer::updateFilteredTaskList()
if ((taskBar->showAllWindows() || t->isOnCurrentDesktop()) && if ((taskBar->showAllWindows() || t->isOnCurrentDesktop()) &&
(!TaskBarSettings::showOnlyIconified() || t->isIconified())) (!TaskBarSettings::showOnlyIconified() || t->isIconified()))
{ {
pid_t pid = 0;
#ifdef Q_WS_X11
Atom type_ret;
int format_ret;
unsigned long nitems_ret = 0, unused = 0;
unsigned char *data_ret = 0;
if (XGetWindowProperty(TQPaintDevice::x11AppDisplay(), t->window(), net_wm_pid, 0l, 1l,
False, XA_CARDINAL, &type_ret, &format_ret,
&nitems_ret, &unused, &data_ret) == Success) {
if (type_ret == XA_CARDINAL && format_ret == 32 && nitems_ret == 1) {
pid = *((long *) data_ret);
}
if ( data_ret )
XFree(data_ret);
}
#endif
if (pid < 0) {
m_filteredTasks.append(t); m_filteredTasks.append(t);
} }
else if (TaskBarSettings::showTaskStates() != TaskBarSettings::ShowAll) {
if (is_process_resumable(pid)) {
if (TaskBarSettings::showTaskStates() == TaskBarSettings::ShowAll) {
m_filteredTasks.append(t);
}
else if (TaskBarSettings::showTaskStates() == TaskBarSettings::ShowStopped) {
m_filteredTasks.append(t);
}
else if (TaskBarSettings::showTaskStates() == TaskBarSettings::ShowRunning) {
t->publishIconGeometry( TQRect());
}
else {
m_filteredTasks.append(t);
}
}
else {
if (TaskBarSettings::showTaskStates() == TaskBarSettings::ShowAll) {
m_filteredTasks.append(t);
}
else if (TaskBarSettings::showTaskStates() == TaskBarSettings::ShowStopped) {
t->publishIconGeometry( TQRect());
}
else if (TaskBarSettings::showTaskStates() == TaskBarSettings::ShowRunning) {
m_filteredTasks.append(t);
}
else {
m_filteredTasks.append(t);
}
}
}
else {
m_filteredTasks.append(t);
}
}
else else
{ {
t->publishIconGeometry( TQRect()); t->publishIconGeometry( TQRect());

@ -65,6 +65,7 @@ public:
bool onCurrentDesktop(); bool onCurrentDesktop();
bool isIconified(); bool isIconified();
bool isOnScreen(); bool isOnScreen();
bool isHidden();
TQString id(); TQString id();
int desktop(); int desktop();

@ -15,6 +15,7 @@ class KWinInterface : virtual public DCOPObject
virtual ASYNC killWindowId(unsigned long winId) = 0; virtual ASYNC killWindowId(unsigned long winId) = 0;
virtual ASYNC suspendWindowId(unsigned long winId) = 0; virtual ASYNC suspendWindowId(unsigned long winId) = 0;
virtual ASYNC resumeWindowId(unsigned long winId) = 0; virtual ASYNC resumeWindowId(unsigned long winId) = 0;
virtual bool isResumeableWindowID(unsigned long winId) = 0;
virtual void refresh() = 0; virtual void refresh() = 0;
virtual void doNotManage(TQString)= 0; virtual void doNotManage(TQString)= 0;
virtual void showWindowMenuAt(unsigned long winId, int x, int y)= 0; virtual void showWindowMenuAt(unsigned long winId, int x, int y)= 0;

@ -664,6 +664,9 @@ void Client::minimize( bool avoid_animation )
if ( !isMinimizable() || isMinimized()) if ( !isMinimizable() || isMinimized())
return; return;
if (isShade()) // NETWM restriction - KWindowInfo::isMinimized() == Hidden && !Shaded
info->setState(0, NET::Shaded);
Notify::raise( Notify::Minimize ); Notify::raise( Notify::Minimize );
// SELI mainClients().isEmpty() ??? - and in unminimize() too // SELI mainClients().isEmpty() ??? - and in unminimize() too
@ -687,6 +690,9 @@ void Client::unminimize( bool avoid_animation )
if( !isMinimized()) if( !isMinimized())
return; return;
if (isShade()) // NETWM restriction - KWindowInfo::isMinimized() == Hidden && !Shaded
info->setState(NET::Shaded, NET::Shaded);
Notify::raise( Notify::UnMinimize ); Notify::raise( Notify::UnMinimize );
minimized = false; minimized = false;
if( isOnCurrentDesktop() && isShown( true )) if( isOnCurrentDesktop() && isShown( true ))
@ -947,7 +953,7 @@ void Client::setShade( ShadeMode mode )
workspace()->requestFocus( this ); workspace()->requestFocus( this );
} }
checkMaximizeGeometry(); checkMaximizeGeometry();
info->setState( isShade() ? NET::Shaded : 0, NET::Shaded ); info->setState( (isShade() && !isMinimized()) ? NET::Shaded : 0, NET::Shaded );
info->setState( isShown( false ) ? 0 : NET::Hidden, NET::Hidden ); info->setState( isShown( false ) ? 0 : NET::Hidden, NET::Hidden );
updateVisibility(); updateVisibility();
updateAllowedActions(); updateAllowedActions();

@ -1974,6 +1974,37 @@ void Workspace::resumeWindowId( Window window_to_resume )
} }
bool Workspace::isResumeableWindowID( Window window_to_check )
{
if( window_to_check == None )
return false;
Window window = window_to_check;
Client* client = NULL;
for(;;)
{
client = findClient( FrameIdMatchPredicate( window ));
if( client != NULL ) // found the client
break;
Window parent = NULL;
Window root = NULL;
Window* children = NULL;
unsigned int children_count;
XQueryTree( tqt_xdisplay(), window, &root, &parent, &children, &children_count );
if( children != NULL )
XFree( children );
if( window == root ) // we didn't find the client, probably an override-redirect window
break;
window = parent; // go up
if( window == NULL )
break;
}
if( client != NULL )
return client->isResumeable();
else
return false;
}
void Workspace::sendPingToWindow( Window window, Time timestamp ) void Workspace::sendPingToWindow( Window window, Time timestamp )
{ {
rootInfo->sendPing( window, timestamp ); rootInfo->sendPing( window, timestamp );

@ -96,9 +96,10 @@ class Workspace : public TQObject, public KWinInterface, public KDecorationDefin
/** /**
* @internal * @internal
*/ */
void killWindowId( Window window); void killWindowId( Window window );
void suspendWindowId( Window window); void suspendWindowId( Window window );
void resumeWindowId( Window window); void resumeWindowId( Window window );
bool isResumeableWindowID( Window window );
void killWindow() { slotKillWindow(); } void killWindow() { slotKillWindow(); }
void suspendWindow() { slotSuspendWindow(); } void suspendWindow() { slotSuspendWindow(); }

Loading…
Cancel
Save