File 1_1_BRANCH.diff of Package konversation

--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,23 @@
+Changes since 1.1:
+* Enabled the (experimental, hackish) Amarok 2 support in the 'media' script.
+* Fixed a bug that could cause channel notifications to be lost across recon-
+  nects.
+* Removed the code to recreate hidden-to-tray state across application re-
+  starts. It was broken after the shutdown procedures were moved to a point
+  in time after after the main window is hidden to cover quit-by-DCOP, and
+  Konversation 1.1 features an explicit hidden startup option that fulfills
+  user demands more accurately anyhow. This fixes a bug that made Konversa-
+  tion always hide to tray on startup regardless of the aforementioned op-
+  tion when the system tray icon was enabled.
+* Added a network settings lookup fallback to retrieving the key of a channel.
+  Previously, this relied solely on the channel's mode map. Closes the brief
+  gap between a channel join and the server's reply to MODE where possible,
+  so that e.g. reconnecting directly after auto-joining a channel with a key
+  doesn't result in a failed rejoin due to not having the key by way of the
+  MODE reply yet.
+* Fixed opening URLs from the channel topic context menu in Channel List tabs.
+
+
 Changes from 1.0.1 to 1.1:
 We are extremely pleased to announce Konversation's newest major release, v1.1.
 Konversation 1.1 is a special release for us in multiple ways: It's our farewell
--- konversation/scripts/media
+++ konversation/scripts/media
@@ -44,7 +44,7 @@
 ## If you add a new player, you must add it here or it won't get checked when in audio-only or video-only modes.
 playerRankings= {
     'video' :['kaffeine','kmplayer', 'kplayer', 'noatun', 'kdetv'],
-    'audio' :['amarok', 'MPD' 'juk', 'noatun', 'kscd', 'kaffeine', 'kmplayer', 'Audacious', 'xmms', 'yammi']
+    'audio' :['amarok', 'juk', 'noatun', 'kscd', 'kaffeine', 'kmplayer', 'amarok2', 'yammi', 'Audacious', 'xmms', 'MPD']
 }
 
 ## Title, album and artist fields to be quoted depending on contents
@@ -244,36 +244,36 @@
                 return ''
         return data
 
-#class Amarok2Player(Player):
-#    def __init__(self):
-#        Player.__init__(self, 'Amarok2', 'audio')
-#        self.isRunning()
-#
-#    def getData(self):
-#        playing=os.popen("qdbus org.mpris.amarok /Player PositionGet").readline().strip() != "0"
-#        if playing and self.isRunning():
-#            for line in os.popen("qdbus org.mpris.amarok /Player GetMetadata").readlines():
-#                if re.match("^title", line):
-#                    title=self.reEncodeString(line.strip().split(None,1)[1])
-#                if re.match("^artist", line):
-#                    artist=self.reEncodeString(line.strip().split(None,1)[1])
-#                if re.match("^album", line):
-#                    album=self.reEncodeString(line.strip().split(None,1)[1])
-#            return (title, artist, album)
-#        else:
-#            return ''
-#
-#    def isRunning(self):
-#        qdbus_items=subprocess.Popen(['qdbus'], stdout=subprocess.PIPE).communicate()[0]
-#        running=re.findall('^ org.mpris.amarok$', qdbus_items, re.M)
-#        if type(running) is list:
-#            try:
-#                running=running[0]
-#            except IndexError:
-#                running=''
-#        self.running=bool(running.strip())
-#        return self.running
+class Amarok2Player(Player):
+    def __init__(self):
+        Player.__init__(self, 'Amarok2', 'audio')
+        self.isRunning()
 
