summaryrefslogtreecommitdiffstats
path: root/opensuse/tdebase/systray_order.diff
diff options
context:
space:
mode:
Diffstat (limited to 'opensuse/tdebase/systray_order.diff')
-rw-r--r--opensuse/tdebase/systray_order.diff162
1 files changed, 162 insertions, 0 deletions
diff --git a/opensuse/tdebase/systray_order.diff b/opensuse/tdebase/systray_order.diff
new file mode 100644
index 000000000..b864afc8e
--- /dev/null
+++ b/opensuse/tdebase/systray_order.diff
@@ -0,0 +1,162 @@
+Index: kicker/applets/systemtray/systemtrayapplet.cpp
+===================================================================
+--- kicker/applets/systemtray/systemtrayapplet.cpp.orig
++++ kicker/applets/systemtray/systemtrayapplet.cpp
+@@ -187,6 +187,7 @@ bool SystemTrayApplet::x11Event( XEvent
+ if( isWinManaged( (WId)e->xclient.data.l[2] ) ) // we already manage it
+ return true;
+ embedWindow( e->xclient.data.l[2], false );
++ updateVisibleWins();
+ layoutTray();
+ return true;
+ }
+@@ -213,13 +214,12 @@ void SystemTrayApplet::preferences()
+ connect(m_settingsDialog, SIGNAL(finished()), this, SLOT(settingsDialogFinished()));
+
+ m_iconSelector = new KActionSelector(m_settingsDialog);
+- m_iconSelector->setAvailableLabel(i18n("Visible icons:"));
+- m_iconSelector->setSelectedLabel(i18n("Hidden icons:"));
+- m_iconSelector->setShowUpDownButtons(false);
++ m_iconSelector->setAvailableLabel(i18n("Hidden icons:"));
++ m_iconSelector->setSelectedLabel(i18n("Visible icons:"));
+ m_settingsDialog->setMainWidget(m_iconSelector);
+
+- QListBox *shownListBox = m_iconSelector->availableListBox();
+- QListBox *hiddenListBox = m_iconSelector->selectedListBox();
++ QListBox *hiddenListBox = m_iconSelector->availableListBox();
++ QListBox *shownListBox = m_iconSelector->selectedListBox();
+
+ TrayEmbedList::const_iterator it = m_shownWins.begin();
+ TrayEmbedList::const_iterator itEnd = m_shownWins.end();
+@@ -261,26 +261,48 @@ void SystemTrayApplet::applySettings()
+ }
+
+ KConfig *conf = config();
+- conf->setGroup("HiddenTrayIcons");
+- QString name;
+
+- // use the following snippet of code someday to implement ordering
+- // of icons
+- /*
+- m_visibleIconList.clear();
+- QListBoxItem* item = m_iconSelector->availableListBox()->firstItem();
+- for (; item; item = item->next())
++ // Save the sort order and hidden status using the window class (WM_CLASS) rather
++ // than window name (caption) - window name is i18n-ed, so it's for example
++ // not possible to create default settings.
++ // For backwards compatibility, name is kept as it is, class is preceded by '!'.
++ QMap< QString, QString > windowNameToClass;
++ for( TrayEmbedList::ConstIterator it = m_shownWins.begin();
++ it != m_shownWins.end();
++ ++it ) {
++ KWin::WindowInfo info = KWin::windowInfo( (*it)->embeddedWinId(), NET::WMName, NET::WM2WindowClass);
++ windowNameToClass[ info.name() ] = '!' + info.windowClassClass();
++ }
++ for( TrayEmbedList::ConstIterator it = m_hiddenWins.begin();
++ it != m_hiddenWins.end();
++ ++it ) {
++ KWin::WindowInfo info = KWin::windowInfo( (*it)->embeddedWinId(), NET::WMName, NET::WM2WindowClass);
++ windowNameToClass[ info.name() ] = '!' + info.windowClassClass();
++ }
++
++ conf->setGroup("SortedTrayIcons");
++ m_sortOrderIconList.clear();
++ for(QListBoxItem* item = m_iconSelector->selectedListBox()->firstItem();
++ item;
++ item = item->next())
+ {
+- m_visibleIconList.append(item->text());
++ if( windowNameToClass.contains(item->text()))
++ m_sortOrderIconList.append(windowNameToClass[item->text()]);
++ else
++ m_sortOrderIconList.append(item->text());
+ }
+- conf->writeEntry("Visible", m_visibleIconList);
+- selection.clear();*/
++ conf->writeEntry("SortOrder", m_sortOrderIconList);
+
++ conf->setGroup("HiddenTrayIcons");
+ m_hiddenIconList.clear();
+- QListBoxItem* item = m_iconSelector->selectedListBox()->firstItem();
+- for (; item; item = item->next())
++ for(QListBoxItem* item = m_iconSelector->availableListBox()->firstItem();
++ item;
++ item = item->next())
+ {
+- m_hiddenIconList.append(item->text());
++ if( windowNameToClass.contains(item->text()))
++ m_hiddenIconList.append(windowNameToClass[item->text()]);
++ else
++ m_hiddenIconList.append(item->text());
+ }
+ conf->writeEntry("Hidden", m_hiddenIconList);
+ conf->sync();
+@@ -416,6 +438,9 @@ void SystemTrayApplet::loadSettings()
+ conf->setGroup("HiddenTrayIcons");
+ m_hiddenIconList = conf->readListEntry("Hidden");
+
++ conf->setGroup("SortedTrayIcons");
++ m_sortOrderIconList = conf->readListEntry("SortOrder");
++
+ //Note This setting comes from kdeglobal.
+ conf->setGroup("System Tray");
+ m_iconSize = conf->readNumEntry("systrayIconWidth", 22);
+@@ -505,7 +530,9 @@ bool SystemTrayApplet::isWinManaged(WId
+
+ bool SystemTrayApplet::shouldHide(WId w)
+ {
+- return m_hiddenIconList.find(KWin::windowInfo(w).name()) != m_hiddenIconList.end();
++ return m_hiddenIconList.find(KWin::windowInfo(w).name()) != m_hiddenIconList.end()
++ || m_hiddenIconList.find('!'+KWin::windowInfo(w,0,NET::WM2WindowClass).windowClassClass())
++ != m_hiddenIconList.end();
+ }
+
+ void SystemTrayApplet::updateVisibleWins()
+@@ -529,6 +556,35 @@ void SystemTrayApplet::updateVisibleWins
+ (*emb)->hide();
+ }
+ }
++
++ QMap< QXEmbed*, QString > names; // cache window names and classes
++ QMap< QXEmbed*, QString > classes;
++ for( TrayEmbedList::const_iterator it = m_shownWins.begin();
++ it != m_shownWins.end();
++ ++it ) {
++ KWin::WindowInfo info = KWin::windowInfo((*it)->embeddedWinId(),NET::WMName,NET::WM2WindowClass);
++ names[ *it ] = info.name();
++ classes[ *it ] = '!'+info.windowClassClass();
++ }
++ TrayEmbedList newList;
++ for( QStringList::const_iterator it1 = m_sortOrderIconList.begin();
++ it1 != m_sortOrderIconList.end();
++ ++it1 ) {
++ for( TrayEmbedList::iterator it2 = m_shownWins.begin();
++ it2 != m_shownWins.end();
++ ) {
++ if( (*it1).startsWith("!") ? classes[ *it2 ] == *it1 : names[ *it2 ] == *it1 ) {
++ newList.append( *it2 ); // don't bail out, there may be multiple ones
++ it2 = m_shownWins.erase( it2 );
++ } else
++ ++it2;
++ }
++ }
++ for( TrayEmbedList::const_iterator it = m_shownWins.begin();
++ it != m_shownWins.end();
++ ++it )
++ newList.append( *it ); // append unsorted items
++ m_shownWins = newList;
+ }
+
+ void SystemTrayApplet::toggleExpanded()
+Index: kicker/applets/systemtray/systemtrayapplet.h
+===================================================================
+--- kicker/applets/systemtray/systemtrayapplet.h.orig
++++ kicker/applets/systemtray/systemtrayapplet.h
+@@ -97,6 +97,7 @@ private:
+ TrayEmbedList m_shownWins;
+ TrayEmbedList m_hiddenWins;
+ QStringList m_hiddenIconList;
++ QStringList m_sortOrderIconList;
+ KWinModule *kwin_module;
+ Atom net_system_tray_selection;
+ Atom net_system_tray_opcode;