rev 8050 - in branches/kde4/packages/kdenetwork/debian: . patches
Ana Beatriz Guerrero López
ana at alioth.debian.org
Thu Nov 22 21:50:09 UTC 2007
Author: ana
Date: 2007-11-22 21:50:09 +0000 (Thu, 22 Nov 2007)
New Revision: 8050
Added:
branches/kde4/packages/kdenetwork/debian/patches/
branches/kde4/packages/kdenetwork/debian/patches/01_kdenetwork_branch_r740225.diff
branches/kde4/packages/kdenetwork/debian/patches/series
Log:
pull branch for kdenetwork (only way to get it building)
Added: branches/kde4/packages/kdenetwork/debian/patches/01_kdenetwork_branch_r740225.diff
===================================================================
--- branches/kde4/packages/kdenetwork/debian/patches/01_kdenetwork_branch_r740225.diff (rev 0)
+++ branches/kde4/packages/kdenetwork/debian/patches/01_kdenetwork_branch_r740225.diff 2007-11-22 21:50:09 UTC (rev 8050)
@@ -0,0 +1,11644 @@
+--- krdc/hostpreferences.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krdc/hostpreferences.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -119,7 +119,7 @@
+
+ QFile file(m_filename);
+ if (!file.open(QFile::WriteOnly | QFile::Text)) {
+- kWarning(5010) << "Cannot write " << m_filename << ". " << file.errorString() << endl;
++ kWarning(5010) << "Cannot write " << m_filename << ". " << file.errorString();
+ return false;
+ }
+
+@@ -195,7 +195,10 @@
+ KTitleWidget *titleWidget = new KTitleWidget(dialog);
+ titleWidget->setText(i18n("Host Configuration"));
+ titleWidget->setPixmap(KIcon("krdc"));
++ layout->addWidget(titleWidget);
+
++ layout->addWidget(widget);
++
+ showAgainCheckBox = new QCheckBox(mainWidget);
+ showAgainCheckBox->setText(i18n("Show this dialog again for this host"));
+ showAgainCheckBox->setChecked(showConfigAgain());
+@@ -204,8 +207,6 @@
+ walletSupportCheckBox->setText(i18n("Remember password (KWallet)"));
+ walletSupportCheckBox->setChecked(walletSupport());
+
+- layout->addWidget(titleWidget);
+- layout->addWidget(widget);
+ layout->addWidget(showAgainCheckBox);
+ layout->addWidget(walletSupportCheckBox);
+ layout->addStretch(1);
+--- krdc/rdp/rdppreferences.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krdc/rdp/rdppreferences.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,27 @@
+ <ui version="4.0" >
+ <class>RdpPreferences</class>
+ <widget class="QWidget" name="RdpPreferences" >
++ <property name="geometry" >
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>446</width>
++ <height>282</height>
++ </rect>
++ </property>
+ <layout class="QVBoxLayout" >
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QGroupBox" name="connectionGroupBox" >
+ <property name="title" >
+@@ -9,16 +29,23 @@
+ </property>
+ <layout class="QGridLayout" >
+ <item row="0" column="0" >
+- <widget class="QLabel" name="resolutionLabel" >
+- <property name="text" >
+- <string>Desktop &resolution:</string>
+- </property>
+- <property name="buddy" >
+- <cstring>resolutionComboBox</cstring>
+- </property>
+- </widget>
++ <layout class="QVBoxLayout" >
++ <item>
++ <widget class="QLabel" name="resolutionLabel" >
++ <property name="text" >
++ <string>Desktop &resolution:</string>
++ </property>
++ <property name="buddy" >
++ <cstring>resolutionComboBox</cstring>
++ </property>
++ </widget>
++ </item>
++ <item>
++ <widget class="QLabel" name="resolutionDummyLabel" />
++ </item>
++ </layout>
+ </item>
+- <item rowspan="2" row="0" column="1" >
++ <item row="0" column="1" >
+ <layout class="QVBoxLayout" >
+ <item>
+ <widget class="QComboBox" name="resolutionComboBox" >
+@@ -142,32 +169,16 @@
+ </layout>
+ </item>
+ <item row="1" column="0" >
+- <spacer>
+- <property name="orientation" >
+- <enum>Qt::Horizontal</enum>
+- </property>
+- <property name="sizeType" >
+- <enum>QSizePolicy::Expanding</enum>
+- </property>
+- <property name="sizeHint" >
+- <size>
+- <width>70</width>
+- <height>0</height>
+- </size>
+- </property>
+- </spacer>
+- </item>
+- <item row="2" column="0" >
+ <widget class="QLabel" name="colorDepthLabel" >
+ <property name="text" >
+ <string>Color &depth:</string>
+ </property>
+ <property name="buddy" >
+- <cstring>kcfg_KeyboardLayout</cstring>
++ <cstring>kcfg_ColorDepth</cstring>
+ </property>
+ </widget>
+ </item>
+- <item row="2" column="1" >
++ <item row="1" column="1" >
+ <widget class="QComboBox" name="kcfg_ColorDepth" >
+ <property name="minimumSize" >
+ <size>
+@@ -192,7 +203,7 @@
+ </item>
+ </widget>
+ </item>
+- <item row="3" column="0" >
++ <item row="2" column="0" >
+ <widget class="QLabel" name="layoutLabel" >
+ <property name="text" >
+ <string>&Keyboard layout:</string>
+@@ -202,7 +213,7 @@
+ </property>
+ </widget>
+ </item>
+- <item row="3" column="1" >
++ <item row="2" column="1" >
+ <widget class="QComboBox" name="kcfg_KeyboardLayout" >
+ <property name="minimumSize" >
+ <size>
+@@ -403,7 +414,17 @@
+ </item>
+ </widget>
+ </item>
+- <item row="4" column="1" >
++ <item row="3" column="0" >
++ <widget class="QLabel" name="soudLabel" >
++ <property name="text" >
++ <string>Sound:</string>
++ </property>
++ <property name="buddy" >
++ <cstring>kcfg_Sound</cstring>
++ </property>
++ </widget>
++ </item>
++ <item row="3" column="1" >
+ <widget class="QComboBox" name="kcfg_Sound" >
+ <item>
+ <property name="text" >
+@@ -422,13 +443,6 @@
+ </item>
+ </widget>
+ </item>
+- <item row="4" column="0" >
+- <widget class="QLabel" name="soudLabel" >
+- <property name="text" >
+- <string>Sound:</string>
+- </property>
+- </widget>
+- </item>
+ </layout>
+ </widget>
+ </item>
+@@ -449,6 +463,9 @@
+ <property name="text" >
+ <string>Extra options:</string>
+ </property>
++ <property name="buddy" >
++ <cstring>kcfg_ExtraOptions</cstring>
++ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+@@ -477,7 +494,7 @@
+ </property>
+ <property name="sizeHint" >
+ <size>
+- <width>20</width>
++ <width>428</width>
+ <height>16</height>
+ </size>
+ </property>
+--- krdc/vnc/vncpreferences.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krdc/vnc/vncpreferences.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,27 @@
+ <ui version="4.0" >
+ <class>VncPreferences</class>
+ <widget class="QWidget" name="VncPreferences" >
++ <property name="geometry" >
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>429</width>
++ <height>115</height>
++ </rect>
++ </property>
+ <layout class="QVBoxLayout" >
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QGroupBox" name="vncGroupBox" >
+ <property name="title" >
+@@ -13,6 +33,9 @@
+ <property name="text" >
+ <string>Connection type:</string>
+ </property>
++ <property name="buddy" >
++ <cstring>kcfg_Quality</cstring>
++ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+--- krdc/krdc.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krdc/krdc.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,6 +1,5 @@
+ # KDE Config File
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Application
+ Exec=krdc -caption "%c" %u
+ Icon=krdc
+--- krdc/smb2rdc.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krdc/smb2rdc.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,6 @@
+ # KDE Config File
+ [Desktop Entry]
+-Encoding=UTF-8
+-ServiceTypes=application/x-smb-server
++X-KDE-ServiceTypes=application/x-smb-server
+ Actions=smb2rdc;
+
+ [Desktop Action smb2rdc]
+--- krdc/config/preferencesdialog.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krdc/config/preferencesdialog.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -58,6 +58,7 @@
+ // that imporant because you will not change this configuration each day...
+ // see rdp/rdphostpreferences.cpp
+ rdpUi.resolutionComboBox->hide();
++ rdpUi.resolutionDummyLabel->hide();
+ rdpUi.kcfg_Height->setEnabled(true);
+ rdpUi.kcfg_Width->setEnabled(true);
+ rdpUi.heightLabel->setEnabled(true);
+--- krdc/config/hostpreferenceslist.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krdc/config/hostpreferenceslist.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -144,7 +144,7 @@
+
+ QFile file(m_filename);
+ if (!file.open(QFile::WriteOnly | QFile::Text)) {
+- kWarning(5010) << "Cannot write " << m_filename << ". " << file.errorString() << endl;
++ kWarning(5010) << "Cannot write " << m_filename << ". " << file.errorString();
+ }
+
+ QTextStream out(&file);
+--- krfb/krfb.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krfb/krfb.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,6 +1,5 @@
+ # KDE Config File
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Application
+ Exec=krfb -caption "%c"
+ Icon=krfb
+--- krfb/kinetd/kinetd.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krfb/kinetd/kinetd.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+
+-ServiceTypes=KDEDModule
++X-KDE-ServiceTypes=KDEDModule
+ X-KDE-ModuleType=Library
+ X-KDE-Library=kinetd
+ X-KDE-Kded-autoload=true
+@@ -37,7 +36,6 @@
+ Name[lt]=KDE interneto tarnyba
+ Name[mk]=Даемон за Интернет на KDE
+ Name[ms]=Daemon Internet KDE
+-Name[nb]=KDEs internett-nisse
+ Name[nds]=KDE-Internetdämoon
+ Name[ne]=केडीई इन्टरनेट डेइमोन
+ Name[nn]=KDE-Internett-nisse
+@@ -90,7 +88,6 @@
+ Comment[lt]=Interneto tarnyba, paleidžianti tinklo tarnybas esant poreikiui
+ Comment[mk]=Даемон за Интернет кој ги вклучува мрежните сервиси на барање
+ Comment[ms]=Daemon Internet yang memulakan servis jaringan di atas permintaan
+-Comment[nb]=internett-nisse som starter nettverkstjenester ved behov
+ Comment[nds]=En Internet-Dämoon, wat Nettwarkdeensten op Anfraag start
+ Comment[ne]=एउटा इन्टरनेट डेइमोन जसले मागमा सञ्जाल सेवा सुरु गर्दछ
+ Comment[nl]=Een internetdaemon die netwerkdiensten op afroep start
+--- krfb/kinetd/kinetdmodule.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krfb/kinetd/kinetdmodule.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,6 @@
+ # describes the servicetype that you need to implement in order to use
+ # kinetd.
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=ServiceType
+ X-KDE-ServiceType=KInetDModule
+ Name=KInetD Module Type
+--- krfb/kcm_krfb/kcmkrfb.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krfb/kcm_krfb/kcmkrfb.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,10 +1,9 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=krfb
+ Exec=kcmshell4 kcmkrfb
+ Type=Service
+-DocPath=krfb/krfb-configuration.html
+-ServiceTypes=KCModule
++X-DocPath=krfb/krfb-configuration.html
++X-KDE-ServiceTypes=KCModule
+
+
+ X-KDE-Library=kcm_krfb
+@@ -123,48 +122,48 @@
+ Comment[zh_CN]=配置桌面共享
+ Comment[zh_HK]=設定桌面分享
+ Comment[zh_TW]=設定桌面分享
+-Keywords=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited
+-Keywords[bg]=Keywords=споделяне, работно, място, десктоп, покана, връзка, desktop sharing, krfb, vnc, sharing, krdc, remote desktop connection, invitation, port, slp, uninvited
+-Keywords[ca]=compartició de l'escriptori,krfb,vnc,compartir,krdc,connexió a l'escriptori remot,invitació,port,slp,no invitat
+-Keywords[cs]=sdílení plochy,krfb,vnc,sdílení,rdp,krdc,připojení vzdálené plochy,pozvánka,port,slp
+-Keywords[cy]=rhannu penbwrdd,krfb,vnc,rhannu,rdp,krdc,cysylltiad penbwrdd pell,gwahoddiad,porth,slp,heb wahoddiad
+-Keywords[da]=desktopdeling,krfb,vnc,deling,krdc,ekstern desktopforbindelse,invitation,port,slp,ikke inviteret
+-Keywords[de]=Arbeitsfläche freigeben,krfb,VNC,freigeben,krdc,Entfernte Arbeitsfläche,Einladung,Port,slp,uneingeladen,rdp,remote desktop
+-Keywords[el]=κοινή χρήση επιφάνειας εργασίας,krfb,vnc,κοινή χρήση,krdc,σύνδεση σε απομακρυσμένη επιφάνεια εργασίας,πρόσκληση,θύρα,slp,απρόσκλητο
+-Keywords[es]=escritorio compartido,krfb,vnc,compartir,rdp,krdc, conexión escritorio remoto,invitación,puerto,slp,no invitado
+-Keywords[et]=töölaua jagamine,krfb,vnc,jagamine,rdp,krdc,kaugtöölaua ühendus,rdp,kutse,port,slp,kutsumata
+-Keywords[eu]=mahaigain partekatzea,krfb,vnc,partekatzea,krdc,urruneko mahaigain konexioa,gonbidapena,ataka,slp,gonbidapen gabea
+-Keywords[fa]=اشتراک رومیزی، krfb، vnc، اتصال رومیزی راه دور، دعوت، درگاه، slp، دعوتنشده
+-Keywords[fi]=työpöydän jakaminen,krfb,vnc,jakaminen,krdc,etätyöpöytäyhteys, kutsu,portti,slp,kutsumaton, työpöytä
+-Keywords[fr]=partage de bureau,krfb,vnc,partage,rdp,krdc,connexion à un bureau distant,invitation,port,slp,non invité
+-Keywords[gl]=compartilla de escritorio, vnc, compartir, krdc, conexón ao escritorio remoto, invitación, porto, slt, convidado, compartillar
+-Keywords[he]=שיתוף שולחן עבודה,שיתוף,חיבור לשולחן עבודה מרוחק,desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection, invitation, port, slp, uninvited
+-Keywords[hu]=munkaasztal-megosztás,krfb,vnc,megosztás,krdc,csatlakozás távoli munkaasztalhoz,meghívás,port,slp,meghívás nélkül
+-Keywords[is]=skjáborðsmiðlun,miðlun,krfb,vnc,rdp,krdc,fjarvinnsla,remote desktop connection,rdp
+-Keywords[it]=condivisione desktop,krfb,vnc,condivisione,krdc,connessione desktop remoto,invito,porta,slp,non invitato
+-Keywords[ja]=デスクトップ共有,krfb,vnc,共有,rdp,krdc,リモートデスクトップ接続,招待,ポート,slp,uninvited
+-Keywords[km]=ការចែករំលែកផ្ទៃតុ,krfb,vnc,ការចែករំលែក,krdc,ការតភ្ជាប់ផ្ទៃតុពីចម្ងាយ,អញ្ជើញ,ច្រក,slp,មិនបានអញ្ជើញ
+-Keywords[lt]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,dalinimasis darbastaliu,nutolusio darbastalio prijungimas,kvietimas,ryšys,nekviestas,jungtis,prievadas,dalintis,pasidalinti,jungimasis,prisijungti,kviesti
+-Keywords[mk]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,делење на површината,krfb,vnc,делење,krdc,поврзување со оддалечена површина,покана,порта,slp,непоканет
+-Keywords[ms]= perkongsian ruang kerja, sambungan, liang, desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited
+-Keywords[nb]=skrivebordsdeling,krfb,vnc,deling,krdc,tilkobling til fjernt skrivebord,invitasjon,port,slp,ikke invitert
+-Keywords[nds]=schriefdisch,freegeven,freegaav,krfb,vnc,delen,krdc,feern Schriefdisch,verbinnen,inladen,port,slp,nich inlaadt
+-Keywords[ne]=डेस्कटप साझेदारी,krfb,vnc,साझेदारी,krdc, टाढाको डेस्कटप जडान,निमन्त्रणा,पोर्ट,slp,निमन्त्रणा नगरिएको
+-Keywords[nl]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,uitnodiging,slp,rdp,verbinding, bureaublad delen,bureaublad op afstand
+-Keywords[nn]=skrivebordsdeling,krfb,vnc,deling,krdc,nettverksskrivebord,invitasjon,port,slp,ikkje invitert
+-Keywords[pl]=współdzielenie pulpitu,krfb,vnc,współdzielenie,rdp,krdc,zdalne połączenie, zdalne biurko, zdalny pulpit, zaproszenie,port,slp
+-Keywords[pt]=partilha do ecrã,krfb,vnc,partilha,krdc,ligação a um ecrã remoto,convite,porto,slp,sem convite
+-Keywords[pt_BR]=compartilhamento de desktop,krfb,vnc,compartilhamento,krdc,conexão a desktop remoto,convite,porta,slp,não convidado
+-Keywords[sl]=namizje,souporaba,krfb,vnc,krdc,povezava oddaljenega namizja, povabilo,port,slp,nepovabljen
+-Keywords[sr]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,радна површина,дељење,позив,порт,непозван,удаљено
+-Keywords[sr at latin]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,radna površina,deljenje,poziv,port,nepozvan,udaljeno
+-Keywords[sv]=dela skrivbord,krfb,vnc,dela,krdc,fjärrskrivbordsanslutning,inbjudan,port,slp
+-Keywords[ta]=பணிமேடை பகிர்வு,krfb,vnc,பகிர்வு,krdc,தொலை பணிமேடை இணைப்பு,அழைப்பிதழ், துறை, slp, uninvited
+-Keywords[tr]=masaüstü paylaşımı,krfb,vnc,paylaşım,krdc,uzak masaüstü bağlantısı,davet,port,slp
+-Keywords[uk]=спільні стільниці,krfb,vnc,спільний,rdp,krdc,з'єднання віддаленої стільниці,запрошення,rdp,slp,без запрошення
+-Keywords[vi]=chia sẻ màn hình,krfb,vnc,chia sẻ,krdc,màn hình ở xa kết nối,mời kết nối,cổng,slp,không được mời
+-Keywords[x-test]=xxdesktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvitedxx
+-Keywords[zh_CN]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,桌面共享,共享,远程桌面连接,邀请,端口,未邀请
+-Keywords[zh_TW]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,rdp,桌面分享,分享,遠端桌面連線,invitation,port,slp,uninvited
++X-KDE-Keywords=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited
++X-KDE-Keywords[bg]=Keywords=споделяне, работно, място, десктоп, покана, връзка, desktop sharing, krfb, vnc, sharing, krdc, remote desktop connection, invitation, port, slp, uninvited
++X-KDE-Keywords[ca]=compartició de l'escriptori,krfb,vnc,compartir,krdc,connexió a l'escriptori remot,invitació,port,slp,no invitat
++X-KDE-Keywords[cs]=sdílení plochy,krfb,vnc,sdílení,rdp,krdc,připojení vzdálené plochy,pozvánka,port,slp
++X-KDE-Keywords[cy]=rhannu penbwrdd,krfb,vnc,rhannu,rdp,krdc,cysylltiad penbwrdd pell,gwahoddiad,porth,slp,heb wahoddiad
++X-KDE-Keywords[da]=desktopdeling,krfb,vnc,deling,krdc,ekstern desktopforbindelse,invitation,port,slp,ikke inviteret
++X-KDE-Keywords[de]=Arbeitsfläche freigeben,krfb,VNC,freigeben,krdc,Entfernte Arbeitsfläche,Einladung,Port,slp,uneingeladen,rdp,remote desktop
++X-KDE-Keywords[el]=κοινή χρήση επιφάνειας εργασίας,krfb,vnc,κοινή χρήση,krdc,σύνδεση σε απομακρυσμένη επιφάνεια εργασίας,πρόσκληση,θύρα,slp,απρόσκλητο
++X-KDE-Keywords[es]=escritorio compartido,krfb,vnc,compartir,rdp,krdc, conexión escritorio remoto,invitación,puerto,slp,no invitado
++X-KDE-Keywords[et]=töölaua jagamine,krfb,vnc,jagamine,rdp,krdc,kaugtöölaua ühendus,rdp,kutse,port,slp,kutsumata
++X-KDE-Keywords[eu]=mahaigain partekatzea,krfb,vnc,partekatzea,krdc,urruneko mahaigain konexioa,gonbidapena,ataka,slp,gonbidapen gabea
++X-KDE-Keywords[fa]=اشتراک رومیزی، krfb، vnc، اتصال رومیزی راه دور، دعوت، درگاه، slp، دعوتنشده
++X-KDE-Keywords[fi]=työpöydän jakaminen,krfb,vnc,jakaminen,krdc,etätyöpöytäyhteys, kutsu,portti,slp,kutsumaton, työpöytä
++X-KDE-Keywords[fr]=partage de bureau,krfb,vnc,partage,rdp,krdc,connexion à un bureau distant,invitation,port,slp,non invité
++X-KDE-Keywords[gl]=compartilla de escritorio, vnc, compartir, krdc, conexón ao escritorio remoto, invitación, porto, slt, convidado, compartillar
++X-KDE-Keywords[he]=שיתוף שולחן עבודה,שיתוף,חיבור לשולחן עבודה מרוחק,desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection, invitation, port, slp, uninvited
++X-KDE-Keywords[hu]=munkaasztal-megosztás,krfb,vnc,megosztás,krdc,csatlakozás távoli munkaasztalhoz,meghívás,port,slp,meghívás nélkül
++X-KDE-Keywords[is]=skjáborðsmiðlun,miðlun,krfb,vnc,rdp,krdc,fjarvinnsla,remote desktop connection,rdp
++X-KDE-Keywords[it]=condivisione desktop,krfb,vnc,condivisione,krdc,connessione desktop remoto,invito,porta,slp,non invitato
++X-KDE-Keywords[ja]=デスクトップ共有,krfb,vnc,共有,rdp,krdc,リモートデスクトップ接続,招待,ポート,slp,uninvited
++X-KDE-Keywords[km]=ការចែករំលែកផ្ទៃតុ,krfb,vnc,ការចែករំលែក,krdc,ការតភ្ជាប់ផ្ទៃតុពីចម្ងាយ,អញ្ជើញ,ច្រក,slp,មិនបានអញ្ជើញ
++X-KDE-Keywords[lt]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,dalinimasis darbastaliu,nutolusio darbastalio prijungimas,kvietimas,ryšys,nekviestas,jungtis,prievadas,dalintis,pasidalinti,jungimasis,prisijungti,kviesti
++X-KDE-Keywords[mk]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,делење на површината,krfb,vnc,делење,krdc,поврзување со оддалечена површина,покана,порта,slp,непоканет
++X-KDE-Keywords[ms]= perkongsian ruang kerja, sambungan, liang, desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited
++X-KDE-Keywords[nb]=skrivebordsdeling,krfb,vnc,deling,krdc,tilkobling til fjernt skrivebord,invitasjon,port,slp,ikke invitert
++X-KDE-Keywords[nds]=schriefdisch,freegeven,freegaav,krfb,vnc,delen,krdc,feern Schriefdisch,verbinnen,inladen,port,slp,nich inlaadt
++X-KDE-Keywords[ne]=डेस्कटप साझेदारी,krfb,vnc,साझेदारी,krdc, टाढाको डेस्कटप जडान,निमन्त्रणा,पोर्ट,slp,निमन्त्रणा नगरिएको
++X-KDE-Keywords[nl]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,uitnodiging,slp,rdp,verbinding, bureaublad delen,bureaublad op afstand
++X-KDE-Keywords[nn]=skrivebordsdeling,krfb,vnc,deling,krdc,nettverksskrivebord,invitasjon,port,slp,ikkje invitert
++X-KDE-Keywords[pl]=współdzielenie pulpitu,krfb,vnc,współdzielenie,rdp,krdc,zdalne połączenie, zdalne biurko, zdalny pulpit, zaproszenie,port,slp
++X-KDE-Keywords[pt]=partilha do ecrã,krfb,vnc,partilha,krdc,ligação a um ecrã remoto,convite,porto,slp,sem convite
++X-KDE-Keywords[pt_BR]=compartilhamento de desktop,krfb,vnc,compartilhamento,krdc,conexão a desktop remoto,convite,porta,slp,não convidado
++X-KDE-Keywords[sl]=namizje,souporaba,krfb,vnc,krdc,povezava oddaljenega namizja, povabilo,port,slp,nepovabljen
++X-KDE-Keywords[sr]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,радна површина,дељење,позив,порт,непозван,удаљено
++X-KDE-Keywords[sr at latin]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,radna površina,deljenje,poziv,port,nepozvan,udaljeno
++X-KDE-Keywords[sv]=dela skrivbord,krfb,vnc,dela,krdc,fjärrskrivbordsanslutning,inbjudan,port,slp
++X-KDE-Keywords[ta]=பணிமேடை பகிர்வு,krfb,vnc,பகிர்வு,krdc,தொலை பணிமேடை இணைப்பு,அழைப்பிதழ், துறை, slp, uninvited
++X-KDE-Keywords[tr]=masaüstü paylaşımı,krfb,vnc,paylaşım,krdc,uzak masaüstü bağlantısı,davet,port,slp
++X-KDE-Keywords[uk]=спільні стільниці,krfb,vnc,спільний,rdp,krdc,з'єднання віддаленої стільниці,запрошення,rdp,slp,без запрошення
++X-KDE-Keywords[vi]=chia sẻ màn hình,krfb,vnc,chia sẻ,krdc,màn hình ở xa kết nối,mời kết nối,cổng,slp,không được mời
++X-KDE-Keywords[x-test]=xxdesktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvitedxx
++X-KDE-Keywords[zh_CN]=desktop sharing,krfb,vnc,sharing,krdc,remote desktop connection,invitation,port,slp,uninvited,桌面共享,共享,远程桌面连接,邀请,端口,未邀请
++X-KDE-Keywords[zh_TW]=desktop sharing,krfb,vnc,sharing,rdp,krdc,remote desktop connection,rdp,桌面分享,分享,遠端桌面連線,invitation,port,slp,uninvited
+
+ Categories=Qt;KDE;X-KDE-settings-network;Settings;
+--- krfb/x11framebuffer.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ krfb/x11framebuffer.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -55,7 +55,7 @@
+ {
+ #ifdef HAVE_XSHM
+ d->useShm = XShmQueryExtension(QX11Info::display());
+- kDebug() << "shm: " << d->useShm << endl;
++ kDebug() << "shm: " << d->useShm;
+ #else
+ d->useShm = false;
+ #endif
+@@ -194,24 +194,24 @@
+ QList<QRect> cpy = tiles;
+ bool inserted = false;
+ tiles.clear();
+-// kDebug() << "before cleanup: " << cpy.size() << endl;
++// kDebug() << "before cleanup: " << cpy.size();
+ foreach (QRect r, cpy) {
+ if (tiles.size() > 0) {
+ for(int i = 0; i < tiles.size(); i++) {
+- // kDebug() << r << tiles[i] << endl;
++ // kDebug() << r << tiles[i];
+ if (r.intersects(tiles[i])) {
+ tiles[i] |= r;
+ inserted = true;
+ break;
+- // kDebug() << "merged into " << tiles[i] << endl;
++ // kDebug() << "merged into " << tiles[i];
+ }
+ }
+ if (!inserted) {
+ tiles.append(r);
+- // kDebug() << "appended " << r << endl;
++ // kDebug() << "appended " << r;
+ }
+ } else {
+- // kDebug() << "appended " << r << endl;
++ // kDebug() << "appended " << r;
+ tiles.append(r);
+ }
+ }
+@@ -230,7 +230,7 @@
+ tiles[i].setRight(d->framebufferImage->width);
+ }
+ }
+-// kDebug() << "after cleanup: " << tiles.size() << endl;
++// kDebug() << "after cleanup: " << tiles.size();
+ }
+
+ void X11FrameBuffer::acquireEvents() {
+@@ -255,7 +255,7 @@
+ #ifdef HAVE_XSHM
+
+ foreach(QRect r, tiles) {
+-// kDebug() << r << endl;
++// kDebug() << r;
+ gl |= r;
+ int y = r.y();
+ int x = r.x();
+@@ -267,7 +267,7 @@
+ if (x+d->updateTile->width > d->framebufferImage->width) {
+ x = d->framebufferImage->width - d->updateTile->width;
+ }
+-// kDebug() << "x: " << x << " (" << r.x() << ") y: " << y << " (" << r.y() << ") " << r << endl;
++// kDebug() << "x: " << x << " (" << r.x() << ") y: " << y << " (" << r.y() << ") " << r;
+ XShmGetImage(QX11Info::display(), win, d->updateTile, x, y, AllPlanes);
+ int pxsize = d->framebufferImage->bits_per_pixel / 8;
+ char *dest = fb + ((d->framebufferImage->bytes_per_line * y) + (x*pxsize));
+@@ -301,8 +301,8 @@
+ }
+ }
+ }
+-// kDebug() << "tot: " << gl << endl;
+-// kDebug() << tiles.size() << endl;
++// kDebug() << "tot: " << gl;
++// kDebug() << tiles.size();
+ ret = tiles;
+ tiles.clear();
+ return ret;
+--- lanbrowsing/kcmlisa/kcmkiolan.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ lanbrowsing/kcmlisa/kcmkiolan.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,6 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+ Icon=samba
+ Exec=kcmshell4 kcmkiolan
+
+@@ -104,22 +103,22 @@
+ Comment[zh_HK]=lan: 與 rlan: 設定
+ Comment[zh_TW]=lan: 與 rlan: 設定
+
+-Keywords=lan
+-Keywords[bg]=lan,лан
+-Keywords[de]=LAN
+-Keywords[fa]=شبکۀ داخلی
+-Keywords[fr]=lan,réseau local,réseau
+-Keywords[gl]=lan,redes locais
+-Keywords[he]=lan,רשת מקומית
+-Keywords[lt]=lan,vietinis tinklas
+-Keywords[nds]=lan,nettwark
+-Keywords[ne]=ल्यान
+-Keywords[nl]=lan,lokaal netwerk,netwerk
+-Keywords[pl]=lan,LAN
+-Keywords[ru]=lan, локальная сеть
+-Keywords[tg]=шабакаи маҳаллӣ
+-Keywords[uk]=lan, локальна мережа
+-Keywords[uz]=локал тармоқ
+-Keywords[vi]=lan, mạng cục bộ
+-Keywords[x-test]=xxlanxx
+-Keywords[zh_CN]=局域网
++X-KDE-Keywords=lan
++X-KDE-Keywords[bg]=lan,лан
++X-KDE-Keywords[de]=LAN
++X-KDE-Keywords[fa]=شبکۀ داخلی
++X-KDE-Keywords[fr]=lan,réseau local,réseau
++X-KDE-Keywords[gl]=lan,redes locais
++X-KDE-Keywords[he]=lan,רשת מקומית
++X-KDE-Keywords[lt]=lan,vietinis tinklas
++X-KDE-Keywords[nds]=lan,nettwark
++X-KDE-Keywords[ne]=ल्यान
++X-KDE-Keywords[nl]=lan,lokaal netwerk,netwerk
++X-KDE-Keywords[pl]=lan,LAN
++X-KDE-Keywords[ru]=lan, локальная сеть
++X-KDE-Keywords[tg]=шабакаи маҳаллӣ
++X-KDE-Keywords[uk]=lan, локальна мережа
++X-KDE-Keywords[uz]=локал тармоқ
++X-KDE-Keywords[vi]=lan, mạng cục bộ
++X-KDE-Keywords[x-test]=xxlanxx
++X-KDE-Keywords[zh_CN]=局域网
+--- lanbrowsing/kcmlisa/kcmlisa.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ lanbrowsing/kcmlisa/kcmlisa.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,6 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+ Icon=samba
+ Exec=kcmshell4 kcmlisa
+
+@@ -73,43 +72,43 @@
+ Comment[zh_HK]=設定 LISa
+ Comment[zh_TW]=設定 LISa
+
+-Keywords=lisa,network,smb,ftp,fish,http
+-Keywords[bg]=Keywords=мрежа, самба, настройки, локална, споделяне, lisa, network, smb, ftp, fish, http
+-Keywords[br]=lisa,rouedad,smb,ftp,fish,http
+-Keywords[ca]=lisa,xarxa,smb,ftp,fish,http
+-Keywords[cs]=lisa,síť,smb,ftp,fish,http
+-Keywords[cy]=lisa,rhwydwaith,smb,ftp,fish,http
+-Keywords[da]=lisa,netværk,smb,ftp,fish,http
+-Keywords[de]=lisa,Netzwerk,smb,ftp,fish,http
+-Keywords[el]=lisa,δίκτυο,smb,ftp,fish,http
+-Keywords[et]=lisa,võrk,smb,ftp,fish,http
+-Keywords[eu]=lisa,sarea,smb,ftp,fish,http
+-Keywords[fa]=lisa، شبکه، smb، قاپ، fish، قام
+-Keywords[fi]=lisa,verkko,smb,ftp,fish,http
+-Keywords[fr]=lisa,réseau,smb,ftp,fish,http
+-Keywords[gl]=lisa,rede,smb,ftp,fish,http
+-Keywords[he]=lisa,רשת,smb,ftp,fish,http
+-Keywords[hu]=lisa,hálózat,smb,ftp,fish,http
+-Keywords[it]=lisa,rete,smb,ftp,fish,http
+-Keywords[ja]=lisa,ネットワーク,smb,ftp,fish,http
+-Keywords[km]=lisa,បណ្ដាញ,smb,ftp,fish,http
+-Keywords[ko]=lisa,네트워크,smp,ftp,fish,http
+-Keywords[lt]=lisa,network,smb,ftp,fish,http,tinklas
+-Keywords[mk]=lisa,network,smb,ftp,fish,http,мрежа
+-Keywords[nb]=lisa,nettverk,smb,ftp,fish,http
+-Keywords[nds]=lisa,nettwark,smb,ftp,fish,http
+-Keywords[ne]=लिसा,सञ्जाल,smb,ftp,fish,http
+-Keywords[nl]=lisa,netwerk,smb,ftp,fish,http,samba
+-Keywords[nn]=lisa,nettverk,smb,ftp,fish,http
+-Keywords[pl]=lisa,sieć,smb,ftp,fish,http
+-Keywords[pt]=lisa,rede,smb,ftp,fish,http
+-Keywords[pt_BR]=lisa,rede,smb,ftp,fish,http
+-Keywords[ru]=lisa,сеть,smb,ftp,fish,http
+-Keywords[sl]=lisa,omrežje,smb,ftp,fish,http
+-Keywords[sv]=lisa,nätverk,smb,ftp,fish,http
+-Keywords[tr]=lisa,ağ,smb,ftp,fish,http
+-Keywords[uk]=lisa,мережа,smb,ftp,fish,http
+-Keywords[uz]=lisa,тармоқ,smb,ftp,fish,http
+-Keywords[vi]=lisa,mạng,smb,ftp,fish,http
+-Keywords[x-test]=xxlisa,network,smb,ftp,fish,httpxx
+-Keywords[zh_CN]=lisa,network,smb,ftp,fish,http,网络
++X-KDE-Keywords=lisa,network,smb,ftp,fish,http
++X-KDE-Keywords[bg]=Keywords=мрежа, самба, настройки, локална, споделяне, lisa, network, smb, ftp, fish, http
++X-KDE-Keywords[br]=lisa,rouedad,smb,ftp,fish,http
++X-KDE-Keywords[ca]=lisa,xarxa,smb,ftp,fish,http
++X-KDE-Keywords[cs]=lisa,síť,smb,ftp,fish,http
++X-KDE-Keywords[cy]=lisa,rhwydwaith,smb,ftp,fish,http
++X-KDE-Keywords[da]=lisa,netværk,smb,ftp,fish,http
++X-KDE-Keywords[de]=lisa,Netzwerk,smb,ftp,fish,http
++X-KDE-Keywords[el]=lisa,δίκτυο,smb,ftp,fish,http
++X-KDE-Keywords[et]=lisa,võrk,smb,ftp,fish,http
++X-KDE-Keywords[eu]=lisa,sarea,smb,ftp,fish,http
++X-KDE-Keywords[fa]=lisa، شبکه، smb، قاپ، fish، قام
++X-KDE-Keywords[fi]=lisa,verkko,smb,ftp,fish,http
++X-KDE-Keywords[fr]=lisa,réseau,smb,ftp,fish,http
++X-KDE-Keywords[gl]=lisa,rede,smb,ftp,fish,http
++X-KDE-Keywords[he]=lisa,רשת,smb,ftp,fish,http
++X-KDE-Keywords[hu]=lisa,hálózat,smb,ftp,fish,http
++X-KDE-Keywords[it]=lisa,rete,smb,ftp,fish,http
++X-KDE-Keywords[ja]=lisa,ネットワーク,smb,ftp,fish,http
++X-KDE-Keywords[km]=lisa,បណ្ដាញ,smb,ftp,fish,http
++X-KDE-Keywords[ko]=lisa,네트워크,smp,ftp,fish,http
++X-KDE-Keywords[lt]=lisa,network,smb,ftp,fish,http,tinklas
++X-KDE-Keywords[mk]=lisa,network,smb,ftp,fish,http,мрежа
++X-KDE-Keywords[nb]=lisa,nettverk,smb,ftp,fish,http
++X-KDE-Keywords[nds]=lisa,nettwark,smb,ftp,fish,http
++X-KDE-Keywords[ne]=लिसा,सञ्जाल,smb,ftp,fish,http
++X-KDE-Keywords[nl]=lisa,netwerk,smb,ftp,fish,http,samba
++X-KDE-Keywords[nn]=lisa,nettverk,smb,ftp,fish,http
++X-KDE-Keywords[pl]=lisa,sieć,smb,ftp,fish,http
++X-KDE-Keywords[pt]=lisa,rede,smb,ftp,fish,http
++X-KDE-Keywords[pt_BR]=lisa,rede,smb,ftp,fish,http
++X-KDE-Keywords[ru]=lisa,сеть,smb,ftp,fish,http
++X-KDE-Keywords[sl]=lisa,omrežje,smb,ftp,fish,http
++X-KDE-Keywords[sv]=lisa,nätverk,smb,ftp,fish,http
++X-KDE-Keywords[tr]=lisa,ağ,smb,ftp,fish,http
++X-KDE-Keywords[uk]=lisa,мережа,smb,ftp,fish,http
++X-KDE-Keywords[uz]=lisa,тармоқ,smb,ftp,fish,http
++X-KDE-Keywords[vi]=lisa,mạng,smb,ftp,fish,http
++X-KDE-Keywords[x-test]=xxlisa,network,smb,ftp,fish,httpxx
++X-KDE-Keywords[zh_CN]=lisa,network,smb,ftp,fish,http,网络
+--- lanbrowsing/kio_lan/lisa.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ lanbrowsing/kio_lan/lisa.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Link
+ URL=lan:/
+ Icon=network
+--- lanbrowsing/kio_lan/lan.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ lanbrowsing/kio_lan/lan.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,6 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Link
+-DocPath=lisa/index.html
++X-DocPath=lisa/index.html
+ URL=lan:/
+ Icon=network_local
+ Name=Local Network
+--- kdnssd/ioslave/zeroconf.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kdnssd/ioslave/zeroconf.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=network_local
+ Name=Network Services
+ Name[bg]=Мрежови услуги
+--- kdnssd/kdedmodule/dnssdwatcher.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kdnssd/kdedmodule/dnssdwatcher.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Name=DNS-SD Services Watcher
+ Name[ca]=Vigilant de serveis DNS-SD
+@@ -84,7 +83,7 @@
+ Comment[zh_CN]=跟踪 DNS-SD 服务并更新目录列表
+ Comment[zh_HK]=監察 DNS-SD 服務並更新目錄清單
+ Comment[zh_TW]=追蹤 DNS-SD 服務並更新目錄清單
+-ServiceTypes=KDEDModule
++X-KDE-ServiceTypes=KDEDModule
+ X-KDE-ModuleType=Library
+ X-KDE-Library=dnssdwatcher
+ X-KDE-Kded-autoload=true
+--- kopete/plugins/nowlistening/kopete_nowlistening_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/nowlistening/kopete_nowlistening_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=kaboodle
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_nowlistening
+ X-KDE-FactoryName=kcm_kopete_nowlistening
+--- kopete/plugins/nowlistening/nowlisteningprefs.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/nowlistening/nowlisteningprefs.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,27 +1,33 @@
+ <ui version="4.0" >
+- <author></author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>NowListeningPrefsUI</class>
+ <widget class="QWidget" name="NowListeningPrefsUI" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>360</width>
+- <height>376</height>
++ <width>426</width>
++ <height>380</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Now Listening</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QLabel" name="advertiseNewMediaToBuddiesLabel" >
+ <property name="text" >
+@@ -49,20 +55,38 @@
+ <string>Messa&ge</string>
+ </attribute>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QLabel" name="useThisMessageLabel" >
+ <property name="text" >
+@@ -83,12 +107,21 @@
+ </item>
+ <item>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QLabel" name="m_headerLabel" >
+ <property name="text" >
+@@ -176,12 +209,21 @@
+ <string>A&dvertising Mode</string>
+ </attribute>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QRadioButton" name="kcfg_ExplicitAdvertising" >
+ <property name="text" >
+@@ -236,20 +278,38 @@
+ <string>Media Pla&yer</string>
+ </attribute>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QCheckBox" name="kcfg_UseSpecifiedMediaPlayer" >
+ <property name="text" >
+@@ -258,25 +318,17 @@
+ </widget>
+ </item>
+ <item>
+- <widget class="K3ListBox" name="kcfg_SelectedMediaPlayer" >
++ <widget class="K3ListBox" native="1" name="kcfg_SelectedMediaPlayer" >
+ <property name="enabled" >
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>5</hsizetype>
+- <vsizetype>5</vsizetype>
++ <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+- <property name="columnMode" >
+- <enum>Q3ListBox::FixedNumber</enum>
+- </property>
+- <property name="rowMode" >
+- <enum>Q3ListBox::Variable</enum>
+- </property>
+- <property name="variableHeight" >
++ <property name="variableHeight" stdset="0" >
+ <bool>false</bool>
+ </property>
+ </widget>
+@@ -328,8 +380,6 @@
+ <class>K3ListBox</class>
+ <extends></extends>
+ <header>k3listbox.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+--- kopete/plugins/nowlistening/kopete_nowlistening.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/nowlistening/kopete_nowlistening.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=media-podcast
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_nowlistening
+ X-KDE-PluginInfo-Author=Will Stephenson
+ X-KDE-PluginInfo-Email=wstephenson at kde.org
+--- kopete/plugins/urlpicpreview/kopete_urlpicpreview.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/urlpicpreview/kopete_urlpicpreview.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Icon=urlpicpreview
+ X-Kopete-Version=1000900
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_urlpicpreview
+ X-KDE-PluginInfo-Author=Heiko Schäfer
+ X-KDE-PluginInfo-Email=heiko at rangun.de
+--- kopete/plugins/urlpicpreview/urlpicpreviewplugin.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/urlpicpreview/urlpicpreviewplugin.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -168,7 +168,7 @@
+ */
+ void URLPicPreviewPlugin::readyForUnload()
+ {
+- kDebug ( 14314 ) << endl;
++ kDebug ( 14314 );
+ m_abortMessageCheck = true;
+ emit abortAllOperations();
+ }
+--- kopete/plugins/urlpicpreview/kopete_urlpicpreview_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/urlpicpreview/kopete_urlpicpreview_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=urlpicpreview
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_urlpicpreview
+ X-KDE-ParentApp=kopete_urlpicpreview
+--- kopete/plugins/urlpicpreview/urlpicpreviewprefsbase.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/urlpicpreview/urlpicpreviewprefsbase.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -5,7 +5,7 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>370</width>
++ <width>373</width>
+ <height>236</height>
+ </rect>
+ </property>
+@@ -19,6 +19,18 @@
+ <string>Picture Preview Preferences</string>
+ </property>
+ <layout class="QVBoxLayout" >
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="Q3GroupBox" name="groupBox1" >
+ <property name="title" >
+--- kopete/plugins/addbookmarks/kopete_addbookmarks.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/addbookmarks/kopete_addbookmarks.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Name=Bookmarks
+ Name[bg]=Отметки
+@@ -102,7 +101,7 @@
+ Comment[zh_HK]=自動將收到的訊息內的連結加到書籤
+ Comment[zh_TW]=自動將接收訊息中的連結加入書籤
+ Icon=konqueror
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-Kopete-Version=1000900
+ X-KDE-Library=kopete_addbookmarks
+ X-KDE-PluginInfo-Author=Roie Kerstein
+--- kopete/plugins/addbookmarks/kopete_addbookmarks_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/addbookmarks/kopete_addbookmarks_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Name=Bookmarks
+ Name[bg]=Отметки
+@@ -102,7 +101,7 @@
+ Comment[zh_HK]=自動將收到的訊息內的連結加到書籤
+ Comment[zh_TW]=自動將接收訊息中的連結加入書籤
+ Icon=konqueror
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_addbookmarks
+ X-KDE-FactoryName=kcm_kopete_addbookmarks
+--- kopete/plugins/addbookmarks/addbookmarksprefsui.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/addbookmarks/addbookmarksprefsui.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,4 @@
+ <ui version="4.0" >
+- <author></author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>BookmarksPrefsUI</class>
+ <widget class="QWidget" name="BookmarksPrefsUI" >
+ <property name="geometry" >
+@@ -13,24 +10,42 @@
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QGroupBox" name="buttonGroup1" >
+ <property name="title" >
+ <string>Use Subfolder for Each Contact</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QRadioButton" name="yesButton" >
+ <property name="enabled" >
+--- kopete/plugins/history/kopete_history.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/history/kopete_history.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=history
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_history
+ X-KDE-PluginInfo-Author=Olivier Goffart
+ X-KDE-PluginInfo-Email=ogoffart at tiscalinet.be
+--- kopete/plugins/history/historydialog.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/history/historydialog.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -79,13 +79,13 @@
+ HistoryDialog::HistoryDialog(Kopete::MetaContact *mc, QWidget* parent)
+ : KDialog(parent)
+ {
++ setAttribute (Qt::WA_DeleteOnClose, true);
+ setCaption( i18n("History for %1", mc->displayName()) );
+ QString fontSize;
+ QString htmlCode;
+ QString fontStyle;
+
+ kDebug(14310) << "called.";
+- //setWFlags(Qt::WDestructiveClose); // send SIGNAL(closing()) on quit
+
+ // Class member initializations
+ mSearch = 0L;
+--- kopete/plugins/history/kopete_history_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/history/kopete_history_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=history
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_history
+ X-KDE-FactoryName=kcm_kopete_history
+--- kopete/plugins/history/historyprefsui.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/history/historyprefsui.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,5 @@
+ <ui version="4.0" >
+ <author>Olivier Goffart</author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>HistoryPrefsUI</class>
+ <widget class="QWidget" name="HistoryPrefsUI" >
+ <property name="geometry" >
+@@ -13,24 +11,45 @@
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox" >
+ <property name="title" >
+ <string>Chat History</string>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>9</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="2" column="0" >
+ <spacer>
+ <property name="orientation" >
+@@ -105,12 +124,12 @@
+ <property name="whatsThis" >
+ <string>This is the number of messages that will be added automatically in the chat window when opening a new chat.</string>
+ </property>
++ <property name="minimum" >
++ <number>1</number>
++ </property>
+ <property name="maximum" >
+ <number>32768</number>
+ </property>
+- <property name="minimum" >
+- <number>1</number>
+- </property>
+ <property name="value" >
+ <number>7</number>
+ </property>
+@@ -121,12 +140,12 @@
+ <property name="whatsThis" >
+ <string>The number of message that are shown when borwsing history in the chat window</string>
+ </property>
++ <property name="minimum" >
++ <number>1</number>
++ </property>
+ <property name="maximum" >
+ <number>32768</number>
+ </property>
+- <property name="minimum" >
+- <number>1</number>
+- </property>
+ <property name="value" >
+ <number>10</number>
+ </property>
+@@ -171,17 +190,13 @@
+ <customwidgets>
+ <customwidget>
+ <class>KColorButton</class>
+- <extends></extends>
++ <extends>QPushButton</extends>
+ <header>kcolorbutton.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+ <customwidget>
+ <class>KIntSpinBox</class>
+- <extends></extends>
++ <extends>QSpinBox</extends>
+ <header>knuminput.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+ </customwidgets>
+ <tabstops>
+--- kopete/plugins/texteffect/kopete_texteffect.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/texteffect/kopete_texteffect.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=texteffect
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_texteffect
+ X-KDE-PluginInfo-Author=Olivier Goffart
+ X-KDE-PluginInfo-Email=ogoffart at tiscalinet.be
+--- kopete/plugins/texteffect/kopete_texteffect_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/texteffect/kopete_texteffect_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=texteffect
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_texteffect
+ X-KDE-ParentApp=kopete_texteffect
+--- kopete/plugins/texteffect/texteffectprefs.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/texteffect/texteffectprefs.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,5 @@
+ <ui version="4.0" >
+ <author>Olivier Goffart</author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>TextEffectPrefs</class>
+ <widget class="QWidget" name="TextEffectPrefs" >
+ <property name="geometry" >
+@@ -13,39 +11,78 @@
+ </rect>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
+- <number>5</number>
++ <property name="leftMargin" >
++ <number>0</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
+ <number>0</number>
+ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
++ <property name="horizontalSpacing" >
++ <number>0</number>
++ </property>
++ <property name="verticalSpacing" >
++ <number>0</number>
++ </property>
+ <item row="0" column="0" >
+ <widget class="QTabWidget" name="TabWidget3" >
++ <property name="currentIndex" >
++ <number>0</number>
++ </property>
+ <widget class="QWidget" name="tab" >
+ <attribute name="title" >
+ <string>&Colors</string>
+ </attribute>
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>0</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="0" column="0" >
+ <widget class="QGroupBox" name="groupBox1" >
+ <property name="title" >
+ <string>Colors</string>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>11</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>11</number>
++ </property>
++ <property name="rightMargin" >
++ <number>11</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>11</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item rowspan="5" row="0" column="0" >
+- <widget class="K3ListBox" name="mColorsListBox" />
++ <widget class="K3ListBox" native="1" name="mColorsListBox" />
+ </item>
+ <item row="0" column="1" >
+ <widget class="QPushButton" name="mColorsAdd" >
+@@ -139,18 +176,25 @@
+ <string>Effects</string>
+ </attribute>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QCheckBox" name="m_lamer" >
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>7</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -163,9 +207,7 @@
+ <item>
+ <widget class="QCheckBox" name="m_casewaves" >
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>7</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -204,8 +246,6 @@
+ <class>K3ListBox</class>
+ <extends></extends>
+ <header>k3listbox.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+ </customwidgets>
+ <tabstops>
+--- kopete/plugins/webpresence/kopete_webpresence.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/webpresence/kopete_webpresence.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=network
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_webpresence
+ X-KDE-PluginInfo-Author=Will Stephenson
+ X-KDE-PluginInfo-Email=will at stevello.free-online.co.uk
+--- kopete/plugins/webpresence/kopete_webpresence_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/webpresence/kopete_webpresence_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Icon=html
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_webpresence
+ X-KDE-ParentApp=kopete_webpresence
+--- kopete/plugins/webpresence/webpresenceprefs.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/webpresence/webpresenceprefs.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,4 @@
+ <ui version="4.0" >
+- <author></author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>WebPresencePrefsUI</class>
+ <widget class="QWidget" name="WebPresencePrefsUI" >
+ <property name="enabled" >
+@@ -11,29 +8,47 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>725</width>
+- <height>830</height>
++ <width>404</width>
++ <height>494</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox" >
+ <property name="title" >
+ <string>Uploading</string>
+ </property>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QLabel" name="textLabel1" >
+ <property name="frameShape" >
+@@ -62,12 +77,21 @@
+ <string>Formatting</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QRadioButton" name="formatHTML" >
+ <property name="toolTip" >
+@@ -123,12 +147,21 @@
+ </item>
+ <item>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <spacer>
+ <property name="orientation" >
+@@ -190,12 +223,24 @@
+ <string>Display Name</string>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>9</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="0" column="0" >
+ <widget class="QRadioButton" name="showName" >
+ <property name="text" >
+@@ -222,12 +267,21 @@
+ </item>
+ <item row="2" column="0" >
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <spacer>
+ <property name="orientation" >
+@@ -279,10 +333,8 @@
+ <customwidgets>
+ <customwidget>
+ <class>KUrlRequester</class>
+- <extends></extends>
++ <extends>QFrame</extends>
+ <header>kurlrequester.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+ </customwidgets>
+ <tabstops>
+--- kopete/plugins/autoreplace/autoreplaceprefs.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/autoreplace/autoreplaceprefs.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -7,7 +7,7 @@
+ <x>0</x>
+ <y>0</y>
+ <width>381</width>
+- <height>403</height>
++ <height>431</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
+@@ -15,16 +15,16 @@
+ <number>6</number>
+ </property>
+ <property name="leftMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="topMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="rightMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="bottomMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox" >
+--- kopete/plugins/autoreplace/kopete_autoreplace.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/autoreplace/kopete_autoreplace.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=autoreplace
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_autoreplace
+ X-KDE-PluginInfo-Author=Roberto Pariset
+ X-KDE-PluginInfo-Email=victorheremita at fastwebnet.it
+--- kopete/plugins/autoreplace/kopete_autoreplace_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/autoreplace/kopete_autoreplace_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=color
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_autoreplace
+ X-KDE-ParentApp=kopete_autoreplace
+--- kopete/plugins/contactnotes/kopete_contactnotes.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/contactnotes/kopete_contactnotes.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=contact
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_contactnotes
+ X-KDE-PluginInfo-Author=Olivier Goffart
+ X-KDE-PluginInfo-Email=ogoffart at tiscalinet.be
+--- kopete/plugins/highlight/kopete_highlight.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/highlight/kopete_highlight.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=highlight
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_highlight
+ X-KDE-PluginInfo-Author=Olivier Goffart
+ X-KDE-PluginInfo-Email=ogoffart at tiscalinet.be
+--- kopete/plugins/highlight/kopete_highlight_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/highlight/kopete_highlight_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=highlight
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_highlight
+ X-KDE-ParentApp=kopete_highlight
+@@ -89,7 +88,6 @@
+ Comment[ko]=필터를 기반으로 메시지를 강조합니다
+ Comment[lt]=Paryškinamas tekstas, atsižvelgiant į filtrus
+ Comment[mk]=Го обележува текстот базирано на филтри
+-Comment[nb]=Marker meldinger ved bruk av filtere
+ Comment[nds]=Filterbaseert Rutheven vun Text
+ Comment[ne]=फिल्टरमा आधारित पाठ हाइलाइट गर्दछ
+ Comment[nl]=Laat tekst oplichten gebaseerd op filters
+--- kopete/plugins/highlight/highlightprefsbase.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/highlight/highlightprefsbase.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -7,28 +7,49 @@
+ <x>0</x>
+ <y>0</y>
+ <width>439</width>
+- <height>543</height>
++ <height>566</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox" >
+ <property name="title" >
+ <string>Available Filters</string>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>9</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="1" column="0" >
+ <widget class="QPushButton" name="m_add" >
+ <property name="text" >
+@@ -49,9 +70,7 @@
+ <item row="0" column="0" colspan="3" >
+ <widget class="QListWidget" name="m_list" >
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>7</hsizetype>
+- <vsizetype>7</vsizetype>
++ <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -77,18 +96,25 @@
+ <string>Criteria</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QLabel" name="textLabel1" >
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>1</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -103,12 +129,21 @@
+ </item>
+ <item>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QCheckBox" name="m_regexp" >
+ <property name="text" >
+@@ -122,9 +157,7 @@
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>5</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -168,26 +201,42 @@
+ <string>Action</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QCheckBox" name="m_setImportance" >
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>1</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -203,9 +252,7 @@
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>3</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -247,12 +294,21 @@
+ </item>
+ <item>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QCheckBox" name="m_setBG" >
+ <property name="text" >
+@@ -266,9 +322,7 @@
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>5</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -298,12 +352,21 @@
+ </item>
+ <item>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QCheckBox" name="m_setFG" >
+ <property name="text" >
+@@ -317,9 +380,7 @@
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>5</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -349,12 +410,21 @@
+ </item>
+ <item>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QCheckBox" name="m_raise" >
+ <property name="text" >
+@@ -366,12 +436,21 @@
+ </item>
+ <item>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QPushButton" name="m_notifications" >
+ <property name="text" >
+--- kopete/plugins/alias/aliasdialogbase.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/alias/aliasdialogbase.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,4 @@
+ <ui version="4.0" >
+- <author></author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>AliasDialogBase</class>
+ <widget class="QWidget" name="AliasDialogBase" >
+ <property name="geometry" >
+@@ -13,12 +10,24 @@
+ </rect>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
+- <number>11</number>
++ <property name="leftMargin" >
++ <number>0</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="0" column="0" colspan="3" >
+ <widget class="K3ListView" name="aliasList" >
+ <property name="whatsThis" >
+@@ -80,19 +89,15 @@
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <customwidgets>
+ <customwidget>
++ <class>K3ListView</class>
++ <extends>Q3ListView</extends>
++ <header>k3listview.h</header>
++ </customwidget>
++ <customwidget>
+ <class>KPushButton</class>
+- <extends></extends>
++ <extends>QPushButton</extends>
+ <header>kpushbutton.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+- <customwidget>
+- <class>K3ListView</class>
+- <extends></extends>
+- <header>k3listview.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+- </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+--- kopete/plugins/alias/aliasdialog.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/alias/aliasdialog.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,4 @@
+ <ui version="4.0" >
+- <author></author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>AliasDialog</class>
+ <widget class="QDialog" name="AliasDialog" >
+ <property name="geometry" >
+@@ -16,12 +13,24 @@
+ <string>Add New Alias</string>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
+- <number>11</number>
++ <property name="leftMargin" >
++ <number>0</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="textLabel2" >
+ <property name="text" >
+@@ -151,26 +160,20 @@
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <customwidgets>
+ <customwidget>
++ <class>K3ListView</class>
++ <extends>Q3ListView</extends>
++ <header>k3listview.h</header>
++ </customwidget>
++ <customwidget>
+ <class>KLineEdit</class>
+- <extends></extends>
++ <extends>QLineEdit</extends>
+ <header>klineedit.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+ <customwidget>
+ <class>KPushButton</class>
+- <extends></extends>
++ <extends>QPushButton</extends>
+ <header>kpushbutton.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+ </customwidget>
+- <customwidget>
+- <class>K3ListView</class>
+- <extends></extends>
+- <header>k3listview.h</header>
+- <container>0</container>
+- <pixmap></pixmap>
+- </customwidget>
+ </customwidgets>
+ <tabstops>
+ <tabstop>alias</tabstop>
+--- kopete/plugins/alias/kopete_alias.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/alias/kopete_alias.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=editinput
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_alias
+ X-KDE-PluginInfo-Author=Jason Keirstead
+ X-KDE-PluginInfo-Email=jason at keirstead.org
+--- kopete/plugins/alias/kopete_alias_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/alias/kopete_alias_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=color
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_alias
+ X-KDE-FactoryName=kcm_kopete_alias
+--- kopete/plugins/translator/translatorprefsbase.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/translator/translatorprefsbase.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,5 @@
+ <ui version="4.0" >
+ <author>Duncan Mac-Vicar P.</author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>TranslatorPrefsUI</class>
+ <widget class="QWidget" name="TranslatorPrefsUI" >
+ <property name="geometry" >
+@@ -9,32 +7,51 @@
+ <x>0</x>
+ <y>0</y>
+ <width>274</width>
+- <height>361</height>
++ <height>407</height>
+ </rect>
+ </property>
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>5</hsizetype>
+- <vsizetype>5</vsizetype>
++ <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>0</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item rowspan="2" row="0" column="2" >
+ <spacer>
+ <property name="orientation" >
+@@ -65,9 +82,7 @@
+ <item row="0" column="1" >
+ <widget class="QComboBox" name="myLang" >
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>1</hsizetype>
+- <vsizetype>0</vsizetype>
++ <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -85,12 +100,21 @@
+ <string>Incoming Messages</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QRadioButton" name="IncomingDontTranslate" >
+ <property name="text" >
+@@ -127,12 +151,21 @@
+ <string>Outgoing Messages</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QRadioButton" name="OutgoingDontTranslate" >
+ <property name="text" >
+--- kopete/plugins/translator/kopete_translator.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/translator/kopete_translator.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=preferences-desktop-locale
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_translator
+ X-KDE-PluginInfo-Author=Duncan Mac-Vicar Prett
+ X-KDE-PluginInfo-Email=duncan at kde.org
+--- kopete/plugins/translator/kopete_translator_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/translator/kopete_translator_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=locale
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_translator
+ X-KDE-FactoryName=kcm_kopete_translator
+--- kopete/plugins/statistics/statisticswidgetbase.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/statistics/statisticswidgetbase.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -20,16 +20,16 @@
+ <number>6</number>
+ </property>
+ <property name="leftMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="topMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="rightMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="bottomMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTabWidget" name="tabWidget" >
+--- kopete/plugins/statistics/kopete_statistics.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/statistics/kopete_statistics.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=statistics
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_statistics
+ X-KDE-PluginInfo-Author=Marc Cramdal
+ X-KDE-PluginInfo-Email=marc.cramdal at yahoo.fr
+--- kopete/plugins/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,25 +1,59 @@
++option(WITH_latex "Enable Kopete latex plugin" ON)
++option(WITH_autoreplace "Enable Kopete autoreplace plugin" ON)
++option(WITH_history "Enable Kopete history plugin" ON)
++option(WITH_contactnotes "Enable Kopete contactnotes plugin" ON)
++option(WITH_translator "Enable Kopete translator plugin" ON)
++option(WITH_nowlistening "Enable Kopete nowlistening plugin" ON)
++option(WITH_texteffect "Enable Kopete texteffect plugin" ON)
++option(WITH_highlight "Enable Kopete highlight plugin" ON)
++option(WITH_alias "Enable Kopete alias plugin" ON)
++option(WITH_addbookmarks "Enable Kopete addbookmarks plugin" ON)
++option(WITH_privacy "Enable Kopete privacy plugin" ON)
++option(WITH_urlpicpreview "Enable Kopete urlpicpreview plugin" ON)
++option(WITH_statistics "Enable Kopete statistics plugin" ON)
++option(WITH_webpresence "Enable Kopete webpresence plugin" ON)
+
+ # Laurent this plugins use shell script which will not work on windows
+-if (UNIX)
+- add_subdirectory( latex )
+-endif (UNIX)
+-add_subdirectory( autoreplace )
+-add_subdirectory( history )
+-add_subdirectory( contactnotes )
+-add_subdirectory( translator )
+-add_subdirectory( nowlistening )
+-add_subdirectory( texteffect )
+-add_subdirectory( highlight )
+-add_subdirectory( alias )
+-add_subdirectory( addbookmarks )
+-add_subdirectory( privacy )
+-add_subdirectory( urlpicpreview )
+-if (SQLITE_FOUND)
++if (WITH_latex AND UNIX)
++ add_subdirectory( latex )
++endif (WITH_latex AND UNIX)
++if (WITH_autoreplace)
++ add_subdirectory( autoreplace )
++endif (WITH_autoreplace)
++if (WITH_history)
++ add_subdirectory( history )
++endif (WITH_history)
++if (WITH_contactnotes)
++ add_subdirectory( contactnotes )
++endif (WITH_contactnotes)
++if (WITH_translator)
++ add_subdirectory( translator )
++endif (WITH_translator)
++if (WITH_nowlistening)
++ add_subdirectory( nowlistening )
++endif (WITH_nowlistening)
++if (WITH_texteffect)
++ add_subdirectory( texteffect )
++endif (WITH_texteffect)
++if (WITH_highlight)
++ add_subdirectory( highlight )
++endif (WITH_highlight)
++if (WITH_alias)
++ add_subdirectory( alias )
++endif (WITH_alias)
++if (WITH_addbookmarks)
++ add_subdirectory( addbookmarks )
++endif (WITH_addbookmarks)
++if (WITH_privacy)
++ add_subdirectory( privacy )
++endif (WITH_privacy)
++if (WITH_urlpicpreview)
++ add_subdirectory( urlpicpreview )
++endif (WITH_urlpicpreview)
++if (WITH_statistics AND SQLITE_FOUND)
+ add_subdirectory ( statistics )
+-endif (SQLITE_FOUND)
++endif (WITH_statistics AND SQLITE_FOUND)
+
+-if( LIBXML2_FOUND AND LIBXSLT_FOUND )
++if(WITH_webpresence AND LIBXML2_FOUND AND LIBXSLT_FOUND)
+ add_subdirectory( webpresence )
+-endif( LIBXML2_FOUND AND LIBXSLT_FOUND )
+-
+-
++endif(WITH_webpresence AND LIBXML2_FOUND AND LIBXSLT_FOUND)
+--- kopete/plugins/latex/kopete_latex_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/latex/kopete_latex_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=latex
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_latex
+ X-KDE-ParentApp=kopete_latex
+--- kopete/plugins/latex/latexprefsbase.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/latex/latexprefsbase.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -11,6 +11,18 @@
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QLabel" name="textLabel1" >
+ <property name="frameShape" >
+--- kopete/plugins/latex/kopete_latex.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/latex/kopete_latex.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=latex
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_latex
+ X-KDE-PluginInfo-Author=Duncan Mac-Vicar
+ X-KDE-PluginInfo-Email=duncan at kde.org
+--- kopete/plugins/privacy/kopete_privacy_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/privacy/kopete_privacy_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,6 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_privacy
+ X-KDE-FactoryName=kcm_kopete_privacy
+--- kopete/plugins/privacy/kopete_privacy.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/privacy/kopete_privacy.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=view-filter
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-KDE-Library=kopete_privacy
+ X-KDE-PluginInfo-Author=Andre Duffeck
+ X-KDE-PluginInfo-Email=duffeck at kde.org
+--- kopete/plugins/privacy/privacydialog.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/plugins/privacy/privacydialog.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -10,24 +10,48 @@
+ </rect>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
+- <number>9</number>
++ <property name="leftMargin" >
++ <number>0</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="0" column="0" >
+ <widget class="QGroupBox" name="groupBox" >
+ <property name="title" >
+ <string>Filter by sender</string>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>9</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="2" column="0" colspan="2" >
+ <widget class="QRadioButton" name="radioOnlyWhiteList" >
+ <property name="text" >
+@@ -37,12 +61,24 @@
+ </item>
+ <item row="4" column="1" >
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>0</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="2" column="2" >
+ <widget class="QPushButton" name="btnClearBlackList" >
+ <property name="text" >
+@@ -109,12 +145,24 @@
+ </item>
+ <item row="4" column="0" >
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>0</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="0" column="0" colspan="2" >
+ <widget class="QLabel" name="label" >
+ <property name="text" >
+@@ -164,12 +212,24 @@
+ <string>Filter by content (separate multiple words by commas)</string>
+ </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
++ <property name="leftMargin" >
+ <number>9</number>
+ </property>
+- <property name="spacing" >
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
++ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
++ <property name="verticalSpacing" >
++ <number>6</number>
++ </property>
+ <item row="3" column="0" >
+ <widget class="QLineEdit" name="editDropAll" />
+ </item>
+--- kopete/styles/Clear/Contents/Resources/Variants/No avatars.css (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/styles/Clear/Contents/Resources/Variants/No avatars.css (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,23 +0,0 @@
+-.IncomingBody2
+-{
+- min-height: 0;
+- padding-bottom: 7px;
+-}
+-
+-.inUserPicture
+-{
+- display: none;
+- float: none;
+-}
+-
+-.OutgoingBody2
+-{
+- min-height: 0;
+- padding-bottom: 7px;
+-}
+-
+-.outUserPicture
+-{
+- display: none;
+- float: none;
+-}
+--- kopete/styles/Clear/Contents/Resources/Variants/No_avatars.css (.../tags/KDE/3.96/kdenetwork) (revision 0)
++++ kopete/styles/Clear/Contents/Resources/Variants/No_avatars.css (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -0,0 +1,23 @@
++.IncomingBody2
++{
++ min-height: 0;
++ padding-bottom: 7px;
++}
++
++.inUserPicture
++{
++ display: none;
++ float: none;
++}
++
++.OutgoingBody2
++{
++ min-height: 0;
++ padding-bottom: 7px;
++}
++
++.outUserPicture
++{
++ display: none;
++ float: none;
++}
+--- kopete/styles/Clear/Contents/Resources/Variants/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/styles/Clear/Contents/Resources/Variants/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1 +1 @@
+-install( FILES "No avatars.css" DESTINATION ${DATA_INSTALL_DIR}/kopete/styles/Clear/Contents/Resources/Variants)
++install( FILES No_avatars.css DESTINATION ${DATA_INSTALL_DIR}/kopete/styles/Clear/Contents/Resources/Variants)
+--- kopete/styles/Kopete/Contents/Resources/Variants/_compact_Contact_color.css (.../tags/KDE/3.96/kdenetwork) (revision 0)
++++ kopete/styles/Kopete/Contents/Resources/Variants/_compact_Contact_color.css (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -0,0 +1,23 @@
++.IncomingBody2
++{
++ min-height: 0;
++ padding-bottom: 7px;
++}
++
++.inUserPicture
++{
++ display: none;
++ float: none;
++}
++
++.OutgoingBody2
++{
++ min-height: 0;
++ padding-bottom: 7px;
++}
++
++.outUserPicture
++{
++ display: none;
++ float: none;
++}
+--- kopete/styles/Kopete/Contents/Resources/Variants/_compact_.css (.../tags/KDE/3.96/kdenetwork) (revision 0)
++++ kopete/styles/Kopete/Contents/Resources/Variants/_compact_.css (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -0,0 +1,23 @@
++.IncomingBody2
++{
++ min-height: 0;
++ padding-bottom: 7px;
++}
++
++.inUserPicture
++{
++ display: none;
++ float: none;
++}
++
++.OutgoingBody2
++{
++ min-height: 0;
++ padding-bottom: 7px;
++}
++
++.outUserPicture
++{
++ display: none;
++ float: none;
++}
+--- kopete/styles/Kopete/Contents/Resources/Variants/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/styles/Kopete/Contents/Resources/Variants/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,6 +1,6 @@
+
+ ########### install files ###############
+
+-install( FILES Big_pictures.css Contact_color.css DESTINATION ${DATA_INSTALL_DIR}/kopete/styles/Kopete/Contents/Resources/Variants)
++install( FILES Big_pictures.css Contact_color.css _compact_.css _compact_Contact_color.css DESTINATION ${DATA_INSTALL_DIR}/kopete/styles/Kopete/Contents/Resources/Variants)
+
+
+--- kopete/protocols/yahoo/yahooeditaccount.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/yahoo/yahooeditaccount.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -80,7 +80,7 @@
+ m_photoPath = iconUrl;
+ if( !iconUrl.isEmpty() )
+ m_Picture->setPixmap( iconUrl );
+-
++ groupBox->hide();
+ }
+
+ QObject::connect(buttonRegister, SIGNAL(clicked()), this, SLOT(slotOpenRegister()));
+--- kopete/protocols/yahoo/kopete_yahoo.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/yahoo/kopete_yahoo.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=yahoo_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_yahoo
+ X-Kopete-Messaging-Protocol=messaging/yahoo
+ X-KDE-PluginInfo-Author=Kopete Developers
+--- kopete/protocols/yahoo/yahooaccount.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/yahoo/yahooaccount.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -474,7 +474,7 @@
+
+ QObject::disconnect(m_session, SIGNAL(pictureInfoNotify(const QString&, KUrl, int)), this, SLOT(slotGotBuddyIconInfo(const QString&, KUrl, int )));
+
+- QObject::disconnect(m_session, SIGNAL(gotBuddyIconRequest(const QString&)), this, SLOT(slotGotBuddyIconRequest(const QString&)) );
++ QObject::disconnect(m_session, SIGNAL(pictureRequest(const QString&)), this, SLOT(slotGotBuddyIconRequest(const QString&)) );
+
+ QObject::disconnect(m_session, SIGNAL(pictureUploaded( const QString &, int )), this, SLOT(slotBuddyIconChanged(const QString&, int)));
+
+--- kopete/protocols/yahoo/ui/yahooeditaccountbase.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/yahoo/ui/yahooeditaccountbase.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -5,8 +5,8 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>554</width>
+- <height>336</height>
++ <width>478</width>
++ <height>433</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+@@ -17,16 +17,16 @@
+ <number>6</number>
+ </property>
+ <property name="leftMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="topMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="rightMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="bottomMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTabWidget" name="tabWidget11" >
+@@ -185,6 +185,9 @@
+ <property name="alignment" >
+ <set>Qt::AlignVCenter</set>
+ </property>
++ <property name="wordWrap" >
++ <bool>true</bool>
++ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+@@ -349,7 +352,7 @@
+ <string>Ser&ver:</string>
+ </property>
+ <property name="buddy" >
+- <cstring>edtServerAddress</cstring>
++ <cstring>editServerAddress</cstring>
+ </property>
+ </widget>
+ </item>
+--- kopete/protocols/gadu/kopete_gadu.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/gadu/kopete_gadu.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=gadu_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-Kopete-Messaging-Protocol=messaging/gadu
+ X-KDE-Library=kopete_gadu
+ X-KDE-PluginInfo-Author=Grzegorz Jaskiewicz
+--- kopete/protocols/winpopup/kopete_wp.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/winpopup/kopete_wp.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=wp_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_wp
+ X-Kopete-Messaging-Protocol=messaging/winpopup
+ X-KDE-PluginInfo-Author=Gav Wood
+--- kopete/protocols/qq/kopete_qq.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/qq/kopete_qq.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=qq_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_qq
+ X-Kopete-Messaging-Protocol=messaging/qq
+ X-KDE-PluginInfo-Author=Hui Jin
+--- kopete/protocols/groupwise/kopete_groupwise.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/groupwise/kopete_groupwise.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=groupwise_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_groupwise
+ X-Kopete-Messaging-Protocol=messaging/groupwise
+ X-KDE-PluginInfo-Author=Will Stephenson
+--- kopete/protocols/jabber/kopete_jabber.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/jabber/kopete_jabber.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=jabber_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_jabber
+ X-Kopete-Messaging-Protocol=messaging/xmpp
+ X-KDE-PluginInfo-Author=Kopete Developers
+--- kopete/protocols/jabber/jabberaccount.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/jabber/jabberaccount.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1724,7 +1724,7 @@
+ i18n("Unregister"),
+ KGuiItem(i18n( "Remove and Unregister" ), "edit-delete"),
+ KGuiItem(i18n( "Remove only from Kopete"), "user-trash"),KStandardGuiItem::cancel(),
+- "askUnregisterJabberAccount", KMessageBox::Notify | KMessageBox::Dangerous );
++ QString(), KMessageBox::Notify | KMessageBox::Dangerous );
+ if(result == KMessageBox::Cancel)
+ {
+ return false;
+--- kopete/protocols/jabber/ui/jabbereditaccountwidget.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/jabber/ui/jabbereditaccountwidget.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -59,11 +59,13 @@
+ {
+ // we are working with an existing account
+ reopen ();
++ registrationGroupBox->hide();
+ btnRegister->setEnabled ( false );
+ }
+ else
+ {
+ // this is a new account
++ changePasswordGroupBox->hide();
+ btnChangePassword->setEnabled ( false );
+ connect (btnRegister, SIGNAL (clicked ()), this, SLOT (registerClicked ()));
+ }
+--- kopete/protocols/jabber/ui/dlgjabbereditaccountwidget.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/jabber/ui/dlgjabbereditaccountwidget.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -6,8 +6,8 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>718</width>
+- <height>522</height>
++ <width>511</width>
++ <height>568</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+@@ -24,16 +24,16 @@
+ <number>6</number>
+ </property>
+ <property name="leftMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="topMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="rightMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="bottomMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTabWidget" name="tabWidget10" >
+@@ -138,7 +138,7 @@
+ </widget>
+ </item>
+ <item>
+- <widget class="QGroupBox" name="groupBox_2" >
++ <widget class="QGroupBox" name="registrationGroupBox" >
+ <property name="title" >
+ <string>Registration</string>
+ </property>
+@@ -229,7 +229,7 @@
+ </widget>
+ </item>
+ <item>
+- <widget class="QGroupBox" name="groupBox_3" >
++ <widget class="QGroupBox" name="changePasswordGroupBox" >
+ <property name="title" >
+ <string>Change Password</string>
+ </property>
+@@ -717,21 +717,6 @@
+ <string>File Transfer Settings</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="spacing" >
+- <number>6</number>
+- </property>
+- <property name="leftMargin" >
+- <number>9</number>
+- </property>
+- <property name="topMargin" >
+- <number>9</number>
+- </property>
+- <property name="rightMargin" >
+- <number>9</number>
+- </property>
+- <property name="bottomMargin" >
+- <number>9</number>
+- </property>
+ <item>
+ <layout class="QGridLayout" >
+ <property name="leftMargin" >
+@@ -831,6 +816,9 @@
+ <property name="alignment" >
+ <set>Qt::AlignVCenter</set>
+ </property>
++ <property name="wordWrap" >
++ <bool>true</bool>
++ </property>
+ </widget>
+ </item>
+ </layout>
+@@ -1150,48 +1138,48 @@
+ <connection>
+ <sender>cbCustomServer</sender>
+ <signal>toggled(bool)</signal>
+- <receiver>mServer</receiver>
++ <receiver>labelPort</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+- <x>204</x>
+- <y>129</y>
++ <x>575</x>
++ <y>124</y>
+ </hint>
+ <hint type="destinationlabel" >
+- <x>202</x>
+- <y>145</y>
++ <x>596</x>
++ <y>144</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>cbCustomServer</sender>
+ <signal>toggled(bool)</signal>
+- <receiver>labelPort</receiver>
++ <receiver>mPort</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+- <x>575</x>
+- <y>124</y>
++ <x>603</x>
++ <y>126</y>
+ </hint>
+ <hint type="destinationlabel" >
+- <x>596</x>
+- <y>144</y>
++ <x>636</x>
++ <y>140</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>cbCustomServer</sender>
+ <signal>toggled(bool)</signal>
+- <receiver>mPort</receiver>
++ <receiver>mServer</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+- <x>603</x>
+- <y>126</y>
++ <x>204</x>
++ <y>129</y>
+ </hint>
+ <hint type="destinationlabel" >
+- <x>636</x>
+- <y>140</y>
++ <x>202</x>
++ <y>145</y>
+ </hint>
+ </hints>
+ </connection>
+--- kopete/protocols/messenger/kopete_messenger.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/messenger/kopete_messenger.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Icon=msn_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_messenger
+ X-Kopete-Version=1000900
+ X-Kopete-Messaging-Protocol=messaging/messenger
+--- kopete/protocols/testbed/testbedcontact.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/testbed/testbedcontact.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -75,7 +75,7 @@
+ {
+ QList<Kopete::Contact*> contacts;
+ contacts.append(this);
+- m_msgManager = Kopete::ChatSessionManager::self()->create(account()->myself(), contacts, protocol());
++ m_msgManager = Kopete::ChatSessionManager::self()->create(account()->myself(), contacts, protocol(), Kopete::ChatSession::Chatroom);
+ connect(m_msgManager, SIGNAL(messageSent(Kopete::Message&, Kopete::ChatSession*)),
+ this, SLOT( sendMessage( Kopete::Message& ) ) );
+ connect(m_msgManager, SIGNAL(destroyed()), this, SLOT(slotChatSessionDestroyed()));
+--- kopete/protocols/testbed/testbedprotocol.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/testbed/testbedprotocol.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -32,11 +32,11 @@
+ TestbedProtocol::TestbedProtocol( QObject* parent, const QStringList &/*args*/ )
+ : Kopete::Protocol( TestbedProtocolFactory::componentData(), parent ),
+ testbedOnline( Kopete::OnlineStatus::Online, 25, this, 0, QStringList(QString()),
+- i18n( "Online" ), i18n( "O&nline" ) ),
++ i18n( "Online" ), i18n( "O&nline" ), Kopete::OnlineStatusManager::Online ),
+ testbedAway( Kopete::OnlineStatus::Away, 25, this, 1, QStringList(QLatin1String("msn_away")),
+- i18n( "Away" ), i18n( "&Away" ) ),
++ i18n( "Away" ), i18n( "&Away" ), Kopete::OnlineStatusManager::Away ),
+ testbedOffline( Kopete::OnlineStatus::Offline, 25, this, 2, QStringList(QString()),
+- i18n( "Offline" ), i18n( "O&ffline" ) )
++ i18n( "Offline" ), i18n( "O&ffline" ), Kopete::OnlineStatusManager::Offline )
+
+ {
+ kDebug( 14210 ) ;
+--- kopete/protocols/testbed/testbedaccountpreferences.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/testbed/testbedaccountpreferences.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,27 +1,33 @@
+ <ui version="4.0" >
+- <author></author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>TestbedAccountPreferences</class>
+ <widget class="QWidget" name="TestbedAccountPreferences" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>675</width>
+- <height>660</height>
++ <width>362</width>
++ <height>272</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Account Preferences - Testbed</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QTabWidget" name="tabWidget11" >
+ <widget class="QWidget" name="tab" >
+@@ -29,32 +35,59 @@
+ <string>B&asic Setup</string>
+ </attribute>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox" >
+ <property name="title" >
+ <string>Account Information</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>0</number>
++ </property>
++ <property name="topMargin" >
++ <number>0</number>
++ </property>
++ <property name="rightMargin" >
++ <number>0</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>0</number>
++ </property>
+ <item>
+ <widget class="QLabel" name="accountLabel" >
+ <property name="toolTip" >
+@@ -92,18 +125,25 @@
+ <string>Information</string>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
++ <property name="leftMargin" >
++ <number>9</number>
++ </property>
++ <property name="topMargin" >
++ <number>9</number>
++ </property>
++ <property name="rightMargin" >
++ <number>9</number>
++ </property>
++ <property name="bottomMargin" >
++ <number>9</number>
++ </property>
+ <item>
+ <widget class="QLabel" name="textLabel12" >
+ <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>3</hsizetype>
+- <vsizetype>1</vsizetype>
++ <sizepolicy vsizetype="Minimum" hsizetype="MinimumExpanding" >
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+@@ -114,6 +154,9 @@
+ <property name="alignment" >
+ <set>Qt::AlignTop</set>
+ </property>
++ <property name="wordWrap" >
++ <bool>true</bool>
++ </property>
+ </widget>
+ </item>
+ </layout>
+--- kopete/protocols/testbed/kopete_testbed.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/testbed/kopete_testbed.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=testbed_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_testbed
+ X-Kopete-Messaging-Protocol=messaging/testbed
+ X-KDE-PluginInfo-Author=Will Stephenson
+--- kopete/protocols/msn/kopete_msn.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/msn/kopete_msn.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Icon=msn_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_msn
+ X-Kopete-Version=1000900
+ X-Kopete-Messaging-Protocol=messaging/msn
+--- kopete/protocols/msn/config/kopete_msn_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/msn/config/kopete_msn_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=msn_protocol
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-ModuleType=Library
+ X-KDE-Library=kcm_kopete_msn
+--- kopete/protocols/msn/ui/msneditaccountui.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/msn/ui/msneditaccountui.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -6,8 +6,8 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>716</width>
+- <height>739</height>
++ <width>601</width>
++ <height>512</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+@@ -18,21 +18,21 @@
+ <number>6</number>
+ </property>
+ <property name="leftMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="topMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="rightMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <property name="bottomMargin" >
+- <number>9</number>
++ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTabWidget" name="tabWidget3" >
+ <property name="currentIndex" >
+- <number>0</number>
++ <number>1</number>
+ </property>
+ <widget class="QWidget" name="tab_connection" >
+ <attribute name="title" >
+@@ -174,6 +174,9 @@
+ <property name="alignment" >
+ <set>Qt::AlignVCenter</set>
+ </property>
++ <property name="wordWrap" >
++ <bool>true</bool>
++ </property>
+ </widget>
+ </item>
+ <item>
+@@ -210,177 +213,6 @@
+ </attribute>
+ <layout class="QVBoxLayout" >
+ <item>
+- <widget class="QGroupBox" name="groupBox_2" >
+- <property name="title" >
+- <string>Connection Preferences</string>
+- </property>
+- <layout class="QVBoxLayout" >
+- <property name="spacing" >
+- <number>6</number>
+- </property>
+- <property name="leftMargin" >
+- <number>9</number>
+- </property>
+- <property name="topMargin" >
+- <number>9</number>
+- </property>
+- <property name="rightMargin" >
+- <number>9</number>
+- </property>
+- <property name="bottomMargin" >
+- <number>9</number>
+- </property>
+- <item>
+- <widget class="QCheckBox" name="optionOverrideServer" >
+- <property name="text" >
+- <string>&Override default server information</string>
+- </property>
+- </widget>
+- </item>
+- <item>
+- <layout class="QGridLayout" >
+- <property name="leftMargin" >
+- <number>0</number>
+- </property>
+- <property name="topMargin" >
+- <number>0</number>
+- </property>
+- <property name="rightMargin" >
+- <number>0</number>
+- </property>
+- <property name="bottomMargin" >
+- <number>0</number>
+- </property>
+- <property name="horizontalSpacing" >
+- <number>6</number>
+- </property>
+- <property name="verticalSpacing" >
+- <number>6</number>
+- </property>
+- <item row="0" column="1" >
+- <layout class="QHBoxLayout" >
+- <property name="spacing" >
+- <number>3</number>
+- </property>
+- <property name="leftMargin" >
+- <number>0</number>
+- </property>
+- <property name="topMargin" >
+- <number>0</number>
+- </property>
+- <property name="rightMargin" >
+- <number>0</number>
+- </property>
+- <property name="bottomMargin" >
+- <number>0</number>
+- </property>
+- <item>
+- <widget class="QLabel" name="labelServer" >
+- <property name="enabled" >
+- <bool>false</bool>
+- </property>
+- <property name="text" >
+- <string>Ser&ver /</string>
+- </property>
+- <property name="buddy" >
+- <cstring>m_serverName</cstring>
+- </property>
+- </widget>
+- </item>
+- <item>
+- <widget class="QLabel" name="labelPort" >
+- <property name="enabled" >
+- <bool>false</bool>
+- </property>
+- <property name="text" >
+- <string>po&rt:</string>
+- </property>
+- <property name="buddy" >
+- <cstring>m_serverPort</cstring>
+- </property>
+- </widget>
+- </item>
+- </layout>
+- </item>
+- <item row="0" column="0" >
+- <spacer>
+- <property name="orientation" >
+- <enum>Qt::Horizontal</enum>
+- </property>
+- <property name="sizeType" >
+- <enum>QSizePolicy::Fixed</enum>
+- </property>
+- <property name="sizeHint" >
+- <size>
+- <width>16</width>
+- <height>20</height>
+- </size>
+- </property>
+- </spacer>
+- </item>
+- <item row="0" column="3" >
+- <widget class="QSpinBox" name="m_serverPort" >
+- <property name="enabled" >
+- <bool>false</bool>
+- </property>
+- <property name="toolTip" >
+- <string>Only modify these values if you want to use a special IM proxy server, like SIMP</string>
+- </property>
+- <property name="whatsThis" >
+- <string>Only modify these values if you want to use a special IM proxy server, like SIMP</string>
+- </property>
+- <property name="minimum" >
+- <number>1</number>
+- </property>
+- <property name="maximum" >
+- <number>65535</number>
+- </property>
+- <property name="value" >
+- <number>1863</number>
+- </property>
+- </widget>
+- </item>
+- <item row="1" column="1" colspan="3" >
+- <widget class="QCheckBox" name="optionUseHttpMethod" >
+- <property name="enabled" >
+- <bool>false</bool>
+- </property>
+- <property name="text" >
+- <string>Use HTTP method</string>
+- </property>
+- <property name="shortcut" >
+- <string/>
+- </property>
+- </widget>
+- </item>
+- <item row="0" column="2" >
+- <widget class="QLineEdit" name="m_serverName" >
+- <property name="enabled" >
+- <bool>false</bool>
+- </property>
+- <property name="sizePolicy" >
+- <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+- <horstretch>0</horstretch>
+- <verstretch>0</verstretch>
+- </sizepolicy>
+- </property>
+- <property name="toolTip" >
+- <string>Only modify these values if you want to use a special IM proxy server, like SIMP</string>
+- </property>
+- <property name="whatsThis" >
+- <string>Only modify these values if you want to use a special IM proxy server, like SIMP</string>
+- </property>
+- <property name="text" >
+- <string>messenger.hotmail.com</string>
+- </property>
+- </widget>
+- </item>
+- </layout>
+- </item>
+- </layout>
+- </widget>
+- </item>
+- <item>
+ <widget class="QGroupBox" name="global_settings_page" >
+ <property name="title" >
+ <string>Global MSN Options</string>
+@@ -924,6 +756,9 @@
+ <property name="alignment" >
+ <set>Qt::AlignVCenter</set>
+ </property>
++ <property name="wordWrap" >
++ <bool>true</bool>
++ </property>
+ </widget>
+ </item>
+ </layout>
+--- kopete/protocols/telepathy/ui/telepathyeditaccountwidget.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/telepathy/ui/telepathyeditaccountwidget.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -203,12 +203,12 @@
+ accountConfig->writeEntry( QLatin1String("SelectedProtocol"), selectedProtocol );
+
+ // Write config related to ConnectionManager Parameter
+- KSharedConfig::Ptr telepathyConfig = KGlobal::config();
+- telepathyConfig->setGroup( TelepathyProtocol::protocol()->formatTelepathyConfigGroup(selectedConnectionManager, selectedProtocol, accountId) );
++ QString telepathyGroup(TelepathyProtocol::protocol()->formatTelepathyConfigGroup(selectedConnectionManager, selectedProtocol, accountId));
++ KConfigGroup telepathyConfig = KGlobal::config()->group(telepathyGroup);
+
+ foreach(ConnectionManager::Parameter parameter, d->savedParameterList)
+ {
+- telepathyConfig->writeEntry( parameter.name(), parameter.value() );
++ telepathyConfig.writeEntry( parameter.name(), parameter.value() );
+ }
+ }
+
+--- kopete/protocols/telepathy/kopete_telepathy.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/telepathy/kopete_telepathy.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Icon=telepathy_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_telepathy
+ X-Kopete-Version=1000900
+ X-Kopete-Messaging-Protocol=messaging/telepathy
+--- kopete/protocols/sms/kopete_sms.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/sms/kopete_sms.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=sms_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-Kopete-Messaging-Protocol=messaging/sms
+ X-KDE-Library=kopete_sms
+ X-KDE-PluginInfo-Author=Richard Lärkäng
+--- kopete/protocols/oscar/liboscar/buffer.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/liboscar/buffer.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -183,7 +183,7 @@
+ mReadPos++;
+ }
+ else
+- kDebug(14150) << "Buffer::getByte(): mBuffer empty" << endl;
++ kDebug(14150) << "Buffer::getByte(): mBuffer empty";
+
+ return thebyte;
+ }
+@@ -247,7 +247,7 @@
+ {
+ if ( len > (Oscar::DWORD)(mBuffer.size() - mReadPos) )
+ {
+- kDebug(14150) << "Buffer::getBlock(DWORD): mBuffer underflow!!!" << endl;
++ kDebug(14150) << "Buffer::getBlock(DWORD): mBuffer underflow!!!";
+ len = mBuffer.size() - mReadPos;
+ }
+
+@@ -272,7 +272,7 @@
+
+ Oscar::WORD *Buffer::getWordBlock(Oscar::WORD len)
+ {
+- kDebug(14150) << "of length " << len << endl;
++ kDebug(14150) << "of length " << len;
+ Oscar::WORD *ch=new Oscar::WORD[len+1];
+ for (unsigned int i=0; i<len; i++)
+ {
+@@ -344,10 +344,10 @@
+ if ( t )
+ t.data = getBlock( t.length );
+ /*else
+- kDebug(OSCAR_RAW_DEBUG) << "Invalid TLV in buffer" << endl;*/
++ kDebug(OSCAR_RAW_DEBUG) << "Invalid TLV in buffer";*/
+ }
+
+- //kDebug(OSCAR_RAW_DEBUG) << "TLV data is " << t.data << endl;
++ //kDebug(OSCAR_RAW_DEBUG) << "TLV data is " << t.data;
+ return t;
+ }
+
+@@ -362,11 +362,11 @@
+ t = getTLV();
+ if ( !t )
+ {
+- kDebug(14150) << "Invalid TLV found" << endl;
++ kDebug(14150) << "Invalid TLV found";
+ continue;
+ }
+
+- //kDebug(14150) << "got TLV(" << t.type << ")" << endl;
++ //kDebug(14150) << "got TLV(" << t.type << ")";
+ ql.append(t);
+ }
+
+--- kopete/protocols/oscar/liboscar/client.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/liboscar/client.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -975,7 +975,7 @@
+ return;
+ }
+
+- kDebug( OSCAR_RAW_DEBUG ) << "Changing " << contact << "'s alias to " << alias << endl;
++ kDebug( OSCAR_RAW_DEBUG ) << "Changing " << contact << "'s alias to " << alias;
+ SSIModifyTask* ssimt = new SSIModifyTask( c->rootTask() );
+ if ( ssimt->modifyContact( oldItem, item ) )
+ ssimt->go( Task::AutoDelete );
+--- kopete/protocols/oscar/aim/kopete_aim.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/aim/kopete_aim.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=aim_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_aim
+ X-Kopete-Messaging-Protocol=messaging/aim
+ X-KDE-PluginInfo-Author=Kopete Developers
+--- kopete/protocols/oscar/aim/ui/aimeditaccountui.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/aim/ui/aimeditaccountui.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -5,8 +5,8 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>484</width>
+- <height>371</height>
++ <width>507</width>
++ <height>420</height>
+ </rect>
+ </property>
+ <property name="sizePolicy" >
+@@ -73,7 +73,7 @@
+ </spacer>
+ </item>
+ <item row="1" column="0" >
+- <widget class="QGroupBox" name="groupBox_2" >
++ <widget class="QGroupBox" name="registrationGroupBox" >
+ <property name="title" >
+ <string>Registration</string>
+ </property>
+@@ -891,7 +891,7 @@
+ <customwidgets>
+ <customwidget>
+ <class>Kopete::UI::PasswordWidget</class>
+- <extends>QWidget</extends>
++ <extends></extends>
+ <header>kopetepasswordwidget.h</header>
+ </customwidget>
+ </customwidgets>
+--- kopete/protocols/oscar/aim/ui/aimeditaccountwidget.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/aim/ui/aimeditaccountwidget.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -111,6 +111,9 @@
+ QObject::connect( mGui->invisibleAdd, SIGNAL( clicked() ), m_invisibleEngine, SLOT( slotAdd() ) );
+ QObject::connect( mGui->invisibleRemove, SIGNAL( clicked() ), m_invisibleEngine, SLOT( slotRemove() ) );
+ }
++
++ // Hide the register UI if editing an existing account
++ mGui->registrationGroupBox->hide();
+ }
+ QObject::connect( mGui->buttonRegister, SIGNAL( clicked() ), this, SLOT( slotOpenRegister() ) );
+
+--- kopete/protocols/oscar/icq/kopete_icq.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/icq/kopete_icq.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=icq_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_icq
+ X-Kopete-Messaging-Protocol=messaging/icq
+ X-KDE-PluginInfo-Author=Kopete Developers
+--- kopete/protocols/oscar/icq/icqcontact.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/icq/icqcontact.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -312,7 +312,7 @@
+
+ if ( m_ssiItem.alias().isEmpty() && !shortInfo.nickname.isEmpty() )
+ {
+- kDebug(OSCAR_ICQ_DEBUG) << "setting new displayname for former UIN-only Contact" << endl;
++ kDebug(OSCAR_ICQ_DEBUG) << "setting new displayname for former UIN-only Contact";
+ setProperty( Kopete::Global::Properties::self()->nickName(), codec->toUnicode( shortInfo.nickname ) );
+ }
+ }
+--- kopete/protocols/oscar/icq/ui/icqeditaccountwidget.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/icq/ui/icqeditaccountwidget.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -134,6 +134,8 @@
+ QObject::connect( mAccountSettings->ignoreAdd, SIGNAL( clicked() ), m_ignoreEngine, SLOT( slotAdd() ) );
+ QObject::connect( mAccountSettings->ignoreRemove, SIGNAL( clicked() ), m_ignoreEngine, SLOT( slotRemove() ) );
+ }
++ // Hide the registration UI when editing an existing account
++ mAccountSettings->registrationGroupBox->hide();
+ }
+ else
+ {
+@@ -143,6 +145,7 @@
+ mProtocol->setComboFromTable( mAccountSettings->encodingCombo,
+ mProtocol->encodings(),
+ encodingId );
++ mAccountSettings->changePasswordGroupBox->hide();
+ }
+
+ if ( !mAccount || !mAccount->engine()->isActive() )
+--- kopete/protocols/oscar/icq/ui/icqeditaccountui.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/oscar/icq/ui/icqeditaccountui.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -5,8 +5,8 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>493</width>
+- <height>471</height>
++ <width>578</width>
++ <height>546</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+@@ -139,7 +139,7 @@
+ </widget>
+ </item>
+ <item>
+- <widget class="QGroupBox" name="groupBox_2" >
++ <widget class="QGroupBox" name="registrationGroupBox" >
+ <property name="title" >
+ <string>Registration</string>
+ </property>
+@@ -196,7 +196,7 @@
+ </widget>
+ </item>
+ <item>
+- <widget class="QGroupBox" name="groupBox_5" >
++ <widget class="QGroupBox" name="changePasswordGroupBox" >
+ <property name="title" >
+ <string>Change password</string>
+ </property>
+@@ -951,7 +951,7 @@
+ <customwidgets>
+ <customwidget>
+ <class>Kopete::UI::PasswordWidget</class>
+- <extends>QWidget</extends>
++ <extends></extends>
+ <header>kopetepasswordwidget.h</header>
+ </customwidget>
+ </customwidgets>
+--- kopete/protocols/meanwhile/kopete_meanwhile.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/meanwhile/kopete_meanwhile.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=meanwhile_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_meanwhile
+ X-Kopete-Messaging-Protocol=messaging/meanwhile
+ X-KDE-PluginInfo-Author=Sivaram Gottimukkala
+--- kopete/protocols/irc/kopete_irc.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/irc/kopete_irc.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ X-Kopete-Version=1000900
+ Icon=irc_protocol
+-ServiceTypes=Kopete/Protocol
++X-KDE-ServiceTypes=Kopete/Protocol
+ X-KDE-Library=kopete_irc
+ X-Kopete-Messaging-Protocol=messaging/irc
+ X-KDE-PluginInfo-Author=Kopete Developers
+--- kopete/protocols/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/protocols/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -2,22 +2,42 @@
+
+ option(WITH_testbed "Enable Kopete testbed protocol" ON)
+ option(WITH_messenger "Enable Kopete MSN/Windows Live Messenger protocol" OFF)
++option(WITH_msn "Enable Kopete MSN protocol" ON)
++option(WITH_oscar "Enable Kopete Oscar (ICQ and AIM) protocol" ON)
++option(WITH_yahoo "Enable Kopete Yahoo protocol" ON)
++option(WITH_qq "Enable Kopete QQ protocol" ON)
+ option(WITH_sms "Enable Kopete SMS protocol" ON)
+ option(WITH_groupwise "Enable Novell GroupWise Messenger protocol" ON)
+ option(WITH_telepathy "Enable Telepathy testbed protocol" OFF)
++option(WITH_winpopup "Enable Kopete winpopup protocol" ON)
++option(WITH_gadu "Enable Kopete Gadu-Gadu protocol" ON)
++option(WITH_jabber "Enable Kopete Jabber protocol" ON)
++# option(WITH_irc "Enable Kopete IRC protocol" OFF)
+
+ include_directories(${KOPETE_INCLUDES})
+
+-add_subdirectory( msn )
+-add_subdirectory( oscar )
+-add_subdirectory( yahoo )
+-add_subdirectory( qq )
+-#add_subdirectory( irc )
++if(WITH_msn)
++ add_subdirectory( msn )
++endif(WITH_msn)
++if(WITH_oscar)
++ add_subdirectory( oscar )
++endif(WITH_oscar)
++if(WITH_yahoo)
++ add_subdirectory( yahoo )
++endif(WITH_yahoo)
++if(WITH_qq)
++ add_subdirectory( qq )
++endif(WITH_qq)
++# if(WITH_irc)
++# add_subdirectory( irc )
++# endif(WITH_irc)
+ if(NOT WIN32)
+- add_subdirectory( winpopup )
+- if(OPENSSL_FOUND)
++ if(WITH_winpopup)
++ add_subdirectory( winpopup )
++ endif(WITH_winpopup)
++ if(WITH_gadu AND OPENSSL_FOUND)
+ add_subdirectory( gadu )
+- endif(OPENSSL_FOUND)
++ endif(WITH_gadu AND OPENSSL_FOUND)
+ if(WITH_sms)
+ add_subdirectory( sms )
+ endif(WITH_sms)
+@@ -29,7 +49,9 @@
+
+ if(QCA2_FOUND)
+ if(IDN_FOUND)
+- add_subdirectory( jabber )
++ if(WITH_jabber)
++ add_subdirectory( jabber )
++ endif(WITH_jabber)
+ else(IDN_FOUND)
+ message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}: Disabled Jabber because libidn-devel was not found")
+ endif(IDN_FOUND)
+--- kopete/kopete/kopete.notifyrc (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/kopete.notifyrc (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -539,7 +539,6 @@
+ Comment[km]=បានទទួលសារសំខាន់មួយ
+ Comment[lt]=Gauta paryškinta žinutė
+ Comment[mk]=Примена е осветлена порака
+-Comment[nb]=En fremhevet melding er mottatt
+ Comment[nds]=En rutheevt Naricht keem rin
+ Comment[nl]=Er is een geaccentueerd bericht ontvangen
+ Comment[pl]=Podświetlona wiadomość została odebrana
+@@ -1248,7 +1247,7 @@
+ Comment[cs]=Osoba vám poslala šťouchanec :-)
+ Comment[da]=En kontakt har sendt dig en buzz/nudge.
+ Comment[de]=Ein Benutzer macht auf sich aufmerksam.
+-Comment[el]=Μία επαφή σας έστειλε ένα βομβητή/Ειδοποίηση
++Comment[el]=Μία επαφή σας έστειλε ένα βομβητή/Ειδοποίηση.
+ Comment[et]=Kontakt müksas sind.
+ Comment[eu]=Kontaktu batek burrumbada/ukondokada bat bidali dizu.
+ Comment[fr]=Un contact vous a envoyé une vibration.
+--- kopete/kopete/kopetewindow.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/kopetewindow.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -162,7 +162,7 @@
+ * Protected slot to setup the Set Global Status Message menu.
+ */
+ void slotBuildStatusMessageMenu();
+- void slotStatusMessageSelected( int i );
++ void slotStatusMessageSelected( QAction *action );
+ void slotNewStatusMessageEntered();
+
+ /**
+--- kopete/kopete/addaccountwizard/addaccountwizard.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/addaccountwizard/addaccountwizard.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -209,6 +209,7 @@
+ // if the account wasn't created correctly then leave
+ if (!account)
+ {
++ reject();
+ return;
+ }
+
+--- kopete/kopete/identity/identitystatuswidget.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/identity/identitystatuswidget.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -28,6 +28,7 @@
+ #include <QUrl>
+ #include <KColorScheme>
+ #include <kopeteidentity.h>
++#include <kopeteidentitymanager.h>
+ #include <kopeteaccount.h>
+ #include <kopeteaccountmanager.h>
+ #include <kopetecontact.h>
+@@ -43,8 +44,6 @@
+ Ui::IdentityStatusBase ui;
+ QTimeLine *timeline;
+ QString photoPath;
+- // Used to display changing nickname in red
+- QString lastNickName;
+ QHash<QListWidgetItem *,Kopete::Account *> accountHash;
+ };
+
+@@ -69,8 +68,6 @@
+ // user input signals
+ connect( d->ui.accounts, SIGNAL(customContextMenuRequested(const QPoint &)),
+ this, SLOT(showAccountContextMenu(const QPoint &)) );
+- connect( d->ui.nickName, SIGNAL(editingFinished()), this, SLOT(slotSave()) );
+- connect( d->ui.nickName, SIGNAL(textChanged(QString)), this, SLOT(slotNickNameTextChanged(QString)) );
+ connect( d->ui.photo, SIGNAL(clicked()),
+ this, SLOT(slotPhotoClicked()));
+
+@@ -78,6 +75,9 @@
+ this, SLOT(slotAccountRegistered(Kopete::Account*)));
+ connect( Kopete::AccountManager::self(), SIGNAL(accountUnregistered(const Kopete::Account*)),
+ this, SLOT(slotAccountUnregistered(const Kopete::Account*)));
++
++ connect( Kopete::IdentityManager::self(), SIGNAL(identityUnregistered(const Kopete::Identity*)),
++ this, SLOT(slotIdentityUnregistered(const Kopete::Identity*)));
+ }
+
+ IdentityStatusWidget::~IdentityStatusWidget()
+@@ -130,7 +130,6 @@
+ {
+ layout()->setSizeConstraint( QLayout::SetDefaultConstraint );
+ setFixedHeight( sizeHint().height() );
+- d->ui.nickName->setFocus();
+ return;
+ }
+
+@@ -143,7 +142,6 @@
+ void IdentityStatusWidget::slotLoad()
+ {
+ // clear
+- d->ui.nickName->clear();
+ d->ui.accounts->clear();
+ d->accountHash.clear();
+
+@@ -161,14 +159,6 @@
+ d->ui.photo->setIcon( KIcon( "user" ) );
+ }
+
+- // nickname
+- if (d->identity->hasProperty(props->nickName().key()))
+- {
+- // Set lastNickName to make red highlighting works when editing the identity nickname
+- d->lastNickName = d->identity->property(props->nickName()).value().toString();
+- d->ui.nickName->setText( d->lastNickName );
+- }
+-
+ d->ui.identityName->setText(d->identity->label());
+
+ foreach(Kopete::Account *a, d->identity->accounts()) {
+@@ -265,21 +255,6 @@
+ item->setToolTip( contact->toolTip() );
+ }
+
+-void IdentityStatusWidget::slotNickNameTextChanged(const QString &text)
+-{
+- if ( d->lastNickName != text )
+- {
+- QPalette palette;
+- KColorScheme::adjustForeground( palette, KColorScheme::ActiveText );
+- d->ui.nickName->setPalette(palette);
+- }
+- else
+- {
+- d->ui.nickName->setPalette(QPalette());
+- }
+-
+-}
+-
+ void IdentityStatusWidget::slotSave()
+ {
+ if (!d->identity)
+@@ -293,19 +268,6 @@
+ {
+ d->identity->setProperty(props->photo(), d->photoPath);
+ }
+-
+- // nickname
+- if (!d->identity->hasProperty(props->nickName().key()) ||
+- d->identity->property(props->photo()).value().toString() != d->ui.nickName->text())
+- {
+- d->identity->setProperty(props->nickName(), d->ui.nickName->text());
+-
+- // Set last nickname to the new identity nickname
+- // and reset the palette
+- d->lastNickName = d->ui.nickName->text();
+- d->ui.nickName->setPalette(QPalette());
+- //TODO check what more to do
+- }
+ }
+
+ void IdentityStatusWidget::showAccountContextMenu( const QPoint & point )
+@@ -341,6 +303,16 @@
+ //adjustSize();
+ }
+
++void IdentityStatusWidget::slotIdentityUnregistered( const Kopete::Identity* identity )
++{
++ if ( identity == d->identity )
++ {
++ disconnect( identity );
++ hide();
++ setIdentity( Kopete::IdentityManager::self()->defaultIdentity() );
++ }
++}
++
+ #include "identitystatuswidget.moc"
+ // vim: set noet ts=4 sts=4 sw=4:
+
+--- kopete/kopete/identity/identitystatusbase.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/identity/identitystatusbase.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -10,9 +10,6 @@
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
+- <property name="spacing" >
+- <number>2</number>
+- </property>
+ <property name="leftMargin" >
+ <number>0</number>
+ </property>
+@@ -26,28 +23,6 @@
+ <number>0</number>
+ </property>
+ <item>
+- <widget class="QLabel" name="identityName" >
+- <property name="minimumSize" >
+- <size>
+- <width>0</width>
+- <height>20</height>
+- </size>
+- </property>
+- <property name="font" >
+- <font>
+- <weight>75</weight>
+- <bold>true</bold>
+- </font>
+- </property>
+- <property name="text" >
+- <string>Identity Name</string>
+- </property>
+- <property name="alignment" >
+- <set>Qt::AlignCenter</set>
+- </property>
+- </widget>
+- </item>
+- <item>
+ <layout class="QGridLayout" >
+ <property name="horizontalSpacing" >
+ <number>3</number>
+@@ -77,22 +52,30 @@
+ </property>
+ </widget>
+ </item>
++ <item row="0" column="2" >
++ <layout class="QHBoxLayout" />
++ </item>
+ <item row="0" column="1" >
+- <layout class="QHBoxLayout" >
+- <item>
+- <widget class="QLabel" name="nickLabel" >
+- <property name="text" >
+- <string>Nick:</string>
+- </property>
+- <property name="buddy" >
+- <cstring>nickName</cstring>
+- </property>
+- </widget>
+- </item>
+- <item>
+- <widget class="QLineEdit" name="nickName" />
+- </item>
+- </layout>
++ <widget class="QLabel" name="identityName" >
++ <property name="minimumSize" >
++ <size>
++ <width>0</width>
++ <height>20</height>
++ </size>
++ </property>
++ <property name="font" >
++ <font>
++ <weight>75</weight>
++ <bold>true</bold>
++ </font>
++ </property>
++ <property name="text" >
++ <string>Identity Name</string>
++ </property>
++ <property name="alignment" >
++ <set>Qt::AlignCenter</set>
++ </property>
++ </widget>
+ </item>
+ </layout>
+ </item>
+--- kopete/kopete/identity/identitystatuswidget.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/identity/identitystatuswidget.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -60,14 +60,13 @@
+
+ void showAccountContextMenu( const QPoint & );
+ void slotPhotoClicked();
+- /**
+- * @brief Show nickname in red when modified
+- * @param text text changed in nickname textbox
+- */
+- void slotNickNameTextChanged(const QString &text);
+ void slotAccountRegistered( Kopete::Account *account );
+ void slotAccountUnregistered( const Kopete::Account *account );
+ void slotAccountStatusIconChanged( Kopete::Contact *contact );
++ /**
++ * Handle departing identities
++ */
++ void slotIdentityUnregistered( const Kopete::Identity* identity );
+
+ private:
+ void addAccountItem( Kopete::Account *account );
+--- kopete/kopete/kopete.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/kopete.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ MimeType=application/x-kopete-emoticons;application/x-icq;
+ Name=Kopete
+ Name[ne]=कोपेट
+@@ -115,4 +114,4 @@
+ Icon=kopete
+ Categories=Qt;KDE;Network;InstantMessaging;
+ X-DBUS-StartupType=Unique
+-ServiceTypes=DBUS/InstantMessenger
++X-KDE-ServiceTypes=DBUS/InstantMessenger
+--- kopete/kopete/kopetewindow.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/kopetewindow.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -407,7 +407,8 @@
+ setStatusMessageMenu->setIconText( i18n( "&Message" ) );
+ actionCollection()->addAction( "SetStatusMessage", setStatusMessageMenu );
+ setStatusMessageMenu->setDelayed( false );
+- connect( setStatusMessageMenu->menu(), SIGNAL( aboutToShow() ), SLOT(slotBuildStatusMessageMenu() ) );
++ connect( setStatusMessageMenu->menu(), SIGNAL(aboutToShow()), SLOT(slotBuildStatusMessageMenu()) );
++ connect( setStatusMessageMenu->menu(), SIGNAL(triggered(QAction*)), this, SLOT(slotStatusMessageSelected(QAction*)) );
+
+ // sync actions, config and prefs-dialog
+ connect ( Kopete::AppearanceSettings::self(), SIGNAL(configChanged()), this, SLOT(slotConfigChanged()) );
+@@ -894,7 +895,7 @@
+ QAction *action = actionCollection()->action( s );
+ if ( action )
+ {
+- kDebug(14000) << " found KAction " << action << " with name: " << action->objectName() << endl;
++ kDebug(14000) << " found KAction " << action << " with name: " << action->objectName();
+ d->addContactMapper->removeMappings( action );
+ d->actionAddContact->removeAction( action );
+ }
+@@ -991,9 +992,6 @@
+ d->globalStatusMessageMenu = static_cast<KMenu *>( senderObj );
+ d->globalStatusMessageMenu->clear();
+
+- connect( d->globalStatusMessageMenu, SIGNAL( activated( int ) ),
+- SLOT( slotStatusMessageSelected( int ) ) );
+-
+ d->globalStatusMessageMenu->addTitle( i18n("Status Message") );
+ //BEGIN: Add new message widget to the Set Status Message Menu.
+ KHBox * newMessageBox = new KHBox( 0 );
+@@ -1011,7 +1009,7 @@
+ newMessagePix->setFocusPolicy( Qt::ClickFocus );
+ connect( d->newMessageEdit, SIGNAL( returnPressed() ), SLOT( slotNewStatusMessageEntered() ) );
+
+- KAction *newMessageAction = new KAction( KIcon("edit"), i18n("New Message..."), this ); //, "new_message" );
++ KAction *newMessageAction = new KAction( KIcon("edit"), i18n("New Message..."), d->globalStatusMessageMenu );
+ newMessageAction->setDefaultWidget( newMessageBox );
+
+ d->globalStatusMessageMenu->addAction( newMessageAction );
+@@ -1021,23 +1019,28 @@
+ d->globalStatusMessageMenu->addSeparator();
+
+ QStringList awayMessages = Kopete::Away::getInstance()->getMessages();
+- for (int i = awayMessages.count() - 1; i >= 0; --i)
++ for ( int i = 0; i < awayMessages.count(); ++i )
+ {
+- d->globalStatusMessageMenu->addAction( KStringHandler::rsqueeze( awayMessages[i] ) );
++ QAction *action = new QAction( d->globalStatusMessageMenu );
++ action->setText( KStringHandler::rsqueeze( awayMessages[i] ) );
++ action->setData( i );
++ d->globalStatusMessageMenu->addAction( action );
+ }
+- //connect( m_globalStatusMessageMenu, SIGNAL( aboutToHide() ), m_globalStatusMessageMenu, SLOT( deleteLater() ) );
+
+ d->newMessageEdit->setFocus(Qt::OtherFocusReason);
+ d->globalStatusMessageMenu->setActiveAction(newMessageAction);
+- //messageMenu->popup( e->globalPos(), 1 );
+ }
+
+-void KopeteWindow::slotStatusMessageSelected( int i )
++void KopeteWindow::slotStatusMessageSelected( QAction *action )
+ {
+- if ( 0 == i )
++ if ( !action->data().isValid() )
++ {
+ setStatusMessage( "" );
+- else if( i > 0 )
+- setStatusMessage( Kopete::Away::getInstance()->getMessage( i - 1 ) );
++ return;
++ }
++
++ int i = action->data().toInt();
++ setStatusMessage( Kopete::Away::getInstance()->getMessage( i ) );
+ }
+
+ void KopeteWindow::slotNewStatusMessageEntered()
+@@ -1053,8 +1056,12 @@
+ {
+ KMenu *statusMessageIconMenu = new KMenu(this);
+
+- connect(statusMessageIconMenu, SIGNAL( aboutToShow() ),
+- this, SLOT(slotBuildStatusMessageMenu()));
++ connect( statusMessageIconMenu, SIGNAL(aboutToShow()),
++ this, SLOT(slotBuildStatusMessageMenu()) );
++ connect( statusMessageIconMenu, SIGNAL(triggered(QAction*)),
++ this, SLOT(slotStatusMessageSelected(QAction*)) );
++ connect( statusMessageIconMenu, SIGNAL(aboutToHide()),
++ statusMessageIconMenu, SLOT(deleteLater()) );
+
+ statusMessageIconMenu->popup(position);
+ }
+--- kopete/kopete/config/accounts/kopete_accountconfig.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/accounts/kopete_accountconfig.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=users
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_accountconfig
+ X-KDE-FactoryName=kcm_kopete_accountconfig
+@@ -79,6 +78,6 @@
+ Comment[x-test]=xxManage Your Accounts and Identitiesxx
+ Comment[zh_CN]=管理您的账户和身份
+ Comment[zh_TW]=管理您的帳號與身份
+-DocPath=kopete/configure-dialog.html#configuring-accounts
++X-DocPath=kopete/configure-dialog.html#configuring-accounts
+
+
+--- kopete/kopete/config/accounts/kopeteaccountconfig.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/accounts/kopeteaccountconfig.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -296,7 +296,7 @@
+ Kopete::Account *i = lvi->account();
+ if ( KMessageBox::warningContinueCancel( this, i18n( "Are you sure you want to remove the account \"%1\"?", i->accountLabel() ),
+ i18n( "Remove Account" ), KGuiItem(i18n( "Remove Account" ), "edit-delete"), KStandardGuiItem::cancel(),
+- "askRemoveAccount", KMessageBox::Notify | KMessageBox::Dangerous ) == KMessageBox::Continue )
++ QString(), KMessageBox::Notify | KMessageBox::Dangerous ) == KMessageBox::Continue )
+ {
+ Kopete::AccountManager::self()->removeAccount( i );
+ delete lvi;
+--- kopete/kopete/config/appearance/kopete_appearanceconfig.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/appearance/kopete_appearanceconfig.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=preferences-desktop-theme
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_appearanceconfig
+ X-KDE-FactoryName=kcm_kopete_appearanceconfig
+@@ -18,6 +17,7 @@
+ Name[nb]=Kontaktliste
+ Name[nds]=Kontaktenlist
+ Name[nl]=Contactlijst
++Name[oc]=Tièra de contactes
+ Name[pt]=Lista de Contactos
+ Name[pt_BR]=Lista de Contactos
+ Name[sv]=Kontaktlista
+@@ -38,6 +38,6 @@
+ Comment[x-test]=xxConfigure Contact List Look and Feelxx
+ Comment[zh_CN]=配置联系人列表的观感
+ Comment[zh_TW]=設定聯絡人清單的外觀與感覺
+-DocPath=kopete/configure-dialog.html#configuring-appearance
++X-DocPath=kopete/configure-dialog.html#configuring-appearance
+
+
+--- kopete/kopete/config/behavior/kopete_behaviorconfig.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/behavior/kopete_behaviorconfig.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=configure
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_behaviorconfig
+ X-KDE-FactoryName=kcm_kopete_behaviorconfig
+@@ -88,7 +87,7 @@
+ Comment[x-test]=xxPersonalize Kopete's Behaviorxx
+ Comment[zh_CN]=个性化 Kopete 的行为
+ Comment[zh_TW]=將 Kopete 個人化
+-DocPath=kopete/configure-dialog.html#configuring-behavior
++X-DocPath=kopete/configure-dialog.html#configuring-behavior
+
+
+
+--- kopete/kopete/config/plugins/kopete_pluginconfig.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/plugins/kopete_pluginconfig.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=gear
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_pluginconfig
+ X-KDE-FactoryName=kcm_kopete_pluginconfig
+--- kopete/kopete/config/avdevice/avdeviceconfig.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/avdevice/avdeviceconfig.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -65,8 +65,6 @@
+ void slotImageAutoBrightnessContrastChanged(bool);
+ void slotImageAutoColorCorrectionChanged(bool);
+ void slotImageAsMirrorChanged(bool);
+- void slotDeviceDisableMMapChanged(bool);
+- void slotDeviceWorkaroundBrokenDriverChanged(bool);
+ void slotUpdateImage();
+ void deviceRegistered( const QString & );
+ void deviceUnregistered( const QString & );
+--- kopete/kopete/config/avdevice/kopete_avdeviceconfig.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/avdevice/kopete_avdeviceconfig.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=camera-web
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_avdeviceconfig
+ X-KDE-FactoryName=kcm_kopete_avdeviceconfig
+@@ -11,16 +10,23 @@
+ X-KDE-Weight=180
+
+ Name=Video
++Name[ca]=Vídeo
++Name[el]=Βίντεο
+ Name[ja]=ビデオ
++Name[oc]=Vidèo
+ Name[pt]=Vídeo
+ Name[pt_BR]=Vídeo
++Name[x-test]=xxVideoxx
+ Name[zh_TW]=影像
+ Comment=Configure Video Devices
++Comment[ca]=Configura els dispositius de vídeo
+ Comment[de]=Videogeräte einrichten
++Comment[el]=Ρύθμιση συσκευών βίντεο
+ Comment[ja]=ビデオデバイスの設定
+ Comment[nl]=Video-apparaten instellen
+ Comment[pt]=Configurar os Dispositivos de Vídeo
+ Comment[pt_BR]=Configurar os Dispositivos de Vídeo
+ Comment[sv]=Anpassa videoenheter
++Comment[x-test]=xxConfigure Video Devicesxx
+ Comment[zh_TW]=設定影像裝置
+-DocPath=kopete/configure-dialog.html#configuring-avdevice
++X-DocPath=kopete/configure-dialog.html#configuring-avdevice
+--- kopete/kopete/config/avdevice/avdeviceconfig.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/avdevice/avdeviceconfig.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -39,7 +39,6 @@
+ #include <qpixmap.h>
+
+ #include <qtabwidget.h>
+-#include <qgl.h>
+
+ //#include "videodevice.h"
+ K_PLUGIN_FACTORY( KopeteAVDeviceConfigFactory,
+@@ -77,8 +76,6 @@
+ connect(mPrfsVideoDevice->mImageAutoBrightnessContrast, SIGNAL(toggled(bool)), this, SLOT(slotImageAutoBrightnessContrastChanged(bool)));
+ connect(mPrfsVideoDevice->mImageAutoColorCorrection, SIGNAL(toggled(bool)), this, SLOT(slotImageAutoColorCorrectionChanged(bool)));
+ connect(mPrfsVideoDevice->mImageAsMirror, SIGNAL(toggled(bool)), this, SLOT(slotImageAsMirrorChanged(bool)));
+- connect(mPrfsVideoDevice->mDeviceDisableMMap, SIGNAL(toggled(bool)), this, SLOT(slotDeviceDisableMMapChanged(bool)));
+- connect(mPrfsVideoDevice->mDeviceWorkaroundBrokenDriver, SIGNAL(toggled(bool)), this, SLOT(slotDeviceWorkaroundBrokenDriverChanged(bool)));
+
+ // why is this here?
+ // mPrfsVideoDevice->mVideoImageLabel->setPixmap(qpixmap);
+@@ -161,8 +158,6 @@
+ mPrfsVideoDevice->mImageAutoBrightnessContrast->setChecked(mVideoDevicePool->getAutoBrightnessContrast());
+ mPrfsVideoDevice->mImageAutoColorCorrection->setChecked(mVideoDevicePool->getAutoColorCorrection());
+ mPrfsVideoDevice->mImageAsMirror->setChecked(mVideoDevicePool->getImageAsMirror());
+- mPrfsVideoDevice->mDeviceDisableMMap->setChecked(mVideoDevicePool->getDisableMMap());
+- mPrfsVideoDevice->mDeviceWorkaroundBrokenDriver->setChecked(mVideoDevicePool->getWorkaroundBrokenDriver());
+ }
+ }
+
+@@ -249,18 +244,6 @@
+ emit changed( true );
+ }
+
+-void AVDeviceConfig::slotDeviceWorkaroundBrokenDriverChanged(bool){
+- kDebug() << "kopete:config (avdevice): slotDeviceWorkaroundBrokenDriverChanged(" << mPrfsVideoDevice->mDeviceWorkaroundBrokenDriver->isChecked() << ") called. ";
+- mVideoDevicePool->setWorkaroundBrokenDriver(mPrfsVideoDevice->mDeviceWorkaroundBrokenDriver->isChecked());
+- emit changed( true );
+-}
+-
+-void AVDeviceConfig::slotDeviceDisableMMapChanged(bool){
+- kDebug() << "kopete:config (avdevice): slotDeviceDisableMMapChanged(" << mPrfsVideoDevice->mDeviceDisableMMap->isChecked() << ") called. ";
+- mVideoDevicePool->setDisableMMap(mPrfsVideoDevice->mDeviceDisableMMap->isChecked());
+- emit changed( true );
+-}
+-
+ void AVDeviceConfig::slotUpdateImage()
+ {
+ mVideoDevicePool->getFrame();
+--- kopete/kopete/config/avdevice/avdeviceconfig_videodevice.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/avdevice/avdeviceconfig_videodevice.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -131,31 +131,18 @@
+ </layout>
+ </item>
+ <item>
+- <widget class="QCheckBox" name="mDeviceDisableMMap" >
+- <property name="sizePolicy" >
+- <sizepolicy vsizetype="Minimum" hsizetype="MinimumExpanding" >
+- <horstretch>0</horstretch>
+- <verstretch>0</verstretch>
+- </sizepolicy>
++ <spacer>
++ <property name="orientation" >
++ <enum>Qt::Vertical</enum>
+ </property>
+- <property name="text" >
+- <string>Disable memor&y mapping</string>
++ <property name="sizeHint" >
++ <size>
++ <width>20</width>
++ <height>40</height>
++ </size>
+ </property>
+- </widget>
++ </spacer>
+ </item>
+- <item>
+- <widget class="QCheckBox" name="mDeviceWorkaroundBrokenDriver" >
+- <property name="sizePolicy" >
+- <sizepolicy vsizetype="Minimum" hsizetype="MinimumExpanding" >
+- <horstretch>0</horstretch>
+- <verstretch>0</verstretch>
+- </sizepolicy>
+- </property>
+- <property name="text" >
+- <string>&Workaround broken driver</string>
+- </property>
+- </widget>
+- </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="TabPage" >
+@@ -458,8 +445,8 @@
+ </property>
+ <property name="minimumSize" >
+ <size>
+- <width>280</width>
+- <height>210</height>
++ <width>320</width>
++ <height>240</height>
+ </size>
+ </property>
+ <property name="frameShape" >
+--- kopete/kopete/config/chatwindow/chatwindowconfig_emoticons.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/chatwindow/chatwindowconfig_emoticons.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -73,6 +73,9 @@
+ </item>
+ <item row="4" column="0" >
+ <widget class="QPushButton" name="btnGetThemes" >
++ <property name="enabled" >
++ <bool>false</bool>
++ </property>
+ <property name="sizePolicy" >
+ <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
+ <horstretch>0</horstretch>
+--- kopete/kopete/config/chatwindow/chatwindowconfig_style.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/chatwindow/chatwindowconfig_style.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -5,8 +5,8 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>281</width>
+- <height>354</height>
++ <width>488</width>
++ <height>284</height>
+ </rect>
+ </property>
+ <property name="sizePolicy" >
+@@ -62,32 +62,21 @@
+ <property name="title" >
+ <string>Display</string>
+ </property>
+- <layout class="QGridLayout" >
+- <property name="leftMargin" >
+- <number>9</number>
+- </property>
+- <property name="topMargin" >
+- <number>9</number>
+- </property>
+- <property name="rightMargin" >
+- <number>9</number>
+- </property>
+- <property name="bottomMargin" >
+- <number>9</number>
+- </property>
+- <property name="horizontalSpacing" >
+- <number>6</number>
+- </property>
+- <property name="verticalSpacing" >
+- <number>6</number>
+- </property>
+- <item row="0" column="0" >
++ <layout class="QHBoxLayout" >
++ <item>
+ <widget class="QCheckBox" name="kcfg_groupConsecutiveMessages" >
+ <property name="text" >
+ <string>Group consecuti&ve messages</string>
+ </property>
+ </widget>
+ </item>
++ <item>
++ <widget class="QCheckBox" name="kcfg_useCompact" >
++ <property name="text" >
++ <string>Co&mpact style in chatrooms</string>
++ </property>
++ </widget>
++ </item>
+ </layout>
+ </widget>
+ </item>
+@@ -208,7 +197,7 @@
+ <item>
+ <widget class="KPushButton" name="btnGetStyles" >
+ <property name="enabled" >
+- <bool>true</bool>
++ <bool>false</bool>
+ </property>
+ <property name="toolTip" >
+ <string>Get new Chat Window styles over the Internet</string>
+@@ -260,6 +249,7 @@
+ <tabstop>installButton</tabstop>
+ <tabstop>deleteButton</tabstop>
+ <tabstop>kcfg_groupConsecutiveMessages</tabstop>
++ <tabstop>kcfg_useCompact</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+--- kopete/kopete/config/chatwindow/kopete_chatwindowconfig.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/chatwindow/kopete_chatwindowconfig.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=view-choose
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_kopete_chatwindowconfig
+ X-KDE-FactoryName=kcm_kopete_chatwindowconfig
+--- kopete/kopete/config/chatwindow/chatwindowconfig.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/config/chatwindow/chatwindowconfig.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -415,8 +415,10 @@
+ slotUpdateChatPreview();
+ // Get the first variant to preview
+ // Check if the current style has variants.
+- if( !m_currentVariantMap.empty() )
++ if( !m_currentVariantMap.empty() ) {
+ m_preview->setStyleVariant(m_currentVariantMap[0]);
++ m_styleUi.kcfg_useCompact->setEnabled(m_currentStyle->hasCompact( QString() ) );
++ }
+
+ emitChanged();
+ }
+@@ -427,6 +429,16 @@
+ // kDebug(14000) << variantName;
+ // kDebug(14000) << m_currentVariantMap[variantName];
+
++ // enable the 'Use compact' checkbox depending on whether the selected variant exists in compact
++ // form
++ QString styleName = m_styleUi.styleList->selectedItem()->text();
++ m_currentStyle = ChatWindowStyleManager::self()->getStyleFromPool( styleName );
++ if ( m_styleUi.variantList->currentIndex() == 0 ) {
++ m_styleUi.kcfg_useCompact->setEnabled(m_currentStyle->hasCompact( "" ) );
++ }
++ else {
++ m_styleUi.kcfg_useCompact->setEnabled(m_currentStyle->hasCompact( variantName ) );
++ }
+ // Update the preview
+ m_preview->setStyleVariant(m_currentVariantMap[variantName]);
+ emitChanged();
+--- kopete/kopete/chatwindow/chatwindow.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/chatwindow.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,6 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-Kopete-Version=1000900
+ X-KDE-Library=kopete_chatwindow
+ X-KDE-PluginInfo-Author=Kopete Developers
+--- kopete/kopete/chatwindow/kopetechatwindowstyle.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/kopetechatwindowstyle.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -20,6 +20,7 @@
+ // Qt includes
+ #include <QFile>
+ #include <QDir>
++#include <QHash>
+ #include <QStringList>
+ #include <QTextStream>
+
+@@ -44,6 +45,7 @@
+ QString statusHtml;
+ QString actionIncomingHtml;
+ QString actionOutgoingHtml;
++ QHash<QString, bool> compactVariants;
+ };
+
+ ChatWindowStyle::ChatWindowStyle(const QString &styleName, StyleBuildMode styleBuildMode)
+@@ -162,11 +164,23 @@
+
+ QStringList variantList = variantDir.entryList( QStringList("*.css") );
+ QStringList::ConstIterator it, itEnd = variantList.constEnd();
++ QLatin1String compactVersionPrefix("_compact_");
+ for(it = variantList.constBegin(); it != itEnd; ++it)
+ {
+ QString variantName = *it, variantPath;
+ // Retrieve only the file name.
+ variantName = variantName.left(variantName.lastIndexOf("."));
++ if ( variantName.startsWith( compactVersionPrefix ) ) {
++ if ( variantName == compactVersionPrefix ) {
++ d->compactVariants.insert( "", true );
++ }
++ continue;
++ }
++ QString compactVersionFilename = *it;
++ QString compactVersionPath = variantDirPath + compactVersionFilename.prepend( compactVersionPrefix );
++ if ( QFile::exists( compactVersionPath )) {
++ d->compactVariants.insert( variantName, true );
++ }
+ // variantPath is relative to baseHref.
+ variantPath = QString("Variants/%1").arg(*it);
+ d->variantsList.insert(variantName, variantPath);
+@@ -294,3 +308,21 @@
+ readStyleFiles();
+ listVariants();
+ }
++
++bool ChatWindowStyle::hasCompact( const QString & styleVariant ) const
++{
++ if ( d->compactVariants.contains( styleVariant ) ) {
++ return d->compactVariants.value( styleVariant );
++ }
++ return false;
++}
++
++QString ChatWindowStyle::compact( const QString & styleVariant ) const
++{
++ QString compacted = styleVariant;
++ if ( styleVariant.isEmpty() ) {
++ return QLatin1String( "Variants/_compact_.css" );
++ } else {
++ return compacted.insert( compacted.lastIndexOf('/') + 1, QString("_compact_") );
++ }
++}
+--- kopete/kopete/chatwindow/kopetechatwindowstyle.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/kopetechatwindowstyle.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -103,6 +103,17 @@
+ bool hasActionTemplate() const;
+
+ /**
++ * Check if the supplied variant has a compact form
++ */
++ bool hasCompact( const QString & variant ) const;
++
++ /**
++ * Return the compact version of the given style variant.
++ * For the unmodified style, this returns "Variants/_compact_.css"
++ */
++ QString compact( const QString & variant ) const;
++
++ /**
+ * Reload style from disk.
+ */
+ void reload();
+--- kopete/kopete/chatwindow/emailwindow.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/emailwindow.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,7 +1,6 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-Kopete-Version=1000900
+ X-KDE-Library=kopete_emailwindow
+ X-KDE-PluginInfo-Author=Kopete Developers
+--- kopete/kopete/chatwindow/chatmessagepart.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/chatmessagepart.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -369,7 +369,7 @@
+ {
+ DOM::HTMLElement variantNode = document().getElementById( QString("mainStyle") );
+ if( !variantNode.isNull() )
+- variantNode.setInnerText( QString("@import url(\"%1\");").arg(variantPath) );
++ variantNode.setInnerText( QString("@import url(\"%1\");").arg( adjustStyleVariantForChatSession( variantPath) ) );
+ }
+
+ void ChatMessagePart::slotAppearanceChanged()
+@@ -1176,7 +1176,7 @@
+ ).arg( d->currentChatStyle->getStyleBaseHref() )
+ .arg( formatStyleKeywords(d->currentChatStyle->getHeaderHtml()) )
+ .arg( formatStyleKeywords(d->currentChatStyle->getFooterHtml()) )
+- .arg( KopeteChatWindowSettings::self()->styleVariant() )
++ .arg( adjustStyleVariantForChatSession( KopeteChatWindowSettings::self()->styleVariant() ) )
+ .arg( styleHTML() );
+ write(xhtmlBase);
+ end();
+@@ -1185,6 +1185,14 @@
+ #endif
+ }
+
++QString ChatMessagePart::adjustStyleVariantForChatSession( const QString & styleVariant ) const
++{
++ if ( d->manager->form() == Kopete::ChatSession::Chatroom
++ && KopeteChatWindowSettings::self()->useCompact() ) {
++ return d->currentChatStyle->compact( styleVariant );
++ }
++ return styleVariant;
++}
+ #include "chatmessagepart.moc"
+
+ // vim: set noet ts=4 sts=4 sw=4:
+--- kopete/kopete/chatwindow/kopetechatwindow.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/kopetechatwindow.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -179,7 +179,7 @@
+
+ if ( windowCreated )
+ {
+- myWindow = new KopeteChatWindow();
++ myWindow = new KopeteChatWindow( manager->form() );
+
+ if ( !accountMap.contains( manager->account() ) )
+ accountMap.insert( manager->account(), myWindow );
+@@ -196,8 +196,8 @@
+ return myWindow;
+ }
+
+-KopeteChatWindow::KopeteChatWindow( QWidget *parent )
+- : KXmlGuiWindow( parent )
++KopeteChatWindow::KopeteChatWindow( Kopete::ChatSession::Form form, QWidget *parent )
++ : KXmlGuiWindow( parent ), initialForm( form )
+ {
+ #ifdef CHRONO
+ QTime chrono;chrono.start();
+@@ -230,7 +230,12 @@
+ vBox->setSpacing( 0 );
+ vBox->setFrameStyle( QFrame::NoFrame );
+ // set default window size. This could be removed by fixing the size hints of the contents
+- resize( 500, 500 );
++ if ( initialForm == Kopete::ChatSession::Chatroom ) {
++ resize( 650, 400 );
++ } else {
++ m_participantsWidget->hide();
++ resize( 400, 400 );
++ }
+ setCentralWidget( vBox );
+
+ mainArea = new QFrame( vBox );
+@@ -509,7 +514,11 @@
+ void KopeteChatWindow::slotStopAnimation( ChatView* view )
+ {
+ if( view == m_activeView )
++ {
+ anim->setPixmap( normalIcon );
++ if( animIcon.state() == QMovie::Running )
++ animIcon.pause();
++ }
+ }
+
+ void KopeteChatWindow::slotUpdateSendEnabled()
+@@ -824,7 +833,7 @@
+
+ if( !action )
+ {
+- newWindow = new KopeteChatWindow();
++ newWindow = new KopeteChatWindow( detachedView->msgManager()->form() );
+ newWindow->setObjectName( QLatin1String("KopeteChatWindow") );
+ }
+ else
+@@ -1090,7 +1099,7 @@
+ {
+ // load and apply config file settings affecting the appearance of the UI
+ // kDebug(14010) ;
+- applyMainWindowSettings( KGlobal::config()->group( QLatin1String( "KopeteChatWindow" ) ) );
++ applyMainWindowSettings( KGlobal::config()->group( ( initialForm == Kopete::ChatSession::Chatroom ? QLatin1String( "KopeteChatWindowGroupMode" ) : QLatin1String( "KopeteChatWindowIndividualMode" ) ) ) );
+ //config->setGroup( QLatin1String("ChatWindowSettings") );
+ }
+
+@@ -1098,7 +1107,7 @@
+ {
+ // kDebug(14010) ;
+
+- KConfigGroup kopeteChatWindowMainWinSettings( KGlobal::config(), QLatin1String( "KopeteChatWindow" ) );
++ KConfigGroup kopeteChatWindowMainWinSettings( KGlobal::config(), ( initialForm == Kopete::ChatSession::Chatroom ? QLatin1String( "KopeteChatWindowGroupMode" ) : QLatin1String( "KopeteChatWindowIndividualMode" ) ) );
+
+ // saves menubar,toolbar and statusbar setting
+ saveMainWindowSettings( kopeteChatWindowMainWinSettings );
+--- kopete/kopete/chatwindow/chatmessagepart.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/chatmessagepart.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -240,6 +240,14 @@
+ */
+ void writeTemplate();
+
++ /**
++ * Adjust style variant to chat session type. This allows the chat window to show a compact
++ * variant of the style for chatrooms and a full-sized version for 1:small chats
++ * @param styleVariant the chosen style variant as a relative path
++ * @return the munged path, eg variant_compact.css
++ */
++ QString adjustStyleVariantForChatSession( const QString & styleVariant ) const;
++
+ class Private;
+ Private *d;
+ };
+--- kopete/kopete/chatwindow/kopetechatwindow.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/kopetechatwindow.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -30,6 +30,7 @@
+ #include <QList>
+ #include "kopetecontact.h"
+ #include "kdeversion.h"
++#include <kopetechatsession.h>
+
+ #include <kopete_export.h>
+
+@@ -53,7 +54,6 @@
+ namespace Kopete
+ {
+ class Message;
+-class ChatSession;
+ class Contact;
+ typedef QList<Contact*> ContactPtrList;
+ }
+@@ -114,7 +114,7 @@
+
+ private:
+ // All KopeteChatWindows are created by the window function
+- KopeteChatWindow( QWidget *parent = 0 );
++ KopeteChatWindow( Kopete::ChatSession::Form form, QWidget *parent = 0 );
+
+ /**
+ * The window list has changed:
+@@ -170,6 +170,7 @@
+ KActionMenu *actionDetachMenu;
+ KActionMenu *actionTabPlacementMenu;
+ QString statusMsg;
++ Kopete::ChatSession::Form initialForm;
+
+ signals:
+ void closing( KopeteChatWindow* );
+--- kopete/kopete/chatwindow/kopetechatwindowsettings.kcfg (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/kopete/chatwindow/kopetechatwindowsettings.kcfg (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -38,6 +38,10 @@
+ <label>Group consecutive messages from the same user as one block.</label>
+ <default>true</default>
+ </entry>
++ <entry key="useCompact" type="Bool">
++ <label>Use a compact variant of the chat style for chatrooms.</label>
++ <default>true</default>
++ </entry>
+
+ <!-- Hightlight preferences -->
+ <entry key="highlightForegroundColor" type="Color">
+--- kopete/doc/t1/kopete_tutorialplugin.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/doc/t1/kopete_tutorialplugin.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Name=Tutorial Plugin
+ Name[bg]=Приставка за историята
+@@ -42,7 +41,7 @@
+ Comment[zh_CN]=Kopete 开发教学示范插件
+ Comment[zh_TW]=教導 Kopete 開發的示範外掛程式
+ Icon=tutorial_plugin
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-Kopete-Version=1000900
+ X-KDE-Library=kopete_tutorialplugin
+ X-KDE-PluginInfo-Author=Will Stephenson
+--- kopete/doc/t2/kopete_tutorialplugin.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/doc/t2/kopete_tutorialplugin.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Name=Tutorial Plugin
+ Name[bg]=Приставка за историята
+@@ -42,7 +41,7 @@
+ Comment[zh_CN]=Kopete 开发教学示范插件
+ Comment[zh_TW]=教導 Kopete 開發的示範外掛程式
+ Icon=tutorial_plugin
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-Kopete-Version=1000900
+ X-KDE-Library=kopete_tutorialplugin
+ X-KDE-PluginInfo-Author=Will Stephenson
+--- kopete/doc/t3/kopete_tutorialplugin.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/doc/t3/kopete_tutorialplugin.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Name=Tutorial Plugin
+ Name[bg]=Приставка за историята
+@@ -42,7 +41,7 @@
+ Comment[zh_CN]=Kopete 开发教学示范插件
+ Comment[zh_TW]=教導 Kopete 開發的示範外掛程式
+ Icon=tutorial_plugin
+-ServiceTypes=Kopete/Plugin
++X-KDE-ServiceTypes=Kopete/Plugin
+ X-Kopete-Version=1000900
+ X-KDE-Library=kopete_tutorialplugin
+ X-KDE-PluginInfo-Author=Will Stephenson
+--- kopete/doc/t3/kopete_tutorialplugin_config.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/doc/t3/kopete_tutorialplugin_config.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Icon=tutorial_plugin
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+ Name=Tutorial
+ Name[bg]=Ръководство
+ Name[ca]=Tutelat
+--- kopete/doc/t3/tutorialpreferences.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/doc/t3/tutorialpreferences.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -2,22 +2,19 @@
+ Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License version 2
+- as published by the Free Software Foundation.
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License or ( at
++ your option ) version 3 or, at the discretion of KDE e.V. ( which shall
++ act as a proxy as in section 14 of the GPLv3 ), any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+- You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software
+- Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- Boston, MA 02110-1301, USA.
+-
+- As a special exception, permission is given to link this program
+- with any edition of Qt, and distribute the resulting executable,
+- without including the source code for Qt in the source distribution.
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+ #include "tutorialpreferences.h"
+--- kopete/doc/t3/tutorialpreferences.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/doc/t3/tutorialpreferences.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -2,22 +2,19 @@
+ Copyright (C) 2007 Will Stephenson <wstephenson at kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License version 2
+- as published by the Free Software Foundation.
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License or ( at
++ your option ) version 3 or, at the discretion of KDE e.V. ( which shall
++ act as a proxy as in section 14 of the GPLv3 ), any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+- You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software
+- Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- Boston, MA 02110-1301, USA.
+-
+- As a special exception, permission is given to link this program
+- with any edition of Qt, and distribute the resulting executable,
+- without including the source code for Qt in the source distribution.
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+ #ifndef TUTORIAL_PREFERENCES_H
+--- kopete/libkopete/kopetechatsession.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopetechatsession.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -78,6 +78,11 @@
+
+ public:
+ /**
++ * Describes the form of this chat session
++ */
++ enum Form { Small,/**< The chat is a small group or 1:1 chat */
++ Chatroom/** Chat with many members and high traffic */ };
++ /**
+ * Delete a chat manager instance
+ * You shouldn't delete the KMM yourself. it will be deleted when the chatwindow is closed
+ * see also @ref setCanBeDeleted() , @ref deref()
+@@ -171,6 +176,12 @@
+ */
+ MessageHandlerChain::Ptr chainForDirection( Message::MessageDirection dir );
+
++ /**
++ * Get the form of this chatsession. This is a hint to the UI so it can present the chat
++ * appropriately
++ */
++ Form form() const;
++
+ signals:
+ /**
+ * @brief the KMM will be deleted
+@@ -377,7 +388,7 @@
+ * static factory method createSession() creates the object. You may
+ * not create instances yourself directly!
+ */
+- ChatSession( const Contact *user, ContactPtrList others, Protocol *protocol );
++ ChatSession( const Contact *user, ContactPtrList others, Protocol *protocol, Form form = Small );
+
+ /**
+ * Set wether or not contact from this account may be invited in this chat.
+--- kopete/libkopete/avdevice/qvideostream.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/qvideostream.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,735 +0,0 @@
+-/*
+- *
+- * Copyright (C) 2002 George Staikos <staikos at kde.org>
+- * 2004 Dirk Ziegelmeier <dziegel at gmx.de>
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public License
+- * along with this library; see the file COPYING.LIB. If not, write to
+- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301, USA.
+- */
+-
+-#include "qvideostream.h"
+-#include <qevent.h>
+-#include <qimage.h>
+-#include <qtimer.h>
+-//Added by qt3to4:
+-#include <QKeyEvent>
+-
+-#include <kdebug.h>
+-#include "kxv.h"
+-
+-#include <sys/types.h>
+-#include <X11/Xutil.h>
+-
+-#ifdef HAVE_XSHM
+-extern "C" {
+-#include <sys/shm.h>
+-#include <X11/X.h>
+-#include <X11/Xlib.h>
+-#include <X11/extensions/XShm.h>
+-}
+-#endif
+-
+-#ifdef HAVE_GL
+-class QVideoStreamGLWidget : public QGLWidget
+-{
+-public:
+- QVideoStreamGLWidget(QWidget* parent = 0);
+- virtual ~QVideoStreamGLWidget();
+-
+- void setInputSize(const QSize& sz);
+- void display(const unsigned char *const img, int x, int y, int sw, int sh);
+-
+-private:
+- virtual void resizeGL(int w, int h);
+- void initializeGL();
+-
+- virtual bool eventFilter( QObject *o, QEvent *e );
+- void calc(QPoint& p, QPoint& v);
+-
+-
+- QSize _inputSize;
+- GLuint _tex;
+- int _tw, _th;
+- QWidget* _w;
+- int _maxGL;
+- QSize _sz;
+- bool _glfun;
+- QPoint _ul, _ur, _ll, _lr;
+- QPoint _vul, _vur, _vll, _vlr;
+- QTimer* _glfunTimer;
+-};
+-#endif
+-
+-class QVideoStreamPrivate
+-{
+-public:
+- QVideoStreamPrivate();
+- ~QVideoStreamPrivate();
+- KXv *xvHandle;
+- KXvDevice *xvdev;
+- XImage *xim;
+- GC gc;
+-#ifdef HAVE_GL
+- QVideoStreamGLWidget* glwidget;
+-#endif
+-#ifdef HAVE_XSHM
+- XShmSegmentInfo shmh;
+-#endif
+-};
+-
+-QVideoStreamPrivate::QVideoStreamPrivate()
+-{
+- xvHandle = 0;
+- xim = 0;
+-}
+-
+-QVideoStreamPrivate::~QVideoStreamPrivate()
+-{
+- delete xvHandle;
+-}
+-
+-QVideoStream::QVideoStream(QWidget *widget)
+- : QObject(widget),
+- d(new QVideoStreamPrivate),
+- _w(widget),
+- _methods(METHOD_NONE),
+- _method(METHOD_NONE),
+- _format(FORMAT_NONE),
+- _init(false)
+-{
+- setObjectName(name);
+- int dummy;
+- unsigned int dummy2;
+- findDisplayProperties(_xFormat, dummy, dummy2, dummy);
+-
+- _methods = (VideoMethod)(_methods | METHOD_X11);
+-
+-#ifdef HAVE_XSHM
+- if (XShmQueryExtension(_w->x11Display())) {
+- _methods = (VideoMethod)(_methods | METHOD_XSHM);
+- }
+-#endif
+-
+- if (KXv::haveXv()) {
+- _methods = (VideoMethod)(_methods | METHOD_XV);
+-#ifdef HAVE_XSHM
+- _methods = (VideoMethod)(_methods | METHOD_XVSHM);
+-#endif
+- }
+-
+-#ifdef HAVE_GL
+- if (QGLFormat::hasOpenGL()) {
+- _methods = (VideoMethod)(_methods | METHOD_GL);
+- }
+-#endif
+-
+- d->gc = XCreateGC(_w->x11Display(), _w->winId(), 0, NULL);
+-}
+-
+-QVideoStream::~QVideoStream()
+-{
+- deInit();
+- XFreeGC(_w->x11Display(), d->gc);
+- delete d;
+-}
+-
+-void QVideoStream::deInit()
+-{
+- if (!_init)
+- return;
+-
+- _init = false;
+- _format = FORMAT_NONE;
+-
+- Q_ASSERT(_methods & _method);
+- if (!(_methods & _method))
+- return;
+-
+- switch (_method) {
+- case METHOD_XSHM:
+-#ifdef HAVE_XSHM
+- XShmDetach(_w->x11Display(), &(d->shmh));
+- XDestroyImage(d->xim);
+- d->xim = 0;
+- shmdt(d->shmh.shmaddr);
+-#endif
+- break;
+- case METHOD_X11:
+- delete[] d->xim->data;
+- d->xim->data = 0;
+- XDestroyImage(d->xim);
+- d->xim = 0;
+- break;
+- case METHOD_XVSHM:
+- case METHOD_XV:
+- delete d->xvHandle;
+- d->xvHandle = 0;
+- break;
+- case METHOD_GL:
+-#ifdef HAVE_GL
+- delete d->glwidget;
+-#endif
+- break;
+- default:
+- Q_ASSERT(0);
+- return;
+- }
+-}
+-
+-void QVideoStream::init()
+-{
+- Q_ASSERT(_methods & _method);
+- if (!(_methods & _method))
+- return;
+-
+- switch (_method) {
+- case METHOD_XSHM:
+- {
+-#ifdef HAVE_XSHM
+- if ( !_inputSize.isValid() ) {
+- kWarning() << "QVideoStream::init() (XSHM): Unable to initialize due to invalid input size.";
+- return;
+- }
+-
+- memset(&(d->shmh), 0, sizeof(XShmSegmentInfo));
+- d->xim = XShmCreateImage(_w->x11Display(),
+- (Visual*)_w->x11Visual(),
+- _w->x11Depth(),
+- ZPixmap, 0, &(d->shmh),
+- _inputSize.width(),
+- _inputSize.height());
+- d->shmh.shmid = shmget(IPC_PRIVATE,
+- d->xim->bytes_per_line*d->xim->height,
+- IPC_CREAT|0600);
+- d->shmh.shmaddr = (char *)shmat(d->shmh.shmid, 0, 0);
+- d->xim->data = (char*)d->shmh.shmaddr;
+- d->shmh.readOnly = False;
+- Status s = XShmAttach(_w->x11Display(), &(d->shmh));
+- if (s) {
+- XSync(_w->x11Display(), False);
+- shmctl(d->shmh.shmid, IPC_RMID, 0);
+- _format = _xFormat;
+- _init = true;
+- } else {
+- kWarning() << "XShmAttach failed!";
+- XDestroyImage(d->xim);
+- d->xim = 0;
+- shmdt(d->shmh.shmaddr);
+- }
+-#endif
+- }
+- break;
+- case METHOD_X11:
+- if ( !_inputSize.isValid() ) {
+- kWarning() << "QVideoStream::init() (X11): Unable to initialize due to invalid input size.";
+- return;
+- }
+-
+- d->xim = XCreateImage(_w->x11Display(),
+- (Visual*)_w->x11Visual(),
+- _w->x11Depth(),
+- ZPixmap, 0, 0,
+- _inputSize.width(),
+- _inputSize.height(),
+- 32, 0);
+-
+- d->xim->data = new char[d->xim->bytes_per_line*_inputSize.height()];
+- _format = _xFormat;
+- _init = true;
+- break;
+- case METHOD_XVSHM:
+- case METHOD_XV:
+- {
+- if (d->xvHandle)
+- delete d->xvHandle;
+-
+- d->xvHandle = KXv::connect(_w->winId());
+- KXvDeviceList& xvdl(d->xvHandle->devices());
+- KXvDevice *xvdev = NULL;
+-
+- for (xvdev = xvdl.first(); xvdev; xvdev = xvdl.next()) {
+- if (xvdev->isImageBackend() &&
+- xvdev->supportsWidget(_w)) {
+- d->xvdev = xvdev;
+- d->xvdev->useShm(_method == METHOD_XVSHM);
+- _format = FORMAT_YUYV;
+- _init = true;
+- break;
+- }
+- }
+-
+- if (!_init) {
+- delete d->xvHandle;
+- d->xvHandle = 0;
+- }
+- }
+- break;
+- case METHOD_GL:
+-#ifdef HAVE_GL
+- d->glwidget = new QVideoStreamGLWidget(_w, "QVideoStreamGLWidget");
+- d->glwidget->resize(_w->width(), _w->height());
+- d->glwidget->show();
+- _format = FORMAT_BGR24;
+- _init = true;
+-#endif
+- break;
+- default:
+- Q_ASSERT(0);
+- return;
+- }
+-}
+-
+-bool QVideoStream::haveMethod(VideoMethod method) const
+-{
+- return _methods & method;
+-}
+-
+-QVideo::VideoMethod QVideoStream::method() const
+-{
+- return _method;
+-}
+-
+-QVideo::VideoMethod QVideoStream::setMethod(VideoMethod method)
+-{
+- if (_methods & method) {
+- deInit();
+- _method = method;
+- init();
+- }
+-
+- return _method;
+-}
+-
+-QSize QVideoStream::maxSize() const
+-{
+- return _size;
+-}
+-
+-int QVideoStream::maxWidth() const
+-{
+- return _size.width();
+-}
+-
+-int QVideoStream::maxHeight() const
+-{
+- return _size.height();
+-}
+-
+-QSize QVideoStream::size() const
+-{
+- return _size;
+-}
+-
+-int QVideoStream::width() const
+-{
+- return _size.width();
+-}
+-
+-int QVideoStream::height() const
+-{
+- return _size.height();
+-}
+-
+-QSize QVideoStream::setSize(const QSize& sz)
+-{
+- _size = sz;
+- return _size;
+-}
+-
+-int QVideoStream::setWidth(int width)
+-{
+- if (width < 0)
+- width = 0;
+- if (width > maxWidth())
+- width = maxWidth();
+- _size.setWidth(width);
+- return _size.width();
+-}
+-
+-int QVideoStream::setHeight(int height)
+-{
+- if (height < 0)
+- height = 0;
+- if (height > maxHeight())
+- height = maxHeight();
+- _size.setHeight(height);
+- return _size.height();
+-}
+-
+-QSize QVideoStream::inputSize() const
+-{
+- return _inputSize;
+-}
+-
+-int QVideoStream::inputWidth() const
+-{
+- return _inputSize.width();
+-}
+-
+-int QVideoStream::inputHeight() const
+-{
+- return _inputSize.height();
+-}
+-
+-QSize QVideoStream::setInputSize(const QSize& sz)
+-{
+- if (sz == _inputSize)
+- return _inputSize;
+- _inputSize = sz;
+- if (_method & (METHOD_XSHM | METHOD_X11)) {
+- deInit();
+- init();
+- }
+-#ifdef HAVE_GL
+- if (_method & METHOD_GL) {
+- d->glwidget->setInputSize(_inputSize);
+- }
+-#endif
+- return _inputSize;
+-}
+-
+-int QVideoStream::setInputWidth(int width)
+-{
+- if (width == _inputSize.width())
+- return _inputSize.width();
+- _inputSize.setWidth(width);
+- if (_method & (METHOD_XSHM | METHOD_X11)) {
+- deInit();
+- init();
+- }
+-#ifdef HAVE_GL
+- if (_method & METHOD_GL) {
+- d->glwidget->setInputSize(_inputSize);
+- }
+-#endif
+- return _inputSize.width();
+-}
+-
+-int QVideoStream::setInputHeight(int height)
+-{
+- if (height == _inputSize.height())
+- return _inputSize.height();
+- _inputSize.setHeight(height);
+- if (_method & (METHOD_XSHM | METHOD_X11)) {
+- deInit();
+- init();
+- }
+-#ifdef HAVE_GL
+- if (_method & METHOD_GL) {
+- d->glwidget->setInputSize(_inputSize);
+- }
+-#endif
+- return _inputSize.height();
+-}
+-
+-bool QVideoStream::supportsFormat(VideoMethod method, ImageFormat format)
+-{
+- return (bool)(formatsForMethod(method) & format);
+-}
+-
+-QVideo::ImageFormat QVideoStream::formatsForMethod(VideoMethod method)
+-{
+- switch(method) {
+- case METHOD_XSHM:
+- case METHOD_X11:
+- return _xFormat;
+- case METHOD_XV:
+- case METHOD_XVSHM:
+- return FORMAT_YUYV;
+- case METHOD_GL:
+- return FORMAT_BGR24;
+- default:
+- return FORMAT_NONE;
+- }
+-}
+-
+-QVideo::ImageFormat QVideoStream::format() const
+-{
+- return _format;
+-}
+-
+-bool QVideoStream::setFormat(ImageFormat format)
+-{
+- if(supportsFormat(_method, format)) {
+- _format = format;
+- return true;
+- } else {
+- return false;
+- }
+-}
+-
+-int QVideoStream::displayFrame(const unsigned char *const img)
+-{
+- return displayFrame(img, 0, 0, _inputSize.width(), _inputSize.height());
+-}
+-
+-int QVideoStream::displayFrame(const unsigned char *const img, int x, int y, int sw, int sh)
+-{
+- Q_ASSERT(_init);
+- if (!_init)
+- return -1;
+-
+- Q_ASSERT(_methods & _method);
+- if (!(_methods & _method))
+- return -1;
+-
+- switch (_method) {
+- case METHOD_XV:
+- case METHOD_XVSHM:
+- return d->xvdev->displayImage(_w, img,
+- _inputSize.width(), _inputSize.height(), x, y, sw, sh,
+- _size.width(), _size.height());
+- break;
+- case METHOD_XSHM:
+-#ifdef HAVE_XSHM
+- memcpy(d->xim->data,img,d->xim->bytes_per_line*d->xim->height);
+- XShmPutImage(_w->x11Display(), _w->winId(), d->gc, d->xim,
+- x, y,
+- 0, 0,
+- sw, sh,
+- 0);
+- XSync(_w->x11Display(), False);
+- break;
+-#else
+- return -1;
+-#endif
+- case METHOD_X11:
+- memcpy(d->xim->data, img, d->xim->bytes_per_line*d->xim->height);
+- XPutImage(_w->x11Display(), _w->winId(), d->gc, d->xim,
+- x, y,
+- 0, 0,
+- sw, sh);
+- XSync(_w->x11Display(), False);
+- break;
+- case METHOD_GL:
+-#ifdef HAVE_GL
+- d->glwidget->display(img, x, y, sw, sh);
+-#endif
+- break;
+- default:
+- Q_ASSERT(0);
+- return -1;
+- }
+-
+- return 0;
+-}
+-
+-QVideoStream& QVideoStream::operator<<(const unsigned char *const img)
+-{
+- displayFrame(img);
+- return *this;
+-}
+-
+-// ---------------------------------------------------------------------------------------
+-#ifdef HAVE_GL
+-
+-QVideoStreamGLWidget::QVideoStreamGLWidget(QWidget* parent, const char* name)
+- : QGLWidget(QGLFormat(QGL::DoubleBuffer | QGL::Rgba | QGL::DirectRendering), parent, name),
+- _tex(0),
+- _w(parent),
+- _glfun(false)
+-{
+- kDebug() << "QVideoStreamGLWidget::QVideoStreamGLWidget()";
+-
+- connect(_w, SIGNAL(resized(int, int)),
+- this, SLOT(resize(int, int)));
+-
+- topLevelWidget()->installEventFilter(this);
+- _glfunTimer = new QTimer();
+-}
+-
+-QVideoStreamGLWidget::~QVideoStreamGLWidget()
+-{
+- kDebug() << "QVideoStreamGLWidget::~QVideoStreamGLWidget()";
+- delete _glfunTimer;
+-
+- makeCurrent();
+- if(_tex != 0) {
+- glDeleteTextures(1, &_tex);
+- }
+-}
+-
+-bool QVideoStreamGLWidget::eventFilter(QObject*, QEvent* e)
+-{
+- // For some reason, KeyPress does not work (yields 2), QEvent::KeyPress is unknown... What the f...????
+- // I am too lazy to scan the header files for the reason.
+- if(e->type() == 6) {
+- QKeyEvent* ke = static_cast<QKeyEvent*>(e);
+- if(ke->key() == Qt::Key_Pause) {
+- _glfunTimer->setSingleShot(true);
+- _glfunTimer->start(500);
+- } else if (_glfunTimer->isActive() && (ke->key() == Qt::Key_Escape)) {
+- _glfun = !_glfun;
+- }
+- }
+- return false;
+-}
+-
+-void QVideoStreamGLWidget::initializeGL()
+-{
+- kDebug() << "QVideoStreamGLWidget::initializeGL()";
+- setAutoBufferSwap(false);
+-
+- QGLFormat f = format();
+- glGetIntegerv(GL_MAX_TEXTURE_SIZE, &_maxGL);
+- kDebug() << "OpenGL capabilities (* = required):";
+- kDebug() << " Valid context*: " << isValid();
+- kDebug() << " DoubleBuffer*: " << f.doubleBuffer();
+- kDebug() << " Depth: " << f.depth();
+- kDebug() << " RGBA*: " << f.rgba();
+- kDebug() << " Alpha: " << f.alpha();
+- kDebug() << " Accum: " << f.accum();
+- kDebug() << " Stencil: " << f.stencil();
+- kDebug() << " Stereo: " << f.stereo();
+- kDebug() << " DirectRendering*: " << f.directRendering();
+- kDebug() << " Overlay: " << f.hasOverlay();
+- kDebug() << " Plane: " << f.plane();
+- kDebug() << " MAX_TEXTURE_SIZE: " << _maxGL;
+-
+- qglClearColor(Qt::black);
+- glShadeModel(GL_FLAT);
+- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+-
+- _vul = QPoint( 4, 10);
+- _vur = QPoint(-8, 4);
+- _vll = QPoint(10, -4);
+- _vlr = QPoint(-8, -10);
+-}
+-
+-void QVideoStreamGLWidget::resizeGL(int w, int h)
+-{
+- _sz = QSize(w, h);
+-
+- glViewport(0, 0, w, h);
+- glMatrixMode(GL_PROJECTION);
+- glLoadIdentity();
+- glOrtho(0.0, w, 0.0, h, -1, 1);
+- glMatrixMode(GL_MODELVIEW);
+- glLoadIdentity();
+-
+- _ul = QPoint(0, 0);
+- _ur = QPoint(w, 0);
+- _ll = QPoint(0, h);
+- _lr = QPoint(w, h);
+-}
+-
+-void QVideoStreamGLWidget::setInputSize(const QSize& sz)
+-{
+- makeCurrent();
+-
+- _inputSize = sz;
+- int iw = _inputSize.width();
+- int ih = _inputSize.height();
+-
+- if ( (iw > _maxGL) || (ih > _maxGL) ) {
+- kWarning() << "QVideoStreamGLWidget::setInputSize(): Texture too large! maxGL: " << _maxGL;
+- return;
+- }
+-
+- // textures have power-of-two x,y dimensions
+- int i;
+- for (i = 0; iw >= (1 << i); i++)
+- ;
+- _tw = (1 << i);
+- for (i = 0; ih >= (1 << i); i++)
+- ;
+- _th = (1 << i);
+-
+- // Generate texture
+- if(_tex != 0) {
+- glDeleteTextures(1, &_tex);
+- }
+- glGenTextures(1, &_tex);
+- glBindTexture(GL_TEXTURE_2D, _tex);
+- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+-
+- // Blank texture
+- char* dummy = new char[_tw*_th*4];
+- memset(dummy, 128, _tw*_th*4);
+- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, _tw, _th, 0,
+- GL_RGB, GL_UNSIGNED_BYTE, dummy);
+- delete[] dummy;
+-}
+-
+-void QVideoStreamGLWidget::display(const unsigned char *const img, int x, int y, int sw, int sh)
+-{
+- makeCurrent();
+-
+- // FIXME: Endianess - also support GL_RGB
+- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, _inputSize.width(), _inputSize.height(),
+- GL_BGR, GL_UNSIGNED_BYTE, img);
+-
+- // upper right coords
+- float ur_x = (float)(x + sw) / _tw;
+- float ur_y = (float)(y + sh) / _th;
+-
+- // lower left coords
+- float ll_x = (float)(x) / _tw;
+- float ll_y = (float)(y) / _th;
+-
+- glEnable(GL_TEXTURE_2D);
+- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
+- glBindTexture(GL_TEXTURE_2D, _tex);
+- if (!_glfun) {
+- glBegin(GL_QUADS);
+- glTexCoord2f(ll_x, ur_y); glVertex2i(0, 0 );
+- glTexCoord2f(ll_x, ll_y); glVertex2i(0, _sz.height());
+- glTexCoord2f(ur_x, ll_y); glVertex2i(_sz.width(), _sz.height());
+- glTexCoord2f(ur_x, ur_y); glVertex2i(_sz.width(), 0 );
+- glEnd();
+- } else {
+- calc(_ul, _vul);
+- calc(_ur, _vur);
+- calc(_ll, _vll);
+- calc(_lr, _vlr);
+-
+- glClear(GL_COLOR_BUFFER_BIT);
+-
+- glBegin(GL_QUADS);
+- glTexCoord2f(0, y); glVertex2i(_ul.x(), _ul.y());
+- glTexCoord2f(0, 0); glVertex2i(_ll.x(), _ll.y());
+- glTexCoord2f(x, 0); glVertex2i(_lr.x(), _lr.y());
+- glTexCoord2f(x, y); glVertex2i(_ur.x(), _ur.y());
+- glEnd();
+- }
+- swapBuffers();
+- glDisable(GL_TEXTURE_2D);
+-}
+-
+-void QVideoStreamGLWidget::calc(QPoint& p, QPoint& v)
+-{
+- p += v;
+-
+- if(p.x() < 0) {
+- p.setX(-p.x());
+- v.setX(-v.x());
+- }
+- if(p.y() < 0) {
+- p.setY(-p.y());
+- v.setY(-v.y());
+- }
+- if(p.x() > _sz.width()) {
+- p.setX(_sz.width() - (p.x() - _sz.width()));
+- v.setX(-v.x());
+- }
+- if(p.y() > _sz.height()) {
+- p.setY(_sz.height() - (p.y() - _sz.height()));
+- v.setY(-v.y());
+- }
+-}
+-#endif
+-
+-#include "qvideostream.moc"
+--- kopete/libkopete/avdevice/qvideo.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/qvideo.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,154 +0,0 @@
+-/***************************************************************************
+- qvideo.cpp
+- ----------
+- begin : Sat Jun 12 2004
+- copyright : (C) 2004 by Dirk Ziegelmeier
+- (C) 2002 by George Staikos
+- email : dziegel at gmx.de
+- ***************************************************************************/
+-
+-/*
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public License
+- * along with this library; see the file COPYING.LIB. If not, write to
+- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301, USA.
+- */
+-
+-#include "qvideo.h"
+-
+-#include <kdebug.h>
+-#include <qpaintdevice.h>
+-#include <QX11Info>
+-#include <X11/Xlib.h>
+-#include <X11/Xutil.h>
+-
+-unsigned int QVideo::bytesppForFormat(ImageFormat fmt)
+-{
+- switch (fmt) {
+- case FORMAT_RGB32:
+- case FORMAT_RGB24:
+- case FORMAT_BGR32:
+- case FORMAT_BGR24:
+- return 4;
+-
+- case FORMAT_RGB15_LE:
+- case FORMAT_RGB16_LE:
+- case FORMAT_RGB15_BE:
+- case FORMAT_RGB16_BE:
+- case FORMAT_YUYV:
+- case FORMAT_UYVY:
+- case FORMAT_YUV422P:
+- case FORMAT_YUV420P:
+- return 2;
+-
+- case FORMAT_GREY:
+- case FORMAT_HI240:
+- return 1;
+-
+- default:
+- // unknown format
+- return 0;
+- }
+-}
+-
+-bool QVideo::findDisplayProperties(ImageFormat& fmt, int& depth, unsigned int& bitsperpixel, int& bytesperpixel)
+-{
+- XVisualInfo *vi_in, vi_out;
+- long mask = VisualScreenMask;
+- int nvis = 0;
+-
+- ImageFormat p = FORMAT_NONE;
+- int bpp = 0;
+- int d = 0;
+-
+- vi_out.screen = QPaintDevice::x11AppScreen();
+- vi_in = XGetVisualInfo(QX11Info::display(), mask, &vi_out, &nvis);
+-
+- if (vi_in) {
+- for (int i = 0; i < nvis; i++) {
+- bpp = 0;
+- int n;
+- XPixmapFormatValues *pf = XListPixmapFormats(QX11Info::display(),&n);
+- d = vi_in[i].depth;
+- for (int j = 0; j < n; j++) {
+- if (pf[j].depth == d) {
+- bpp = pf[j].bits_per_pixel;
+- break;
+- }
+- }
+- XFree(pf);
+-
+- // FIXME: Endianess detection
+-
+- p = FORMAT_NONE;
+- switch (bpp) {
+- case 32:
+- if (vi_in[i].red_mask == 0xff0000 &&
+- vi_in[i].green_mask == 0x00ff00 &&
+- vi_in[i].blue_mask == 0x0000ff) {
+- p = FORMAT_BGR32;
+- kDebug() << "QVideo: Found BGR32 display.";
+- }
+- break;
+- case 24:
+- if (vi_in[i].red_mask == 0xff0000 &&
+- vi_in[i].green_mask == 0x00ff00 &&
+- vi_in[i].blue_mask == 0x0000ff) {
+- p = FORMAT_BGR24;
+- kDebug() << "QVideo: Found BGR24 display.";
+- }
+- break;
+- case 16:
+- if (vi_in[i].red_mask == 0x00f800 &&
+- vi_in[i].green_mask == 0x0007e0 &&
+- vi_in[i].blue_mask == 0x00001f) {
+- p = FORMAT_RGB15_LE;
+- kDebug() << "QVideo: Found RGB16_LE display.";
+- } else
+- if (vi_in[i].red_mask == 0x007c00 &&
+- vi_in[i].green_mask == 0x0003e0 &&
+- vi_in[i].blue_mask == 0x00001f) {
+- p = FORMAT_RGB15_LE;
+- kDebug() << "QVideo: Found RGB15_LE display.";
+- }
+- break;
+- case 8:
+- default:
+- continue;
+- }
+-
+- if (p != FORMAT_NONE)
+- break;
+- }
+- XFree(vi_in);
+- }
+-
+- if (p != FORMAT_NONE) {
+- int bytespp = bytesppForFormat(p);
+- kDebug() << "QVideo: Display properties: depth: " << d
+- << ", bits/pixel: " << bpp
+- << ", bytes/pixel: " << bytespp << endl;
+- fmt = p;
+- bitsperpixel = bpp;
+- bytesperpixel = bytespp;
+- depth = d;
+- return true;
+- } else {
+- kWarning() << "QVideo: Unable to find out palette. What display do you have????";
+- fmt = FORMAT_NONE;
+- bitsperpixel = 0;
+- bytesperpixel = 0;
+- depth = 0;
+- return false;
+- }
+-}
+--- kopete/libkopete/avdevice/kxv.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/kxv.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,710 +0,0 @@
+-/*
+- * KDE Xv interface
+- *
+- * Copyright (C) 2001 George Staikos (staikos at kde.org)
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public License
+- * along with this library; see the file COPYING.LIB. If not, write to
+- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301, USA.
+- */
+-
+-#include <assert.h>
+-#include <QX11Info>
+-#include <qwindowdefs.h>
+-#include <qwidget.h>
+-
+-#include <kdebug.h>
+-
+-#include <config-kopete.h>
+-
+-#include "kxv.h"
+-
+-
+-#include <X11/X.h>
+-#include <X11/Xlib.h>
+-#include <X11/StringDefs.h>
+-#include <X11/Xatom.h>
+-#ifdef HAVE_XSHM
+-extern "C" {
+-#include <sys/shm.h>
+-#include <X11/extensions/XShm.h>
+-}
+-#endif
+-
+-#ifdef HAVE_LIBXV
+-#include <X11/extensions/Xv.h>
+-#include <X11/extensions/Xvlib.h>
+-#endif
+-
+-#ifdef HAVE_LIBXVMC
+-#include <X11/extensions/XvMC.h>
+-#include <X11/extensions/XvMClib.h>
+-#endif
+-
+-
+-KXv::KXv()
+-{
+- xv_adaptors = 0;
+-}
+-
+-
+-KXv::~KXv()
+-{
+- kDebug() << "KXv::~KXv: Close Xv connection.";
+- qDeleteAll(_devs);
+- _devs.clear();
+-
+-#ifdef HAVE_LIBXV
+- if (xv_adaptors > 0)
+- XvFreeAdaptorInfo((XvAdaptorInfo *)xv_adaptor_info);
+-#endif
+-}
+-
+-
+-KXvDeviceList& KXv::devices()
+-{
+- return _devs;
+-}
+-
+-
+-bool KXv::haveXv()
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- unsigned int tmp;
+- if (Success != XvQueryExtension(QX11Info::display(),
+- &tmp,
+- &tmp,
+- &tmp,
+- &tmp,
+- &tmp))
+- return false;
+-
+- return true;
+-#endif
+-}
+-
+-
+-KXv* KXv::connect(Drawable d)
+-{
+- KXv *xvptr;
+-
+- xvptr = new KXv;
+- if (!xvptr->init(d)) {
+- kDebug() << "KXv::connect: Xv init failed.";
+- delete xvptr;
+- return NULL;
+- }
+-
+- kDebug() << "KXv::connect: Xv init completed.";
+- return xvptr;
+-}
+-
+-
+-bool KXv::init(Drawable d)
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- if (Success != XvQueryExtension(QX11Info::display(),
+- &xv_version,
+- &xv_release,
+- &xv_request,
+- &xv_event,
+- &xv_error)) {
+- kWarning() << "KXv::init: Xv extension not available.";
+- return false;
+- }
+-
+-#ifdef HAVE_LIBXVMC
+- // Causes crashes for some people.
+- // if (Success == XvMCQueryExtension(QX11Info::display(),0,0)) {
+- // kDebug() << "Found XvMC!";
+- // }
+-#endif
+-
+- if (Success != XvQueryAdaptors(QX11Info::display(),
+- d,
+- &xv_adaptors,
+- (XvAdaptorInfo **)&xv_adaptor_info)) {
+- // Note technically fatal... what to do?
+- kWarning() << "KXv::init: XvQueryAdaptors failed.";
+- }
+-
+- XvAdaptorInfo *ai = (XvAdaptorInfo *)xv_adaptor_info;
+-
+- for (unsigned int i = 0; i < xv_adaptors; i++) {
+- KXvDevice *xvd = new KXvDevice;
+- xvd->xv_type = ai[i].type;
+- xvd->xv_port = ai[i].base_id;
+- xvd->xv_name = ai[i].name;
+- xvd->xv_adaptor = i;
+- xvd->xv_nvisualformats = ai[i].num_formats;
+- xvd->xv_visualformats = ai[i].formats;
+- if (ai[i].type & XvInputMask &&
+- ai[i].type & XvVideoMask ) {
+- kDebug() << "KXv::init: Xv VideoMask port " << ai[i].base_id << " was found."
+- << " Device is: " << ai[i].name << "." << endl;
+- }
+- if (ai[i].type & XvInputMask &&
+- ai[i].type & XvImageMask ) {
+- kDebug() << "KXv::init: Xv ImageMask port " << ai[i].base_id << " was found."
+- << " Device is: " << ai[i].name << "." << endl;
+- }
+-
+- if (xvd->init()) {
+- _devs.append(xvd);
+- } else {
+- delete xvd;
+- }
+- }
+-
+- return true;
+-#endif
+-}
+-
+-bool KXvDevice::grabStill(QImage* /*pix*/, int /*dw*/, int /*dh*/)
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- return false;
+-#endif
+-}
+-
+-int KXvDevice::displayImage(QWidget *widget, const unsigned char *const data, int w, int h, int dw, int dh)
+-{
+- if (!widget)
+- return -1;
+- return displayImage(widget->winId(), data, w, h, 0, 0, w, h, dw, dh);
+-}
+-
+-int KXvDevice::displayImage(QWidget *widget, const unsigned char *const data, int w, int h, int x, int y, int sw, int sh, int dw, int dh)
+-{
+- if (!widget)
+- return -1;
+- return displayImage(widget->winId(), data, w, h, x, y, sw, sh, dw, dh);
+-}
+-
+-int KXvDevice::displayImage(Window win, const unsigned char *const data, int w, int h, int dw, int dh)
+-{
+- return displayImage(win, data, w, h, 0, 0, w, h, dw, dh);
+-}
+-
+-int KXvDevice::displayImage(Window win, const unsigned char *const data, int w, int h, int x, int y, int sw, int sh, int dw, int dh)
+-{
+-#ifndef HAVE_LIBXV
+- return -1;
+-#else
+- Q_ASSERT(xv_port != -1);
+-
+- // Must be a video capable device!
+- if (!(xv_type & XvImageMask) || !(xv_type & XvInputMask)) {
+- kWarning() << "KXvDevice::displayImage: This is not a video capable device.";
+- return -1;
+- }
+-
+- if (xv_image_w != w || xv_image_h != h || !xv_image)
+- rebuildImage(w, h, _shm);
+-
+- if (!xv_image)
+- return -1;
+-
+- if (win != xv_last_win && xv_gc) {
+- XFreeGC(QX11Info::display(), xv_gc);
+- xv_gc = 0;
+- }
+-
+- if (!xv_gc) {
+- xv_last_win = win;
+- xv_gc = XCreateGC(QX11Info::display(), win, 0, NULL);
+- }
+-
+- int rc = 0;
+- Q_ASSERT(xv_image);
+- if (!_shm) {
+- static_cast<XvImage*>(xv_image)->data =
+- (char *)const_cast<unsigned char*>(data);
+- rc = XvPutImage(QX11Info::display(), xv_port, win, xv_gc,
+- static_cast<XvImage*>(xv_image), x, y, sw, sh, 0, 0, dw, dh);
+- } else {
+-#ifdef HAVE_XSHM
+- memcpy(static_cast<XvImage*>(xv_image)->data, data, static_cast<XvImage*>(xv_image)->data_size);
+- rc = XvShmPutImage(QX11Info::display(), xv_port, win, xv_gc,
+- static_cast<XvImage*>(xv_image), x, y, sw, sh, 0, 0, dw, dh, 0);
+-#endif
+- }
+-
+- XSync(QX11Info::display(), False);
+- return rc;
+-#endif
+-}
+-
+-
+-bool KXvDevice::startVideo(QWidget *w, int dw, int dh)
+-{
+- if (!w) return false;
+- return startVideo(w->winId(), dw, dh);
+-}
+-
+-
+-bool KXvDevice::startVideo(Window w, int dw, int dh)
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- int sx = 0, sy = 0, dx = 0, dy = 0, sw = dw, sh = dh;
+-
+- // Must be a video capable device!
+- if (!(xv_type & XvVideoMask) || !(xv_type & XvInputMask)) {
+- kWarning() << "KXvDevice::startVideo: This is not a video capable device.";
+- return false;
+- }
+-
+- if (videoStarted) stopVideo();
+-
+- if (xv_port == -1) {
+- kWarning() << "KXvDevice::startVideo: No xv_port.";
+- return false;
+- }
+-
+- if (w != xv_last_win && xv_gc) {
+- XFreeGC(QX11Info::display(), xv_gc);
+- xv_gc = 0;
+- }
+-
+- if (!xv_gc) {
+- xv_last_win = w;
+- xv_gc = XCreateGC(QX11Info::display(), w, 0, NULL);
+- }
+-
+- if (-1 != xv_encoding) {
+- sw = ((XvEncodingInfo *)xv_encoding_info)[xv_encoding].width;
+- sh = ((XvEncodingInfo *)xv_encoding_info)[xv_encoding].height;
+- }
+-
+- // xawtv does this here:
+- // ng_ratio_fixup(&dw, &dh, &dx, &dy);
+-
+- kDebug() << "XvPutVideo: " << QX11Info::display()
+- << " " << xv_port << " " << w << " " << xv_gc
+- << " " << sx << " " << sy << " " << sw << " " << sh
+- << " " << dx << " " << dy << " " << dw << " " << dh << endl;
+- XvPutVideo(QX11Info::display(), xv_port, w, xv_gc, sx, sy, sw, sh, dx, dy, dw, dh);
+-
+- videoStarted = true;
+- videoWindow = w;
+- return true;
+-#endif
+-}
+-
+-bool KXvDevice::stopVideo()
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- if (!videoStarted)
+- return true;
+- if (xv_port == -1) {
+- kWarning() << "KXvDevice::stopVideo: No xv_port.";
+- return false;
+- }
+-
+- XvStopVideo(QX11Info::display(), xv_port, videoWindow);
+- videoStarted = false;
+- return true;
+-#endif
+-}
+-
+-
+-KXvDevice::KXvDevice()
+-{
+- xv_encoding_info = NULL;
+- xv_formatvalues = NULL;
+- xv_attr = NULL;
+- xv_port = -1;
+- xv_encoding = -1;
+- xv_name.clear();
+- xv_type = -1;
+- xv_adaptor = -1;
+- _shm = false;
+-#ifdef HAVE_LIBXV
+- xv_imageformat = 0x32595559; // FIXME (YUY2)
+-#ifdef HAVE_XSHM
+- if (!XShmQueryExtension(QX11Info::display())) {
+- _haveShm = false;
+- } else {
+- _shm = true;
+- _haveShm = true;
+- }
+- xv_shminfo = new XShmSegmentInfo;
+-#else
+- xv_shminfo = 0;
+-#endif
+-#endif
+- xv_gc = 0;
+- xv_last_win = 0;
+- videoStarted = false;
+- xv_image = 0;
+- xv_image_w = 320;
+- xv_image_h = 200;
+-}
+-
+-
+-KXvDevice::~KXvDevice()
+-{
+-#ifdef HAVE_LIBXV
+- qDeleteAll(_attrs);
+- _attrs.clear();
+- if (videoStarted) stopVideo();
+- if (xv_encoding_info)
+- XvFreeEncodingInfo((XvEncodingInfo *)xv_encoding_info);
+- XFree(xv_formatvalues);
+- XFree(xv_attr);
+-#ifdef HAVE_XSHM
+- delete (XShmSegmentInfo*)xv_shminfo;
+-#endif
+- destroyImage();
+-#endif
+- if (xv_gc)
+- XFreeGC(QX11Info::display(), xv_gc);
+-
+-#ifdef HAVE_LIBXV
+- if (xv_port != -1)
+- XvUngrabPort(QX11Info::display(), xv_port, CurrentTime);
+-#endif
+-}
+-
+-
+-bool KXvDevice::init()
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- assert(xv_port != -1); // make sure we were prepped by KXv already.
+-
+- if (XvGrabPort(QX11Info::display(), xv_port, CurrentTime)) {
+- kWarning() << "KXvDevice::init(): Unable to grab Xv port.";
+- return false;
+- }
+-
+- if (Success != XvQueryEncodings(QX11Info::display(),
+- xv_port,
+- &xv_encodings,
+- (XvEncodingInfo **)&xv_encoding_info)) {
+- kWarning() << "KXvDevice::init: Xv QueryEncodings failed. Dropping Xv support for this device.";
+- return false;
+- }
+-
+- // Package the encodings up nicely
+- for (unsigned int i = 0; i < xv_encodings; i++) {
+- //kDebug() << "Added encoding: " << ((XvEncodingInfo *)xv_encoding_info)[i].name;
+- _encodingList << ((XvEncodingInfo *)xv_encoding_info)[i].name;
+- }
+-
+- xv_attr = XvQueryPortAttributes(QX11Info::display(),
+- xv_port,
+- &xv_encoding_attributes);
+- XvAttribute *xvattr = (XvAttribute *)xv_attr;
+- kDebug() << "Attributes for port " << xv_port;
+- for (int i = 0; i < xv_encoding_attributes; i++) {
+- assert(xvattr);
+- kDebug() << " -> " << xvattr[i].name
+- << ((xvattr[i].flags & XvGettable) ? " get" : "")
+- << ((xvattr[i].flags & XvSettable) ? " set" : "")
+- << " Range: " << xvattr[i].min_value
+- << " -> " << xvattr[i].max_value << endl;
+-
+- KXvDeviceAttribute *xvda = new KXvDeviceAttribute;
+- xvda->name = xvattr[i].name;
+- xvda->min = xvattr[i].min_value;
+- xvda->max = xvattr[i].max_value;
+- xvda->flags = xvattr[i].flags;
+- _attrs.append(xvda);
+- }
+-
+- XvImageFormatValues *fo;
+- fo = XvListImageFormats(QX11Info::display(), xv_port, &xv_formats);
+- xv_formatvalues = (void *)fo;
+- kDebug() << "Image formats for port " << xv_port;
+- for (int i = 0; i < xv_formats; i++) {
+- assert(fo);
+- QString imout;
+- imout.sprintf(" 0x%x (%c%c%c%c) %s",
+- fo[i].id,
+- fo[i].id & 0xff,
+- (fo[i].id >> 8) & 0xff,
+- (fo[i].id >> 16) & 0xff,
+- (fo[i].id >> 24) & 0xff,
+- ((fo[i].format == XvPacked) ?
+- "Packed" : "Planar"));
+- kDebug() << imout;
+- }
+-
+- kDebug() << "Disabling double buffering.";
+- setAttribute("XV_DOUBLE_BUFFER", 0);
+-
+- return true;
+-#endif
+-}
+-
+-
+-bool KXvDevice::supportsWidget(QWidget *w)
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- for (int i = 0; i < xv_nvisualformats; i++) {
+- if (static_cast<XvFormat*>(xv_visualformats)[i].visual_id
+- == static_cast<Visual*>(w->x11Visual())->visualid) {
+- return true;
+- }
+- }
+- return false;
+-#endif
+-}
+-
+-
+-bool KXvDevice::isVideoSource()
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- if (xv_type & XvVideoMask && xv_type & XvInputMask)
+- return true;
+- return false;
+-#endif
+-}
+-
+-
+-bool KXvDevice::isImageBackend()
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- if (xv_type & XvImageMask && xv_type & XvInputMask)
+- return true;
+- return false;
+-#endif
+-}
+-
+-
+-const KXvDeviceAttributes& KXvDevice::attributes()
+-{
+- return _attrs;
+-}
+-
+-
+-bool KXvDevice::getAttributeRange(const QString& attribute, int *min, int *max)
+-{
+- for (KXvDeviceAttributes::iterator it = _attrs.begin(); it != _attrs.end(); ++it) {
+- if ((*it)->name == attribute) {
+- if (min) *min = (*it)->min;
+- if (max) *max = (*it)->max;
+- return true;
+- }
+- }
+- return false;
+-}
+-
+-
+-bool KXvDevice::getAttribute(const QString& attribute, int *val)
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- for (KXvDeviceAttributes::iterator it = _attrs.begin(); it != _attrs.end(); ++it) {
+- if ((*it)->name == attribute) {
+- if (val)
+- XvGetPortAttribute(QX11Info::display(), xv_port, (*it)->atom(), val);
+- return true;
+- }
+- }
+- return false;
+-#endif
+-}
+-
+-
+-bool KXvDevice::setAttribute(const QString& attribute, int val)
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- for (KXvDeviceAttributes::iterator it = _attrs.begin(); it != _attrs.end(); ++it) {
+- if ((*it)->name == attribute) {
+- XvSetPortAttribute(QX11Info::display(), xv_port, (*it)->atom(), val);
+- XSync(QX11Info::display(), False);
+- return true;
+- }
+- }
+- return false;
+-#endif
+-}
+-
+-
+-const QString& KXvDevice::name() const
+-{
+- return xv_name;
+-}
+-
+-
+-int KXvDevice::port() const
+-{
+- return xv_port;
+-}
+-
+-const QStringList& KXvDevice::encodings() const
+-{
+- return _encodingList;
+-}
+-
+-bool KXvDevice::encoding(QString& encoding)
+-{
+-#ifndef HAVE_LIBXV
+- return false;
+-#else
+- XvEncodingID enc;
+-
+- for (KXvDeviceAttributes::iterator it = _attrs.begin(); it != _attrs.end(); ++it) {
+- if ((*it)->name == "XV_ENCODING") {
+- XvGetPortAttribute(QX11Info::display(), xv_port, (*it)->atom(), (int*)&enc);
+- kDebug() << "KXvDevice: encoding: " << enc;
+- encoding = enc;
+- return true;
+- }
+- }
+- return false;
+-#endif
+-}
+-
+-bool KXvDevice::setEncoding(const QString& e)
+-{
+-#ifdef HAVE_LIBXV
+- for (unsigned int i = 0; i < xv_encodings; i++) {
+- if (e == ((XvEncodingInfo *)xv_encoding_info)[i].name) {
+- xv_encoding = i;
+- return setAttribute("XV_ENCODING",
+- ((XvEncodingInfo *)xv_encoding_info)[i].encoding_id);
+- }
+- }
+-#endif
+- return false;
+-}
+-
+-bool KXvDevice::videoPlaying() const
+-{
+- return videoStarted;
+-}
+-
+-
+-bool KXvDevice::useShm(bool on)
+-{
+-#ifndef HAVE_XSHM
+- if (on) {
+- return false;
+- }
+-#endif
+- if (!_haveShm) {
+- return false;
+- }
+- if (_shm != on)
+- rebuildImage(xv_image_w, xv_image_h, on);
+- if (_haveShm) // This can change in rebuildImage()
+- _shm = on;
+- return _shm;
+-}
+-
+-
+-bool KXvDevice::usingShm() const
+-{
+- return _shm;
+-}
+-
+-
+-#include <unistd.h>
+-#include <QX11Info>
+-void KXvDevice::rebuildImage(int w, int h, bool shm)
+-{
+- if (xv_image) {
+- destroyImage();
+- }
+-#ifdef HAVE_LIBXV
+- if (!shm) {
+- xv_image = (void*)XvCreateImage(QX11Info::display(), xv_port, xv_imageformat,
+- 0, w, h);
+- if (!xv_image) {
+- kWarning() << "KXvDevice::rebuildImage: XvCreateImage failed.";
+- }
+- } else {
+-#ifdef HAVE_XSHM
+- memset(xv_shminfo, 0, sizeof(XShmSegmentInfo));
+- xv_image = (void*)XvShmCreateImage(QX11Info::display(), xv_port, xv_imageformat,
+- 0, w, h, static_cast<XShmSegmentInfo*>(xv_shminfo));
+- if (!xv_image) {
+- kWarning() << "KXvDevice::rebuildImage: Error using SHM with Xv! Disabling SHM...";
+- _haveShm = false;
+- _shm = false;
+- xv_image = (void*)XvCreateImage(QX11Info::display(), xv_port, xv_imageformat,
+- 0, w, h);
+- if (!xv_image) {
+- kWarning() << "KXvDevice::rebuildImage: XvCreateImage failed.";
+- }
+- } else {
+- static_cast<XShmSegmentInfo*>(xv_shminfo)->shmid =
+- shmget(IPC_PRIVATE,
+- static_cast<XvImage*>(xv_image)->data_size,
+- IPC_CREAT | 0600);
+- static_cast<XShmSegmentInfo*>(xv_shminfo)->shmaddr =
+- (char*)shmat(static_cast<XShmSegmentInfo*>(xv_shminfo)->shmid, 0, 0);
+- static_cast<XShmSegmentInfo*>(xv_shminfo)->readOnly = True;
+- static_cast<XvImage*>(xv_image)->data =
+- static_cast<XShmSegmentInfo*>(xv_shminfo)->shmaddr;
+- XShmAttach(QX11Info::display(), static_cast<XShmSegmentInfo*>(xv_shminfo));
+- XSync(QX11Info::display(), False);
+- shmctl(static_cast<XShmSegmentInfo*>(xv_shminfo)->shmid, IPC_RMID, 0);
+- }
+-#endif
+- }
+- Q_ASSERT(xv_image != 0);
+- xv_image_w = w;
+- xv_image_h = h;
+-#endif
+-}
+-
+-
+-void KXvDevice::destroyImage()
+-{
+-#ifdef HAVE_LIBXV
+- if (!_shm) {
+- if (xv_image) {
+- static_cast<XvImage*>(xv_image)->data = 0;
+- }
+- } else {
+- if (xv_image) {
+-#ifdef HAVE_XSHM
+- shmdt(static_cast<XShmSegmentInfo*>(xv_shminfo)->shmaddr);
+-#endif
+- }
+- }
+- XFree(xv_image);
+- xv_image = 0;
+-#endif
+-}
+-
+-
+-Atom KXvDeviceAttribute::atom()
+-{
+- return XInternAtom(QX11Info::display(), name.toLatin1(), False);
+-}
+--- kopete/libkopete/avdevice/qvideostream.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/qvideostream.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,110 +0,0 @@
+-// -*- c++ -*-
+-
+-/*
+- *
+- * Copyright (C) 2002 George Staikos <staikos at kde.org>
+- * 2004 Dirk Ziegelmeier <dziegel at gmx.de>
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public License
+- * along with this library; see the file COPYING.LIB. If not, write to
+- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301, USA.
+- */
+-
+-#ifndef _QVIDEOSTREAM_H
+-#define _QVIDEOSTREAM_H
+-
+-#include <config-kopete.h>
+-
+-#ifdef HAVE_GL
+-#include <qgl.h>
+-#include <GL/gl.h>
+-#endif
+-
+-#include <qwidget.h>
+-#include "qvideo.h"
+-
+-class QVideoStreamPrivate;
+-
+-/**
+- * QT-style video stream driver.
+- */
+-class QVideoStream : public QObject, public QVideo
+-{
+- Q_OBJECT
+-
+-public:
+- QVideoStream(QWidget *widget = 0);
+- ~QVideoStream();
+-
+- /* output method */
+- bool haveMethod(VideoMethod method) const;
+- VideoMethod method() const;
+- VideoMethod setMethod(VideoMethod method);
+-
+- /* max output sizes */
+- QSize maxSize() const;
+- int maxWidth() const;
+- int maxHeight() const;
+-
+- /* output sizes */
+- QSize size() const;
+- int width() const;
+- int height() const;
+-
+- QSize setSize(const QSize& sz);
+- int setWidth(int width);
+- int setHeight(int height);
+-
+- /* input sizes */
+- QSize inputSize() const;
+- int inputWidth() const;
+- int inputHeight() const;
+-
+- QSize setInputSize(const QSize& sz);
+- int setInputWidth(int width);
+- int setInputHeight(int height);
+-
+- /* input format */
+- ImageFormat format() const;
+- bool setFormat(ImageFormat format);
+-
+- /* functions to find out about formats */
+- ImageFormat formatsForMethod(VideoMethod method);
+- bool supportsFormat(VideoMethod method, ImageFormat format);
+-
+- /* Display image */
+- QVideoStream& operator<<(const unsigned char *const img);
+-
+-public slots:
+- int displayFrame(const unsigned char *const img);
+- int displayFrame(const unsigned char *const img, int x, int y, int sw, int sh);
+-
+-private:
+- QVideoStreamPrivate* d;
+-
+- QWidget* _w;
+- VideoMethod _methods; // list of methods
+- VideoMethod _method; // the current method
+- ImageFormat _format;
+- QSize _size;
+- QSize _inputSize;
+- bool _init;
+- ImageFormat _xFormat;
+-
+- void deInit();
+- void init();
+-};
+-
+-#endif
+-
+--- kopete/libkopete/avdevice/qvideo.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/qvideo.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,68 +0,0 @@
+-// -*- c++ -*-
+-/***************************************************************************
+- qvideo.h
+- --------
+- begin : Sat Jun 12 2004
+- copyright : (C) 2004 by Dirk Ziegelmeier
+- email : dziegel at gmx.de
+- ***************************************************************************/
+-
+-/*
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public License
+- * along with this library; see the file COPYING.LIB. If not, write to
+- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301, USA.
+- */
+-
+-#ifndef QVIDEO_H
+-#define QVIDEO_H
+-
+-class QVideo
+-{
+-public:
+- typedef enum {
+- FORMAT_NONE = 0,
+- FORMAT_GREY = (1<<0),
+- FORMAT_HI240 = (1<<1),
+- FORMAT_RGB15_LE = (1<<2),
+- FORMAT_RGB15_BE = (1<<3),
+- FORMAT_RGB16_LE = (1<<4),
+- FORMAT_RGB16_BE = (1<<5),
+- FORMAT_RGB32 = (1<<6),
+- FORMAT_BGR32 = (1<<7),
+- FORMAT_RGB24 = (1<<8),
+- FORMAT_BGR24 = (1<<9),
+- FORMAT_YUYV = (1<<10),
+- FORMAT_UYVY = (1<<11),
+- FORMAT_YUV422P = (1<<12),
+- FORMAT_YUV420P = (1<<13),
+- FORMAT_ALL = 0x00003FFF
+- } ImageFormat;
+-
+- typedef enum {
+- METHOD_NONE = 0,
+- METHOD_XSHM = 1,
+- METHOD_XV = 2,
+- METHOD_XVSHM = 4,
+- METHOD_X11 = 8,
+- METHOD_DGA = 16, /* unimplemented */
+- METHOD_GL = 32,
+- METHOD_SDL = 64 /* unimplemented */
+- } VideoMethod;
+-
+- static unsigned int bytesppForFormat(ImageFormat fmt);
+- static bool findDisplayProperties(ImageFormat& fmt, int& depth, unsigned int& bitsperpixel, int& bytesperpixel);
+-};
+-
+-#endif //QVIDEO_H
+-
+--- kopete/libkopete/avdevice/kxv.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/kxv.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,260 +0,0 @@
+-/*
+- * KDE Xv interface
+- *
+- * Copyright (C) 2001 George Staikos (staikos at kde.org)
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Library General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Library General Public License for more details.
+- *
+- * You should have received a copy of the GNU Library General Public License
+- * along with this library; see the file COPYING.LIB. If not, write to
+- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301, USA.
+- */
+-
+-#ifndef __KXV_H
+-#define __KXV_H
+-
+-#include <X11/X.h>
+-#include <X11/Xlib.h>
+-#include <QString>
+-#include <QStringList>
+-#include <QList>
+-
+-class QWidget;
+-class QImage;
+-
+-class KXvPrivate;
+-class KXvDevice;
+-class KXvDevicePrivate;
+-
+-typedef QList<KXvDevice*> KXvDeviceList;
+-
+-
+-class KXv
+-{
+-public:
+- ~KXv();
+-
+- /*
+- * To get access to the Xv extension, you call this method. It will return
+- * a KXv* object on success, or NULL if it can't connect.
+- *
+- * d is typically the Window ID
+- */
+- static KXv *connect(Drawable d);
+-
+- /*
+- * True if we can connect to the Xv extension.
+- */
+- static bool haveXv();
+-
+- /*
+- * Return the list of Xv devices
+- */
+- KXvDeviceList& devices();
+-
+-protected:
+- KXv();
+- bool init(Drawable d);
+-
+- /*** XV info ***/
+- unsigned int xv_version, xv_release, xv_request, xv_event, xv_error;
+- unsigned int xv_adaptors;
+- void *xv_adaptor_info;
+-
+- KXvDeviceList _devs;
+-
+-private:
+- KXvPrivate *d;
+-};
+-
+-
+-
+-class KXvDeviceAttribute
+-{
+-public:
+- QString name;
+- int min;
+- int max;
+- int flags;
+-
+- Atom atom();
+-};
+-
+-typedef QList<KXvDeviceAttribute*> KXvDeviceAttributes;
+-
+-
+-class KXvDevice
+-{
+- friend class KXv;
+-public:
+-
+- KXvDevice();
+- ~KXvDevice();
+-
+- /*
+- * return the list of known attributes
+- */
+- const KXvDeviceAttributes& attributes();
+-
+- /*
+- * return the range for a given attribute
+- */
+- bool getAttributeRange(const QString& attribute, int *min, int *max);
+-
+- /*
+- * get the current value of a given attribute
+- */
+- bool getAttribute(const QString& attribute, int *val);
+-
+- /*
+- * set the current value of a given attribute
+- */
+- bool setAttribute(const QString& attribute, int val);
+-
+- bool grabStill(QImage *pix, int dw, int dh);
+-
+- /*
+- * True if this device can operate on the given widget
+- */
+- bool supportsWidget(QWidget *w);
+-
+- /*
+- * Display the given image with Xv.
+- */
+- int displayImage(QWidget *widget, const unsigned char *const data, int w, int h, int dw, int dh);
+- int displayImage(Window win, const unsigned char *const data, int w, int h, int dw, int dh);
+-
+- /*
+- * Display a portion of the given image with Xv.
+- */
+- int displayImage(QWidget *widget, const unsigned char *const data, int w, int h, int x, int y, int sw, int sh, int dw, int dh);
+- int displayImage(Window win, const unsigned char *const data, int w, int h, int x, int y, int sw, int sh, int dw, int dh);
+-
+- /*
+- * Start a video stream in widget w, width dw, height dh
+- */
+- bool startVideo(QWidget *w, int dw, int dh);
+- bool startVideo(Window w, int dw, int dh);
+-
+- /*
+- * Is the video playing
+- */
+- bool videoPlaying() const;
+-
+- /*
+- * Stop video stream
+- */
+- bool stopVideo();
+-
+- /*
+- * True if this is an image output backend (video card)
+- */
+- bool isImageBackend();
+-
+- /*
+- * True if this is a video source
+- */
+- bool isVideoSource();
+-
+- /*
+- * Name of the device
+- */
+- const QString& name() const;
+-
+- /*
+- * The Xv port for this device
+- */
+- int port() const;
+-
+- /*
+- * The list of encodings/norms available
+- */
+- const QStringList& encodings() const;
+-
+- /*
+- * get encoding
+- */
+- bool encoding(QString& encoding);
+-
+- /*
+- * Set the encoding to the given one. This should be taken from the list.
+- */
+- bool setEncoding(const QString& e);
+-
+- /*
+- * Set the image format. (ex YUV)
+- */
+- int setImageFormat(int format);
+-
+- /*
+- * Get the current image format
+- */
+- int imageFormat() const;
+-
+- /*
+- * Use SHM for PutImage if available
+- */
+- bool useShm(bool on);
+-
+- /*
+- * Is SHM being used?
+- */
+- bool usingShm() const;
+-
+-
+-protected:
+- bool init();
+-
+- bool _shm;
+- KXvDeviceAttributes _attrs;
+-
+- int xv_type, xv_adaptor;
+- QString xv_name;
+- int xv_port;
+- unsigned int xv_encodings;
+- int xv_encoding;
+- void *xv_encoding_info;
+- int xv_encoding_attributes;
+- void *xv_attr;
+- GC xv_gc;
+- Window xv_last_win;
+-
+- QStringList _encodingList;
+-
+- int xv_formats;
+- void *xv_formatvalues;
+-
+- int xv_nvisualformats;
+- void *xv_visualformats; // XvFormat*
+-
+- bool videoStarted;
+- Window videoWindow;
+-
+- long xv_imageformat;
+-
+- void *xv_shminfo;
+- void *xv_image;
+- int xv_image_w;
+- int xv_image_h;
+- bool _haveShm;
+-
+-
+-private:
+- KXvDevicePrivate *d;
+-
+- void rebuildImage(int w, int h, bool shm);
+- void destroyImage();
+-};
+-
+-
+-#endif
+-
+--- kopete/libkopete/avdevice/videodevicepool.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/videodevicepool.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -403,53 +403,11 @@
+ }
+
+ /*!
+- \fn VideoDevicePool::getDisableMMap()
+- */
+-bool VideoDevicePool::getDisableMMap()
+-{
+- if(m_videodevice.size())
+- return m_videodevice[currentDevice()].getDisableMMap();
+- return false;
+-}
+-
+-/*!
+- \fn VideoDevicePool::setDisableMMap(bool disablemmap)
+- */
+-bool VideoDevicePool::setDisableMMap(bool disablemmap)
+-{
+- kDebug() << "VideoDevicePool::setDisableMMap(" << disablemmap << ") called.";
+- if(m_videodevice.size())
+- return m_videodevice[currentDevice()].setDisableMMap(disablemmap);
+- return false;
+-}
+-
+-/*!
+- \fn VideoDevicePool::getWorkaroundBrokenDriver()
+- */
+-bool VideoDevicePool::getWorkaroundBrokenDriver()
+-{
+- if(m_videodevice.size())
+- return m_videodevice[currentDevice()].getWorkaroundBrokenDriver();
+- return false;
+-}
+-
+-/*!
+- \fn VideoDevicePool::setWorkaroundBrokenDriver(bool workaroundbrokendriver)
+- */
+-bool VideoDevicePool::setWorkaroundBrokenDriver(bool workaroundbrokendriver)
+-{
+- kDebug() << "VideoDevicePool::setWorkaroundBrokenDriver(" << workaroundbrokendriver << ") called.";
+- if(m_videodevice.size())
+- return m_videodevice[currentDevice()].setWorkaroundBrokenDriver(workaroundbrokendriver);
+- return false;
+-}
+-
+-/*!
+ \fn VideoDevicePool::getFrame()
+ */
+ int VideoDevicePool::getFrame()
+ {
+- kDebug() << "VideoDevicePool::getFrame() called.";
++// kDebug() << "VideoDevicePool::getFrame() called.";
+ if(m_videodevice.size())
+ return m_videodevice[currentDevice()].getFrame();
+ else
+@@ -472,7 +430,7 @@
+ */
+ int VideoDevicePool::getImage(QImage *qimage)
+ {
+- kDebug() << "VideoDevicePool::getImage() called.";
++// kDebug() << "VideoDevicePool::getImage() called.";
+ if(m_videodevice.size())
+ return m_videodevice[currentDevice()].getImage(qimage);
+ else
+@@ -688,88 +646,6 @@
+ }
+
+ #endif
+-#if 0
+- QDir videodevice_dir;
+- const QString videodevice_dir_path=QString::fromLocal8Bit("/dev/v4l/");
+- const QStringList videodevice_dir_filter(QString::fromLocal8Bit("video*"));
+- VideoDevice videodevice;
+-
+- m_videodevice.clear();
+- m_modelvector.clear();
+-
+- videodevice_dir.setPath(videodevice_dir_path);
+- videodevice_dir.setNameFilters(videodevice_dir_filter);
+- videodevice_dir.setFilter( QDir::System | QDir::NoSymLinks | QDir::Readable | QDir::Writable );
+- videodevice_dir.setSorting( QDir::Name );
+-
+- QFileInfoList list = videodevice_dir.entryInfoList();
+-
+- if (list.isEmpty())
+- {
+- kDebug() << "Found no suitable devices in " << videodevice_dir_path;
+- QDir videodevice_dir;
+- const QString videodevice_dir_path=QString::fromLocal8Bit("/dev/");
+- const QStringList videodevice_dir_filter(QString::fromLocal8Bit("video*"));
+- VideoDevice videodevice;
+-
+- videodevice_dir.setPath(videodevice_dir_path);
+- videodevice_dir.setNameFilters(videodevice_dir_filter);
+- videodevice_dir.setFilter( QDir::System | QDir::NoSymLinks | QDir::Readable | QDir::Writable );
+- videodevice_dir.setSorting( QDir::Name );
+-
+- QFileInfoList list = videodevice_dir.entryInfoList();
+-
+- if (list.isEmpty())
+- {
+- kDebug() << "Found no suitable devices in " << videodevice_dir_path;
+- return EXIT_FAILURE;
+- }
+- QFileInfoList::iterator fileiterator, itEnd = list.end();
+-
+- kDebug() << "scanning devices in " << videodevice_dir_path << "...";
+- for ( fileiterator = list.begin(); fileiterator != itEnd; ++fileiterator )
+- {
+- QFileInfo fileinfo = ( *fileiterator );
+- videodevice.setFileName(fileinfo.absoluteFilePath());
+- kDebug() << "Found device " << videodevice.full_filename;
+- videodevice.open(); // It should be opened with O_NONBLOCK (it's a FIFO) but I dunno how to do it using QFile
+- if(videodevice.isOpen())
+- {
+- kDebug() << "File " << videodevice.full_filename << " was opened successfuly";
+-
+-// This must be changed to proper code to handle multiple devices of the same model. It currently simply add models without proper checking
+- videodevice.close();
+- videodevice.m_modelindex=m_modelvector.addModel (videodevice.m_model); // Adds device to the device list and sets model number
+- m_videodevice.push_back(videodevice);
+- }
+- }
+-
+- return EXIT_FAILURE;
+- }
+-
+- QFileInfoList::iterator fileiterator, itEnd = list.end();
+- m_videodevice.clear();
+- kDebug() << "scanning devices in " << videodevice_dir_path << "...";
+- for ( fileiterator = list.begin(); fileiterator != itEnd; ++fileiterator )
+- {
+- QFileInfo fileinfo = ( *fileiterator );
+- videodevice.setFileName(fileinfo.absoluteFilePath());
+- kDebug() << "Found device " << videodevice.full_filename;
+- videodevice.open(); // It should be opened with O_NONBLOCK (it's a FIFO) but I dunno how to do it using QFile
+- if(videodevice.isOpen())
+- {
+- kDebug() << "File " << videodevice.full_filename << " was opened successfuly";
+-
+-// This must be changed to proper code to handle multiple devices of the same model. It currently simply add models without proper checking
+- videodevice.close();
+- videodevice.m_modelindex=m_modelvector.addModel (videodevice.m_model); // Adds device to the device list and sets model number
+- m_videodevice.push_back(videodevice);
+- }
+- ++fileiterator;
+- }
+- m_current_device = 0;
+- loadConfig();
+-#endif
+ kDebug() << "exited successfuly";
+ return EXIT_SUCCESS;
+ }
+@@ -786,26 +662,27 @@
+ {
+ kDebug() << "vendor: " << vendorDevice->vendor() << ", product: " << vendorDevice->product();
+ }
+- QStringList protocols = device.as<Solid::Video>()->supportedProtocols();
+- if ( protocols.contains( "video4linux" ) )
+- {
+- QStringList drivers = device.as<Solid::Video>()->supportedDrivers( "video4linux" );
+- if ( drivers.contains( "video4linux" ) )
++ Solid::Video * solidVideoDevice = device.as<Solid::Video>();
++ if ( solidVideoDevice ) {
++ QStringList protocols = solidVideoDevice->supportedProtocols();
++ if ( protocols.contains( "video4linux" ) )
+ {
+- kDebug() << "V4L device path is" << device.as<Solid::Video>()->driverHandle( "video4linux" ).toString();
+- VideoDevice videodevice;
+- videodevice.setUdi( device.udi() );
+- videodevice.setFileName(device.as<Solid::Video>()->driverHandle( "video4linux" ).toString());
+- kDebug() << "Found device " << videodevice.full_filename;
+- videodevice.open(); // It should be opened with O_NONBLOCK (it's a FIFO) but I dunno how to do it using QFile
+- if(videodevice.isOpen())
++ QStringList drivers = solidVideoDevice->supportedDrivers( "video4linux" );
++ if ( drivers.contains( "video4linux" ) )
+ {
+- kDebug() << "File " << videodevice.full_filename << " was opened successfuly";
+-
+- // This must be changed to proper code to handle multiple devices of the same model. It currently simply add models without proper checking
+- videodevice.close();
+- videodevice.m_modelindex=m_modelvector.addModel (videodevice.m_model); // Adds device to the device list and sets model number
+- m_videodevice.push_back(videodevice);
++ kDebug() << "V4L device path is" << solidVideoDevice->driverHandle( "video4linux" ).toString();
++ VideoDevice videodevice;
++ videodevice.setUdi( device.udi() );
++ videodevice.setFileName(solidVideoDevice->driverHandle( "video4linux" ).toString());
++ kDebug() << "Found device " << videodevice.full_filename;
++ videodevice.open();
++ if(videodevice.isOpen())
++ {
++ kDebug() << "File " << videodevice.full_filename << " was opened successfuly";
++ videodevice.close();
++ videodevice.m_modelindex=m_modelvector.addModel (videodevice.m_model); // Adds device to the device list and sets model number
++ m_videodevice.push_back(videodevice);
++ }
+ }
+ }
+ }
+@@ -884,11 +761,8 @@
+ }
+ const QString name = config.readEntry((QString::fromLocal8Bit ( "Model %1 Device %2 Name") .arg ((*vditerator).m_name ) .arg ((*vditerator).m_modelindex)), (*vditerator).m_model);
+ const int currentinput = config.readEntry((QString::fromLocal8Bit ( "Model %1 Device %2 Current input") .arg ((*vditerator).m_name ) .arg ((*vditerator).m_modelindex)), 0);
+- const bool disablemmap = config.readEntry((QString::fromLocal8Bit ( "Model %1 Device %2 DisableMMap") .arg ((*vditerator).m_model ) .arg ((*vditerator).m_modelindex)), false );
+- const bool workaroundbrokendriver = config.readEntry((QString::fromLocal8Bit ( "Model %1 Device %2 WorkaroundBrokenDriver") .arg ((*vditerator).m_model ) .arg ((*vditerator).m_modelindex)), false );
+ kDebug() << "Device name: " << name;
+ kDebug() << "Device current input: " << currentinput;
+- (*vditerator).setWorkaroundBrokenDriver(workaroundbrokendriver);
+ (*vditerator).selectInput(currentinput);
+
+ for (int input = 0 ; input < (*vditerator).m_input.size(); input++)
+@@ -917,7 +791,6 @@
+ kDebug() << "AutoColorCorrection :" << autocolorcorrection;
+ kDebug() << "ImageAsMirror :" << imageasmirror;
+ }
+- Q_UNUSED(disablemmap);
+ }
+ }
+ }
+@@ -956,12 +829,8 @@
+ // Stores current input for the given video device
+ const QString name = QString::fromLocal8Bit ( "Model %1 Device %2 Name") .arg ((*vditerator).m_model ) .arg ((*vditerator).m_modelindex);
+ const QString currentinput = QString::fromLocal8Bit ( "Model %1 Device %2 Current input") .arg ((*vditerator).m_model ) .arg ((*vditerator).m_modelindex);
+- const QString disablemmap = QString::fromLocal8Bit ( "Model %1 Device %2 DisableMMap") .arg ((*vditerator).m_model ) .arg ((*vditerator).m_modelindex);
+- const QString workaroundbrokendriver = QString::fromLocal8Bit ( "Model %1 Device %2 WorkaroundBrokenDriver") .arg ((*vditerator).m_model ) .arg ((*vditerator).m_modelindex);
+ config.writeEntry( name, (*vditerator).m_name);
+ config.writeEntry( currentinput, (*vditerator).currentInput());
+- config.writeEntry( disablemmap, (*vditerator).getDisableMMap());
+- config.writeEntry( workaroundbrokendriver, (*vditerator).getWorkaroundBrokenDriver());
+
+ for (int input = 0 ; input < (*vditerator).m_input.size(); input++)
+ {
+--- kopete/libkopete/avdevice/videodevicepool.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/videodevicepool.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -102,11 +102,6 @@
+ bool getImageAsMirror();
+ bool setImageAsMirror(bool imageasmirror);
+
+- bool getDisableMMap();
+- bool setDisableMMap(bool disablemmap);
+- bool getWorkaroundBrokenDriver();
+- bool setWorkaroundBrokenDriver(bool workaroundbrokendriver);
+-
+ void loadConfig(); // Load configuration parameters;
+ void saveConfig(); // Save configuretion parameters;
+
+--- kopete/libkopete/avdevice/videodevice.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/videodevice.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -140,10 +140,8 @@
+
+ m_driver=VIDEODEV_DRIVER_NONE;
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+
+-if(!getWorkaroundBrokenDriver())
+-{
+ CLEAR(V4L2_capabilities);
+
+ if (-1 != xioctl (VIDIOC_QUERYCAP, &V4L2_capabilities))
+@@ -160,7 +158,7 @@
+ m_model=QString::fromLocal8Bit((const char*)V4L2_capabilities.card);
+
+
+-// Detect maximum and minimum resolution supported by the V4L2 device
++// Detect maximum and minimum resolution supported by the V4L2 device. VIDIOC_ENUM_FRAMESIZES is still experimental.
+ CLEAR (fmt);
+ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ if (-1 == xioctl (VIDIOC_G_FMT, &fmt))
+@@ -242,7 +240,6 @@
+ kDebug() << "checkDevice(): " << full_filename << " is not a V4L2 device.";
+ }
+
+-}
+ #endif
+
+ CLEAR(V4L_capabilities);
+@@ -426,7 +423,7 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ if(V4L2_capabilities.capabilities & V4L2_CAP_READWRITE)
+ {
+@@ -472,7 +469,7 @@
+
+ // Select video input, video standard and tune here.
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ if (-1 == xioctl (VIDIOC_CROPCAP, &cropcap))
+ { // Errors ignored.
+@@ -537,20 +534,33 @@
+ if(isOpen())
+ {
+ // It should not be there. It must remain in a completely distict place, cause this method should not change the pixelformat.
+- if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_YUV420P))
++ kDebug() << k_funcinfo << "Trying YUY422P";
++ if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_YUV422P))
+ {
+- kDebug() << "Card doesn't seem to support YUV420P format. Trying RGB24.";
+- if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_RGB24))
++ kDebug() << k_funcinfo << "Card doesn't seem to support YUV422P format. Trying YUYV.";
++ if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_YUYV))
+ {
+- kDebug() << "Card doesn't seem to support RGB24 format. Trying BGR24.";
+- if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_BGR24))
++ kDebug() << k_funcinfo << "Card doesn't seem to support YUYV format. Trying UYVY.";
++ if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_UYVY))
+ {
+- kDebug() << "Card doesn't seem to support RGB24 format. Trying RGB32.";
+- if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_RGB32))
++ kDebug() << k_funcinfo << "Card doesn't seem to support UYVY format. Trying YUV420P.";
++ if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_YUV420P))
+ {
+- kDebug() << "Card doesn't seem to support RGB32 format. Trying BGR32.";
+- if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_BGR32))
+- kDebug() << "Card doesn't seem to support BGR32 format. Fallback to it is not yet implemented.";
++ kDebug() << k_funcinfo << "Card doesn't seem to support YUV420P format. Trying RGB24.";
++ if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_RGB24))
++ {
++ kDebug() << k_funcinfo << "Card doesn't seem to support RGB24 format. Trying BGR24.";
++ if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_BGR24))
++ {
++ kDebug() << k_funcinfo << "Card doesn't seem to support RGB24 format. Trying RGB32.";
++ if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_RGB32))
++ {
++ kDebug() << k_funcinfo << "Card doesn't seem to support RGB32 format. Trying BGR32.";
++ if(PIXELFORMAT_NONE == setPixelFormat(PIXELFORMAT_BGR32))
++ kDebug() << k_funcinfo << "Card doesn't seem to support BGR32 format. Fallback to it is not yet implemented.";
++ }
++ }
++ }
+ }
+ }
+ }
+@@ -569,7 +579,7 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ // CLEAR (fmt);
+ if (-1 == xioctl (VIDIOC_G_FMT, &fmt))
+@@ -669,7 +679,7 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ // CLEAR (fmt);
+ if (-1 == xioctl (VIDIOC_G_FMT, &fmt))
+@@ -755,7 +765,7 @@
+ switch (m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ if (-1 == ioctl (descriptor, VIDIOC_S_INPUT, &newinput))
+ {
+@@ -823,7 +833,7 @@
+ break;
+ case IO_METHOD_MMAP:
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ {
+ unsigned int loop;
+ for (loop = 0; loop < m_streambuffers; ++loop)
+@@ -845,7 +855,7 @@
+ break;
+ case IO_METHOD_USERPTR:
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ {
+ unsigned int loop;
+ for (loop = 0; loop < m_streambuffers; ++loop)
+@@ -883,7 +893,7 @@
+ ssize_t bytesread;
+
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ struct v4l2_buffer v4l2buffer;
+ #endif
+ #endif
+@@ -917,7 +927,7 @@
+ break;
+ case IO_METHOD_MMAP:
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ CLEAR (v4l2buffer);
+ v4l2buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ v4l2buffer.memory = V4L2_MEMORY_MMAP;
+@@ -977,7 +987,7 @@
+ break;
+ case IO_METHOD_USERPTR:
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ {
+ unsigned int i;
+ CLEAR (v4l2buffer);
+@@ -1007,7 +1017,7 @@
+ break;
+ }
+
+-// Automatic color correction. Now it just swaps R and B channels in RGB24/BGR24 modes.
++/* Automatic color correction. Now it just swaps R and B channels in RGB24/BGR24 modes.
+ if(m_input[m_current_input].getAutoColorCorrection())
+ {
+ switch(m_currentbuffer.pixelformat)
+@@ -1048,7 +1058,7 @@
+ case PIXELFORMAT_YUV420P: break;
+ case PIXELFORMAT_YUV422P: break;
+ }
+- }
++ }*/
+ // kDebug() << "10 Using IO_METHOD_READ.File descriptor: " << descriptor << " Buffer address: " << &m_currentbuffer.data[0] << " Size: " << m_currentbuffer.data.size();
+
+
+@@ -1145,82 +1155,83 @@
+ case PIXELFORMAT_YUV422P:
+ case PIXELFORMAT_YUV420P:
+ {
+- uchar *yptr, *cbptr, *crptr;
+- bool halfheight=false;
+- bool packed=false;
+- if (m_currentbuffer.pixelformat == PIXELFORMAT_YUV420P)
+- halfheight=true;
+-
+- if (m_currentbuffer.pixelformat == PIXELFORMAT_YUYV)
+- {
+- yptr = &m_currentbuffer.data[0];
+- cbptr = yptr + 1;
+- crptr = yptr + 3;
+- packed=true;
+- }
+- else if (m_currentbuffer.pixelformat == PIXELFORMAT_UYVY)
+- {
+- cbptr = &m_currentbuffer.data[0];
+- yptr = cbptr + 1;
+- crptr = cbptr + 3;
+- packed=true;
+- }
+- else
+- {
+- yptr = &m_currentbuffer.data[0];
+- cbptr = yptr + (width()*height());
+- crptr = cbptr + (width()*height()/(halfheight ? 4:2));
+- }
+-
+- for(int y=0; y<height(); y++)
+- {
+- for(int x=0; x<width(); x++)
++ uchar *yptr, *cbptr, *crptr;
++ bool halfheight=false;
++ bool packed=false;
++// Adjust algorythm to specific YUV data arrangements.
++ if (m_currentbuffer.pixelformat == PIXELFORMAT_YUV420P)
++ halfheight=true;
++ if (m_currentbuffer.pixelformat == PIXELFORMAT_YUYV)
+ {
+- int c,d,e;
+-
+- if (packed)
++ yptr = &m_currentbuffer.data[0];
++ cbptr = yptr + 1;
++ crptr = yptr + 3;
++ packed=true;
++ }
++ else if (m_currentbuffer.pixelformat == PIXELFORMAT_UYVY)
+ {
+- c = (yptr[x<<1])-16;
+- d = (cbptr[x&!1])-128;
+- e = (crptr[x&!1])-128;
++ cbptr = &m_currentbuffer.data[0];
++ yptr = cbptr + 1;
++ crptr = cbptr + 2;
++ packed=true;
+ }
+ else
+ {
+- c = (yptr[x])-16;
+- d = (cbptr[x>>1])-128;
+- e = (crptr[x>>1])-128;
++ yptr = &m_currentbuffer.data[0];
++ cbptr = yptr + (width()*height());
++ crptr = cbptr + (width()*height()/(halfheight ? 4:2));
+ }
+
+- int r = (298 * c + 409 * e + 128)>>8;
+- int g = (298 * c - 100 * d - 208 * e + 128)>>8;
+- int b = (298 * c + 516 * d + 128)>>8;
++ for(int y=0; y<height(); y++)
++ {
++// Decode scanline
++ for(int x=0; x<width(); x++)
++ {
++ int c,d,e;
++
++ if (packed)
++ {
++ c = (yptr[x<<1])-16;
++ d = (cbptr[x>>1<<2])-128;
++ e = (crptr[x>>1<<2])-128;
++ }
++ else
++ {
++ c = (yptr[x])-16;
++ d = (cbptr[x>>1])-128;
++ e = (crptr[x>>1])-128;
++ }
+
+- if (r<0) r=0; if (r>255) r=255;
+- if (g<0) g=0; if (g>255) g=255;
+- if (b<0) b=0; if (b>255) b=255;
++ int r = (298 * c + 409 * e + 128)>>8;
++ int g = (298 * c - 100 * d - 208 * e + 128)>>8;
++ int b = (298 * c + 516 * d + 128)>>8;
+
+- uint *p = (uint*)qimage->scanLine(y)+x;
+- *p = qRgba(r,g,b,255);
++ if (r<0) r=0; if (r>255) r=255;
++ if (g<0) g=0; if (g>255) g=255;
++ if (b<0) b=0; if (b>255) b=255;
+
+- }
++ uint *p = (uint*)qimage->scanLine(y)+x;
++ *p = qRgba(r,g,b,255);
+
+- if (packed)
+- {
+- yptr+=width()*2;
+- cbptr+=width()*2;
+- crptr+=width()*2;
++ }
++// Jump to next line
++ if (packed)
++ {
++ yptr+=width()*2;
++ cbptr+=width()*2;
++ crptr+=width()*2;
++ }
++ else
++ {
++ yptr+=width();
++ if (!halfheight || y&1)
++ {
++ cbptr+=width()/2;
++ crptr+=width()/2;
++ }
++ }
+ }
+- else
+- {
+- yptr+=width();
+- if (!halfheight || y&1)
+- {
+- cbptr+=width()/2;
+- crptr+=width()/2;
+- }
+- }
+ }
+- }
+ break;
+ }
+
+@@ -1245,23 +1256,23 @@
+ break;
+ case IO_METHOD_MMAP:
+ case IO_METHOD_USERPTR:
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ {
+ enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ if (-1 == xioctl (VIDIOC_STREAMOFF, &type))
+ return errnoReturn ("VIDIOC_STREAMOFF");
+
+- if (m_io_method == IO_METHOD_MMAP)
+- {
+- unsigned int loop;
+- for (loop = 0; loop < m_streambuffers; ++loop)
+- {
+- if (munmap(m_rawbuffers[loop].start,m_rawbuffers[loop].length) != 0)
+- {
+- kDebug() << "unable to munmap.";
+- }
+- }
+- }
++ if (m_io_method == IO_METHOD_MMAP)
++ {
++ unsigned int loop;
++ for (loop = 0; loop < m_streambuffers; ++loop)
++ {
++ if (munmap(m_rawbuffers[loop].start,m_rawbuffers[loop].length) != 0)
++ {
++ kDebug() << "unable to munmap.";
++ }
++ }
++ }
+ }
+ #endif
+ break;
+@@ -1306,8 +1317,40 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
++ {
++ struct v4l2_queryctrl queryctrl;
++ struct v4l2_control control;
++
++ CLEAR (queryctrl);
++ queryctrl.id = V4L2_CID_BRIGHTNESS;
++
++ if (-1 == xioctl (VIDIOC_QUERYCTRL, &queryctrl))
++ {
++ if (errno != EINVAL)
++ {
++ kDebug() << k_funcinfo << "VIDIOC_QUERYCTRL failed (" << errno << ").";
++ } else
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Brightness control.";
++ }
++ } else
++ if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Brightness control.";
++ } else
++ {
++ CLEAR (control);
++ control.id = V4L2_CID_BRIGHTNESS;
++ control.value = (queryctrl.maximum - queryctrl.minimum)*getBrightness();
++
++ if (-1 == xioctl (VIDIOC_S_CTRL, &control))
++ {
++ kDebug() << k_funcinfo << "VIDIOC_S_CTRL failed (" << errno << ").";
++ }
++ }
++ }
+ break;
+ #endif
+ case VIDEODEV_DRIVER_V4L:
+@@ -1344,8 +1387,40 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
++ {
++ struct v4l2_queryctrl queryctrl;
++ struct v4l2_control control;
++
++ CLEAR (queryctrl);
++ queryctrl.id = V4L2_CID_CONTRAST;
++
++ if (-1 == xioctl (VIDIOC_QUERYCTRL, &queryctrl))
++ {
++ if (errno != EINVAL)
++ {
++ kDebug() << k_funcinfo << "VIDIOC_QUERYCTRL failed (" << errno << ").";
++ } else
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Contrast control.";
++ }
++ } else
++ if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Contrast control.";
++ } else
++ {
++ CLEAR (control);
++ control.id = V4L2_CID_CONTRAST;
++ control.value = (queryctrl.maximum - queryctrl.minimum)*getContrast();
++
++ if (-1 == xioctl (VIDIOC_S_CTRL, &control))
++ {
++ kDebug() << k_funcinfo << "VIDIOC_S_CTRL failed (" << errno << ").";
++ }
++ }
++ }
+ break;
+ #endif
+ case VIDEODEV_DRIVER_V4L:
+@@ -1382,8 +1457,40 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
++ {
++ struct v4l2_queryctrl queryctrl;
++ struct v4l2_control control;
++
++ CLEAR (queryctrl);
++ queryctrl.id = V4L2_CID_SATURATION;
++
++ if (-1 == xioctl (VIDIOC_QUERYCTRL, &queryctrl))
++ {
++ if (errno != EINVAL)
++ {
++ kDebug() << k_funcinfo << "VIDIOC_QUERYCTRL failed (" << errno << ").";
++ } else
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Saturation control.";
++ }
++ } else
++ if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Saturation control.";
++ } else
++ {
++ CLEAR (control);
++ control.id = V4L2_CID_SATURATION;
++ control.value = (queryctrl.maximum - queryctrl.minimum)*getSaturation();
++
++ if (-1 == xioctl (VIDIOC_S_CTRL, &control))
++ {
++ kDebug() << k_funcinfo << "VIDIOC_S_CTRL failed (" << errno << ").";
++ }
++ }
++ }
+ break;
+ #endif
+ case VIDEODEV_DRIVER_V4L:
+@@ -1420,8 +1527,40 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
++ {
++ struct v4l2_queryctrl queryctrl;
++ struct v4l2_control control;
++
++ CLEAR (queryctrl);
++ queryctrl.id = V4L2_CID_WHITENESS;
++
++ if (-1 == xioctl (VIDIOC_QUERYCTRL, &queryctrl))
++ {
++ if (errno != EINVAL)
++ {
++ kDebug() << k_funcinfo << "VIDIOC_QUERYCTRL failed (" << errno << ").";
++ } else
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Whiteness control.";
++ }
++ } else
++ if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Whiteness control.";
++ } else
++ {
++ CLEAR (control);
++ control.id = V4L2_CID_WHITENESS;
++ control.value = (queryctrl.maximum - queryctrl.minimum)*getWhiteness();
++
++ if (-1 == xioctl (VIDIOC_S_CTRL, &control))
++ {
++ kDebug() << k_funcinfo << "VIDIOC_S_CTRL failed (" << errno << ").";
++ }
++ }
++ }
+ break;
+ #endif
+ case VIDEODEV_DRIVER_V4L:
+@@ -1458,8 +1597,40 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
++ {
++ struct v4l2_queryctrl queryctrl;
++ struct v4l2_control control;
++
++ CLEAR (queryctrl);
++ queryctrl.id = V4L2_CID_HUE;
++
++ if (-1 == xioctl (VIDIOC_QUERYCTRL, &queryctrl))
++ {
++ if (errno != EINVAL)
++ {
++ kDebug() << k_funcinfo << "VIDIOC_QUERYCTRL failed (" << errno << ").";
++ } else
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Hue control.";
++ }
++ } else
++ if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
++ {
++ kDebug() << k_funcinfo << "Device doesn't support the Hue control.";
++ } else
++ {
++ CLEAR (control);
++ control.id = V4L2_CID_HUE;
++ control.value = (queryctrl.maximum - queryctrl.minimum)*getHue();
++
++ if (-1 == xioctl (VIDIOC_S_CTRL, &control))
++ {
++ kDebug() << k_funcinfo << "VIDIOC_S_CTRL failed (" << errno << ").";
++ }
++ }
++ }
+ break;
+ #endif
+ case VIDEODEV_DRIVER_V4L:
+@@ -1542,36 +1713,12 @@
+ return false;
+ }
+
+-bool VideoDevice::getDisableMMap()
+-{
+- return m_disablemmap;
+-}
+-
+-bool VideoDevice::setDisableMMap(bool disablemmap)
+-{
+- kDebug() << "VideoDevice::setDisableMMap(" << disablemmap << ") called.";
+- m_disablemmap = disablemmap;
+- return m_disablemmap;
+-}
+-
+-bool VideoDevice::getWorkaroundBrokenDriver()
+-{
+- return m_workaroundbrokendriver;
+-}
+-
+-bool VideoDevice::setWorkaroundBrokenDriver(bool workaroundbrokendriver)
+-{
+- kDebug() << "VideoDevice::setWorkaroundBrokenDriver(" << workaroundbrokendriver << ") called.";
+- m_workaroundbrokendriver = workaroundbrokendriver;
+- return m_workaroundbrokendriver;
+-}
+-
+ pixel_format VideoDevice::pixelFormatForPalette( int palette )
+ {
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ switch(palette)
+ {
+@@ -1623,7 +1770,7 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ switch(pixelformat)
+ {
+@@ -1728,7 +1875,7 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ switch(pixelformat)
+ {
+@@ -1778,7 +1925,7 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ switch(standard)
+ {
+@@ -1920,7 +2067,7 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ switch(standard)
+ {
+@@ -1990,7 +2137,7 @@
+ switch(m_driver)
+ {
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ case VIDEODEV_DRIVER_V4L2:
+ break;
+ #endif
+@@ -2049,7 +2196,7 @@
+ if(isOpen())
+ {
+ kDebug() << full_filename << " Trying to MMAP";
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ struct v4l2_requestbuffers req;
+
+ CLEAR (req);
+@@ -2121,7 +2268,7 @@
+ /// @todo implement me
+ if(isOpen())
+ {
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ struct v4l2_requestbuffers req;
+
+ CLEAR (req);
+--- kopete/libkopete/avdevice/videodevice.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/avdevice/videodevice.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -79,7 +79,7 @@
+ #if defined( __linux__) && defined(ENABLE_AV)
+ ,
+ VIDEODEV_DRIVER_V4L
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ ,
+ VIDEODEV_DRIVER_V4L2
+ #endif
+@@ -231,11 +231,6 @@
+ bool getImageAsMirror();
+ bool setImageAsMirror(bool imageasmirror);
+
+- bool getDisableMMap();
+- bool setDisableMMap(bool disablemmap);
+- bool getWorkaroundBrokenDriver();
+- bool setWorkaroundBrokenDriver(bool workaroundbrokendriver);
+-
+ bool canCapture();
+ bool canChromakey();
+ bool canScale();
+@@ -255,7 +250,7 @@
+
+ //protected:
+ #if defined(__linux__) && defined(ENABLE_AV)
+-#ifdef HAVE_V4L2
++#ifdef V4L2_CAP_VIDEO_CAPTURE
+ struct v4l2_capability V4L2_capabilities;
+ struct v4l2_cropcap cropcap;
+ struct v4l2_crop crop;
+@@ -270,9 +265,6 @@
+ protected:
+ int currentwidth, minwidth, maxwidth, currentheight, minheight, maxheight;
+
+- bool m_disablemmap;
+- bool m_workaroundbrokendriver;
+-
+ QVector<rawbuffer> m_rawbuffers;
+ unsigned int m_streambuffers;
+ imagebuffer m_currentbuffer;
+--- kopete/libkopete/kopetechatsessionmanager.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopetechatsessionmanager.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -105,12 +105,12 @@
+ }
+
+ ChatSession *ChatSessionManager::create(
+- const Contact *user, ContactPtrList chatContacts, Protocol *protocol)
++ const Contact *user, ContactPtrList chatContacts, Protocol *protocol, Kopete::ChatSession::Form form )
+ {
+ ChatSession *result=findChatSession( user, chatContacts, protocol);
+ if (!result)
+ {
+- result = new ChatSession(user, chatContacts, protocol );
++ result = new ChatSession(user, chatContacts, protocol, form );
+ registerChatSession(result);
+ }
+ return (result);
+--- kopete/libkopete/kopetechatsession.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopetechatsession.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -59,10 +59,11 @@
+ KopeteView *view;
+ bool mayInvite;
+ Kopete::MessageHandlerChain::Ptr chains[3];
++ Kopete::ChatSession::Form form;
+ };
+
+ Kopete::ChatSession::ChatSession( const Kopete::Contact *user,
+- Kopete::ContactPtrList others, Kopete::Protocol *protocol )
++ Kopete::ContactPtrList others, Kopete::Protocol *protocol, Kopete::ChatSession::Form form )
+ : QObject( user->account())
+ {
+ int i;
+@@ -76,6 +77,7 @@
+ d->view = 0L;
+ d->customDisplayName = false;
+ d->mayInvite = false;
++ d->form = form;
+
+ for ( i = 0; others.size() != i; i++ )
+ addContact( others[i], true );
+@@ -511,6 +513,11 @@
+ v->raise(true);
+ }
+
++Kopete::ChatSession::Form Kopete::ChatSession::form() const
++{
++ return d->form;
++}
++
+ #include "kopetechatsession.moc"
+
+
+--- kopete/libkopete/kopeteonlinestatusmanager.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteonlinestatusmanager.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -157,7 +157,7 @@
+ {
+ QString fp = fingerprint( statusFor, icon, size, color, idle );
+
+- kDebug(14010) << "finger print:" << fp << ", icon: " << icon;
++ //kDebug(14010) << "finger print:" << fp << ", icon: " << icon;
+ // look it up in the cache
+ QPixmap *theIcon = d->iconCache.value(fp);
+ if ( !theIcon )
+@@ -319,7 +319,7 @@
+ // create an icon suiting the status from the base icon
+ // use reasonable defaults if not provided or protocol not set
+
+- kDebug( 14010) << "overlayIcons size: " << statusFor.overlayIcons().count();
++ //kDebug( 14010) << "overlayIcons size: " << statusFor.overlayIcons().count();
+
+ // NOTE: overlayIcons car be empty
+ if ( !statusFor.overlayIcons().empty() && baseIcon == statusFor.overlayIcons().first() )
+--- kopete/libkopete/kopetemessage.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopetemessage.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -553,6 +553,8 @@
+ return styleAttribute;
+ }
+
++// prime candidate for removal
++#if 0
+ QString Message::decodeString( const QByteArray &message, const QTextCodec *providedCodec, bool *success )
+ {
+ /*
+@@ -636,6 +638,7 @@
+ */
+ return QString();
+ }
++#endif
+
+ QStringList Message::classes() const
+ {
+--- kopete/libkopete/kopeteaccountmanager.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteaccountmanager.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -36,6 +36,7 @@
+ #include "kopeteprotocol.h"
+ #include "kopetecontact.h"
+ #include "kopetecontactlist.h"
++#include "kopeteidentitymanager.h"
+ #include "kopetepluginmanager.h"
+ #include "kopeteonlinestatus.h"
+ #include "kopeteonlinestatusmanager.h"
+@@ -104,9 +105,10 @@
+
+ void AccountManager::setOnlineStatus( uint category, const QString& awayMessage, uint flags )
+ {
+- kDebug() << "category: " << category << ", Kopete::OnlineStatusManager::Away: " << Kopete::OnlineStatusManager::Away << endl;
+- OnlineStatusManager::Categories categories
++ kDebug() << "category: " << category << ", Kopete::OnlineStatusManager::Away: " << Kopete::OnlineStatusManager::Away;
++ OnlineStatusManager::Categories categories
+ = (OnlineStatusManager::Categories)category;
++ bool onlyChangeConnectedAccounts = isAnyAccountConnected();
+
+ foreach( Account *account, d->accounts )
+ {
+@@ -117,7 +119,7 @@
+ continue;
+ }
+
+- if ( isAnyAccountConnected() ) {
++ if ( onlyChangeConnectedAccounts ) {
+ if ( account->isConnected() || ( (flags & ConnectIfOffline) && !account->excludeConnect() ) )
+ account->setOnlineStatus( status, awayMessage );
+ }
+@@ -391,6 +393,14 @@
+ "Failed to create account for '" << accountId << "'" << endl;
+ continue;
+ }
++ // the account's Identity must be set here instead of in the Kopete::Account ctor, because there the
++ // identity cannot pick up any state set in the derived Account ctor
++ Identity *identity = Kopete::IdentityManager::self()->findIdentity( account->configGroup()->readEntry("Identity", QString()) );
++ // if the identity was not found, use the default one which will for sure exist
++ // FIXME: get rid of this, the account's identity should always exist at this point
++ if (!identity)
++ identity = Kopete::IdentityManager::self()->defaultIdentity();
++ account->setIdentity( identity );
+ }
+ }
+
+--- kopete/libkopete/kopeteidentity.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteidentity.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -91,8 +91,10 @@
+
+ /**
+ * @brief Sets the online status for this identity
+- *
+- * FIXME: describe a bit more
++ * Sets the online status for each account in this identity, except those which are set to
++ * 'Exclude from connect all' (Kopete::Account::excludeConnect()).
++ * @param category generic OnlineStatusManager::Categories identifying status to set
++ * @param awayMessage status message to use in this onlinestatus
+ */
+ void setOnlineStatus( uint category, const QString &awayMessage );
+
+--- kopete/libkopete/kopeteui.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteui.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=ServiceType
+ X-KDE-ServiceType=Kopete/UI
+ X-KDE-Derived=Kopete/Plugin
+--- kopete/libkopete/kopetechatsessionmanager.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopetechatsessionmanager.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -63,7 +63,7 @@
+ * @return A pointer to a new or reused Kopete::ChatSession.
+ */
+ Kopete::ChatSession* create( const Kopete::Contact *user,
+- Kopete::ContactPtrList chatContacts, Kopete::Protocol *protocol);
++ Kopete::ContactPtrList chatContacts, Kopete::Protocol *protocol, Kopete::ChatSession::Form form = Kopete::ChatSession::Small );
+
+ /**
+ * Find a chat session, if one exists, that matches the given list of contacts.
+--- kopete/libkopete/kopeteprotocol.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteprotocol.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=ServiceType
+ X-KDE-ServiceType=Kopete/Protocol
+ X-KDE-Derived=Kopete/Plugin
+--- kopete/libkopete/kopetemessage.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopetemessage.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -420,7 +420,8 @@
+ */
+ static QString escape( const QString & );
+
+-
++#if 0
++ //candidate for removal!
+ /**
+ * Helper function to decode a string. Whatever returned here is *nearly guaranteed* to
+ * be parseable by the XML engine.
+@@ -435,6 +436,7 @@
+ */
+ static QString decodeString( const QByteArray &message,
+ const QTextCodec *providedCodec = 0L, bool *success = 0L );
++#endif
+
+ private:
+ class Private;
+--- kopete/libkopete/kopeteidentity.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteidentity.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -162,8 +162,10 @@
+
+ QString Identity::customIcon() const
+ {
+- //TODO implement
+- return "user";
++ if (hasProperty( Kopete::Global::Properties::self()->photo().key() ))
++ return property(Kopete::Global::Properties::self()->photo()).value().toString();
++ else
++ return "user";
+ }
+
+
+@@ -179,10 +181,14 @@
+ return;
+
+ d->accounts.append( account );
++
++ connect( account->myself(),
++ SIGNAL(onlineStatusChanged(Kopete::Contact *, const Kopete::OnlineStatus &, const Kopete::OnlineStatus &)),
++ this, SLOT(updateOnlineStatus()));
+ connect(account, SIGNAL(accountDestroyed(const Kopete::Account*)),
+ this, SLOT(removeAccount(const Kopete::Account*)));
+- //TODO implement the signals for status changes and so
+-
++
++ updateOnlineStatus();
+ emit identityChanged( this );
+ }
+
+@@ -192,9 +198,9 @@
+ if ( !d->accounts.contains( a ) )
+ return;
+
+- //TODO disconnect signals and so on
++ disconnect( account );
+ d->accounts.removeAll( a );
+-
++ updateOnlineStatus();
+ emit identityChanged( this );
+ }
+
+--- kopete/libkopete/kopetecontact.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopetecontact.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -543,11 +543,22 @@
+ // --------------------------------------------------------------------------
+ // Fixed part of tooltip
+
+- QString iconName = QString::fromLatin1("kopete-contact-icon:%1:%2:%3")
+- .arg( QString(QUrl::toPercentEncoding( protocol()->pluginId() )),
+- QString(QUrl::toPercentEncoding( account()->accountId() )),
+- QString(QUrl::toPercentEncoding( contactId() )) );
++ QString iconName;
++ if ( this == account()->myself() )
++ {
++ iconName = QString::fromLatin1("kopete-account-icon:%1:%2")
++ .arg( QString(QUrl::toPercentEncoding( protocol()->pluginId() )),
++ QString(QUrl::toPercentEncoding( account()->accountId() )) );
+
++ }
++ else
++ {
++ iconName = QString::fromLatin1("kopete-contact-icon:%1:%2:%3")
++ .arg( QString(QUrl::toPercentEncoding( protocol()->pluginId() )),
++ QString(QUrl::toPercentEncoding( account()->accountId() )),
++ QString(QUrl::toPercentEncoding( contactId() )) );
++ }
++
+ // TODO: the nickname should be a configurable properties, like others. -Olivier
+ QString nick = property( Kopete::Global::Properties::self()->nickName() ).value().toString();
+ if ( nick.isEmpty() )
+--- kopete/libkopete/kopeteaccount.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteaccount.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -103,15 +103,6 @@
+ d->customIcon = d->configGroup->readEntry( "Icon", QString() );
+ d->priority = d->configGroup->readEntry( "Priority", 0 );
+
+- Identity *identity = Kopete::IdentityManager::self()->findIdentity( d->configGroup->readEntry("Identity", QString()) );
+-
+- // if the identity was not found, use the default one which will for sure exist
+- // FIXME: maybe it could show a passive dialog telling that to the user
+- if (!identity)
+- identity = Kopete::IdentityManager::self()->defaultIdentity();
+-
+- setIdentity( identity );
+-
+ d->restoreStatus = Kopete::OnlineStatus::Online;
+ d->restoreMessage = "";
+
+@@ -422,6 +413,11 @@
+
+ void Account::setIdentity( Identity *ident )
+ {
++ if ( d->identity == ident )
++ {
++ return;
++ }
++
+ if (d->identity)
+ {
+ d->identity->removeAccount( this );
+@@ -460,9 +456,6 @@
+ QObject::connect( d->myself, SIGNAL( propertyChanged( Kopete::PropertyContainer *, const QString &, const QVariant &, const QVariant & ) ),
+ this, SLOT( slotContactPropertyChanged( Kopete::PropertyContainer *, const QString &, const QVariant &, const QVariant & ) ) );
+
+- QObject::connect( d->myself, SIGNAL( onlineStatusChanged( Kopete::Contact *, const Kopete::OnlineStatus &, const Kopete::OnlineStatus & ) ),
+- identity(), SLOT( updateOnlineStatus()));
+-
+ if ( isConnected() != wasConnected )
+ emit isConnectedChanged();
+ }
+--- kopete/libkopete/kopeteproperty.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteproperty.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -53,7 +53,7 @@
+ PropertyTmpl other = Kopete::Global::Properties::self()->tmpl(key);
+ if(other.isNull())
+ {
+-// kDebug(14000) << "Creating new template for key = '" << key << "'" << endl;
++// kDebug(14000) << "Creating new template for key = '" << key << "'";
+
+ d = new Private;
+ d->refCount = 1;
+@@ -65,7 +65,7 @@
+ }
+ else
+ {
+-// kDebug(14000) << "Using existing template for key = '" << key << "'" << endl;
++// kDebug(14000) << "Using existing template for key = '" << key << "'";
+ d = other.d;
+ d->refCount++;
+ }
+@@ -82,12 +82,12 @@
+ {
+ if (this == &other)
+ {
+-// kDebug(14000) << "trying to assign this to itself!" << endl;
++// kDebug(14000) << "trying to assign this to itself!";
+ return *this;
+ }
+ if( d == other.d )
+ {
+-// kDebug(14000) << "trying to assign d to itself!" << endl;
++// kDebug(14000) << "trying to assign d to itself!";
+ return *this;
+ }
+ d->refCount--;
+@@ -216,7 +216,7 @@
+ {
+ if (this == &other)
+ {
+-// kDebug(14000) << "trying to assign this to itself!" << endl;
++// kDebug(14000) << "trying to assign this to itself!";
+ return *this;
+ }
+
+--- kopete/libkopete/kopeteidentitymanager.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteidentitymanager.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -107,7 +107,7 @@
+
+ void IdentityManager::unregisterIdentity( const Identity *identity )
+ {
+- kDebug( 14010 ) << "Unregistering identity " << identity->id() << endl;
++ kDebug( 14010 ) << "Unregistering identity " << identity->id();
+ d->identities.removeAll( const_cast<Identity*>(identity) );
+
+ emit identityUnregistered( identity );
+@@ -199,7 +199,7 @@
+ KConfigGroup group = KGlobal::config()->group("IdentityManager");
+ group.writeEntry("DefaultIdentity", d->defaultIdentity->id());
+
+- //kDebug( 14010 ) << endl;
++ //kDebug( 14010 );
+ foreach( Identity *identity, d->identities )
+ {
+ KConfigGroup *config = identity->configGroup();
+@@ -232,7 +232,7 @@
+ "Failed to create identity for '" << identityId << "'" << endl;
+ continue;
+ }
+- kDebug() << "Created identity " << identityId << endl;
++ kDebug() << "Created identity " << identityId;
+ }
+
+ // get the default identity
+@@ -249,7 +249,7 @@
+ void IdentityManager::slotIdentityOnlineStatusChanged(Identity *i)
+ {
+ //TODO: check if we need to do something more on status changes
+- //kDebug(14010) << endl;
++ //kDebug(14010);
+ emit identityOnlineStatusChanged(i);
+ }
+
+--- kopete/libkopete/ui/avatarselectorwidget.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/ui/avatarselectorwidget.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -90,14 +90,14 @@
+ {
+ public:
+ Private()
+- : selectedItem(0)
++ : selectedItem(0), noAvatarItem(0)
+ {}
+
+ Ui::AvatarSelectorWidget mainWidget;
+ QListWidgetItem *selectedItem;
+ QString currentAvatar;
+-
+- void addItem(Kopete::AvatarManager::AvatarEntry entry);
++ AvatarSelectorWidgetItem * noAvatarItem;
++ AvatarSelectorWidgetItem * addItem(Kopete::AvatarManager::AvatarEntry entry);
+ };
+
+ AvatarSelectorWidget::AvatarSelectorWidget(QWidget *parent)
+@@ -124,7 +124,7 @@
+ empty.name = i18n("No Avatar");
+ empty.contact = 0;
+ empty.category = Kopete::AvatarManager::User;
+- d->addItem(empty);
++ d->noAvatarItem = d->addItem(empty);
+
+ // List avatars of User category
+ Kopete::AvatarQueryJob *queryJob = new Kopete::AvatarQueryJob(this);
+@@ -224,9 +224,12 @@
+ AvatarSelectorWidgetItem *selectedItem = dynamic_cast<AvatarSelectorWidgetItem*>( d->mainWidget.listUserAvatar->selectedItems().first() );
+ if( selectedItem )
+ {
+- if( !Kopete::AvatarManager::self()->remove( selectedItem->avatarEntry() ) )
++ if ( selectedItem != d->noAvatarItem )
+ {
+- kDebug(14010) << "Removing of avatar failed for unknown reason.";
++ if( !Kopete::AvatarManager::self()->remove( selectedItem->avatarEntry() ) )
++ {
++ kDebug(14010) << "Removing of avatar failed for unknown reason.";
++ }
+ }
+ }
+ }
+@@ -285,21 +288,23 @@
+
+ void AvatarSelectorWidget::listSelectionChanged(QListWidgetItem *item)
+ {
++ d->mainWidget.buttonRemoveAvatar->setEnabled( item != d->noAvatarItem );
+ d->selectedItem = item;
+ }
+
+-void AvatarSelectorWidget::Private::addItem(Kopete::AvatarManager::AvatarEntry entry)
++AvatarSelectorWidgetItem * AvatarSelectorWidget::Private::addItem(Kopete::AvatarManager::AvatarEntry entry)
+ {
+ kDebug(14010) << "Entry(" << entry.name << "): " << entry.category;
+
+ // only use User avatars
+ if( !(entry.category & Kopete::AvatarManager::User) )
+- return;
++ return 0;
+
+ AvatarSelectorWidgetItem *item = new AvatarSelectorWidgetItem(mainWidget.listUserAvatar);
+ item->setAvatarEntry(entry);
+ if (entry.path == currentAvatar)
+ item->setSelected(true);
++ return item;
+ }
+
+ } // Namespace Kopete::UI
+--- kopete/libkopete/kopeteplugin.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kopete/libkopete/kopeteplugin.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=ServiceType
+ X-KDE-ServiceType=Kopete/Plugin
+ X-KDE-Derived=KPluginInfo
+--- knewsticker/knewsticker.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ knewsticker/knewsticker.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -18,12 +18,14 @@
+
+ struct NewsItem;
+ class NewsItemView;
++class SettingsDialog;
+
+ class KNewsTicker : public Plasma::Applet
+ {
+ Q_OBJECT
+ public:
+ KNewsTicker( QObject *parent, const QVariantList &args );
++ virtual ~KNewsTicker();
+
+ virtual QSizeF contentSizeHint() const;
+
+@@ -40,6 +42,7 @@
+ void feedUpdateFinished();
+ void openFeedItem( const QString &url );
+ void settingsChanged( const QString &dialogName );
++ void settingsAccepted();
+ void setupItemView();
+
+ private:
+@@ -50,6 +53,7 @@
+ QSignalMapper *m_signalMapper;
+ QSet<QUrl> m_readArticles;
+ NewsItemView *m_itemView;
++ SettingsDialog *m_settingsDialog;
+ };
+
+ #endif // KNEWSTICKER_H
+--- knewsticker/itemviews.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ knewsticker/itemviews.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,3 +1,13 @@
++/*
++ * itemviews.cpp
++ *
++ * Copyright (c) 2007 Frerich Raabe <raabe at kde.org>
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ * FOR A PARTICULAR PURPOSE. For licensing and distribution details, check the
++ * accompanying file 'COPYING'.
++ */
+ #include "itemviews.h"
+ #include "knewsticker.h"
+
+@@ -135,9 +145,7 @@
+
+ void ScrollingItemView::relayoutItems()
+ {
+- foreach ( QGraphicsItem *item, m_graphicsItems ) {
+- delete item;
+- }
++ qDeleteAll( m_graphicsItems );
+ m_graphicsItems.clear();
+
+ if ( items().empty() ) {
+@@ -361,15 +369,7 @@
+ {
+ NewsItemView::setItems( items_ );
+ m_currentItem = items().begin();
+- if ( items().isEmpty() ) {
+- m_linkItem->setText( i18n( "No unread news available" ) );
+- m_linkItem->setUrl( QString() );
+- m_linkItem->setToolTip( QString() );
+- } else {
+- m_linkItem->setText( ( *m_currentItem ).text );
+- m_linkItem->setUrl( ( *m_currentItem ).url );
+- m_linkItem->setToolTip( ( *m_currentItem ).description );
+- }
++ updateLinkItem();
+ updateMoveAnimations();
+ moveItemIn();
+ }
+@@ -398,9 +398,7 @@
+ if ( ++m_currentItem == items().end() ) {
+ m_currentItem = items().begin();
+ }
+- m_linkItem->setText( ( *m_currentItem ).text );
+- m_linkItem->setUrl( ( *m_currentItem ).url );
+- m_linkItem->setToolTip( ( *m_currentItem ).description );
++ updateLinkItem();
+ if ( m_needToReloadSettings ) {
+ m_linkItem->setBrush( Settings::color() );
+ m_linkItem->setFont( Settings::font() );
+@@ -415,5 +413,18 @@
+ m_needToReloadSettings = true;
+ }
+
++void PagingItemView::updateLinkItem()
++{
++ if ( m_currentItem == items().end() ) {
++ m_linkItem->setText( i18n( "No unread news available" ) );
++ m_linkItem->setUrl( QString() );
++ m_linkItem->setToolTip( QString() );
++ } else {
++ m_linkItem->setText( ( *m_currentItem ).text );
++ m_linkItem->setUrl( ( *m_currentItem ).url );
++ m_linkItem->setToolTip( ( *m_currentItem ).description );
++ }
++}
++
+ #include "itemviews.moc"
+
+--- knewsticker/plasma-knewsticker-default.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ knewsticker/plasma-knewsticker-default.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Name=News Ticker
+ Name[af]=Nuus Tikker
+ Name[br]=Kliker keleier
+@@ -54,7 +53,7 @@
+ X-KDE-PluginInfo-EnabledByDefault=false
+ Icon=knewsticker
+ Type=Service
+-ServiceTypes=Plasma/Applet
++X-KDE-ServiceTypes=Plasma/Applet
+ Comment=A scrolling RDF news ticker
+ Comment[bg]=Четец на новини RDF
+ Comment[ca]=Teletip de notícies RDF amb desplaçament
+--- knewsticker/settingsdialog.cpp (.../tags/KDE/3.96/kdenetwork) (revision 0)
++++ knewsticker/settingsdialog.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -0,0 +1,38 @@
++/*
++ * settingsdialog.cpp
++ *
++ * Copyright (c) 2007 Frerich Raabe <raabe at kde.org>
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ * FOR A PARTICULAR PURPOSE. For licensing and distribution details, check the
++ * accompanying file 'COPYING'.
++ */
++#include "settingsdialog.h"
++#include "settings.h"
++#include "ui_visualsettings.h"
++#include "feedsettingswidget.h"
++
++SettingsDialog::SettingsDialog( QWidget *parent )
++ : KConfigDialog( parent, "settings", Settings::self() )
++{
++ setFaceType( KPageDialog::Tabbed );
++
++ QWidget *page = new QWidget( 0 );
++ {
++ Ui::VisualSettings ui;
++ ui.setupUi( page );
++ }
++ addPage( page, i18n( "Appearance" ) );
++
++ m_feedSettingsWidget = new FeedSettingsWidget( 0 );
++ addPage( m_feedSettingsWidget, i18n( "Feed Access" ) );
++}
++
++QStringList SettingsDialog::feedUrls() const
++{
++ return m_feedSettingsWidget->feedUrls();
++}
++
++#include "settingsdialog.moc"
++
+--- knewsticker/itemviews.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ knewsticker/itemviews.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,3 +1,13 @@
++/*
++ * itemviews.h
++ *
++ * Copyright (c) 2007 Frerich Raabe <raabe at kde.org>
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ * FOR A PARTICULAR PURPOSE. For licensing and distribution details, check the
++ * accompanying file 'COPYING'.
++ */
+ #ifndef ITEMVIEWS_H
+ #define ITEMVIEWS_H
+
+@@ -102,6 +112,7 @@
+ class ScrollingItemView : public NewsItemView
+ {
+ Q_OBJECT
++ using NewsItemView::advance;
+ public:
+ ScrollingItemView( KNewsTicker *parent );
+
+@@ -138,6 +149,7 @@
+
+ private:
+ void updateMoveAnimations();
++ void updateLinkItem();
+
+ QList<NewsItem>::ConstIterator m_currentItem;
+ HyperlinkItem *m_linkItem;
+--- knewsticker/settingsdialog.h (.../tags/KDE/3.96/kdenetwork) (revision 0)
++++ knewsticker/settingsdialog.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -0,0 +1,31 @@
++/*
++ * settingsdialog.h
++ *
++ * Copyright (c) 2007 Frerich Raabe <raabe at kde.org>
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ * FOR A PARTICULAR PURPOSE. For licensing and distribution details, check the
++ * accompanying file 'COPYING'.
++ */
++#ifndef SETTINGSDIALOG_H
++#define SETTINGSDIALOG_H
++
++#include <kconfigdialog.h>
++
++class FeedSettingsWidget;
++
++class SettingsDialog : public KConfigDialog
++{
++ Q_OBJECT
++public:
++ SettingsDialog( QWidget *parent = 0 );
++
++ QStringList feedUrls() const;
++
++private:
++ FeedSettingsWidget *m_feedSettingsWidget;
++};
++
++#endif // !defined(SETTINGSDIALOG_H)
++
+--- knewsticker/knewsticker.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ knewsticker/knewsticker.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -9,11 +9,10 @@
+ * accompanying file 'COPYING'.
+ */
+ #include "knewsticker.h"
+-#include "feedsettingswidget.h"
+ #include "newsfeedmanager.h"
+ #include "settings.h"
+-#include "ui_visualsettings.h"
+ #include "itemviews.h"
++#include "settingsdialog.h"
+
+ #include <kconfigdialog.h>
+ #include <kiconloader.h>
+@@ -43,7 +42,8 @@
+ KNewsTicker::KNewsTicker( QObject *parent, const QVariantList &args )
+ : Plasma::Applet( parent, args ),
+ m_signalMapper( 0 ),
+- m_itemView( 0 )
++ m_itemView( 0 ),
++ m_settingsDialog( 0 )
+ {
+ setDrawStandardBackground( true );
+
+@@ -65,36 +65,21 @@
+ updateFeeds();
+ }
+
+-void KNewsTicker::showConfigurationInterface()
++KNewsTicker::~KNewsTicker()
+ {
+- KConfigDialog dlg( 0, "settings", Settings::self() );
+- connect( &dlg, SIGNAL( settingsChanged( const QString & ) ),
+- this, SLOT( settingsChanged( const QString & ) ) );
+- dlg.setFaceType( KPageDialog::Tabbed );
++ delete m_settingsDialog;
++}
+
+- QWidget *page = new QWidget( 0 );
+- {
+- Ui::VisualSettings ui;
+- ui.setupUi( page );
++void KNewsTicker::showConfigurationInterface()
++{
++ if ( !m_settingsDialog ) {
++ m_settingsDialog = new SettingsDialog;
++ connect( m_settingsDialog, SIGNAL( settingsChanged( const QString & ) ),
++ this, SLOT( settingsChanged( const QString & ) ) );
++ connect( m_settingsDialog, SIGNAL( accepted() ),
++ this, SLOT( settingsAccepted() ) );
+ }
+- dlg.addPage( page, i18n( "Appearance" ) );
+-
+- FeedSettingsWidget *feedSettingsWidget = new FeedSettingsWidget( 0 );
+- dlg.addPage( feedSettingsWidget, i18n( "Feed Access" ) );
+-
+- QFont origFont = Settings::font();
+- const QStringList origFeedUrls = Settings::feedUrls();
+-
+- if ( dlg.exec() == QDialog::Accepted ) {
+- Settings::setFeedUrls( feedSettingsWidget->feedUrls() );
+-
+- if ( Settings::feedUrls() != origFeedUrls ) {
+- NewsFeedManager::self()->setSubscriptions( Settings::feedUrls() );
+- updateFeeds();
+- }
+-
+- reloadSettings();
+- }
++ m_settingsDialog->show();
+ }
+
+ void KNewsTicker::settingsChanged( const QString & /* dialogName */ )
+@@ -102,6 +87,14 @@
+ reloadSettings();
+ }
+
++void KNewsTicker::settingsAccepted()
++{
++ Settings::setFeedUrls( m_settingsDialog->feedUrls() );
++ NewsFeedManager::self()->setSubscriptions( Settings::feedUrls() );
++ updateFeeds();
++ reloadSettings();
++}
++
+ QSizeF KNewsTicker::contentSizeHint() const
+ {
+ return m_itemView->boundingRect().size();
+--- knewsticker/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ knewsticker/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -4,7 +4,8 @@
+ knewsticker.cpp
+ newsfeedmanager.cpp
+ feedsettingswidget.cpp
+- itemviews.cpp)
++ itemviews.cpp
++ settingsdialog.cpp)
+
+ kde4_add_kcfg_files(knewsticker_SRCS settings.kcfgc)
+ kde4_add_ui_files(knewsticker_SRCS visualsettings.ui feedsettings.ui)
+--- kget/conf/preferencesdialog.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/conf/preferencesdialog.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -38,6 +38,12 @@
+ dlgNet.setupUi(network);
+ dlgAdv.setupUi(advanced);
+
++ // TODO: remove the following lines as soon as these features are ready
++ dlgNet.kcfg_SpeedLimit->setVisible(false);
++ dlgNet.groupBoxCompleted->setVisible(false);
++ dlgNet.lbl_maxnum_2->setVisible(false);
++ dlgNet.kcfg_MaxConnectionsServer->setVisible(false);
++
+ addPage(appearance, i18n("Appearance"), "video-display", i18n("Change appearance settings"));
+ addPage(groups, i18n("Groups"), "bookmark", i18n("Manage the groups"));
+ addPage(directories, i18n("Folders"), "folder-open", i18n("Default Download Folders"));
+--- kget/conf/kget.kcfg (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/conf/kget.kcfg (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -25,7 +25,7 @@
+ </entry>
+ <entry name="ShowSplashscreen" type="Bool">
+ <label>Sets to show the splashscreen while KGet is loading</label>
+- <default>true</default>
++ <default>false</default>
+ </entry>
+ <entry name="ShowExpandableTransferDetails" type="Bool">
+ <default>false</default>
+@@ -130,5 +130,11 @@
+ <default code="true">QDir::currentPath()</default>
+ </entry>
+ </group>
++
++ <group name="Geometry">
++ <entry name="ColumnWidths" type="IntList">
++ <label>The width of the columns in the main wiew</label>
++ </entry>
++ </group>
+
+ </kcfg>
+--- kget/core/plugin/kget_plugin.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/core/plugin/kget_plugin.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=ServiceType
+ X-KDE-ServiceType=KGet/Plugin
+ Comment=Plugin for KGet
+--- kget/core/transfer.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/core/transfer.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -92,8 +92,9 @@
+ return group()->model();
+ }
+
+-void Transfer::save(QDomElement e) // krazy:exclude=passbyvalue
++void Transfer::save(const QDomElement &element)
+ {
++ QDomElement e = element;
+ e.setAttribute("Source", m_source.url());
+ e.setAttribute("Dest", m_dest.url());
+ e.setAttribute("TotalSize", (qulonglong) m_totalSize);
+--- kget/core/speedlimiter.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/core/speedlimiter.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -40,7 +40,7 @@
+ if(!m_speedLimit)
+ return;
+ m_JobSpeedLimiters << new KJobSpeedLimiter(job, m_speedLimit);
+- kDebug(5001) << "Limiting job:" << job << " speed to: " << m_speedLimit << endl;
++ kDebug(5001) << "Limiting job:" << job << " speed to: " << m_speedLimit;
+ }
+
+
+@@ -69,19 +69,19 @@
+ int elapsed = m_time.restart();
+
+ QString status = isSuspended() ? QString("suspended") : QString("running");
+- kDebug(5001) << "Status: " << status << " expected time: " << expected << " elapsed time: " << elapsed << endl;
++ kDebug(5001) << "Status: " << status << " expected time: " << expected << " elapsed time: " << elapsed;
+
+ if (expected > elapsed)
+ {
+ m_OnTime = (elapsed * 4500)/expected;
+ m_OffTime = 4500 - m_OnTime;
+ suspend();
+- kDebug(5001) << "sleeping for: " << m_OffTime << " msegs." << endl;
++ kDebug(5001) << "sleeping for: " << m_OffTime << " msegs.";
+ QTimer::singleShot(m_OffTime, this, SLOT(slotOffTimer()));
+ }
+ else
+ {
+- kDebug(5001) << "speed below limit, checking in 500 msegs " << endl;
++ kDebug(5001) << "speed below limit, checking in 500 msegs ";
+ resume();
+ QTimer::singleShot(500, this, SLOT(slotOnTimer()));
+ }
+@@ -91,7 +91,7 @@
+ {
+ resume();
+ m_time.restart();
+- kDebug(5001) << "resuming for: " << m_OnTime << " msegs." << endl;
++ kDebug(5001) << "resuming for: " << m_OnTime << " msegs.";
+ QTimer::singleShot(m_OnTime, this, SLOT(slotOnTimer()));
+ }
+
+--- kget/core/transfer.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/core/transfer.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -126,7 +126,7 @@
+ * @param n The pointer to the QDomNode where the transfer will be saved
+ * @return The created QDomElement
+ */
+- virtual void save(QDomElement e);
++ virtual void save(const QDomElement &element);
+
+ protected:
+ //Function used to load and save the transfer's info from xml
+--- kget/core/kget.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/core/kget.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -697,7 +697,11 @@
+
+ bool KGet::isValidDestDirectory(const QString & destDir)
+ {
+- return (!destDir.isEmpty() && QFileInfo( destDir ).isDir());
++ if (QFileInfo( destDir ).isWritable())
++ return (!destDir.isEmpty() && QFileInfo( destDir ).isDir() && QFileInfo( destDir ).isWritable());
++ if (!QFileInfo( destDir ).isWritable() && !destDir.isEmpty())
++ KMessageBox::error(0, i18n("Directory is not writable"));
++ return false;
+ }
+
+ bool KGet::isValidDestUrl(const KUrl &destUrl)
+--- kget/mainwindow.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/mainwindow.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -40,6 +40,7 @@
+ #include <klocale.h>
+ #include <kicon.h>
+ #include <kactionmenu.h>
++#include <krun.h>
+
+ #include <QtDBus>
+ #include <QClipboard>
+@@ -445,7 +446,7 @@
+ QString directory = it->dest().directory();
+ if( !openedDirs.contains( directory ) )
+ {
+- KToolInvocation::invokeBrowser( directory );
++ new KRun(directory, this, 0, true, false);
+ openedDirs.append( directory );
+ }
+ }
+--- kget/transfer-plugins/multisegmentkio/transfermultisegkio.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/transfermultisegkio.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -104,10 +104,12 @@
+ }
+ }
+
+-void transferMultiSegKio::save(QDomElement e) // krazy:exclude=passbyvalue
++void transferMultiSegKio::save(const QDomElement &element)
+ {
+ kDebug(5001) << "TransferMultiSegKio::save";
+
++ QDomElement e = element;
++
+ Transfer::save(e);
+
+ QDomDocument doc(e.ownerDocument());
+@@ -191,6 +193,7 @@
+ switch (kioJob->error())
+ {
+ case 0: //The download has finished
++ case 1: // we kill the job after close
+ case KIO::ERR_FILE_ALREADY_EXIST: //The file has already been downloaded.
+ setStatus(Job::Finished, i18n("Finished"), SmallIcon("ok"));
+ m_percent = 100;
+@@ -280,7 +283,7 @@
+ m_Urls = Urls;
+ if (m_copyjob)
+ {
+- m_copyjob->slotUrls(Urls);
++ m_copyjob->slotUrls(m_Urls);
+ }
+ }
+
+--- kget/transfer-plugins/multisegmentkio/transfermultisegkio.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/transfermultisegkio.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -39,7 +39,7 @@
+ int remainingTime() const;
+ bool isResumable() const;
+
+- void save(QDomElement e);
++ void save(const QDomElement &element);
+
+ protected:
+ void load(const QDomElement &e);
+--- kget/transfer-plugins/multisegmentkio/dlgmultisegkio.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/dlgmultisegkio.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -13,11 +13,16 @@
+ #include "multisegkiosettings.h"
+
+ DlgEngineEditing::DlgEngineEditing(QWidget *parent)
+- : QDialog(parent)
++ : KDialog(parent)
+ {
+- ui.setupUi(this);
++ QWidget *mainWidget = new QWidget(this);
++ ui.setupUi(mainWidget);
++ setMainWidget(mainWidget);
++
+ setWindowTitle(i18n("Insert Engine"));
+ setModal(true);
++ setButtons(KDialog::Ok | KDialog::Cancel);
++ showButtonSeparator(true);
+
+ ui.engineNameLabel->setText(i18n("Engine name:"));
+ ui.urlLabel->setText(i18n("Url:"));
+@@ -32,13 +37,17 @@
+
+ void DlgEngineEditing::slotChangeText()
+ {
+- ui.okButton->setEnabled(!ui.urlEdit->text().isEmpty());
++ enableButton(KDialog::Ok, !ui.urlEdit->text().isEmpty());
+ }
+
+ DlgSettingsWidget::DlgSettingsWidget(QWidget *parent)
+ : QWidget(parent)
+ {
+ ui.setupUi(this);
++
++ ui.newEngineBt->setIcon(KIcon("list-add"));
++ ui.removeEngineBt->setIcon(KIcon("list-remove"));
++
+ init();
+ connect(ui.numSegSpinBox, SIGNAL(valueChanged(int)), SLOT(slotSetSegments(int)));
+ connect(ui.minSegSizeSpinBox, SIGNAL(valueChanged(int)), SLOT(slotSetMinSegSize(int)));
+--- kget/transfer-plugins/multisegmentkio/kget_multisegkiofactory.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/kget_multisegkiofactory.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ # service definition
+ Type=Service
+-ServiceTypes=KGet/Plugin
++X-KDE-ServiceTypes=KGet/Plugin
+
+ # standard fields
+ Name=Multi Segments KIO TransferFactory
+@@ -42,7 +41,7 @@
+ Comment[zh_TW]=KGet 傳輸外掛程式
+
+ # options for library loader
+-X-KDE-Library=libkget_multisegkiofactory
++X-KDE-Library=kget_multisegkiofactory
+ X-KDE-KGet-plugintype=TransferFactory
+ X-KDE-KGet-rank=70
+ X-KDE-KGet-framework-version=1
+--- kget/transfer-plugins/multisegmentkio/kget_multisegkiofactory.kcfg (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/kget_multisegkiofactory.kcfg (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -19,11 +19,13 @@
+ </entry>
+ <entry name="SearchEnginesNameList" type="StringList" key="NameItems">
+ <label>List of the available search engines</label>
+- <default>filemirrors</default>
++ <default>FindFiles.com</default>
++ <default>FileWatcher.com</default>
+ </entry>
+ <entry name="SearchEnginesUrlList" type="StringList" key="UrlItems">
+ <label>Urls list of the available search engines</label>
+- <default>http://www.filemirrors.com/search.src?type=begins&file=${filename}&action=Find</default>
++ <default>http://www.findfiles.com/list.php?db=Mirrors&string=${filename}</default>
++ <default>http://www.filewatcher.com/_/?q=+${filename}</default>
+ </entry>
+ </group>
+ </kcfg>
+--- kget/transfer-plugins/multisegmentkio/dlgmultisegkio.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/dlgmultisegkio.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -14,7 +14,7 @@
+ #include "ui_dlgengineediting.h"
+ #include "ui_dlgmultisegkio.h"
+
+-class DlgEngineEditing : public QDialog
++class DlgEngineEditing : public KDialog
+ {
+ Q_OBJECT
+
+--- kget/transfer-plugins/multisegmentkio/segmentfactory.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/segmentfactory.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -10,6 +10,7 @@
+
+ #include "segmentfactory.h"
+ #include "multisegkiosettings.h"
++#include "../../settings.h"
+
+ #include <QtCore/QTimer>
+
+@@ -29,7 +30,7 @@
+
+ bool Segment::createTransfer ( const KUrl &src )
+ {
+- kDebug(5001) << "Segment::createTransfer() -- " << src;
++ kDebug(5001) << " -- " << src;
+ if ( m_getJob )
+ return false;
+ m_getJob = KIO::get(src, KIO::NoReload, KIO::HideProgressInfo);
+@@ -49,7 +50,7 @@
+
+ bool Segment::startTransfer ()
+ {
+- kDebug(5001) << "Segment::startTransfer()";
++ kDebug(5001);
+ if( m_getJob && m_status != Running )
+ {
+ setStatus( Running, false );
+@@ -61,7 +62,7 @@
+
+ bool Segment::stopTransfer ()
+ {
+- kDebug(5001) << "Segment::stopTransfer()";
++ kDebug(5001);
+ if( m_getJob && m_status == Running )
+ {
+ setStatus( Stopped, false );
+@@ -86,7 +87,7 @@
+
+ void Segment::slotResult( KJob *job )
+ {
+- kDebug(5001) << "Segment::slotResult() job: " << job;
++ kDebug(5001) << "job: " << job;
+ m_getJob = 0;
+ if ( !m_buffer.isEmpty() )
+ {
+@@ -101,7 +102,7 @@
+ }
+ if( m_status == Running )
+ {
+- kDebug(5001) << "Segment::slotResult() Conection broken " << job << " --restarting--";
++ kDebug(5001) << "Conection broken " << job << " --restarting--";
+ setStatus(Timeout);
+ }
+ }
+@@ -136,7 +137,7 @@
+ }
+ if (!m_segData.bytes)
+ {
+- kDebug(5001) << "Segment::writeBuffer() closing transfer ...";
++ kDebug(5001) << "Closing transfer ...";
+ if( m_getJob )
+ m_getJob->kill( KJob::EmitResult );
+ emit updateSegmentData();
+@@ -155,13 +156,13 @@
+ : m_segments( n ), m_Urls( Urls ), m_split(true)
+
+ {
+- kDebug(5001) << "SegmentFactory::SegmentFactory()";
++ kDebug(5001);
+ it_Urls = m_Urls.begin();
+ }
+
+ SegmentFactory::~SegmentFactory()
+ {
+- kDebug(5001) << "SegmentFactory::destructor()";
++ kDebug(5001);
+ QList<Segment *>::iterator it = m_Segments.begin();
+ QList<Segment *>::iterator itEnd = m_Segments.end();
+ for ( ; it!=itEnd ; ++it )
+@@ -174,7 +175,7 @@
+
+ bool SegmentFactory::startTransfer()
+ {
+- kDebug(5001) << "SegmentFactory::startTransfer()";
++ kDebug(5001);
+ bool rest = false;
+ QList<Segment *>::iterator it = m_Segments.begin();
+ QList<Segment *>::iterator itEnd = m_Segments.end();
+@@ -187,7 +188,7 @@
+
+ bool SegmentFactory::stopTransfer()
+ {
+- kDebug(5001) << "SegmentFactory::stopTransfer()";
++ kDebug(5001);
+ bool rest = false;
+ QList<Segment *>::iterator it = m_Segments.begin();
+ QList<Segment *>::iterator itEnd = m_Segments.end();
+@@ -200,7 +201,7 @@
+
+ QList<SegData> SegmentFactory::SegmentsData()
+ {
+- kDebug(5001) << "SegmentFactory::getSegmentsData";
++ kDebug(5001);
+ QList<SegData> tdata;
+ QList<Segment *>::iterator it = m_Segments.begin();
+ QList<Segment *>::iterator itEnd = m_Segments.end();
+@@ -214,7 +215,7 @@
+
+ QList<Segment *> SegmentFactory::splitSegment( Segment *Seg, int n)
+ {
+- kDebug(5001) << "SegmentFactory::splitSegment() " << Seg;
++ kDebug(5001) << "Spliting " << Seg << "in " << n;
+ QList<Segment *> Segments;
+
+ KIO::TransferJob *Job = Seg->job();
+@@ -281,7 +282,7 @@
+
+ Segment *SegmentFactory::createSegment( SegData data, const KUrl &src )
+ {
+- kDebug(5001) << "SegmentFactory::createSegment()";
++ kDebug(5001);
+ Segment *seg = new Segment(this);
+ connect( seg, SIGNAL(statusChanged( Segment *)),
+ SLOT(slotStatusChanged( Segment *)));
+@@ -295,12 +296,12 @@
+ void SegmentFactory::deleteSegment(Segment *seg)
+ {
+ m_Segments.removeAll(seg);
+- kDebug(5001) << "SegmentFactory::deleteSegment() " << m_Segments.size() << " segments left.";
++ kDebug(5001) << m_Segments.size() << " segments left.";
+ }
+
+ void SegmentFactory::slotStatusChanged( Segment *seg)
+ {
+- kDebug(5001) << "SegmentFactory::slotStatusChanged() " << seg->status();
++ kDebug(5001) << seg->status();
+ switch (seg->status())
+ {
+ case Segment::Timeout :
+@@ -327,7 +328,7 @@
+
+ void SegmentFactory::slotSegmentTimeOut()
+ {
+- kDebug(5001) << "SegmentFactory::slotSegmentTimeOut() " << m_TimeOutSegments.size();
++ kDebug(5001) << m_TimeOutSegments.size();
+ if(m_TimeOutSegments.isEmpty())
+ return;
+ m_TimeOutSegments.takeFirst()->restartTransfer( nextUrl() );
+@@ -335,7 +336,7 @@
+
+ Segment *SegmentFactory::takeLongest()
+ {
+- kDebug(5001) << "SegmentFactory::takeLongest()";
++ kDebug(5001);
+
+ Segment *longest = 0;
+ KIO::filesize_t bytes = MultiSegKioSettings::splitSize()*1024;
+@@ -359,7 +360,7 @@
+
+ const KUrl SegmentFactory::nextUrl()
+ {
+- kDebug(5001) << "SegmentFactory::nextUrl() ";
++ kDebug(5001);
+ if ( it_Urls == m_Urls.end() )
+ {
+ it_Urls = m_Urls.begin();
+--- kget/transfer-plugins/multisegmentkio/dlgengineediting.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/dlgengineediting.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,120 +1,43 @@
+ <ui version="4.0" >
+- <author></author>
+- <comment></comment>
+- <exportmacro></exportmacro>
+ <class>DlgEngineEditing</class>
+- <widget class="QDialog" name="DlgEngineEditing" >
++ <widget class="QWidget" name="DlgEngineEditing" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>430</width>
+- <height>181</height>
++ <width>419</width>
++ <height>132</height>
+ </rect>
+ </property>
+- <property name="sizePolicy" >
+- <sizepolicy>
+- <hsizetype>5</hsizetype>
+- <vsizetype>0</vsizetype>
+- <horstretch>0</horstretch>
+- <verstretch>255</verstretch>
+- </sizepolicy>
+- </property>
+- <property name="windowTitle" >
+- <string>Dialog</string>
+- </property>
+ <layout class="QGridLayout" >
+- <property name="margin" >
+- <number>9</number>
+- </property>
+- <property name="spacing" >
+- <number>6</number>
+- </property>
+- <item row="2" column="0" >
+- <widget class="QLabel" name="urlLabel" >
++ <item row="0" column="0" >
++ <widget class="QLabel" name="engineNameLabel" >
+ <property name="text" >
+- <string>Url:</string>
++ <string>Engine name:</string>
+ </property>
+ </widget>
+ </item>
+- <item row="3" column="1" >
+- <spacer>
+- <property name="orientation" >
+- <enum>Qt::Vertical</enum>
+- </property>
+- <property name="sizeHint" >
+- <size>
+- <width>20</width>
+- <height>40</height>
+- </size>
+- </property>
+- </spacer>
++ <item row="0" column="1" >
++ <widget class="QLineEdit" name="engineNameEdit" />
+ </item>
+ <item row="1" column="0" >
+- <widget class="QLabel" name="engineNameLabel" >
++ <widget class="QLabel" name="urlLabel" >
+ <property name="text" >
+- <string>Engine name:</string>
++ <string>Url:</string>
+ </property>
+ </widget>
+ </item>
+- <item row="4" column="0" colspan="2" >
+- <widget class="Line" name="line" >
+- <property name="orientation" >
+- <enum>Qt::Horizontal</enum>
+- </property>
+- </widget>
+- </item>
+- <item row="2" column="1" >
++ <item row="1" column="1" >
+ <widget class="QLineEdit" name="urlEdit" />
+ </item>
+- <item row="1" column="1" >
+- <widget class="QLineEdit" name="engineNameEdit" />
+- </item>
+- <item row="5" column="0" colspan="2" >
+- <layout class="QHBoxLayout" >
+- <property name="margin" >
+- <number>0</number>
+- </property>
+- <property name="spacing" >
+- <number>6</number>
+- </property>
+- <item>
+- <spacer>
+- <property name="orientation" >
+- <enum>Qt::Horizontal</enum>
+- </property>
+- <property name="sizeHint" >
+- <size>
+- <width>131</width>
+- <height>31</height>
+- </size>
+- </property>
+- </spacer>
+- </item>
+- <item>
+- <widget class="QPushButton" name="okButton" >
+- <property name="text" >
+- <string>OK</string>
+- </property>
+- </widget>
+- </item>
+- <item>
+- <widget class="QPushButton" name="cancelButton" >
+- <property name="text" >
+- <string>Cancel</string>
+- </property>
+- </widget>
+- </item>
+- </layout>
+- </item>
+- <item row="0" column="1" >
++ <item row="2" column="0" colspan="2" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+- <width>20</width>
++ <width>361</width>
+ <height>40</height>
+ </size>
+ </property>
+@@ -122,40 +45,6 @@
+ </item>
+ </layout>
+ </widget>
+- <pixmapfunction></pixmapfunction>
+ <resources/>
+- <connections>
+- <connection>
+- <sender>okButton</sender>
+- <signal>clicked()</signal>
+- <receiver>DlgEngineEditing</receiver>
+- <slot>accept()</slot>
+- <hints>
+- <hint type="sourcelabel" >
+- <x>278</x>
+- <y>253</y>
+- </hint>
+- <hint type="destinationlabel" >
+- <x>96</x>
+- <y>254</y>
+- </hint>
+- </hints>
+- </connection>
+- <connection>
+- <sender>cancelButton</sender>
+- <signal>clicked()</signal>
+- <receiver>DlgEngineEditing</receiver>
+- <slot>reject()</slot>
+- <hints>
+- <hint type="sourcelabel" >
+- <x>369</x>
+- <y>253</y>
+- </hint>
+- <hint type="destinationlabel" >
+- <x>179</x>
+- <y>282</y>
+- </hint>
+- </hints>
+- </connection>
+- </connections>
++ <connections/>
+ </ui>
+--- kget/transfer-plugins/multisegmentkio/multisegkio.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/multisegkio.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -111,7 +111,7 @@
+ void MultiSegmentCopyJob::stop()
+ {
+ kDebug(5001) << "MultiSegmentCopyJob::stop()";
+- setError(KIO::ERR_USER_CANCELED);
++ setError(KIO::ERR_ABORTED);
+ if (SegFactory)
+ SegFactory->stopTransfer();
+ if (m_putJob)
+@@ -189,6 +189,7 @@
+ QFile::rename ( dest_part, dest_orig );
+ }
+ emit updateSegmentsData();
++ m_putJob->kill();
+ }
+
+ // tooked from SlaveInterface.cpp
+--- kget/transfer-plugins/multisegmentkio/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,12 +1,7 @@
+-
+ include_directories(
+ ../../
+- ${CMAKE_CURRENT_SOURCE_DIR}
+- ${CMAKE_CURRENT_BINARY_DIR}
+ )
+
+-########### next target ###############
+-
+ set(kget_multisegkiofactory_PART_SRCS
+ dlgmultisegkio.cpp
+ segmentfactory.cpp
+@@ -20,13 +15,10 @@
+
+ kde4_add_kcfg_files(kget_multisegkiofactory_PART_SRCS multisegkiosettings.kcfgc)
+
+-kde4_add_plugin(kget_multisegkiofactory WITH_PREFIX ${kget_multisegkiofactory_PART_SRCS})
++kde4_add_plugin(kget_multisegkiofactory ${kget_multisegkiofactory_PART_SRCS})
+
+-target_link_libraries(kget_multisegkiofactory ${KDE4_KIO_LIBS} kgetcore)
++target_link_libraries(kget_multisegkiofactory ${KDE4_KIO_LIBS} kgetcore)
+
+ install(TARGETS kget_multisegkiofactory DESTINATION ${PLUGIN_INSTALL_DIR})
+-
+-########### install files ###############
+-
+ install(FILES kget_multisegkiofactory.desktop DESTINATION ${SERVICES_INSTALL_DIR})
+ install(FILES kget_multisegkiofactory.kcfg DESTINATION ${KCFG_INSTALL_DIR})
+--- kget/transfer-plugins/multisegmentkio/mirrors.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/multisegmentkio/mirrors.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -64,7 +64,7 @@
+ QString u = str.mid(posOfTagHref + 6, (hrefEnd - posOfTagHref -6));
+
+ start = hrefEnd + 1;
+- if ( u.endsWith( m_url.fileName() ) )
++ if ( u.endsWith( '/' + m_url.fileName() ) )
+ {
+ m_Urls << KUrl(u);
+ kDebug(5001) << "url: " << u;
+--- kget/transfer-plugins/kio/kget_kiofactory.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/kio/kget_kiofactory.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ # service definition
+ Type=Service
+-ServiceTypes=KGet/Plugin
++X-KDE-ServiceTypes=KGet/Plugin
+
+ # standard fields
+ Name=KIO TransferFactory
+@@ -38,7 +37,7 @@
+ Comment[zh_TW]=KGet 傳輸外掛程式
+
+ # options for library loader
+-X-KDE-Library=libkget_kiofactory
++X-KDE-Library=kget_kiofactory
+ X-KDE-KGet-plugintype=TransferFactory
+ X-KDE-KGet-rank=50
+ X-KDE-KGet-framework-version=1
+--- kget/transfer-plugins/kio/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/kio/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -2,20 +2,14 @@
+ ../../
+ )
+
+-########### next target ###############
+-
+ set(kget_kiofactory_PART_SRCS
+ transferKio.cpp
+ transferKioFactory.cpp
+ )
+
++kde4_add_plugin(kget_kiofactory ${kget_kiofactory_PART_SRCS})
+
+-kde4_add_plugin(kget_kiofactory WITH_PREFIX ${kget_kiofactory_PART_SRCS})
++target_link_libraries(kget_kiofactory ${KDE4_KIO_LIBS} kgetcore)
+
+-target_link_libraries(kget_kiofactory ${KDE4_KIO_LIBS} kgetcore)
+-
+ install(TARGETS kget_kiofactory DESTINATION ${PLUGIN_INSTALL_DIR})
+-
+-########### install files ###############
+-
+ install(FILES kget_kiofactory.desktop DESTINATION ${SERVICES_INSTALL_DIR})
+--- kget/transfer-plugins/metalink/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/metalink/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -2,20 +2,15 @@
+ ../../
+ )
+
+-########### next target ###############
+-
+ set(kget_metalinkfactory_PART_SRCS
+ metalinkfactory.cpp
+ metalink.cpp
+ metalinker.cpp
+ )
+
+-kde4_add_plugin(kget_metalinkfactory WITH_PREFIX ${kget_metalinkfactory_PART_SRCS})
++kde4_add_plugin(kget_metalinkfactory ${kget_metalinkfactory_PART_SRCS})
+
+-target_link_libraries(kget_metalinkfactory ${KDE4_KIO_LIBS} kgetcore)
++target_link_libraries(kget_metalinkfactory ${KDE4_KIO_LIBS} kgetcore)
+
+ install(TARGETS kget_metalinkfactory DESTINATION ${PLUGIN_INSTALL_DIR})
+-
+-########### install files ###############
+-
+ install(FILES kget_metalinkfactory.desktop DESTINATION ${SERVICES_INSTALL_DIR})
+--- kget/transfer-plugins/metalink/kget_metalinkfactory.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/metalink/kget_metalinkfactory.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ # service definition
+ Type=Service
+-ServiceTypes=KGet/Plugin
++X-KDE-ServiceTypes=KGet/Plugin
+
+ # standard fields
+ Name=MetaLink TransferFactory
+@@ -38,7 +37,7 @@
+ Comment[zh_TW]=KGet 傳輸外掛程式
+
+ # options for library loader
+-X-KDE-Library=libkget_metalinkfactory
++X-KDE-Library=kget_metalinkfactory
+ X-KDE-KGet-plugintype=TransferFactory
+ X-KDE-KGet-rank=90
+ X-KDE-KGet-framework-version=1
+--- kget/transfer-plugins/bittorrent/http.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/http.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,98 +0,0 @@
+-/*
+- * Copyright (C) 2005 Felix Berger <felixberger at beldesign.de>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-
+-#include "http.h"
+-#include "http.moc"
+-
+-#include <torrent/exceptions.h>
+-#include <iostream>
+-
+-#include <kio/job.h>
+-#include <kio/scheduler.h>
+-#include <kdebug.h>
+-
+-void signalDone(torrent::Http* http);
+-void signalFailed(torrent::Http* http, const QString& err);
+-
+-Http::Http()
+- : job(0)
+-{
+-}
+-
+-void Http::start()
+-{
+- if (job) {
+- // throw torrent::internal_error("Tried to start already running http job");
+- kDebug(5001) << "Tried to start already running http job";
+- }
+- job = KIO::get(KUrl(get_url().c_str()), KIO::NoReload, KIO::HideProgressInfo);
+- connect(job, SIGNAL(data(KIO::Job*, const QByteArray&)),
+- SLOT(data(KIO::Job*, const QByteArray&)));
+- connect(job, SIGNAL(result(KIO::Job*)), SLOT(result(KIO::Job*)));
+-}
+-
+-void Http::close()
+-{
+- if (job) {
+- KIO::Scheduler::cancelJob(job);
+- job = 0;
+- }
+-}
+-
+-void Http::data(KIO::Job* job, const QByteArray& data)
+-{
+- Q_UNUSED(job);
+- m_stream->write(data.data(), data.size());
+-}
+-
+-void Http::result(KIO::Job* job)
+-{
+- if (job->error()) {
+- signalFailed(this, job->errorString());
+- }
+- else {
+- signalDone(this);
+- }
+- this->job = 0;
+-}
+-
+-Http* Http::createObject()
+-{
+- // hope they don't leak in the client code
+- return new Http();
+-}
+-
+-Http::SlotFactory Http::getFactory()
+-{
+- return sigc::ptr_fun(&Http::createObject);
+-}
+-
+-#ifdef emit
+-#undef emit
+-void signalDone(torrent::Http* http)
+-{
+- http->signal_done().emit();
+-}
+-
+-void signalFailed(torrent::Http* http, const QString& err)
+-{
+- Q_UNUSED(err)
+- http->signal_failed().emit("http error");
+-}
+-#endif
+--- kget/transfer-plugins/bittorrent/btthread.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/btthread.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,65 +0,0 @@
+-/*
+- * Copyright (C) 2005 Felix Berger <felixberger at beldesign.de>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-
+-#ifndef BTTHREAD_H
+-#define BTTHREAD_H
+-
+-#include <QThread>
+-#include <QMutex>
+-
+-/**
+- * Singleton thread for the bittorrent library. Waits in a select for the
+- * bittorrent file descriptors and executes the work on the descriptors in its
+- * run method.
+- *
+- * The work part is protected by a private mutex which can be locked through
+- * the static public inerfaces lock() and unlock(). Code in different
+- * threads (the Qt eventloop thread) should lock before accessing values of a
+- * torrent::download object.
+- *
+- * It also does all the library initialization and cleanup calls.
+- */
+-class BTThread : public QThread
+-{
+- private:
+- BTThread()
+- {
+- }
+- ~BTThread();
+-
+- public:
+- /**
+- * Initialize torrent library the instance thread and start it.
+- *
+- * torrent::initialize() should be already called before.
+- */
+- static void initialize();
+- static void stop();
+- static void lock();
+- static void unlock();
+-
+- void run();
+-
+- private:
+- static BTThread* instance;
+- static int initialized;
+- QMutex mutex;
+-};
+-
+-#endif
+--- kget/transfer-plugins/bittorrent/http.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/http.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,55 +0,0 @@
+-/*
+- * Copyright (C) 2005 Felix Berger <felixberger at beldesign.de>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-
+-#ifndef HTTP_H
+-#define HTTP_H
+-
+-#include <torrent/http.h>
+-
+-#include <QObject>
+-#include <QPointer>
+-
+-namespace KIO {
+- class Job;
+- class TransferJob;
+-}
+-
+-class Http : public QObject, public torrent::Http
+-{
+- Q_OBJECT
+-
+-public:
+- Http();
+- void start();
+- void close();
+-
+- typedef sigc::slot0<Http*> SlotFactory;
+- static SlotFactory getFactory();
+- static Http* createObject();
+-
+-
+-private slots:
+- void data(KIO::Job* job, const QByteArray& data);
+- void result(KIO::Job* job);
+-
+-private:
+- QPointer<KIO::TransferJob> job;
+-};
+-
+-#endif
+--- kget/transfer-plugins/bittorrent/Makefile.am (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/Makefile.am (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,19 +0,0 @@
+-if HAVE_LIBTORRENT
+-kde_module_LTLIBRARIES = libkget_bittorrentfactory.la
+-
+-libkget_bittorrentfactory_la_SOURCES = bttransfer.cpp http.cpp btthread.cpp bttransferhandler.cpp\
+- bttransferfactory.cpp btdetailswidgetfrm.ui btdetailswidget.cpp
+-libkget_bittorrentfactory_la_LIBADD = $(LIB_QTCORE) $(LIB_QTGUI) $(LIB_QT3SUPPORT) $(LIB_KDEUI) $(LIB_KDECORE) $(LIB_KIO) $(TORRENT_LIBS) ../../core/libcore.la \
+- ../../conf/libconf.la
+-libkget_bittorrentfactory_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) \
+- $(all_libraries)
+-
+-noinst_HEADERS = bttransfer.h http.h btthread.h bttransferfactory.h bttransferhandler.h
+-
+-INCLUDES = $(TORRENT_CFLAGS) $(all_includes) -I$(srcdir)/../..
+-
+-kde_services_DATA = kget_bittorrentfactory.desktop
+-
+-endif
+-
+-METASOURCES = AUTO
+\ No newline at end of file
+--- kget/transfer-plugins/bittorrent/btthread.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/btthread.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,107 +0,0 @@
+-/*
+- * Copyright (C) 2005 Felix Berger <felixberger at beldesign.de>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-
+-#include "btthread.h"
+-#include "http.h"
+-
+-#include <torrent/torrent.h>
+-
+-#include <kdebug.h>
+-
+-BTThread* BTThread::instance = 0;
+-int BTThread::initialized = 0;
+-
+-void BTThread::initialize()
+-{
+- if (!initialized++)
+- {
+- torrent::Http::set_factory(Http::getFactory());
+- torrent::initialize();
+- torrent::listen_open(6890, 6999);
+- instance = new BTThread();
+- instance->start();
+- }
+- kDebug(5001) << "initialized1 = " << initialized;
+-}
+-
+-void BTThread::stop()
+-{
+- kDebug(5001) << "initialized2 = " << initialized;
+- if (!--initialized)
+- {
+- //I've disabled this line because we can't delete the instance
+- //if we have a QMutexLocker. Felix, is this mutex necessary?
+- //(removing it solves some crashes when deleting bittorrent transfers)
+- //QMutexLocker locker(&instance->mutex);
+- instance->terminate();
+- instance->wait();
+- delete instance;
+- instance = 0;
+- torrent::cleanup();
+- }
+-}
+-
+-BTThread::~BTThread()
+-{
+-}
+-
+-void BTThread::lock()
+-{
+- if (instance)
+- {
+- instance->mutex.lock();
+- }
+-}
+-
+-void BTThread::unlock()
+-{
+- if (instance)
+- {
+- instance->mutex.unlock();
+- }
+-}
+-
+-void BTThread::run()
+-{
+- while (true)
+- {
+- int max_fd = 0;
+- fd_set rd, wr, er;
+- FD_ZERO (&rd);
+- FD_ZERO (&wr);
+- FD_ZERO (&er);
+-
+- torrent::mark(&rd, &wr, &er, &max_fd);
+-
+- uint64_t t = torrent::get_next_timeout();
+- // TODO check if values make sense and we sleep enough on select
+- if (t > 1000000)
+- t = 1000000;
+-
+- timeval timeout = {t / 1000000, t % 1000000};
+-
+- max_fd = select(max_fd + 1, &rd, &wr, &er, &timeout);
+-
+- if (max_fd >= 0)
+- {
+- QMutexLocker locker(&mutex);
+- torrent::work(&rd, &wr, &er, max_fd);
+- }
+- }
+-}
+--- kget/transfer-plugins/bittorrent/btdetailswidget.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/btdetailswidget.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,6 +1,6 @@
+ /* This file is part of the KDE project
+
+- Copyright (C) 2005 Dario Massarin <nekkar at libero.it>
++ Copyright (C) 2007 Lukas Appelhans <l.appelhans at gmx.de>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+@@ -11,27 +11,13 @@
+ #include "btdetailswidget.h"
+
+ #include "bttransferhandler.h"
+-#include "btdetailswidgetfrm.h"
++#include "ui_btdetailswidgetfrm.h"
+
+ #include <kdebug.h>
+
+ BTDetailsWidget::BTDetailsWidget(BTTransferHandler * transfer)
+ : m_transfer(transfer)
+ {
+- Ui::BTDetailsWidgetFrm frm;
+- frm.setupUi(this);
+-
+- findChild<QLabel *>("chunksTotalLabel")->setText(i18n("Total:"));
+- findChild<QLabel *>("chunksDownloadedLabel")->setText(i18n("Downloaded:"));
+-
+- findChild<QLabel *>("peersConnectedLabel")->setText(i18n("Connected:"));
+- findChild<QLabel *>("peersNotConnectedLabel")->setText(i18n("Not connected:"));
+-
+- m_chunksTotalLabel = findChild<QLabel *>("chunksTotalContentLabel");
+- m_chunksDownloadedLabel = findChild<QLabel *>("chunksDownloadedContentLabel");
+- m_peersConnectedLabel = findChild<QLabel *>("peersConnectedContentLabel");
+- m_peersNotConnectedLabel = findChild<QLabel *>("peersNotConnectedContentLabel");
+-
+ transfer->addObserver(this);
+ //This updates the widget with the right values
+ transferChangedEvent(transfer);
+@@ -39,48 +25,6 @@
+
+ void BTDetailsWidget::transferChangedEvent(TransferHandler * transfer)
+ {
+- TransferHandler::ChangesFlags transferFlags = m_transfer->changesFlags(this);
+-
+- if(transferFlags & BTTransfer::Tc_ChunksTotal)
+- {
+- int chunksTotal = m_transfer->chunksTotal();
+-
+- if(chunksTotal!=-1)
+- m_chunksTotalLabel->setText(QString(chunksTotal));
+- else
+- m_chunksTotalLabel->setText(QString());
+- }
+-
+- if(transferFlags & BTTransfer::Tc_ChunksDownloaded)
+- {
+- int chunksDownloaded = m_transfer->chunksDownloaded();
+-
+- if(chunksDownloaded!=-1)
+- m_chunksDownloadedLabel->setText(QString(chunksDownloaded));
+- else
+- m_chunksDownloadedLabel->setText(QString());
+- }
+-
+- if(transferFlags & BTTransfer::Tc_PeersConnected)
+- {
+- int peersConnected = m_transfer->peersConnected();
+-
+- if(peersConnected!=-1)
+- m_peersConnectedLabel->setText(QString(peersConnected));
+- else
+- m_peersConnectedLabel->setText(QString());
+- }
+-
+- if(transferFlags & BTTransfer::Tc_PeersNotConnected)
+- {
+- int peersNotConnected = m_transfer->peersNotConnected();
+-
+- if(peersNotConnected!=-1)
+- m_peersNotConnectedLabel->setText(QString(peersNotConnected));
+- else
+- m_peersNotConnectedLabel->setText(QString());
+- }
+-
+ m_transfer->resetChangesFlags(this);
+ }
+
+--- kget/transfer-plugins/bittorrent/bttransfer.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/bttransfer.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,39 +1,25 @@
+-/*
+- * Copyright (C) 2005 Felix Berger <felixberger at beldesign.de>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
++/* This file is part of the KDE project
+
++ Copyright (C) 2007 Lukas Appelhans <l.appelhans at gmx.de>
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public
++ License as published by the Free Software Foundation; either
++ version 2 of the License, or (at your option) any later version.
++*/
++
+ #ifndef BTTRANSFER_H
+ #define BTTRANSFER_H
+
+-#include <torrent/torrent.h>
+-#include <sstream>
+-
+ #include <QTimer>
+ #include <QDateTime>
++#include <QByteArray>
+
+ #include "core/transfer.h"
++#include "torrentcontrol.h"
+
++#include <kio/job.h>
+
+-namespace KIO
+-{
+- class Job;
+-}
+-
+ class BTTransfer : public QObject, public Transfer
+ {
+ Q_OBJECT
+@@ -52,7 +38,7 @@
+
+ BTTransfer(TransferGroup* parent, TransferFactory* factory,
+ Scheduler* scheduler, const KUrl& src, const KUrl& dest,
+- const QDomElement * e = 0 );
++ const QDomElement * e = 0);
+ ~BTTransfer();
+
+ //Job virtual functions
+@@ -75,29 +61,25 @@
+
+ private slots:
+ void update();
++ void slotData(KIO::Job *, const QByteArray& data);
++ void slotResult(KJob * job);
++ void slotStoppedByError(bt::TorrentInterface* error, QString errormsg);
+
+ private:
+- void resume();
+- void remove(); //Now I put this functions here. Shouldn't it
+- //be integrated in the destructor?
+- void trackerMessage(std::string msg);
++ //TODO: are all these functions necessary??
+ void downloadFinished();
+ void hashingFinished();
+
+- QTime startTime;
+ QTimer timer;
+- std::stringstream bencodeStream;
+- torrent::Download download;
+
+ int m_chunksTotal;
+ int m_chunksDownloaded;
+ int m_peersConnected;
+ int m_peersNotConnected;
+
+- sigc::connection trackerSucceeded;
+- sigc::connection trackerFailed;
+- sigc::connection downloadDone;
+- sigc::connection hashingDone;
++ bt::TorrentControl *torrent;
++
++ QByteArray m_data;
+ };
+
+ #endif
+--- kget/transfer-plugins/bittorrent/bttransferfactory.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/bttransferfactory.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,22 +1,13 @@
+-/*
+- * Copyright (C) 2005 Felix Berger <felixberger at beldesign.de>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
++/* This file is part of the KDE project
+
++ Copyright (C) 2007 Lukas Appelhans <l.appelhans at gmx.de>
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public
++ License as published by the Free Software Foundation; either
++ version 2 of the License, or (at your option) any later version.
++*/
++
+ #include "bttransferfactory.h"
+
+ // header inclusion order is crucial because of signal emit clashes
+@@ -30,21 +21,25 @@
+
+ KGET_EXPORT_PLUGIN(BTTransferFactory)
+
+-Transfer * BTTransferFactory::createTransfer( KUrl srcUrl, KUrl destUrl,
++BTTransferFactory::BTTransferFactory()
++{
++}
++
++BTTransferFactory::~BTTransferFactory()
++{
++}
++
++Transfer * BTTransferFactory::createTransfer(const KUrl &srcUrl, const KUrl &destUrl,
+ TransferGroup * parent,
+ Scheduler * scheduler,
+ const QDomElement * e )
+ {
+ kDebug(5001) << "BTTransferFactory::createTransfer";
+
+- if (srcUrl.fileName().endsWith(".torrent") && srcUrl.isLocalFile())
++ if (srcUrl.fileName().endsWith(".torrent"))
+ {
+- //Make sure that the given url points to an existing torrent file
+- QFile torrentFile(srcUrl.path());
+- if(!torrentFile.exists())
+- return 0;
+-
+- return new BTTransfer(parent, this, scheduler, srcUrl, destUrl, e);
++ if (!srcUrl.isEmpty() && !destUrl.isEmpty() && parent && scheduler)
++ return new BTTransfer(parent, this, scheduler, srcUrl, destUrl, e);
+ }
+ return 0;
+ }
+--- kget/transfer-plugins/bittorrent/btdetailswidget.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/btdetailswidget.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,6 +1,6 @@
+ /* This file is part of the KDE project
+
+- Copyright (C) 2005 Dario Massarin <nekkar at libero.it>
++ Copyright (C) 2007 Lukas Appelhans <l.appelhans at gmx.de>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+@@ -15,8 +15,6 @@
+
+ #include "core/observer.h"
+
+-class QLabel;
+-
+ class BTTransferHandler;
+
+ class BTDetailsWidget : public QWidget, public TransferObserver
+@@ -29,11 +27,6 @@
+
+ private:
+ BTTransferHandler * m_transfer;
+-
+- QLabel * m_chunksTotalLabel;
+- QLabel * m_chunksDownloadedLabel;
+- QLabel * m_peersConnectedLabel;
+- QLabel * m_peersNotConnectedLabel;
+ };
+
+ #endif
+--- kget/transfer-plugins/bittorrent/kget_bittorrentfactory.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/kget_bittorrentfactory.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ # service definition
+ Type=Service
+-ServiceTypes=KGet/Plugin
++X-KDE-ServiceTypes=KGet/Plugin
+
+ # standard fields
+ Name=KIO TransferFactory
+--- kget/transfer-plugins/bittorrent/bttransferfactory.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/bttransferfactory.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,22 +1,13 @@
+-/*
+- * Copyright (C) 2005 Felix Berger <felixberger at beldesign.de>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
++/* This file is part of the KDE project
+
++ Copyright (C) 2007 Lukas Appelhans <l.appelhans at gmx.de>
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public
++ License as published by the Free Software Foundation; either
++ version 2 of the License, or (at your option) any later version.
++*/
++
+ #ifndef BTTRANSFERFACTORY_H
+ #define BTTRANSFERFACTORY_H
+
+@@ -25,7 +16,10 @@
+ class BTTransferFactory : public TransferFactory
+ {
+ public:
+- Transfer * createTransfer( KUrl srcUrl, KUrl destUrl,
++ BTTransferFactory();
++ ~BTTransferFactory();
++
++ Transfer * createTransfer(const KUrl &srcUrl, const KUrl &destUrl,
+ TransferGroup * parent,
+ Scheduler * scheduler,
+ const QDomElement * e = 0 );
+@@ -36,6 +30,10 @@
+ QWidget * createDetailsWidget( TransferHandler * transfer );
+
+ const QList<KAction *> actions();
++
++ QWidget * createSettingsWidget() { return 0;}
++
++ QString displayName(){return "Bittorrent";}
+ };
+
+ #endif
+--- kget/transfer-plugins/bittorrent/bttransferhandler.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/bttransferhandler.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,6 +1,6 @@
+ /* This file is part of the KDE project
+
+- Copyright (C) 2005 Dario Massarin <nekkar at libero.it>
++ Copyright (C) 2007 Lukas Appelhans <l.appelhans at gmx.de>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+--- kget/transfer-plugins/bittorrent/bttransfer.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/bttransfer.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,351 +1,196 @@
+-/*
+- * Copyright (C) 2005 Felix Berger <felixberger at beldesign.de>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
++/* This file is part of the KDE project
+
+-#include "bttransfer.h"
+-#include "btthread.h"
++ Copyright (C) 2007 Lukas Appelhans <l.appelhans at gmx.de>
+
+-#include <sigc++/bind.h>
+-#include <torrent/torrent.h>
+-#include <torrent/bencode.h>
+-#include <torrent/rate.h>
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public
++ License as published by the Free Software Foundation; either
++ version 2 of the License, or (at your option) any later version.
++*/
+
+-#include <kdebug.h>
+-#include <klocale.h>
+-#include <kiconloader.h>
++#include "bttransfer.h"
+
+-#include <QDomElement>
++#include <torrent.h>
++#include <peermanager.h>
++#include <error.h>
++#include <globals.h>
++#include <server.h>
++#include <util/constants.h>
++
++#include <KDebug>
++#include <KLocale>
++#include <KIconLoader>
++#include <KStandardDirs>
+ #include <QFile>
++#include <QDomElement>
+
+ BTTransfer::BTTransfer(TransferGroup* parent, TransferFactory* factory,
+ Scheduler* scheduler, const KUrl& src, const KUrl& dest,
+ const QDomElement * e)
+ : Transfer(parent, factory, scheduler, src, dest, e),
+- m_chunksTotal(0), m_chunksDownloaded(0),
+- m_peersConnected(0), m_peersNotConnected(0)
++ m_chunksTotal(0),
++ m_chunksDownloaded(0),
++ m_peersConnected(0),
++ m_peersNotConnected(0)
+ {
+- BTThread::initialize(); //check: is this thread active always?? :-O
+- kDebug(5001) << "new bt transfer";
++ /** QFile srcFile(m_source.url());
++ if (!srcFile.isLocalFile() && !m_source.isEmpty())
++ {
++ KIO::TransferJob *m_copyjob = KIO::get(m_source , KIO::NoReload, KIO::HideProgressInfo);
++ connect(m_copyjob,SIGNAL(data(KIO::Job*,const QByteArray &)), SLOT(slotData(KIO::Job*, const QByteArray& )));
++ connect(m_copyjob, SIGNAL(result(KJob *)), this, SLOT(slotResult(KJob * )));
++ }**/
+
+- //We already know that the file is local (the check is in the Factory)
+- QFile file(src.path());
+- kDebug(5001) << "Opening file: " << src.path();
+
+- if(file.open(QIODevice::ReadOnly))
++
++ bt::Uint16 i = 0;
++ do
+ {
+- kDebug(5001) << "***********Bittorrent file opened";
+- QByteArray data = file.readAll();
+- kDebug(5001) << "Stream of size: " << data.size();
+- kDebug(5001) << "Stream of data: " << endl << data.data();
+- bencodeStream.write(data.data(), data.size());
++ bt::Globals::instance().initServer(6881 + i);
++ i++;
++ }while (!bt::Globals::instance().getServer().isOK() && i < 10);
+
+- file.close();
++ if (!bt::Globals::instance().getServer().isOK())
++ return;
++
++ kDebug(5001) << m_source.url().remove("file://");
++ try
++ {
++ torrent = new bt::TorrentControl();
++ torrent->init(0, m_source.url().remove("file://"), m_dest.url().remove("file://"), m_dest.url().remove("file://"), 0);
+ }
+- else
++ catch (bt::Error &err)
+ {
+- kDebug(5001) << "***********Unable to open bittorrent file!";
+- kDebug(5001) << file.errorString();
++ kDebug(5001) << err.toString();
+ }
+
++ connect(torrent, SIGNAL(stoppedByError(bt::TorrentInterface*, QString)), this, SLOT(slotStoppedByError(bt::TorrentInterface*, QString)));
+ connect(&timer, SIGNAL(timeout()), SLOT(update()));
+ }
+
+ BTTransfer::~BTTransfer()
+ {
+- BTThread::stop();
+ }
+
+ bool BTTransfer::isResumable() const
+ {
++ kDebug(5001);
++ //FIXME
+ return true;
+ }
+
+ int BTTransfer::chunksTotal()
+ {
+- if (download.is_valid() && download.is_active())
+- return download.get_chunks_total();
+- else
+- return -1;
++ kDebug(5001);
++ return torrent->getTorrent().getNumChunks();
+ }
+
+ int BTTransfer::chunksDownloaded()
+ {
+- if (download.is_valid() && download.is_active())
+- return download.get_chunks_done();
+- else
+- return -1;
++ kDebug(5001);
++ //FIXME
+ }
+
+ int BTTransfer::peersConnected()
+ {
+- if (download.is_valid() && download.is_active())
+- return download.get_peers_connected();
+- else
+- return -1;
+-
++ kDebug(5001);
+ }
+
+ int BTTransfer::peersNotConnected()
+ {
+- if (download.is_valid() && download.is_active())
+- return download.get_peers_not_connected();
+- else
+- return -1;
++ kDebug(5001);
+ }
+
+ void BTTransfer::start()
+ {
+- startTime = QTime::currentTime();
++ kDebug(5001);
+ setStatus(Job::Running, i18n("Analizing torrent.."), SmallIcon("xmag"));
+ setTransferChange(Tc_Status, true);
+
+- resume();
++ torrent->start();
++ timer.start(500);
+ }
+
+ void BTTransfer::stop()
+ {
+- kDebug(5001) << endl << "bt stopped" << endl;
+- timer.stop();
+- if (download.is_valid())
+- {
+- download.stop();
+-// download.hash_save();
+- m_speed = 0;
+- setStatus(Job::Stopped, i18n("Stopped"), SmallIcon("process-stop"));
+- setTransferChange(Tc_Speed | Tc_Status, true);
+-
+- startTime = QTime();
+- }
++ kDebug(5001);
++ torrent->stop(true);
++ m_speed = 0;
++ setStatus(Job::Stopped, i18n("Stopped"), SmallIcon("process-stop"));
++ setTransferChange(Tc_Speed | Tc_Status, true);
+ }
+
+ int BTTransfer::elapsedTime() const
+ {
+- return startTime.secsTo(QTime::currentTime());
++ kDebug(5001);
++ return torrent->getRunningTimeDL();
+ }
+
+ int BTTransfer::remainingTime() const
+ {
+- // we should use the average rate here
+- int rate = speed();
+- return (rate <= 0) ? -1 :
+- (int)((totalSize() - processedSize()) / rate);
++ kDebug(5001);
++ return torrent->getETA();
+ }
+
+-void BTTransfer::resume()
+-{
+- kDebug(5001) << endl << "resume dl" << endl;
+- if (!download.is_valid())
+- {
+- try
+- {
+- download = torrent::download_add(&bencodeStream);
+- // deallocate stream
+- bencodeStream.str(std::string());
+- // set directory
+- download.set_root_dir(std::string(qPrintable(dest().directory(false))));
+-
+- if (download.get_entry_size() == 1)
+- {
+- //set filename too?
+- }
+-
+- // trackerSucceeded = download.signal_tracker_succeded
+- // (sigc::bind(sigc::mem_fun(*this, &BTTransfer::trackerMessage),
+- // "succeeded"));
+- // trackerFailed = download.signal_tracker_failed
+- // (sigc::mem_fun(*this, &BTTransfer::trackerMessage));
+-
+- downloadDone = download.signal_download_done
+- (sigc::mem_fun(*this, &BTTransfer::downloadFinished));
+-
+- hashingDone = download.signal_hash_done
+- (sigc::mem_fun(*this, &BTTransfer::hashingFinished));
+- }
+- catch (std::exception& e)
+- {
+- // line below only compiles with exceptions activated
+- // kDebug(5001) << "exception " << e.what();
+- return;
+- }
+- kDebug(5001) << "still alive";
+- }
+-
+- if(!download.is_active())
+- {
+- if (!download.is_open())
+- {
+- kDebug(5001) << endl << "second turn" << endl;
+- download.open();
+- }
+- if (!download.is_hash_checked())
+- {
+- download.hash_check(false);
+- return;
+- }
+- try
+- {
+- kDebug(5001) << endl << "third turn" << endl;
+- setStatus(status(), i18n("Connecting.."), SmallIcon("connect-creating"));
+- setTransferChange(Tc_Status, true);
+-
+- download.start();
+- }
+- catch (std::exception& e)
+- {
+- // the line below only compiles with exceptions activated
+- // kDebug(5001) << "Resume exception " << e.what() << endl;
+- }
+- timer.start(1 * 1000);
+- return;
+- }
+-}
+-
+-void BTTransfer::remove()
+-{
+- kDebug(5001) << endl << "bt removed" << endl;
+- timer.stop();
+- if (download.is_valid() && download.is_active())
+- {
+- download.stop();
+- download.close();
+- torrent::download_remove(download.get_hash());
+- }
+-}
+-
+-void BTTransfer::trackerMessage(std::string msg)
+-{
+- kDebug(5001) << "trackerMessage";
+- kDebug(5001) << msg.c_str();
+-}
+-
+ void BTTransfer::downloadFinished()
+ {
+- kDebug(5001) << "bt transfer done ";
++ kDebug(5001);
+ setStatus(Job::Finished, i18n("Finished"), SmallIcon("ok"));
+ setTransferChange(Tc_Status, true);
+ }
+
+ void BTTransfer::hashingFinished()
+ {
+- kDebug(5001) << "hashing finished ";
++ kDebug(5001);
+
+ setTransferChange(Tc_Status, true);
+- resume();
++ start();
+ }
+
+ void BTTransfer::update()
+ {
+- kDebug(5001) << "update";
+- if (!download.is_valid() || !download.is_active())
+- {
+- kDebug(5001) << "timer running on invalid or inactive download";
+- timer.stop();
+- return;
+- }
+-
+-// kDebug(5001) << "dl name " << download.get_name().c_str();
+-// kDebug(5001) << "processedSize " << download.get_bytes_done();
+-// kDebug(5001) << "rate down " << download.get_rate_down();
+-// kDebug(5001) << "rate up " << download.get_rate_up();
+-// kDebug(5001) << "bytes up " << download.get_bytes_up();
+-// kDebug(5001) << "bytes down " << download.get_bytes_down();
+-// kDebug(5001) << "chunk size " << download.get_chunks_size();
+-// kDebug(5001) << "chunks done " << download.get_chunks_done();
+-// kDebug(5001) << "chunks total " << download.get_chunks_total();
+-// kDebug(5001) << "peers conn " << download.get_peers_connected();
+-// kDebug(5001) << "handshakes " << torrent::get(torrent::HANDSHAKES_TOTAL);
++ kDebug(5001);
+
+- BTThread::lock();
+- m_totalSize = download.get_bytes_total();
+- m_processedSize = download.get_bytes_done();
+- m_speed = download.get_read_rate().rate();
+- BTThread::unlock();
++ torrent->update();
+
+- //Make sure we are really downloading the torrent before setting the status
+- //text to "Downloading.."
+- if( m_speed &&
+- (statusText() != i18n("Downloading..")) &&
+- (status() != Job::Finished) )
+- {
+- setStatus(status(), i18n("Downloading.."), SmallIcon("media-playback-start"));
+- setTransferChange(Tc_Status);
+- }
+-
+- if (m_totalSize > 0)
+- {
+- m_percent = (int)((100.0 * m_processedSize) / m_totalSize);
+- setTransferChange(Tc_Percent);
+- }
+-
+- if (m_chunksTotal != chunksTotal())
+- {
+- m_chunksTotal = chunksTotal();
+- setTransferChange(Tc_ChunksTotal);
+- }
+-
+- if (m_chunksDownloaded != chunksDownloaded())
+- {
+- m_chunksDownloaded = chunksDownloaded();
+- setTransferChange(Tc_ChunksDownloaded);
+- }
+-
+- if (m_peersConnected != peersConnected())
+- {
+- m_peersConnected = peersConnected();
+- setTransferChange(Tc_PeersConnected);
+- }
+-
+- if (m_peersNotConnected != peersNotConnected())
+- {
+- m_peersNotConnected = peersNotConnected();
+- setTransferChange(Tc_PeersNotConnected);
+- }
+-
+ setTransferChange(Tc_ProcessedSize | Tc_Speed | Tc_TotalSize, true);
+ }
+
+ void BTTransfer::save(QDomElement e) // krazy:exclude=passbyvalue
+ {
+- Transfer::save(e);
+-
+- if (download.is_valid() && !download.is_active())
+- {
+- QDomDocument doc(e.ownerDocument());
+- QDomElement bencode(doc.createElement("bencode"));
+- e.appendChild(bencode);
+- std::stringstream s;
+- s << download.get_bencode();
+- bencode.appendChild(doc.createTextNode(s.str().c_str()));
+- }
+ }
+
+ void BTTransfer::load(const QDomElement &e)
+ {
+- if (!e.isNull())
++}
++
++void BTTransfer::slotData(KIO::Job *, const QByteArray& data) //stolen from Metalink-plugin
++{
++ kDebug(5001);
++ if (data.size() == 0)
++ return;
++ m_data.append(data);
++}
++
++void BTTransfer::slotResult(KJob * job)
++{
++/** switch (job->error())
+ {
+- Transfer::load(e);
++ case 0: //The download has finished
++ QFile torrentFile(KStandardDirs::locateLocal("appdata", "/tmp/" + m_source.fileName()));
++ torrentFile.write(m_data);
++ torrentFile.close();
++ m_source = KStandardDirs::locateLocal("appdata", "/tmp/") + torrentFile.fileName();
++ break;
++ case KIO::ERR_FILE_ALREADY_EXIST: //The file has already been downloaded.
++ m_data = 0;
++ }**/
++}
+
+- QDomElement first(e.firstChild().toElement());
+- if (!first.isNull() && (first.tagName() == "bencode") )
+- {
+- bencodeStream << qPrintable(first.text());
+- }
+- }
++void BTTransfer::slotStoppedByError(bt::TorrentInterface* error, QString errormsg)
++{
++ kDebug(5001) << errormsg;
+ }
+
++
+ #include "bttransfer.moc"
+--- kget/transfer-plugins/bittorrent/CMakeLists.txt (.../tags/KDE/3.96/kdenetwork) (revision 0)
++++ kget/transfer-plugins/bittorrent/CMakeLists.txt (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -0,0 +1,36 @@
++
++find_package(BTCore REQUIRED)
++if(BTCORE_FOUND)
++include_directories(
++ ../../
++ ${CMAKE_CURRENT_SOURCE_DIR}
++ ${CMAKE_CURRENT_BINARY_DIR}
++ ${KDE4_INCLUDES}
++ ${BTCORE_INCLUDE_DIR}
++)
++add_definitions(${KDE4_ENABLE_EXCEPTIONS} ${KDE4_DEFINITIONS} )
++########### next target ###############
++
++set(kget_bittorrentfactory_PART_SRCS
++ bttransfer.cpp
++ bttransferfactory.cpp
++ bttransferhandler.cpp
++ btdetailswidget.cpp
++)
++
++kde4_add_ui_files(kget_bittorrentfactory_PART_SRCS btdetailswidgetfrm.ui)
++
++#kde4_add_kcfg_files(kget_bittorrentfactory_PART_SRCS bittorrentsettings.kcfgc)
++
++kde4_add_plugin(kget_bittorrentfactory WITH_PREFIX ${kget_bittorrentfactory_PART_SRCS})
++
++target_link_libraries(kget_bittorrentfactory ${KDE4_KDEUI_LIBS} ${BTCORE_LIBRARIES} kgetcore)
++
++install(TARGETS kget_bittorrentfactory DESTINATION ${PLUGIN_INSTALL_DIR})
++
++########### install files ###############
++
++install(FILES kget_bittorrentfactory.desktop DESTINATION ${SERVICES_INSTALL_DIR})
++#install(FILES kget_bittorrentfactory.kcfg DESTINATION ${KCFG_INSTALL_DIR})
++
++endif(BTCORE_FOUND)
+--- kget/transfer-plugins/bittorrent/bttransferhandler.h (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/transfer-plugins/bittorrent/bttransferhandler.h (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,6 +1,6 @@
+ /* This file is part of the KDE project
+
+- Copyright (C) 2005 Dario Massarin <nekkar at libero.it>
++ Copyright (C) 2007 Lukas Appelhans <l.appelhans at gmx.de>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+--- kget/desktop/kget.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/desktop/kget.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,8 +1,7 @@
+ # KDE Config File
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Application
+-Exec=kget -caption "%c" %i %m
++Exec=kget -caption "%c" %i
+ Icon=kget
+ Terminal=false
+ Name=KGet
+--- kget/desktop/kget_download.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/desktop/kget_download.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Actions=KGetDownload;
+ Type=Service
+ Icon=
+-ServiceTypes=KonqPopupMenu/Plugin,all/allfiles
++X-KDE-ServiceTypes=KonqPopupMenu/Plugin,all/allfiles
+ ExcludeServiceTypes=kdedevice/*
+ X-KDE-Protocol=!file
+
+--- kget/plasma/applet/errorgraph.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/plasma/applet/errorgraph.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -23,7 +23,7 @@
+
+ #include <plasma/widgets/icon.h>
+ #include <plasma/widgets/label.h>
+-#include <plasma/widgets/boxlayout.h>
++#include <plasma/layouts/boxlayout.h>
+ #include <plasma/widgets/pushbutton.h>
+
+ #include <KIcon>
+@@ -41,9 +41,12 @@
+ m_launchButton = new Plasma::PushButton(KIcon("kget"), "Launch KGet", m_applet);
+
+ //m_layout->addItem(m_errorLabel);
+- m_layout->addItem(m_launchButton);
++ //m_layout->addItem(m_launchButton);
+
++ m_applet->updateGeometry();
++ m_errorLabel->updateGeometry();
+
++
+ connect(m_launchButton, SIGNAL(clicked()), SLOT(launchKGet()));
+ }
+
+--- kget/plasma/applet/plasma-kget-default.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/plasma/applet/plasma-kget-default.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Name=KGet
+ Name[cy]=KNôl
+ Name[eo]=Prenilo
+@@ -9,7 +8,7 @@
+ Name[x-test]=xxKGetxx
+ Icon=kget
+ Type=Service
+-ServiceTypes=Plasma/Applet
++X-KDE-ServiceTypes=Plasma/Applet
+
+ X-KDE-Library=plasma_applet_kget
+ X-KDE-PluginInfo-Author=Javier Goday
+--- kget/plasma/applet/barchart.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/plasma/applet/barchart.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -22,7 +22,7 @@
+ #include "transfergraph.h"
+
+ #include <plasma/widgets/label.h>
+-#include <plasma/widgets/boxlayout.h>
++#include <plasma/layouts/boxlayout.h>
+ #include <plasma/widgets/progressbar.h>
+ //#include <plasma/widgets/layoutanimator.h>
+
+--- kget/plasma/engine/plasma-engine-kget.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/plasma/engine/plasma-engine-kget.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Name=KGet Data Engine
+ Name[ca]=Motor de dades del KGet
+ Name[de]=KGet-Datenmodul
+@@ -14,7 +13,7 @@
+ Name[x-test]=xxKGet Data Enginexx
+ Name[zh_CN]=KGet 数据引擎
+ Name[zh_TW]=KGet 資料引擎
+-ServiceTypes=Plasma/DataEngine
++X-KDE-ServiceTypes=Plasma/DataEngine
+ Type=Service
+ Icon=kget
+ X-KDE-Library=plasma_engine_kget
+--- kget/ui/transfersview.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/ui/transfersview.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -9,6 +9,7 @@
+ */
+
+ #include "transfersview.h"
++#include "settings.h"
+
+ #include <kdebug.h>
+
+@@ -33,7 +34,13 @@
+
+ TransfersView::~TransfersView()
+ {
+-
++ QList<int> list;
++ for (int i = 0; i<5; i++)
++ {
++ list.append(columnWidth(i));
++ }
++ Settings::setColumnWidths( list );
++ Settings::self()->writeConfig();
+ }
+
+ void TransfersView::setModel(QAbstractItemModel * model)
+@@ -48,7 +55,21 @@
+ openPersistentEditor(model->index(i, 1, QModelIndex()));
+ }
+
+- setColumnWidth(0, 250);
++ QList<int> sizeList = Settings::columnWidths();
++
++ if (!sizeList.isEmpty())
++ {
++ int j = 0;
++ foreach(int i, sizeList)
++ {
++ setColumnWidth( j, i );
++ j++;
++ }
++ }
++ else
++ {
++ setColumnWidth(0 , 250);
++ }
+ }
+
+ QModelIndex TransfersView::indexFromTransferHandler(TransferHandler *handler)
+--- kget/ui/newtransferdialog.cpp (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/ui/newtransferdialog.cpp (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -31,7 +31,7 @@
+ m_multiple(false)
+ {
+ setCaption(i18n("New Download"));
+- setMinimumSize(400, 300);
++ setMinimumSize(420, 300);
+ showButtonSeparator(true);
+
+ QWidget *mainWidget = new QWidget(this);
+@@ -39,7 +39,7 @@
+ Ui::NewTransferWidget widget;
+ widget.setupUi(mainWidget);
+
+- m_gridLayout = widget.gridLayout;
++ m_gridLayout1 = widget.gridLayout1;
+ m_titleWidget = widget.titleWidget;
+ m_folderRequester = widget.folderRequester;
+ m_groupComboBox = widget.groupComboBox;
+@@ -77,13 +77,13 @@
+ if (multiple())
+ {
+ listWidget = new KListWidget();
+- m_gridLayout->addWidget(listWidget, 0, 1, 1, 1);
++ m_gridLayout1->addWidget(listWidget, 0, 1, 1, 1);
+ }
+ else
+ {
+ urlRequester = new KLineEdit();
+ urlRequester->setClearButtonShown(true);
+- m_gridLayout->addWidget(urlRequester, 0, 1, 1, 1);
++ m_gridLayout1->addWidget(urlRequester, 0, 1, 1, 1);
+ }
+ }
+
+--- kget/ui/newtransferwidget.ui (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kget/ui/newtransferwidget.ui (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -5,96 +5,96 @@
+ <rect>
+ <x>0</x>
+ <y>0</y>
+- <width>395</width>
+- <height>224</height>
++ <width>400</width>
++ <height>200</height>
+ </rect>
+ </property>
+- <widget class="QWidget" name="layoutWidget" >
+- <property name="geometry" >
+- <rect>
+- <x>10</x>
+- <y>10</y>
+- <width>365</width>
+- <height>201</height>
+- </rect>
+- </property>
+- <layout class="QVBoxLayout" >
+- <item>
+- <widget class="KTitleWidget" name="titleWidget" >
+- <property name="text" >
+- <string>New Download</string>
+- </property>
+- </widget>
+- </item>
+- <item>
+- <layout class="QGridLayout" >
+- <property name="horizontalSpacing" >
+- <number>2</number>
+- </property>
+- <property name="verticalSpacing" >
+- <number>2</number>
+- </property>
+- <item row="0" column="0" >
+- <widget class="QLabel" name="label" >
+- <property name="text" >
+- <string>Url</string>
+- </property>
+- <property name="alignment" >
+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+- </property>
+- </widget>
+- </item>
+- <item row="1" column="0" >
+- <widget class="QLabel" name="label_2" >
+- <property name="text" >
+- <string>Download Folder</string>
+- </property>
+- </widget>
+- </item>
+- <item row="1" column="1" >
+- <widget class="KUrlComboRequester" name="folderRequester" />
+- </item>
+- <item row="3" column="0" >
+- <widget class="QLabel" name="label_3" >
+- <property name="text" >
+- <string>Transfer Group</string>
+- </property>
+- </widget>
+- </item>
+- <item row="3" column="1" >
+- <widget class="QComboBox" name="groupComboBox" >
+- <property name="minimumSize" >
+- <size>
+- <width>250</width>
+- <height>0</height>
+- </size>
+- </property>
+- </widget>
+- </item>
+- <item row="4" column="1" >
+- <spacer>
+- <property name="orientation" >
+- <enum>Qt::Vertical</enum>
+- </property>
+- <property name="sizeHint" >
+- <size>
+- <width>20</width>
+- <height>40</height>
+- </size>
+- </property>
+- </spacer>
+- </item>
+- <item row="2" column="1" >
+- <widget class="QCheckBox" name="defaultFolderButton" >
+- <property name="text" >
+- <string>Set as default folder</string>
+- </property>
+- </widget>
+- </item>
+- </layout>
+- </item>
+- </layout>
+- </widget>
++ <property name="minimumSize" >
++ <size>
++ <width>400</width>
++ <height>200</height>
++ </size>
++ </property>
++ <layout class="QGridLayout" >
++ <item row="0" column="0" >
++ <layout class="QVBoxLayout" >
++ <item>
++ <widget class="KTitleWidget" native="1" name="titleWidget" >
++ <property name="text" stdset="0" >
++ <string>New Download</string>
++ </property>
++ </widget>
++ </item>
++ <item>
++ <layout class="QGridLayout" >
++ <property name="horizontalSpacing" >
++ <number>2</number>
++ </property>
++ <property name="verticalSpacing" >
++ <number>2</number>
++ </property>
++ <item row="0" column="0" >
++ <widget class="QLabel" name="label" >
++ <property name="text" >
++ <string>Url</string>
++ </property>
++ <property name="alignment" >
++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="0" >
++ <widget class="QLabel" name="label_2" >
++ <property name="text" >
++ <string>Download Folder</string>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="1" >
++ <widget class="KUrlComboRequester" native="1" name="folderRequester" />
++ </item>
++ <item row="3" column="0" >
++ <widget class="QLabel" name="label_3" >
++ <property name="text" >
++ <string>Transfer Group</string>
++ </property>
++ </widget>
++ </item>
++ <item row="3" column="1" >
++ <widget class="QComboBox" name="groupComboBox" >
++ <property name="minimumSize" >
++ <size>
++ <width>250</width>
++ <height>0</height>
++ </size>
++ </property>
++ </widget>
++ </item>
++ <item row="4" column="1" >
++ <spacer>
++ <property name="orientation" >
++ <enum>Qt::Vertical</enum>
++ </property>
++ <property name="sizeHint" >
++ <size>
++ <width>20</width>
++ <height>40</height>
++ </size>
++ </property>
++ </spacer>
++ </item>
++ <item row="2" column="1" >
++ <widget class="QCheckBox" name="defaultFolderButton" >
++ <property name="text" >
++ <string>Set as default folder</string>
++ </property>
++ </widget>
++ </item>
++ </layout>
++ </item>
++ </layout>
++ </item>
++ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+@@ -104,7 +104,7 @@
+ </customwidget>
+ <customwidget>
+ <class>KUrlComboRequester</class>
+- <extends>KUrlRequester</extends>
++ <extends>QWidget</extends>
+ <header>kurlrequester.h</header>
+ </customwidget>
+ </customwidgets>
+--- filesharing/advanced/kcm_sambaconf/kcmsambaconf.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ filesharing/advanced/kcm_sambaconf/kcmsambaconf.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Exec=kcmshell4 kcmsambaconf
+ Icon=kcmsambaconf
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+
+ Terminal=false
+@@ -61,38 +60,38 @@
+ Comment[zh_CN]=配置 Microsoft Windows 共享的模块
+ Comment[zh_HK]=設定 Microsoft Windows 分享資源的模組
+ Comment[zh_TW]=設定 Microsoft Windows 分享的模組
+-Keywords=KcmSambaConf,kcmsambaconf,samba,windows,share
+-Keywords[bg]=Keywords=Самба, Уиндоус, мрежа, споделяне, KcmSambaConf, kcmsambaconf, samba, windows, share
+-Keywords[ca]=KcmSambaConf,kcmsambaconf,samba,windows,share,recurs compartit
+-Keywords[cs]=Samba,nastavení,windows,sdílení
+-Keywords[de]=KcmSambaConf,kcmsambaconf,samba,windows,freigabe,share
+-Keywords[et]=KcmSambaConf,kcmsambaconf,samba,windows,jagatud ressursid
+-Keywords[eu]=KcmSambaConf,kcmsambaconf,samba,windows,partekatze
+-Keywords[fa]=KcmSambaConf، kcmsambaconf، samba، ویندوز، مشترک
+-Keywords[fi]=KcmSambaConf,kcmsambaconf,samba,windows,jako
+-Keywords[fr]=KcmSambaConf,kcmsambaconf,samba,windows,partage
+-Keywords[gl]=KcmSambaConf,kcmsambaconf,samba,widows,compartir
+-Keywords[he]=KcmSambaConf,kcmsambaconf,samba,windows,share, סמבה, חלונות, שיתוף, שיתופי חלונות
+-Keywords[hu]=KcmSambaConf,kcmsambaconf,samba,windows,megosztás
+-Keywords[is]=KcmSambaConf,kcmsambaconf,samba,windows,sameign
+-Keywords[it]=KcmSambaConf,kcmsambaconf,samba,windows,condivisione
+-Keywords[ja]=KcmSambaConf,kcmsambaconf,samba,windows,共有
+-Keywords[km]=KcmSambaConf,kcmsambaconf,samba,បង្អួច,ចែករំលែក
+-Keywords[ko]=KcmSambaConf,kcmsambaconf,samba,윈도,windows,공유
+-Keywords[lt]=KcmSambaConf,kcmsambaconf,samba,windows,share,dalinimasis,dalintis,pasidalinti
+-Keywords[nb]=KcmSambaConf,kcmsambaconf,samba,windows,delt,ressurs
+-Keywords[nds]=KcmSambaConf,kcmsambaconf,samba,windows,share,freegaav,freegaven
+-Keywords[ne]=KcmSambaConf,kcmsambaconf,साम्बा,विन्डोज,साझेदारी
+-Keywords[nl]=KcmSambaConf,kcmsambaconf,samba,windows netwerk,share,gedeelde mappen,gedeelde printers
+-Keywords[nn]=KcmSambaConf,kcmsambaconf,samba,Windows,delt ressurs
+-Keywords[pl]=KcmSambaConf,kcmsambaconf,samba,Samba,serwer,SMB,smb,windows,udział,dysk sieciowy
+-Keywords[pt]=KcmSambaConf,kcmsambaconf,Samba,Windows,partilha
+-Keywords[sl]=KcmSambaConf,kcmsambaconf,Samba,samba,souporaba,deljeno
+-Keywords[sv]=IM SAMBA-inställning,IM samba-inställning,Windows,dela
+-Keywords[uk]=KcmSambaConf,kcmsambaconf,samba,windows,share,спільні ресурси
+-Keywords[vi]=KcmSambaConf,kcmsambaconf,samba,windows,share, chia sẻ
+-Keywords[x-test]=xxKcmSambaConf,kcmsambaconf,samba,windows,sharexx
+-Keywords[zh_CN]=KcmSambaConf,kcmsambaconf,samba,windows,share,共享
++X-KDE-Keywords=KcmSambaConf,kcmsambaconf,samba,windows,share
++X-KDE-Keywords[bg]=Keywords=Самба, Уиндоус, мрежа, споделяне, KcmSambaConf, kcmsambaconf, samba, windows, share
++X-KDE-Keywords[ca]=KcmSambaConf,kcmsambaconf,samba,windows,share,recurs compartit
++X-KDE-Keywords[cs]=Samba,nastavení,windows,sdílení
++X-KDE-Keywords[de]=KcmSambaConf,kcmsambaconf,samba,windows,freigabe,share
++X-KDE-Keywords[et]=KcmSambaConf,kcmsambaconf,samba,windows,jagatud ressursid
++X-KDE-Keywords[eu]=KcmSambaConf,kcmsambaconf,samba,windows,partekatze
++X-KDE-Keywords[fa]=KcmSambaConf، kcmsambaconf، samba، ویندوز، مشترک
++X-KDE-Keywords[fi]=KcmSambaConf,kcmsambaconf,samba,windows,jako
++X-KDE-Keywords[fr]=KcmSambaConf,kcmsambaconf,samba,windows,partage
++X-KDE-Keywords[gl]=KcmSambaConf,kcmsambaconf,samba,widows,compartir
++X-KDE-Keywords[he]=KcmSambaConf,kcmsambaconf,samba,windows,share, סמבה, חלונות, שיתוף, שיתופי חלונות
++X-KDE-Keywords[hu]=KcmSambaConf,kcmsambaconf,samba,windows,megosztás
++X-KDE-Keywords[is]=KcmSambaConf,kcmsambaconf,samba,windows,sameign
++X-KDE-Keywords[it]=KcmSambaConf,kcmsambaconf,samba,windows,condivisione
++X-KDE-Keywords[ja]=KcmSambaConf,kcmsambaconf,samba,windows,共有
++X-KDE-Keywords[km]=KcmSambaConf,kcmsambaconf,samba,បង្អួច,ចែករំលែក
++X-KDE-Keywords[ko]=KcmSambaConf,kcmsambaconf,samba,윈도,windows,공유
++X-KDE-Keywords[lt]=KcmSambaConf,kcmsambaconf,samba,windows,share,dalinimasis,dalintis,pasidalinti
++X-KDE-Keywords[nb]=KcmSambaConf,kcmsambaconf,samba,windows,delt,ressurs
++X-KDE-Keywords[nds]=KcmSambaConf,kcmsambaconf,samba,windows,share,freegaav,freegaven
++X-KDE-Keywords[ne]=KcmSambaConf,kcmsambaconf,साम्बा,विन्डोज,साझेदारी
++X-KDE-Keywords[nl]=KcmSambaConf,kcmsambaconf,samba,windows netwerk,share,gedeelde mappen,gedeelde printers
++X-KDE-Keywords[nn]=KcmSambaConf,kcmsambaconf,samba,Windows,delt ressurs
++X-KDE-Keywords[pl]=KcmSambaConf,kcmsambaconf,samba,Samba,serwer,SMB,smb,windows,udział,dysk sieciowy
++X-KDE-Keywords[pt]=KcmSambaConf,kcmsambaconf,Samba,Windows,partilha
++X-KDE-Keywords[sl]=KcmSambaConf,kcmsambaconf,Samba,samba,souporaba,deljeno
++X-KDE-Keywords[sv]=IM SAMBA-inställning,IM samba-inställning,Windows,dela
++X-KDE-Keywords[uk]=KcmSambaConf,kcmsambaconf,samba,windows,share,спільні ресурси
++X-KDE-Keywords[vi]=KcmSambaConf,kcmsambaconf,samba,windows,share, chia sẻ
++X-KDE-Keywords[x-test]=xxKcmSambaConf,kcmsambaconf,samba,windows,sharexx
++X-KDE-Keywords[zh_CN]=KcmSambaConf,kcmsambaconf,samba,windows,share,共享
+ Name=Samba
+ Name[bg]=Самба
+ Name[he]=סמבה
+--- filesharing/advanced/propsdlgplugin/fileshare_propsdlgplugin.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ filesharing/advanced/propsdlgplugin/fileshare_propsdlgplugin.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Icon=fileshare
+ Name=Fileshare Konqueror Directory Properties Page
+@@ -98,4 +97,4 @@
+ Comment[zh_TW]=Konqueror 屬性對話框外掛程式,用於在本地端網路上分享目錄
+ X-KDE-Library=fileshare_propsdlgplugin
+ X-KDE-Protocol=file
+-ServiceTypes=KPropertiesDialog/Plugin,inode/directory
++X-KDE-ServiceTypes=KPropertiesDialog/Plugin,inode/directory
+--- filesharing/simple/fileshare.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ filesharing/simple/fileshare.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,9 +1,8 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Exec=kcmshell4 fileshare
+ Icon=share
+ Type=Service
+-ServiceTypes=KCModule
++X-KDE-ServiceTypes=KCModule
+
+ X-KDE-Library=kcm_fileshare
+ X-KDE-ParentApp=kcontrol
+@@ -114,51 +113,51 @@
+ Comment[zh_HK]=啟用或停用檔案分享
+ Comment[zh_TW]=開啟或關閉檔案分享
+
+-Keywords=Share
+-Keywords[bg]=Share,споделяне
+-Keywords[br]=Rannañ
+-Keywords[ca]=Compartit
+-Keywords[cs]=sdílení
+-Keywords[da]=Del
+-Keywords[de]=Freigabe
+-Keywords[el]=Κοινόχρηστο
+-Keywords[es]=Compartir
+-Keywords[et]=Jagamine
+-Keywords[fa]=مشترک
+-Keywords[fi]=Jakaminen,Jako
+-Keywords[fr]=partage
+-Keywords[gl]=Compartir
+-Keywords[he]=שיתוף, share
+-Keywords[hu]=Megosztás
+-Keywords[is]=Deild
+-Keywords[it]=Condivisione
+-Keywords[ja]=共有
+-Keywords[km]=ការចែករំលែក
+-Keywords[ko]=공유
+-Keywords[lt]=Share,dalinimasis,dalintis,pasidalinti
+-Keywords[mk]=Делена
+-Keywords[nb]=Dele
+-Keywords[nds]=Delen,Freegaav,Freegaven
+-Keywords[ne]=साझेदार
+-Keywords[nl]=delen
+-Keywords[nn]=deling
+-Keywords[oc]=Partejar
+-Keywords[pa]=ਸਾਂਝ
+-Keywords[pl]=współdzielenie,pliki
+-Keywords[pt]=Partilhar
+-Keywords[pt_BR]=compartilhamento de arquivos
+-Keywords[ro]=partajare
+-Keywords[ru]=Общий ресурс
+-Keywords[sl]=Souporaba
+-Keywords[sr]=Share,дељење
+-Keywords[sr at latin]=Share,deljenje
+-Keywords[sv]=Dela
+-Keywords[ta]=பகிர்வு
+-Keywords[tg]=Муштаракан доштан
+-Keywords[tr]=Paylaş
+-Keywords[uk]=Спільний ресурс
+-Keywords[vi]=Chia sẻ
+-Keywords[x-test]=xxSharexx
+-Keywords[zh_CN]=Share,共享
++X-KDE-Keywords=Share
++X-KDE-Keywords[bg]=Share,споделяне
++X-KDE-Keywords[br]=Rannañ
++X-KDE-Keywords[ca]=Compartit
++X-KDE-Keywords[cs]=sdílení
++X-KDE-Keywords[da]=Del
++X-KDE-Keywords[de]=Freigabe
++X-KDE-Keywords[el]=Κοινόχρηστο
++X-KDE-Keywords[es]=Compartir
++X-KDE-Keywords[et]=Jagamine
++X-KDE-Keywords[fa]=مشترک
++X-KDE-Keywords[fi]=Jakaminen,Jako
++X-KDE-Keywords[fr]=partage
++X-KDE-Keywords[gl]=Compartir
++X-KDE-Keywords[he]=שיתוף, share
++X-KDE-Keywords[hu]=Megosztás
++X-KDE-Keywords[is]=Deild
++X-KDE-Keywords[it]=Condivisione
++X-KDE-Keywords[ja]=共有
++X-KDE-Keywords[km]=ការចែករំលែក
++X-KDE-Keywords[ko]=공유
++X-KDE-Keywords[lt]=Share,dalinimasis,dalintis,pasidalinti
++X-KDE-Keywords[mk]=Делена
++X-KDE-Keywords[nb]=Dele
++X-KDE-Keywords[nds]=Delen,Freegaav,Freegaven
++X-KDE-Keywords[ne]=साझेदार
++X-KDE-Keywords[nl]=delen
++X-KDE-Keywords[nn]=deling
++X-KDE-Keywords[oc]=Partejar
++X-KDE-Keywords[pa]=ਸਾਂਝ
++X-KDE-Keywords[pl]=współdzielenie,pliki
++X-KDE-Keywords[pt]=Partilhar
++X-KDE-Keywords[pt_BR]=compartilhamento de arquivos
++X-KDE-Keywords[ro]=partajare
++X-KDE-Keywords[ru]=Общий ресурс
++X-KDE-Keywords[sl]=Souporaba
++X-KDE-Keywords[sr]=Share,дељење
++X-KDE-Keywords[sr at latin]=Share,deljenje
++X-KDE-Keywords[sv]=Dela
++X-KDE-Keywords[ta]=பகிர்வு
++X-KDE-Keywords[tg]=Муштаракан доштан
++X-KDE-Keywords[tr]=Paylaş
++X-KDE-Keywords[uk]=Спільний ресурс
++X-KDE-Keywords[vi]=Chia sẻ
++X-KDE-Keywords[x-test]=xxSharexx
++X-KDE-Keywords[zh_CN]=Share,共享
+
+ Categories=Qt;KDE;X-KDE-settings-network;Settings;
+--- doc/krdc/index.docbook (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ doc/krdc/index.docbook (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -183,7 +183,7 @@
+ <sect2><title>Server name entry</title>
+ <para>
+ If you know the host name (or IP address) of the server you want to
+-connect to, you can enter it directly into the <guilabel>Addresss:</guilabel> input.
++connect to, you can enter it directly into the <guilabel>Address:</guilabel> input.
+ </para>
+
+ <para>
+--- kfile-plugins/torrent/kfile_torrent.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kfile-plugins/torrent/kfile_torrent.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Type=Service
+ Name=Bit Torrent Info
+ Name[br]=Titouriñ diwar-benn Bit Torrent
+@@ -47,7 +46,7 @@
+ Name[zh_CN]=BitTorrent 信息
+ Name[zh_HK]=Bit Torrent 資訊
+ Name[zh_TW]=Bit Torrent 資訊
+-ServiceTypes=KFilePlugin
++X-KDE-ServiceTypes=KFilePlugin
+ X-KDE-Library=kfile_torrent
+ # change MimeType here! (example: inode/directory)
+ MimeType=application/x-bittorrent;
+--- kppp/Kppp.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kppp/Kppp.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ GenericName=Internet Dial-Up Tool
+ GenericName[bg]=Включване в Интернет
+ GenericName[ca]=Eina per a la connexió telefònica a Internet
+@@ -60,7 +59,6 @@
+ X-DocPath=kppp/index.html
+ Exec=kppp
+ Icon=kppp
+-Path=
+ Type=Application
+ Terminal=false
+ X-KDE-StartupNotify=true
+--- kppp/logview/kppplogview.desktop (.../tags/KDE/3.96/kdenetwork) (revision 740225)
++++ kppp/logview/kppplogview.desktop (.../trunk/KDE/kdenetwork) (revision 740225)
+@@ -1,5 +1,4 @@
+ [Desktop Entry]
+-Encoding=UTF-8
+ Name=KPPPLogview
+ Name[de]=KPPP-Protokoll-Betrachter
+ Name[el]=Προβολή καταγραφής KPPP
+@@ -67,7 +66,6 @@
+ MimeType=
+ Exec=kppplogview
+ Icon=kppp
+-Path=
+ Type=Application
+ Terminal=false
+ X-DBUS-StartupType=Multi
Added: branches/kde4/packages/kdenetwork/debian/patches/series
===================================================================
--- branches/kde4/packages/kdenetwork/debian/patches/series (rev 0)
+++ branches/kde4/packages/kdenetwork/debian/patches/series 2007-11-22 21:50:09 UTC (rev 8050)
@@ -0,0 +1 @@
+01_kdenetwork_branch_r740225.diff -p0
More information about the pkg-kde-commits
mailing list