+    def getData(self):
+        playing=os.popen("qdbus org.mpris.amarok /Player PositionGet").readline().strip() != "0"
+        if playing and self.isRunning():
+            for line in os.popen("qdbus org.mpris.amarok /Player GetMetadata").readlines():
+                if re.match("^title", line):
+                    title=self.reEncodeString(line.strip().split(None,1)[1])
+                if re.match("^artist", line):
+                    artist=self.reEncodeString(line.strip().split(None,1)[1])
+                if re.match("^album", line):
+                    album=self.reEncodeString(line.strip().split(None,1)[1])
+            return (title, artist, album)
+        else:
+            return ''
+
+    def isRunning(self):
+        qdbus_items=subprocess.Popen(['qdbus'], stdout=subprocess.PIPE).communicate()[0]
+        running=re.findall('^ org.mpris.amarok$', qdbus_items, re.M)
+        if type(running) is list:
+            try:
+                running=running[0]
+            except IndexError:
+                running=''
+        self.running=bool(running.strip())
+        return self.running
+
 import socket
 
 class MPD(Player):
@@ -439,8 +439,9 @@
 StupidPlayer("KPlayer","kplayer","kplayer-mainwindow#1 caption",playerType="video audio"),
 DCOPPlayer("KsCD","kscd","CDPlayer currentTrackTitle","CDPlayer currentArtist","CDPlayer currentAlbum"),
 DCOPPlayer("kdetv","kdetv","KdetvIface channelName",playerType='video'),
+Amarok2Player(),
+DCOPPlayer("Yammi","yammi","YammiPlayer songTitle","YammiPlayer songArtist","YammiPlayer songAlbum"),
 AudaciousPlayer('Audacious'), XmmsPlayer('XMMS'),
-DCOPPlayer("Yammi","yammi","YammiPlayer songTitle","YammiPlayer songArtist","YammiPlayer songAlbum"),
 MPD('MPD')
 ]
 
--- konversation/src/channellistpanel.h
+++ konversation/src/channellistpanel.h
@@ -73,6 +73,7 @@
         void regExpClicked();
 
         void contextMenu (KListView* l, QListViewItem* i, const QPoint& p);
+        void openURL();
 
         //Used to disable functions when not connected
         virtual void serverOnline(bool online);
--- konversation/src/version.h
+++ konversation/src/version.h
@@ -1,3 +1,3 @@
 #ifndef KONVI_VERSION
-#define KONVI_VERSION "1.1"
+#define KONVI_VERSION "1.1+"
 #endif
--- konversation/src/konversationapplication.cpp
+++ konversation/src/konversationapplication.cpp
@@ -139,7 +139,7 @@
         // apply GUI settings
         emit appearanceChanged();
 
-        if (Preferences::showTrayIcon() && (Preferences::hiddenToTray() || Preferences::hideToTrayOnStartup()))
+        if (Preferences::showTrayIcon() && Preferences::hideToTrayOnStartup())
             mainWindow->hide();
         else
             mainWindow->show();
@@ -212,11 +212,6 @@
 
 void KonversationApplication::prepareShutdown()
 {
-    if (mainWindow->isHidden() && Preferences::showTrayIcon())
-        Preferences::setHiddenToTray(true);
-    else
-        Preferences::setHiddenToTray(false);
-
     mainWindow->getViewContainer()->prepareShutdown();
 
     m_awayManager->blockSignals(true);
--- konversation/src/channellistpanel.cpp
+++ konversation/src/channellistpanel.cpp
@@ -18,6 +18,7 @@
 #include "server.h"
 #include "common.h"
 
+#include <qaction.h>
 #include <qhbox.h>
 #include <qvbox.h>
 #include <qgrid.h>
@@ -544,7 +545,10 @@
             pos+=url.length();
 
             // tell the program that we have found a new url
-            showURLmenu->insertItem(href);
+            QAction* action = new QAction(showURLmenu);
+            action->setText(href);
+            action->addTo(showURLmenu);
+            connect(action, SIGNAL(activated()), this, SLOT(openURL()));
         }
         else
         {
@@ -558,16 +562,19 @@
         showURLmenu->setItemEnabled(5,false);
     }
 
-    int selected = showURLmenu->exec(p);
-    if (selected!=-1)
-    {
-        QMenuItem* item = showURLmenu->findItem( selected );
-        new KRun(KURL(item->text().replace("&&","&")));
-    }
+    showURLmenu->exec(p);
 
     delete showURLmenu;
 }
 
+void ChannelListPanel::openURL()
+{
+    const QAction* action = static_cast<const QAction*>(sender());
+
+    if (action)
+        new KRun(KURL(action->text().replace("&&","&")));
+}
+
 void ChannelListPanel::appendInputText(const QString& text, bool fromCursor)
 {
     Q_UNUSED(fromCursor);
--- konversation/src/config/konversation.kcfg
+++ konversation/src/config/konversation.kcfg
@@ -270,10 +270,6 @@
       <label></label>
       <whatsthis></whatsthis>
     </entry>
-    <entry key="HiddenToTray" type="Bool">
-      <default>false</default>
-      <label>Hidden to system tray</label>
-    </entry>
     <entry key="HideToTrayOnStartup" type="Bool">
       <default>false</default>
       <label>Start with hidden mainwindow</label>
--- konversation/src/commit.h
+++ konversation/src/commit.h
@@ -1,4 +1,4 @@
 // This COMMIT number is added to version string to be used as "patch level"
 #ifndef COMMIT
-#define COMMIT 3300
+#define COMMIT 3302
 #endif
--- konversation/src/main.cpp
+++ konversation/src/main.cpp
@@ -24,6 +24,9 @@
 #include "version.h"
 #include "commit.h"
 
+#define HACKSTR(x) #x
+#define STRHACK(x) HACKSTR(x)
+
 /*
   Don't use i18n() here, use I18N_NOOP() instead!
   i18n() will only work as soon as a kapplication object was made.
@@ -47,7 +50,7 @@
 {
     KAboutData aboutData("konversation",
         I18N_NOOP("Konversation"),
-        KONVI_VERSION,
+        KONVI_VERSION " #" STRHACK(COMMIT),
         shortDescription,
         KAboutData::License_GPL,
         I18N_NOOP("(C) 2002-2008 by the Konversation team"),
--- konversation/src/inputfilter.cpp
+++ konversation/src/inputfilter.cpp
@@ -243,8 +243,10 @@
                     else
                     {
                         // Do not internationalize the below version string
-                        reply = QString("Konversation %1 (C) 2002-2008 by the Konversation team")
-                            .arg(QString(KONVI_VERSION));
+                        reply = QString("Konversation %1 Build %2 (C) 2002-2008 by the Konversation team")
+                            .arg(QString(KONVI_VERSION))
+                            .arg(QString::number(COMMIT));
+
                     }
                     server->ctcpReply(sourceNick,"VERSION "+reply);
                 }
--- konversation/src/channel.cpp
+++ konversation/src/channel.cpp
@@ -974,6 +974,16 @@
         if ((*it)[0] == 'k') password = (*it).mid(1);
     }
 
+    if (password.isEmpty() && m_server->getServerGroup())
+    {
+        Konversation::ChannelList channelList = m_server->getServerGroup()->channelList();
+        Konversation::ChannelSettings channelSettings(getName());
+        QValueListIterator<Konversation::ChannelSettings> it = channelList.find(channelSettings);
+
+        if (it != channelList.end())
+            password = (*it).password();
+    }
+
     return password;
 }
 
@@ -1273,7 +1283,7 @@
         setActive(true);
 
         //HACK the way the notification priorities work sucks, this forces the tab text color to ungray right now.
-        if (m_currentTabNotify == Konversation::tnfNone || !Preferences::tabNotificationsEvents())
+        if (m_currentTabNotify == Konversation::tnfNone || (!Preferences::tabNotificationsEvents() && m_currentTabNotify == Konversation::tnfControl))
             KonversationApplication::instance()->getMainWindow()->getViewContainer()->unsetViewNotification(this);
 
         KonversationApplication::instance()->notificationHandler()->channelJoin(this,getName());