summaryrefslogtreecommitdiffstats
path: root/kcontrol/kio
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit4aed2c8219774f5d797760606b8489a92ddc5163 (patch)
tree3f8c130f7d269626bf6a9447407ef6c35954426a /kcontrol/kio
downloadtdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz
tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kcontrol/kio')
-rw-r--r--kcontrol/kio/Makefile.am39
-rw-r--r--kcontrol/kio/UA-DESKTOP-FILE-HOWTO135
-rw-r--r--kcontrol/kio/cache.cpp127
-rw-r--r--kcontrol/kio/cache.desktop220
-rw-r--r--kcontrol/kio/cache.h50
-rw-r--r--kcontrol/kio/cache_ui.ui187
-rw-r--r--kcontrol/kio/cookies.desktop215
-rw-r--r--kcontrol/kio/envvarproxy_ui.ui175
-rw-r--r--kcontrol/kio/fakeuaprovider.cpp176
-rw-r--r--kcontrol/kio/fakeuaprovider.h57
-rw-r--r--kcontrol/kio/kcookiesmain.cpp99
-rw-r--r--kcontrol/kio/kcookiesmain.h37
-rw-r--r--kcontrol/kio/kcookiesmanagement.cpp489
-rw-r--r--kcontrol/kio/kcookiesmanagement.h101
-rw-r--r--kcontrol/kio/kcookiesmanagementdlg_ui.ui323
-rw-r--r--kcontrol/kio/kcookiespolicies.cpp474
-rw-r--r--kcontrol/kio/kcookiespolicies.h81
-rw-r--r--kcontrol/kio/kcookiespoliciesdlg_ui.ui323
-rw-r--r--kcontrol/kio/kenvvarproxydlg.cpp303
-rw-r--r--kcontrol/kio/kenvvarproxydlg.h57
-rw-r--r--kcontrol/kio/kio_ftprc.kcfg22
-rw-r--r--kcontrol/kio/kio_ftprc.kcfgc5
-rw-r--r--kcontrol/kio/kioslave.kcfg44
-rw-r--r--kcontrol/kio/kioslave.kcfgc5
-rw-r--r--kcontrol/kio/kmanualproxydlg.cpp498
-rw-r--r--kcontrol/kio/kmanualproxydlg.h77
-rw-r--r--kcontrol/kio/kproxydlg.cpp375
-rw-r--r--kcontrol/kio/kproxydlg.h82
-rw-r--r--kcontrol/kio/kproxydlg_ui.ui441
-rw-r--r--kcontrol/kio/kproxydlgbase.cpp74
-rw-r--r--kcontrol/kio/kproxydlgbase.h68
-rw-r--r--kcontrol/kio/ksaveioconfig.cpp260
-rw-r--r--kcontrol/kio/ksaveioconfig.h96
-rw-r--r--kcontrol/kio/lanbrowser.desktop226
-rw-r--r--kcontrol/kio/main.cpp158
-rw-r--r--kcontrol/kio/main.h46
-rw-r--r--kcontrol/kio/manualproxy_ui.ui317
-rw-r--r--kcontrol/kio/netpref.cpp138
-rw-r--r--kcontrol/kio/netpref.desktop205
-rw-r--r--kcontrol/kio/netpref.h44
-rw-r--r--kcontrol/kio/policydlg.cpp107
-rw-r--r--kcontrol/kio/policydlg.h87
-rw-r--r--kcontrol/kio/policydlg_ui.ui106
-rw-r--r--kcontrol/kio/proxy.desktop209
-rw-r--r--kcontrol/kio/smb.desktop233
-rw-r--r--kcontrol/kio/smbrodlg.cpp191
-rw-r--r--kcontrol/kio/smbrodlg.h55
-rw-r--r--kcontrol/kio/socks.cpp279
-rw-r--r--kcontrol/kio/socks.h73
-rw-r--r--kcontrol/kio/socks.upd8
-rw-r--r--kcontrol/kio/socksbase.ui335
-rw-r--r--kcontrol/kio/uagentproviderdlg.cpp149
-rw-r--r--kcontrol/kio/uagentproviderdlg.h68
-rw-r--r--kcontrol/kio/uagentproviderdlg_ui.ui207
-rw-r--r--kcontrol/kio/uasprovider.desktop98
-rw-r--r--kcontrol/kio/uasproviders/Makefile.am14
-rw-r--r--kcontrol/kio/uasproviders/firefox10oncurrent.desktop70
-rw-r--r--kcontrol/kio/uasproviders/firefox15oncurrent.desktop58
-rw-r--r--kcontrol/kio/uasproviders/googlebot.desktop44
-rw-r--r--kcontrol/kio/uasproviders/ie401onwinnt4.desktop80
-rw-r--r--kcontrol/kio/uasproviders/ie45onwinnt5.desktop80
-rw-r--r--kcontrol/kio/uasproviders/ie501onwinnt5.desktop79
-rw-r--r--kcontrol/kio/uasproviders/ie50onppc.desktop79
-rw-r--r--kcontrol/kio/uasproviders/ie55onwin98.desktop79
-rw-r--r--kcontrol/kio/uasproviders/ie55onwinnt5.desktop79
-rw-r--r--kcontrol/kio/uasproviders/ie60oncurrent.desktop69
-rw-r--r--kcontrol/kio/uasproviders/ie60onwinnt51.desktop81
-rw-r--r--kcontrol/kio/uasproviders/lynxoncurrent.desktop51
-rw-r--r--kcontrol/kio/uasproviders/mozoncurrent.desktop70
-rw-r--r--kcontrol/kio/uasproviders/mozoncurrent12.desktop76
-rw-r--r--kcontrol/kio/uasproviders/mozoncurrent16.desktop75
-rw-r--r--kcontrol/kio/uasproviders/mozonwin2000.desktop73
-rw-r--r--kcontrol/kio/uasproviders/mozonwinxp.desktop74
-rw-r--r--kcontrol/kio/uasproviders/nn301oncurrent.desktop78
-rw-r--r--kcontrol/kio/uasproviders/nn475oncurrent.desktop78
-rw-r--r--kcontrol/kio/uasproviders/nn475onwin95.desktop81
-rw-r--r--kcontrol/kio/uasproviders/nn476onppc.desktop82
-rw-r--r--kcontrol/kio/uasproviders/ns71oncurrent.desktop72
-rw-r--r--kcontrol/kio/uasproviders/ns71onwinnt51.desktop74
-rw-r--r--kcontrol/kio/uasproviders/op403onwinnt4.desktop80
-rw-r--r--kcontrol/kio/uasproviders/op75oncurrent.desktop69
-rw-r--r--kcontrol/kio/uasproviders/safari12.desktop73
-rw-r--r--kcontrol/kio/uasproviders/safari20.desktop59
-rw-r--r--kcontrol/kio/uasproviders/w3moncurrent.desktop50
-rw-r--r--kcontrol/kio/uasproviders/wgetoncurrent.desktop50
-rw-r--r--kcontrol/kio/uninstall.desktop2
-rw-r--r--kcontrol/kio/useragent.desktop232
-rw-r--r--kcontrol/kio/useragentdlg.cpp403
-rw-r--r--kcontrol/kio/useragentdlg.h83
-rw-r--r--kcontrol/kio/useragentdlg_ui.ui355
90 files changed, 12206 insertions, 0 deletions
diff --git a/kcontrol/kio/Makefile.am b/kcontrol/kio/Makefile.am
new file mode 100644
index 000000000..29f0cf30f
--- /dev/null
+++ b/kcontrol/kio/Makefile.am
@@ -0,0 +1,39 @@
+SUBDIRS = uasproviders
+
+AM_CPPFLAGS = $(all_includes)
+AM_LDFLAGS = $(all_libraries)
+
+METASOURCES = AUTO
+
+kde_module_LTLIBRARIES = kcm_kio.la
+
+kcm_kio_la_SOURCES = policydlg.cpp kcookiesmain.cpp kcookiespolicies.cpp \
+ main.cpp smbrodlg.cpp useragentdlg.cpp kproxydlgbase.cpp \
+ kmanualproxydlg.cpp kenvvarproxydlg.cpp kproxydlg.cpp \
+ kcookiesmanagement.cpp fakeuaprovider.cpp uagentproviderdlg.cpp \
+ netpref.cpp cache.cpp ksaveioconfig.cpp socks.cpp socksbase.ui \
+ kproxydlg_ui.ui kcookiesmanagementdlg_ui.ui kcookiespoliciesdlg_ui.ui \
+ policydlg_ui.ui useragentdlg_ui.ui uagentproviderdlg_ui.ui \
+ manualproxy_ui.ui envvarproxy_ui.ui cache_ui.ui
+
+kcm_kio_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
+kcm_kio_la_LIBADD = $(LIB_KIO) $(LIB_KUTILS)
+
+messages: rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/kcmkio.pot
+
+update_DATA = socks.upd
+updatedir = $(kde_datadir)/kconf_update
+
+servicetypes_DATA = uasprovider.desktop
+servicetypesdir = $(kde_servicetypesdir)
+
+xdg_apps_DATA = cookies.desktop useragent.desktop cache.desktop \
+ lanbrowser.desktop netpref.desktop proxy.desktop
+
+smb_DATA = smb.desktop
+smbdir = $(kde_appsdir)/.hidden
+
+install-data-local: uninstall.desktop
+ $(mkinstalldirs) $(DESTDIR)$(kde_appsdir)/Settings/WebBrowsing
+ $(INSTALL_DATA) $(srcdir)/uninstall.desktop $(DESTDIR)$(kde_appsdir)/Settings/WebBrowsing/smb.desktop
diff --git a/kcontrol/kio/UA-DESKTOP-FILE-HOWTO b/kcontrol/kio/UA-DESKTOP-FILE-HOWTO
new file mode 100644
index 000000000..8d67d9a37
--- /dev/null
+++ b/kcontrol/kio/UA-DESKTOP-FILE-HOWTO
@@ -0,0 +1,135 @@
+Mini HOWTO create a "User-Agent" description file for KDE
+=========================================================
+
+This mini HOWTO describes the procedure for creating a new user-agent
+description file to extend the ones that come pre-packaged with KDE.
+The purpose of a user agent description file is to fake or spoof sites
+that refuse to render pages with the default KDE user-agent identification.
+
+In order to create new user-agent description files, simply follow the
+normal desktop file specifications set by the "DESKTOP ENTRY STANDARD"
+augmented with the following requirements:
+
+REQUIREMENTS:
+=============
+The following properties as defined by the DESKTOP ENTRY STANDARD
+must be set as shown below:
+
+Name=UADescription (XXXX)
+Type=Service
+ServiceTypes=UserAgentStrings
+
+Though the (XXXX) value shown above can be any text, it is a good idea
+to make it a short identification of the browser being emulated. However,
+there is NO requirement on what the text should be. It can even be left
+out. It is only meant to give people a quick idea which browser is being
+emulated by your desktop file.
+
+NEW PROPERTIES:
+===============
+X-KDE-UA-TAG
+FIELD: REQUIRED
+TYPE: QString
+TRANSLATE: NO
+DESCRIPTION:
+An abbreviation of the actual browser-brand and is used
+to group the entries whenever necessary. Currently there are 5
+approximations: IE, NN, MOZ, OP, MISC. These represent Internet
+Explorer, Netscape Navigator, Mozilla, Opera and Miscellaneous
+respectively. NOTE: you can enter any value here as it is just
+a place holder that would be automatically replaced with the
+actual user-agent name (X-KDE-UA-NAME).
+
+X-KDE-UA-FULL
+FIELD: REQUIRED
+TYPE: QString
+TRANSLATE: NO
+DESCRIPTION:
+The full user-agent description that will be sent to the remote
+site. It can contain the following keywords that would be replaced
+with the appropriate value as defined by "uname":
+
+appSysName the name of the operating system (ex: Linux).
+appPlatform the name of the platform. Currently hardcoded to "X11".
+appLanguage the language values as set in the control panel (ex: en, en-US).
+appSysRelease the version of the operating system (ex: 2.2.18).
+appKDERelease the current release number as set by KDE (ex: 2.1.9 >=20010310).
+appMachineType the processor or machine type (ex: i686).
+
+NOTE: if you use any of these values and want them to be replaced
+automatically, make sure you include the X-KDE-UA-DYNAMIC-ENTRY field
+and set its value to 1 (for true).
+
+X-KDE-UA-NAME
+FIELD: REQUIRED
+TYPE: QString
+TRANSLATE: YES
+DESCRIPTION:
+The actual name of the browser or user-agent.
+
+X-KDE-UA-VERSION
+FIELD: REQUIRED
+TYPE: QString
+TRANSLATE: YES
+DESCRIPTION:
+The actual version of the browser or user-agent.
+
+X-KDE-UA-SYSNAME
+FIELD: OPTIONAL
+TYPE: QString
+TRANSLATE: YES
+DESCRIPTION:
+The system name (for example Linux) where the browser
+identification was obtained from.
+
+X-KDE-UA-SYSRELEASE
+FIELD: OPTIONAL
+TYPE: QString
+TRANSLATE: YES
+DESCRIPTION:
+The system version (for example 2.4.1) where the browser
+identification was obtained from.
+
+X-KDE-UA-DYNAMIC-ENTRY
+FIELD: OPTIONAL
+TYPE: BOOLEAN (0/1)
+TRANSLATE: NO
+DESCRIPTION:
+A boolean that indicates whether the keywords described under
+X-KDE-UA-FULL should be translated. Make sure this field is
+there with its value set to "1" if you want the keywords to
+be replaced appropriately.
+
+
+EXAMPLES:
+=========
+[Desktop Entry]
+Name=UADescription (IE 5.5 on Win 98)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=5.5
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=98
+
+[Desktop Entry]
+Name=UADescription (NN 4.76 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=NN
+X-KDE-UA-FULL=Mozilla/4.76 (appPlatform; U; appSysName appSysRelease appMachineType)
+X-KDE-UA-NAME=Netscape Navigator
+X-KDE-UA-VERSION=4.76
+X-KDE-UA-DYNAMIC-ENTRY=1
+
+The first entry is a description file for Internet Explorer running on
+a Windows 98 machine while the second one is an example of a description
+file for Netscape browser using the "keyword" based approach to describe
+the fields that should be replaced dynamically based on the current system
+settings. Note that all "keyword" based desktop files should always set
+X-KDE-UA-DYNAMIC-ENTRY to 1.
+
+Enjoy,
+Dawit A.
diff --git a/kcontrol/kio/cache.cpp b/kcontrol/kio/cache.cpp
new file mode 100644
index 000000000..8b730ae77
--- /dev/null
+++ b/kcontrol/kio/cache.cpp
@@ -0,0 +1,127 @@
+/*
+ cache.cpp - Proxy configuration dialog
+
+ Copyright (C) 2001,02,03 Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 <qlabel.h>
+#include <qlayout.h>
+#include <qcheckbox.h>
+#include <qwhatsthis.h>
+#include <qpushbutton.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kprocess.h>
+#include <knuminput.h>
+
+#include "ksaveioconfig.h"
+#include <kio/http_slave_defaults.h>
+
+#include "cache.h"
+#include "cache_ui.h"
+
+KCacheConfigDialog::KCacheConfigDialog( QWidget* parent )
+ :KCModule( parent, "kcmkio" )
+{
+ QVBoxLayout* mainLayout = new QVBoxLayout(this, 0, 0);
+ m_dlg = new CacheDlgUI(this);
+ mainLayout->addWidget(m_dlg);
+ mainLayout->addStretch();
+
+ load();
+}
+
+void KCacheConfigDialog::load()
+{
+ m_dlg->cbUseCache->setChecked(KProtocolManager::useCache());
+ m_dlg->sbMaxCacheSize->setValue( KProtocolManager::maxCacheSize() );
+
+ KIO::CacheControl cc = KProtocolManager::cacheControl();
+
+ if (cc==KIO::CC_Verify)
+ m_dlg->rbVerifyCache->setChecked( true );
+ else if (cc==KIO::CC_Refresh)
+ m_dlg->rbVerifyCache->setChecked( true );
+ else if (cc==KIO::CC_CacheOnly)
+ m_dlg->rbOfflineMode->setChecked( true );
+ else if (cc==KIO::CC_Cache)
+ m_dlg->rbCacheIfPossible->setChecked( true );
+
+ // Config changed notifications...
+ connect ( m_dlg->cbUseCache, SIGNAL(toggled(bool)), SLOT(configChanged()) );
+ connect ( m_dlg->bgCachePolicy, SIGNAL(clicked (int)), SLOT(configChanged()) );
+ connect ( m_dlg->sbMaxCacheSize, SIGNAL(valueChanged(int)), SLOT(configChanged()) );
+ connect ( m_dlg->pbClearCache, SIGNAL(clicked()), SLOT(slotClearCache()) );
+ emit changed( false );
+}
+
+void KCacheConfigDialog::save()
+{
+ KSaveIOConfig::setUseCache( m_dlg->cbUseCache->isChecked() );
+ KSaveIOConfig::setMaxCacheSize( m_dlg->sbMaxCacheSize->value() );
+
+ if ( !m_dlg->cbUseCache->isChecked() )
+ KSaveIOConfig::setCacheControl(KIO::CC_Refresh);
+ else if ( m_dlg->rbVerifyCache->isChecked() )
+ KSaveIOConfig::setCacheControl(KIO::CC_Refresh);
+ else if ( m_dlg->rbOfflineMode->isChecked() )
+ KSaveIOConfig::setCacheControl(KIO::CC_CacheOnly);
+ else if ( m_dlg->rbCacheIfPossible->isChecked() )
+ KSaveIOConfig::setCacheControl(KIO::CC_Cache);
+
+ // Update running io-slaves...
+ KSaveIOConfig::updateRunningIOSlaves (this);
+
+ emit changed( false );
+}
+
+void KCacheConfigDialog::defaults()
+{
+ m_dlg->cbUseCache->setChecked( true );
+ m_dlg->rbVerifyCache->setChecked( true );
+ m_dlg->sbMaxCacheSize->setValue( DEFAULT_MAX_CACHE_SIZE );
+}
+
+QString KCacheConfigDialog::quickHelp() const
+{
+ return i18n( "<h1>Cache</h1><p>This module lets you configure your cache settings.</p>"
+ "<p>The cache is an internal memory in Konqueror where recently "
+ "read web pages are stored. If you want to retrieve a web "
+ "page again that you have recently read, it will not be "
+ "downloaded from the Internet, but rather retrieved from the "
+ "cache, which is a lot faster.</p>" );
+}
+
+void KCacheConfigDialog::configChanged()
+{
+ emit changed( true );
+}
+
+void KCacheConfigDialog::slotClearCache()
+{
+ KProcess process;
+ process << "kio_http_cache_cleaner" << "--clear-all";
+ process.start(KProcess::DontCare);
+ // Cleaning up might take a while. Better detach.
+ process.detach();
+}
+
+#include "cache.moc"
diff --git a/kcontrol/kio/cache.desktop b/kcontrol/kio/cache.desktop
new file mode 100644
index 000000000..c56f36a09
--- /dev/null
+++ b/kcontrol/kio/cache.desktop
@@ -0,0 +1,220 @@
+[Desktop Entry]
+Type=Application
+DocPath=kcontrol/cache/index.html
+Icon=cache
+Exec=kcmshell cache
+
+
+X-KDE-Library=kio
+X-KDE-FactoryName=cache
+X-KDE-ParentApp=kcontrol
+
+Name=Cache
+Name[af]=Kas
+Name[ar]=الخابية
+Name[az]=Ön Yaddaş
+Name[be]=Кэш
+Name[bg]=Временна памет
+Name[bn]=ক্যাশে (Cache)
+Name[br]=Krubuilh
+Name[ca]=Cau
+Name[de]=Zwischenspeicher
+Name[el]=Λανθάνουσα μνήμη
+Name[eo]=Tenejo
+Name[es]=Caché
+Name[et]=Puhver
+Name[eu]=Katxea
+Name[fa]=نهانگاه
+Name[fi]=Välimuisti
+Name[fy]=Lyts ûnthâld
+Name[ga]=Taisce
+Name[gl]=Caché
+Name[he]=מטמון
+Name[hi]=कैश
+Name[hr]=Pohrana
+Name[hu]=Gyorstár
+Name[is]=Skyndiminni
+Name[ja]=キャッシュ
+Name[ka]=ქეში
+Name[kk]=Бүркеме
+Name[km]=ឃ្លាំង​សម្ងាត់
+Name[ko]=캐시
+Name[lo]=ແຄຊ
+Name[lt]=Krepšys
+Name[lv]=Kešatmiņa
+Name[mk]=Кеш
+Name[mn]=Завсрын хадгалагч
+Name[nb]=Mellomlager
+Name[nds]=Twischenspieker
+Name[ne]=क्यास
+Name[nn]=Mellomlager
+Name[nso]=Polokelo
+Name[pa]=ਕੈਂਚੇ
+Name[pl]=Bufor
+Name[ru]=Кэш
+Name[rw]=Ubwihisho
+Name[se]=Gaskarájus
+Name[sk]=Vyrovnávacia pamäť
+Name[sl]=Prepomnilnik
+Name[sr]=Кеш
+Name[sr@Latn]=Keš
+Name[ta]=தற்காலிக
+Name[te]=కెష్
+Name[tg]=Кэш
+Name[th]=แคช
+Name[tr]=Önbellek
+Name[tt]=Alxäter
+Name[uk]=Кеш
+Name[uz]=Kesh
+Name[uz@cyrillic]=Кэш
+Name[vi]=Bộ đệm
+Name[wa]=Muchete
+Name[xh]=Indawo yokugcina efihlakeleyo
+Name[zh_CN]=缓存
+Name[zh_TW]=快取
+Comment=Configure web cache settings
+Comment[af]=Konfigureer web kas instellings
+Comment[ar]=إعداد الخابية للشبكة
+Comment[az]=Veb ün yaddaş qurğuları
+Comment[be]=Настаўленні сеціўнага кэша
+Comment[bg]=Настройване на временната памет
+Comment[bn]=ওয়েব ক্যাশে সেটিংস কনফিগার করুন
+Comment[br]=Kefluniañ krubuilh ar gwiad
+Comment[bs]=Podesite postavke web cache-a
+Comment[ca]=Configura les opcions per al cau web
+Comment[cs]=Nastavení cache pro webové stránky
+Comment[csb]=Kònfigùracëjô nastôwù cache
+Comment[cy]=Ffurfweddu gosodiadau'r storfa w?
+Comment[da]=Indstil cache-opsætning
+Comment[de]=Einstellungen zum Zwischenspeicher vornehmen
+Comment[el]=Ρυθμίστε τη λανθάνουσα μνήμη ιστοσελίδων
+Comment[eo]=Agordo de tenejo
+Comment[es]=Preferencias del caché de web
+Comment[et]=Veebi vahemälu seadistamine
+Comment[eu]=Konfiguratu web katxearen ezarpenak
+Comment[fa]=پیکربندی تنظیمات نهانگاه وب
+Comment[fi]=WWW-välimuistin asetuksia
+Comment[fr]=Configuration des réglages du cache web
+Comment[fy]=Hjir kinne jo it lyts ûnthâld fan it web ynstelle
+Comment[gl]=Configurar as opcións da caché web
+Comment[he]=שינוי הגדרות המטמון
+Comment[hi]=वेब कैश विन्यास कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje postavki web-pohrane
+Comment[hu]=A webböngészési gyorstár beállításai
+Comment[is]=Stilla skyndiminni fyrir vefflakk
+Comment[it]=Configura le impostazioni della cache del web
+Comment[ja]=ウェブキャッシュの設定
+Comment[ka]=ვებ კეშის პარამეტრების კონფიგურაცია
+Comment[kk]=Веб бүркеме параметрлерін баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ការ​កំណត់​ឃ្លាំង​សម្ងាត់​បណ្ដាញ
+Comment[ko]=웹 캐시 설정
+Comment[lo]=ປັບແຕ່ງການຕັ້ງຄ່າລະບົບແຄຊທີ່ນີ້
+Comment[lt]=Konfigūruokite žiniatinklio krepšio nustatymus
+Comment[lv]=Šeit jūs varat konfigurēt tīmekļa kešatmiņas uzstādījumus
+Comment[mk]=Конфигурирајте ги поставувањата за веб-кешот
+Comment[mn]=Завсрын хадгалагч тохируулах
+Comment[ms]=Konfigur seting cache web
+Comment[mt]=Ikkonfigura l-cache tal-web
+Comment[nb]=Tilpass vev-mellomlageret
+Comment[nds]=Den Nett-Twischenspieker instellen
+Comment[ne]=वेब क्यास सेटिङ कन्फिगर गर्नुहोस्
+Comment[nl]=Hier kunt u de webcache instellen
+Comment[nn]=Oppsett av vevmellomlager
+Comment[nso]=Beakanya dipeakanyo tsa polokelo ya web
+Comment[pa]=ਵੈੱਬ ਕੈਂਚੇ ਸੈਟਿੰਗ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja ustawień bufora (cache'a)
+Comment[pt]=Configuração das opções da 'cache' da Web
+Comment[pt_BR]=Configura as preferências de cache
+Comment[ro]=Configurează setările cache-ului web
+Comment[ru]=Настройка кэша
+Comment[rw]=Kuboneza amagenamiterere y'ubwihisho bw'urubuga
+Comment[se]=Heivet fierpmádatgaskarádjusa
+Comment[sk]=Nastavenie vyrovnávacej pamäte pre WWW
+Comment[sl]=Nastavitve spletnega predpomnilnika
+Comment[sr]=Подешавање поставки веб кеша
+Comment[sr@Latn]=Podešavanje postavki veb keša
+Comment[sv]=Anpassa webbcacheinställningar
+Comment[ta]=வலை தற்காலிக அமைப்புகளை வடிவமை
+Comment[tg]=Танзимоти қароргоҳи пинҳонии интернет
+Comment[th]=ปรับแต่งการตั้งค่าระบบแคช
+Comment[tr]=Web önbellek ayarlarını buradan yapabilirsiniz
+Comment[tt]=Alxäter caylawı
+Comment[uk]=Налаштування установок кешу Тенет
+Comment[uz]=Veb-kesh moslamalarini moslash
+Comment[uz@cyrillic]=Веб-кэш мосламаларини мослаш
+Comment[ven]=Dzudzanyani mavhekanyele a cache a webu
+Comment[vi]=Cấu hình các thiết lập bộ đệm cho duyệt mạng
+Comment[wa]=Fijhoz l' apontiaedje del muchete des pådjes waibe chal
+Comment[xh]=Qwalasela izicwangciso ze web yendawo yokugcina efihlakeleyo
+Comment[zh_CN]=配置网页缓存设置
+Comment[zh_TW]=設定網頁快取設定
+Comment[zu]=Hlanganisela izilungiselelo ze-cache ye-web
+Keywords=Cache,History,Browsing History,Ports,Size
+Keywords[ar]=الخابية,الخط الزمني,خط زمن التصفح,المنافذ,القياس الحجم,الذاكرة المخبئية,التأريخ,تأريخ المتصفح,المنافذ,الحجم
+Keywords[az]=Kaşe,Keçmiş,Səyahət Keçmişi,Qapılar,Böyüklük
+Keywords[be]=Кэш,Гісторыя,Гісторыя вандровак,Вандраванне,Парты,Памер,Cache,History,Browsing History,Ports,Size
+Keywords[bg]=кеш, памет, временни, копия, страница, Cache, History, Browsing History, Ports, Size
+Keywords[br]=Krubuilh,istor,furchal an istor,porzhioù,ment
+Keywords[ca]=Cau,Historial,Historial de navegació,Ports,Mida
+Keywords[cs]=Cache,Historie,Porty,Velikost
+Keywords[csb]=cache,historëjô,historëjô przezéraniô,pòrtë,miara
+Keywords[cy]=Storfa,Hanes,Hanes Pori,Pyrth,Maint
+Keywords[da]=Cache,Historik,Netsøgningshistorik,Porte,Størrelse
+Keywords[de]=Cache,Verlauf,History,Ports,Zwischenspeicher, Größe
+Keywords[el]=Λανθάνουσα μνήμη,Ιστορικό,Ιστορικό περιήγησης,Θύρες,Μέγεθος
+Keywords[eo]=Tenejo,Historio,TTT-umado,Pordoj,Grandeco
+Keywords[es]=Caché,Historia,Historia de navegación,Puertos,Tamaño
+Keywords[et]=cache,puhver,lehitsemise puhver,pordid,suurus
+Keywords[eu]=Katxea,Historia,Arakaketa historia,Atakak,Neurria
+Keywords[fa]=نهانگاه، تاریخچه، تاریخچۀ مرور، درگاهها، اندازه
+Keywords[fi]=Välimuisti,Historia,Selailuhistoria,Portit,Koko
+Keywords[fr]=Cache,historique,navigation de l'historique,ports,taille
+Keywords[fy]=cache,lyts ûnthâld,history,Histoarje,grutte,Ynternet
+Keywords[ga]=Taisce,Stair,Stair Brabhsála,Poirt,Méid
+Keywords[gl]=Caché,Historial,Historial de Navegación,Portos,Tamaño
+Keywords[he]=מטמון,היסטוריה,היסטוריית גלישה,יציאות,גודל,Cache,History,Browsing History,Ports,Size
+Keywords[hi]=कैश,इतिहास,ब्राउज़िंग इतिहास,पोर्ट,आकार
+Keywords[hr]=Cache,Pohrana,History,Povijest,Browsing History,Ports,Portovi,Size,Veličina,Povijest pretraživanja
+Keywords[hu]=gyorstár,napló,böngészési napló,portok,méret
+Keywords[is]=Skyndiminni,Saga,Vafrasaga,Gáttir,Stærð
+Keywords[it]=cache,cronologia,navigazione,cronologia di navigazione,porte,dimensione
+Keywords[ja]=キャッシュ,履歴,ブラウズの履歴,ポート,サイズ
+Keywords[ka]=ქეში,ისტორია,მიმოხილვის ისტორია,პორტები,ზომა
+Keywords[km]=ឃ្លាំង​សម្ងាត់,ប្រវត្តិ,ប្រវត្តិ​ការ​រុករក,ច្រក,ទំហំ
+Keywords[lo]=ແຄຊ,ປະຫວັດການໃຊ້,ປະຫວັດການທ່ອງເວບประวัต,ພັອດ,ຂະຫນາດ
+Keywords[lt]=Cache,History,Browsing History,Ports,Size, kešas,krepšys,žurnalas,istorija,naršymo žurnalas,naršymo istorija,portai,dydis
+Keywords[mk]=Cache,History,Browsing History,Ports,Size,Кеш,Историја,Прелистување на историјата,Портови,Големина
+Keywords[mn]=Cache,Түүх,History,Порт,Завсрын хадгалагч,Хэмжээ
+Keywords[nb]=Mellomlager,Historie,Lesehistorie,Porter,Størrelse
+Keywords[nds]=Twischenspieker,Vörgeschicht,Browsing History,Porten,Grött
+Keywords[ne]=क्यास, इतिहास, ब्राउज इतिहास, पोर्ट, साइज
+Keywords[nl]=cache,historie,geschiedenis,grootte,internet
+Keywords[nn]=cache,mellomlager,historie,nettlesarhistorie,portar,storleik
+Keywords[nso]=Polokelo,Histori,Hostori ya Boinyakisi,Maboemo,Bogolo
+Keywords[pa]=ਅਕਾਰ,ਅਤੀਤ,ਝਲਕਾਰਾ,ਕੈਂਚੇ,ਪੋਰਟ
+Keywords[pl]=cache,bufor,historia,historia przeglądania,porty,rozmiar
+Keywords[pt]=Cache,Histórico,Histórico de Navegação,Portos,Tamanho
+Keywords[pt_BR]=Cache,Histórico,Histórico de Navegação,Portas,Tamanho
+Keywords[ro]=cache,istoric,navigare în istoric,porturi,mărime
+Keywords[rw]=Ubwihisho,Amateka,Amateka yo Gucukumbura,Imiyoboro,Ingano
+Keywords[se]=gaskarájus,historihkka,fierpmádatloganhistorihkka,verráhat,sturrodat
+Keywords[sk]=Cache,Keš,vyrovnávacia pamäť,prehliadanie,história,porty,veľkosť
+Keywords[sl]=predpomnilnik,zgodovina,zgodovina brskanja,vrata,velikost
+Keywords[sr]=Кеш, Историјат, Прегледање историјата, Портови, Величина
+Keywords[sr@Latn]=Keš, Istorijat, Pregledanje istorijata, Portovi, Veličina
+Keywords[sv]=Cache,Historik,Webbläsningshistorik,Portar,Storlek
+Keywords[ta]=தற்காலிக,வரலாறு,உலாவுதலின் வரலாறு,முனையங்கள்,அளவு
+Keywords[th]=แคช,ประวัติการใช้,ประวัติการท่องเว็บ,พอร์ต,ขนาด
+Keywords[tr]=Arabellek,Tarihçe,Gözatma Tarihçesi,Portlar
+Keywords[uk]=кеш,історія, історія навігації,порти,розмір
+Keywords[uz]=Kesh,Veb-sahifalar tarihi,Tarix,Portlar
+Keywords[uz@cyrillic]=Кэш,Веб-саҳифалар тариҳи,Тарих,Портлар
+Keywords[ven]=Cache,Divhazwakale,Divahzwakale ya Burausini,Ports,Saizi
+Keywords[vi]=Đệm,Lịch sử,Lịch sử duyệt,Cổng,Cỡ
+Keywords[wa]=Muchete,Istwere,Istwere do foytaedje,Pôrts,Grandeu
+Keywords[xh]=Indawo yokugcina, Imbali, imbali Yokhangelo zincwadi, Amazibuko, Ubungakanani
+Keywords[zh_CN]=Cache,History,Browsing History,Ports,Size,缓存,历史
+Keywords[zh_TW]=Cache,History,Browsing History,Ports,Size,快取
+Keywords[zu]=Cache,Umlando,Umlando wokucinga,Izikhumulo,Usayizi
+
+Categories=Qt;KDE;X-KDE-settings-webbrowsing;
diff --git a/kcontrol/kio/cache.h b/kcontrol/kio/cache.h
new file mode 100644
index 000000000..d2d12e5e2
--- /dev/null
+++ b/kcontrol/kio/cache.h
@@ -0,0 +1,50 @@
+/*
+ cache.h - Proxy configuration dialog
+
+ Copyright (C) 2001,02,03 Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 CACHE_H
+#define CACHE_H
+
+#include <kcmodule.h>
+
+class CacheDlgUI;
+
+class KCacheConfigDialog : public KCModule
+{
+ Q_OBJECT
+
+public:
+ KCacheConfigDialog( QWidget* parent = 0 );
+ ~KCacheConfigDialog() {};
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ QString quickHelp() const;
+
+protected slots:
+ void configChanged();
+ void slotClearCache();
+
+private:
+ CacheDlgUI* m_dlg;
+};
+
+#endif // CACHE_H
diff --git a/kcontrol/kio/cache_ui.ui b/kcontrol/kio/cache_ui.ui
new file mode 100644
index 000000000..c0e504057
--- /dev/null
+++ b/kcontrol/kio/cache_ui.ui
@@ -0,0 +1,187 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>CacheDlgUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>CacheDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>424</width>
+ <height>172</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>lbMaxCacheSize</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Disk cache &amp;size:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sbMaxCacheSize</cstring>
+ </property>
+ </widget>
+ <widget class="KIntNumInput" row="2" column="2">
+ <property name="name">
+ <cstring>sbMaxCacheSize</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="maxValue">
+ <number>999999</number>
+ </property>
+ <property name="suffix">
+ <string> KB</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="2" column="3">
+ <property name="name">
+ <cstring>pbClearCache</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>C&amp;lear Cache</string>
+ </property>
+ </widget>
+ <spacer row="2" column="4">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>cbUseCache</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Use cache</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Check this box if you want the web pages you visit to be stored on your hard disk for quicker access. The stored pages will only be updated as needed instead of on every visit to that site. This is especially useful if you have a slow connection to the Internet.</string>
+ </property>
+ </widget>
+ <widget class="QButtonGroup" row="1" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>bgCachePolicy</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>Policy</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbVerifyCache</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Keep cache in sync</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Verify whether the cached web page is valid before attempting to fetch the web page again.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbCacheIfPossible</cstring>
+ </property>
+ <property name="text">
+ <string>Use cache whenever &amp;possible</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Always use documents from the cache when available. You can still use the reload button to synchronize the cache with the remote host.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbOfflineMode</cstring>
+ </property>
+ <property name="text">
+ <string>O&amp;ffline browsing mode</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Do not fetch web pages that are not already stored in the cache. Offline mode prevents you from viewing pages that you have not previously visited.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>cbUseCache</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>bgCachePolicy</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cbUseCache</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>lbMaxCacheSize</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cbUseCache</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>sbMaxCacheSize</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cbUseCache</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>pbClearCache</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kcontrol/kio/cookies.desktop b/kcontrol/kio/cookies.desktop
new file mode 100644
index 000000000..206dd3a92
--- /dev/null
+++ b/kcontrol/kio/cookies.desktop
@@ -0,0 +1,215 @@
+[Desktop Entry]
+Type=Application
+DocPath=kcontrol/cookies/index.html
+Icon=cookie
+Exec=kcmshell cookies
+
+
+X-KDE-Library=kio
+X-KDE-FactoryName=cookie
+X-KDE-ParentApp=kcontrol
+
+Name=Cookies
+Name[af]=Koekies
+Name[ar]=الكعكات
+Name[az]=Kökələr (Cookies)
+Name[bg]=Бисквитки
+Name[bn]=কুকি
+Name[br]=Toupinoù
+Name[bs]=Kolačići
+Name[ca]=Galetes
+Name[csb]=Kùszczi
+Name[cy]=Cwcis
+Name[da]=Cookier
+Name[eo]=Kuketoj
+Name[et]=Küpsised
+Name[eu]=Cookie-ak
+Name[fa]=کوکیها
+Name[fi]=Evästeet
+Name[fy]=Koekjes
+Name[ga]=Fianáin
+Name[he]=עוגיות
+Name[hi]=कुकीज़
+Name[hr]=Kolačići
+Name[hu]=Cookie-k
+Name[is]=Smákökur
+Name[it]=Cookie
+Name[ja]=クッキー
+Name[ka]=ქუქები
+Name[km]=ខូគី
+Name[ko]=쿠키
+Name[lo]=ຄຸກກີ້
+Name[lt]=Slapukai
+Name[lv]=Cepumi
+Name[mk]=Колачиња
+Name[nb]=Informasjonskapsler
+Name[nds]=Kookjes
+Name[ne]=कुकी
+Name[nn]=Informasjonskapslar
+Name[nso]=Di-Cookie
+Name[pa]=ਕੂਕੀਜ਼
+Name[pl]=Ciasteczka
+Name[ro]=Cookie-uri
+Name[rw]=Inyandikonyakwirema
+Name[se]=Diehtočoahkku
+Name[sl]=Piškotki
+Name[sr]=Колачићи
+Name[sr@Latn]=Kolačići
+Name[sv]=Kakor
+Name[ta]=தற்காலிக நினைவுகள்
+Name[te]=కుకిస్
+Name[th]=คุกกี้
+Name[tr]=Çerezler
+Name[tt]=Cookie
+Name[uk]=Куки
+Name[uz]=Kukilar
+Name[uz@cyrillic]=Кукилар
+Name[wa]=Coukes
+
+Comment=Configure the way cookies work
+Comment[af]=Konfigureer die weg koekies werk
+Comment[ar]=إعداد أسلوب العمل للكعكات
+Comment[az]=Kökələrin işləmə yollarını quraşdır
+Comment[be]=Наставіць cookies
+Comment[bg]=Настройване на бисквитките
+Comment[bn]=কুকি কনফিগার করুন
+Comment[br]=Kefluniañ peseurt mod e labour an toupinoù
+Comment[bs]=Podesite način rada cookie-ja
+Comment[ca]=Configura com treballaran les galetes
+Comment[cs]=Nastavení chování cookies
+Comment[csb]=Kònfigùracëjô dzéjaniô kùszków (cookies)
+Comment[cy]=Ffurfweddu'r ffordd y mae cwcis yn gweithio
+Comment[da]=Indstil den måde cookier virker
+Comment[de]=Einstellungen zu Cookies vornehmen
+Comment[el]=Ρυθμίστε τον τρόπο με τον οποίο δουλεύουν τα cookies
+Comment[eo]=Agordo de kuketoj
+Comment[es]=Configuración del funcionamiento de las cookies
+Comment[et]=Küpsiste käitumise seadistamine
+Comment[eu]=Konfiguratu cookien portaera
+Comment[fa]=پیکربندی روش کار کردن کوکیها
+Comment[fi]=Evästeiden toiminta
+Comment[fr]=Configuration de la manière dont les cookies fonctionnent
+Comment[fy]=Hjir kinne jo de wurkwize fan koekjes ynstelle
+Comment[gl]=Configurar o funcionamento das cookies
+Comment[he]=שינוי הגדרות פעולת העוגיות
+Comment[hi]=कुकीज़ के कार्य करने के ढंग कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje funkcioniranja kolačića
+Comment[hu]=A cookie-k beállításai
+Comment[is]=Stilla hvernig tekið er við smákökum
+Comment[it]=Configurazione del funzionamento dei cookie
+Comment[ja]=クッキーの扱いを設定
+Comment[kk]=Cookies жұмысын баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​របៀប​ដែល​ខូគី​ដំណើរការ
+Comment[ko]=쿠키 작동 방법을 설정합니다
+Comment[lo]=ປັບແຕ່ງການຕັ້ງຄ່າລະບົບແຄຊທີ່ນີ້
+Comment[lt]=Čia galite keisti slapukų veikimą
+Comment[lv]=Šeit jūs varat konfigurēt cepumus
+Comment[mk]=Конфигурирајте го начинот на кој работат колачињата
+Comment[mn]=Cookies ажлыг тохируулах
+Comment[ms]=Konfigur cara cookies berfungsi
+Comment[mt]=Ikkonfigura kif jaħdmu l-"cookies"
+Comment[nb]=Oppsett av informasjonskapsler
+Comment[nds]=Instellen, woans de Kookjes funkscheneert
+Comment[ne]=कुकीको कार्य तरिका कन्फिगर गर्नुहोस्
+Comment[nl]=Hier kunt u het cookiesbeleid instellen
+Comment[nn]=Oppsett av informasjonskapslar
+Comment[nso]=Beakanya kamokgwa wo di-cookies di berekago kagona
+Comment[pa]=ਕੂਕੀਜ਼ ਕੰਮ ਦੇ ਢੰਗ ਦੀ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja działania ciasteczek (cookies)
+Comment[pt]=Configuração da forma como os 'cookies' funcionam
+Comment[pt_BR]=Configura a maneira como os cookies funcionarão
+Comment[ro]=Configurează modul în care acționează cookie-urile
+Comment[ru]=Настройка cookies
+Comment[rw]=Kuboneza uburyo inyandikonyakwirema zikora
+Comment[se]=Diehtočoahkkoheivehusat
+Comment[sk]=Nastavenie podpory cookies
+Comment[sl]=Nastavitve delovanja piškotkov
+Comment[sr]=Подешавање начина на који раде колачићи
+Comment[sr@Latn]=Podešavanje načina na koji rade kolačići
+Comment[sv]=Anpassa hur kakor fungerar
+Comment[ta]=தற்காலிக நினைவகங்கள் வேலையை வடிவமை
+Comment[tg]=Мизроб кардани cookies
+Comment[th]=ปรับแต่งวิธีการทำงานของคุกกี้
+Comment[tr]=Çerezlerin çalışmasını yapılandırır
+Comment[tt]=Cookies caylawı
+Comment[uk]=Налаштування механізму кук
+Comment[uz]=Kukilar ishlashini moslash
+Comment[uz@cyrillic]=Кукилар ишлашини мослаш
+Comment[ven]=Dzudzanyani ndila ine cookies dza shuma ngayo
+Comment[vi]=Cấu hình cách cookies hoạt động
+Comment[wa]=Apontyî l' dujhance des coukes
+Comment[xh]=Qwalasela indlela ezisebenza ngayo i cookies
+Comment[zh_CN]=配置 cookies 相关设置
+Comment[zh_TW]=設定 cookies 運作方式
+Comment[zu]=Hlanganisela indlela i-cookies esebenza ngayo
+
+Keywords=Cookies,Browsing,Internet,WWW,Network,Policy,Domains
+Keywords[ar]=الكعكات,التصفح,الإنترنت,الشبكة العالمية,الشبكة,السياسة,أسماء النطاقات
+Keywords[az]=Kökələr,Darama,İnternet,WWW,Şəbəkə,Sahə
+Keywords[be]="Печыва",Вандроўка,Вандраванне,Інтэрнэт,Сетка,Правілы,Домены,Cookies,Browsing,Internet,WWW,Network,Policy,Domains
+Keywords[bg]=бисквитка, бисквитки, Интернет, сърфиране, сесия, сигурност, Cookies, Browsing, Internet, WWW, Network, Policy, Domains
+Keywords[ca]=Galetes,fullejar,Internet,WWW,Xarxa,Política,Dominis
+Keywords[cs]=Cookie,Prohlížení,Internet,WWW,Síť,Domény
+Keywords[csb]=kùszczi,przezéranié,Internet,WWW,séc,reglë,domenë
+Keywords[cy]=Cwcis,Pori,Rhyngrwyd,WWW,Rhwydwaith,Polisi,Parthau
+Keywords[da]=Cookier,Netsøgning,Internet,www,Netværk,Politik,Domæner
+Keywords[de]=Cookies,Durchsuchen,Browsen,Surfen,Internet,WWW,Netzwerk,Regelungen,Domains
+Keywords[el]=Cookies,Περιήγηση,Διαδίκτυο,WWW,Δίκτυο,Πολιτική,Τομείς
+Keywords[eo]=kuketoj,TTT,Interreto,WWW,reto,konduto,retregionoj
+Keywords[es]=Cookies,Navegación,Internet,WWW,Red,Política,Dominios
+Keywords[et]=küpsised,lehitsemine,Internet,WWW,võrk,reeglid,domeenid
+Keywords[eu]=Cookie-ak,Arakaketa,Internet,WWW,Sarea,Arautegia,Domeinuak
+Keywords[fa]=کوکیها، مرور، اینترنت، WWW، شبکه، سیاست، دامنه‌ها
+Keywords[fi]=Evästeet,Selailu,Internet,WWW,Verkko,Politiikka,Verkkoalueet
+Keywords[fr]=Cookies,navigation,internet,WWW,Web,réseau,règle,politique,domaine
+Keywords[fy]=Koekjes,blêdzjen,ynternet,www,netwurk,wurkwize,domeinen
+Keywords[ga]=Fianán,Brabhsáil,Idirlíon,WWW,Líonra,Polasaí,Fearainn
+Keywords[gl]=Cookies,Navegación,Internet,WWW,Rede,Política,Dominios
+Keywords[he]=עוגיות,גלישה,אינטרנט,WWW,רשת,מדיניות,תחומים, Cookies,Browsing,Internet,Network,Policy,Domains
+Keywords[hi]=कुकीज़,ब्राउजिंग,इंटरनेट,डब्ल्यूडब्ल्यूडब्ल्यू,नेटवर्क,पालिसी,डोमेन्स
+Keywords[hr]=Cookies,Browsing,Internet,WWW,Network,Policy,Domains,Kolačići,Domene,Mreža,Pravila,Pregledavanje,Pretraživanje
+Keywords[hu]=cookie-k,böngészés,internet,WWW,hálózat,házirend,tartományok
+Keywords[id]=Cookies,Browsing,Internet,WWW,Jaringan,Policy,Domains
+Keywords[is]=Smákökur,Flakk,Flakkari,Vafr,Vafri,Vefurinn,Netið,lén
+Keywords[it]=cookie,navigazione,Internet,WWW,rete,politica,domini
+Keywords[ja]=クッキー,ブラウス,インターネット,WWW,ネットワーク,ポリシー,ドメイン
+Keywords[ka]=ქუქები,მიმოხილვა,ინტერნეტი,WWW,ქსელი,პოლისი,დომენები
+Keywords[km]=ខូគី,រុករក,អ៊ិនធឺណិត,វើលវ៉ាយវិប,បណ្ដាញ,ភាព​ឯកជន,ដែន
+Keywords[lo]=ຄຸກກີ້,ການຮງກເບິ່ງເວບເພດ,ອິນເຕີເນັດ,WWW,ລະບົບເຄືອຂ່າຍ, ຂໍ້ກຳນົດ,ໂດເມນ
+Keywords[lt]=Slapukai,Naršymas,Internetas,WWW,Tinklas,Taisyklės,Sritys
+Keywords[lv]=Cepumi,Pārlūkošana,Internets,WWW,Tīkls,Politika,Domēni
+Keywords[mk]=Cookies,Browsing,Internet,WWW,Network,Policy,Domains,Колачиња,Прелистување,Интернет,Мрежа,Политика,Домени
+Keywords[mn]=Cookies,Нэгжих,Browsing,Тэнэх,Интернэт,WWW,Сүлжээ,Дүрмүүд,Домайн
+Keywords[nb]=cookies,informasjonskapsler,surfing,internett,WWW,verdensveven,nettverk,praksis,domene
+Keywords[nds]=Kookjes,Nettkieken,Internet,WWW,Nettwark,Regel,Domänen
+Keywords[ne]=कुकी,ब्राउजिङ, इन्टरनेट, WWW, सञ्जाल, नीति, डोमेन
+Keywords[nl]=cookies,browsing,internet,www,netwerk,beleid,domeinen
+Keywords[nn]=cookies,informasjonskapslar,surfing,internett,WWW,verdsveven,nettverk,praksis,domene
+Keywords[nso]=Di-Cookies,Boinyakisi,Internet,WWW,Kgokagano,Molao,Ditikologo
+Keywords[pa]=Cookies,Browsing,Internet,WWW,Network,ਨੀਤੀ, ਡੋਮੇਨ,ਇੰਟਰਨੈਟ
+Keywords[pl]=ciasteczka,przeglądanie,Internet,WWW,sieć,zasady,domeny
+Keywords[pt]=cookies,navegação,internet,WWW,rede,política,domínios
+Keywords[pt_BR]=Cookies,Navegação,Internet,WWW,Rede,Política,Domínios
+Keywords[ro]=cookies,navigare,Internet,WWW,rețea,politici,domenii
+Keywords[rw]=Inyandikonyakwirema,Gucukumbura,Interineti,WWW,Urusobemiyoboro,Politiki,Indangarubuga
+Keywords[se]=diehtočoahkku,bláđđen,fierpmádat,WWW,fierbmi,geavat,domeana
+Keywords[sk]=Cookies,Prehliadanie, Internet, WWW, Sieť,Politika,Domény
+Keywords[sl]=piškotki,brskanje,internet,splet,WWW,omrežje,politika,domene
+Keywords[sr]=Cookies,Browsing,Интернет,WWW,Network,Policy,Domains,колачићи,Прегледање,мрежа,полиса,домени
+Keywords[sr@Latn]=Cookies,Browsing,Internet,WWW,Network,Policy,Domains,kolačići,Pregledanje,mreža,polisa,domeni
+Keywords[sv]=Kakor,Surfning,Internet,WWW,Nätverk,Policy,Domäner
+Keywords[ta]=தற்காலிக நினைவகம்,உலாவுதல்,இணையம்t,WWW,வலைப்பின்னல்,கொள்கை,வலைதளங்கள்
+Keywords[th]=คุกกี้,การเรียกดูเว็บเพจ,อินเทอร์เน็ต,WWW,ระบบเครือข่าย,ข้อกำหนด,โดเมน
+Keywords[tr]=Çerezler,Tarama,İnternet,WWW,Ağ,Alan
+Keywords[uk]=куки,навігація,Internet,Інтернет,WWW,мережа,правила,домени,Тенета
+Keywords[uz]=Kukilar,Internet,WWW,Tarmoq,Qoida,Domenlar
+Keywords[uz@cyrillic]=Кукилар,Интернет,WWW,Тармоқ,Қоида,Доменлар
+Keywords[ven]=Cookies,Burousini.Inithenete,WWW<Vhukwamani,Pholisi,Domaini
+Keywords[vi]=Cookies,Duyệt,Internet,WWW,Mạng,Chính sách,Tên miền
+Keywords[wa]=Coukes,foyter,betchter,Internet,daegntoele,WWW,rantoele,Policy,dominne,naiviaedje
+Keywords[xh]=Cookies,Khangela iincwadi,Internet,WWW,Umsebenzi womnatha,Inkqubo,Ezongameleyo
+Keywords[zh_CN]=Cookies,Browsing,Internet,WWW,Network,Policy,Domains,浏览,互联网,万维网,网络,策略,域
+Keywords[zh_TW]=Cookies,Browsing,Internet,WWW,Network,Policy,Domain,瀏覽,網際網路,網路,策略,域名
+Keywords[zu]=Cookies,Cinga,Internet,WWW,Uxhumano olusakazekile,Umthetho, Izindawo
+
+Categories=Qt;KDE;X-KDE-settings-webbrowsing;
diff --git a/kcontrol/kio/envvarproxy_ui.ui b/kcontrol/kio/envvarproxy_ui.ui
new file mode 100644
index 000000000..471b9f868
--- /dev/null
+++ b/kcontrol/kio/envvarproxy_ui.ui
@@ -0,0 +1,175 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>EnvVarProxyDlgUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>EnvVarProxyDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>438</width>
+ <height>133</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>leFtp</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the name of the environment variable, e.g. &lt;b&gt;FTP_PROXY&lt;/b&gt;, used to store the address of the FTP proxy server.&lt;p&gt;
+Alternatively, you can click on the &lt;b&gt;"Auto Detect"&lt;/b&gt; button to attempt an automatic discovery of this variable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>leHttp</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the name of the environment variable, e.g. &lt;b&gt;HTTP_PROXY&lt;/b&gt;, used to store the address of the HTTP proxy server.&lt;p&gt;
+Alternatively, you can click on the &lt;b&gt;"Auto Detect"&lt;/b&gt; button to attempt automatic discovery of this variable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>lbFtp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;FTP:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leFtp</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the name of the environment variable, e.g. &lt;b&gt;FTP_PROXY&lt;/b&gt;, used to store the address of the FTP proxy server.&lt;p&gt;
+Alternatively, you can click on the &lt;b&gt;"Auto Detect"&lt;/b&gt; button to attempt an automatic discovery of this variable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lbHttps</cstring>
+ </property>
+ <property name="text">
+ <string>HTTP&amp;S:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leHttps</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the name of the environment variable, e.g. &lt;b&gt;HTTPS_PROXY&lt;/b&gt;, used to store the address of the HTTPS proxy server.&lt;p&gt;
+Alternatively, you can click on the &lt;b&gt;"Auto Detect"&lt;/b&gt; button to attempt an automatic discovery of this variable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="1">
+ <property name="name">
+ <cstring>cbShowValue</cstring>
+ </property>
+ <property name="text">
+ <string>Show the &amp;value of the environment variables</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="2">
+ <property name="name">
+ <cstring>pbVerify</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Verify</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;Verify whether or not the environment variable names you supplied are valid. If an environment variable is not found, the associated labels will be &lt;b&gt;highlighted&lt;/b&gt; to indicate that they are invalid.&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="2">
+ <property name="name">
+ <cstring>pbDetect</cstring>
+ </property>
+ <property name="text">
+ <string>Auto &amp;Detect</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;Attempt automatic discovery of the environment variables used for setting system wide proxy information.&lt;p&gt; This feature works by searching for commonly used variable names such as HTTP_PROXY, FTP_PROXY and NO_PROXY.&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lbHttp</cstring>
+ </property>
+ <property name="text">
+ <string>H&amp;TTP:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leHttp</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the name of the environment variable, e.g. &lt;b&gt;HTTP_PROXY&lt;/b&gt;, used to store the address of the HTTP proxy server.&lt;p&gt;
+Alternatively, you can click on the &lt;b&gt;"Auto Detect"&lt;/b&gt; button to attempt automatic discovery of this variable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>leHttps</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the name of the environment variable, e.g. &lt;b&gt;HTTPS_PROXY&lt;/b&gt;, used to store the address of the HTTPS proxy server.&lt;p&gt;
+Alternatively, you can click on the &lt;b&gt;"Auto Detect"&lt;/b&gt; button to attempt an automatic discovery of this variable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>leNoProxy</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the environment variable, e.g. &lt;b&gt;NO_PROXY&lt;/b&gt;, used to store the addresses of sites for which the proxy server should not be used.&lt;p&gt;
+Alternatively, you can click on the &lt;b&gt;"Auto Detect"&lt;/b&gt; button to attempt an automatic discovery of this variable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>lbNoProxy</cstring>
+ </property>
+ <property name="text">
+ <string>NO &amp;PROXY:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leNoProxy</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the environment variable, e.g. &lt;b&gt;NO_PROXY&lt;/b&gt;, used to store the addresses of sites for which the proxy server should not be used.&lt;p&gt;
+Alternatively, you can click on the &lt;b&gt;"Auto Detect"&lt;/b&gt; button to attempt an automatic discovery of this variable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<tabstops>
+ <tabstop>leHttp</tabstop>
+ <tabstop>leHttps</tabstop>
+ <tabstop>leFtp</tabstop>
+ <tabstop>leNoProxy</tabstop>
+ <tabstop>pbVerify</tabstop>
+ <tabstop>pbDetect</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kcontrol/kio/fakeuaprovider.cpp b/kcontrol/kio/fakeuaprovider.cpp
new file mode 100644
index 000000000..08949c27b
--- /dev/null
+++ b/kcontrol/kio/fakeuaprovider.cpp
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2001 Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 <time.h>
+#include <sys/utsname.h>
+
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+#include "fakeuaprovider.h"
+
+#define UA_PTOS(x) (*it)->property(x).toString()
+#define QFL(x) QString::fromLatin1(x)
+
+FakeUASProvider::FakeUASProvider()
+{
+ m_bIsDirty = true;
+}
+
+FakeUASProvider::StatusCode FakeUASProvider::createNewUAProvider( const QString& uaStr )
+{
+ QStringList split;
+ int pos = (uaStr).find("::");
+
+ if ( pos == -1 )
+ {
+ pos = (uaStr).find(':');
+ if ( pos != -1 )
+ {
+ split.append(uaStr.left(pos));
+ split.append(uaStr.mid(pos+1));
+ }
+ }
+ else
+ {
+ split = QStringList::split("::", uaStr);
+ }
+
+ if ( m_lstIdentity.contains(split[1]) )
+ return DUPLICATE_ENTRY;
+ else
+ {
+ int count = split.count();
+ m_lstIdentity.append( split[1] );
+ if ( count > 2 )
+ m_lstAlias.append(split[2]);
+ else
+ m_lstAlias.append( split[1]);
+ }
+
+ return SUCCEEDED;
+}
+
+void FakeUASProvider::loadFromDesktopFiles()
+{
+ m_providers.clear();
+ m_providers = KTrader::self()->query("UserAgentStrings");
+}
+
+void FakeUASProvider::parseDescription()
+{
+ QString tmp;
+
+ KTrader::OfferList::ConstIterator it = m_providers.begin();
+ KTrader::OfferList::ConstIterator lastItem = m_providers.end();
+
+ for ( ; it != lastItem; ++it )
+ {
+ tmp = UA_PTOS("X-KDE-UA-FULL");
+
+ if ( (*it)->property("X-KDE-UA-DYNAMIC-ENTRY").toBool() )
+ {
+ struct utsname utsn;
+ uname( &utsn );
+
+ tmp.replace( QFL("appSysName"), QString(utsn.sysname) );
+ tmp.replace( QFL("appSysRelease"), QString(utsn.release) );
+ tmp.replace( QFL("appMachineType"), QString(utsn.machine) );
+
+ QStringList languageList = KGlobal::locale()->languageList();
+ if ( languageList.count() )
+ {
+ QStringList::Iterator it = languageList.find( QString::fromLatin1("C") );
+ if( it != languageList.end() )
+ {
+ if( languageList.contains( QString::fromLatin1("en") ) > 0 )
+ languageList.remove( it );
+ else
+ (*it) = QString::fromLatin1("en");
+ }
+ }
+
+ tmp.replace( QFL("appLanguage"), QString("%1").arg(languageList.join(", ")) );
+ tmp.replace( QFL("appPlatform"), QFL("X11") );
+ }
+
+ // Ignore dups...
+ if ( m_lstIdentity.contains(tmp) )
+ continue;
+
+ m_lstIdentity << tmp;
+
+ tmp = QString("%1 %2").arg(UA_PTOS("X-KDE-UA-SYSNAME")).arg(UA_PTOS("X-KDE-UA-SYSRELEASE"));
+ if ( tmp.stripWhiteSpace().isEmpty() )
+ tmp = QString("%1 %2").arg(UA_PTOS("X-KDE-UA-"
+ "NAME")).arg(UA_PTOS("X-KDE-UA-VERSION"));
+ else
+ tmp = QString("%1 %2 on %3").arg(UA_PTOS("X-KDE-UA-"
+ "NAME")).arg(UA_PTOS("X-KDE-UA-VERSION")).arg(tmp);
+
+ m_lstAlias << tmp;
+ }
+
+ m_bIsDirty = false;
+}
+
+QString FakeUASProvider::aliasStr( const QString& name )
+{
+ int id = userAgentStringList().findIndex(name);
+ if ( id == -1 )
+ return QString::null;
+ else
+ return m_lstAlias[id];
+}
+
+QString FakeUASProvider::agentStr( const QString& name )
+{
+ int id = userAgentAliasList().findIndex(name);
+ if ( id == -1 )
+ return QString::null;
+ else
+ return m_lstIdentity[id];
+}
+
+
+QStringList FakeUASProvider::userAgentStringList()
+{
+ if ( m_bIsDirty )
+ {
+ loadFromDesktopFiles();
+ if ( !m_providers.count() )
+ return QStringList();
+ parseDescription();
+ }
+ return m_lstIdentity;
+}
+
+QStringList FakeUASProvider::userAgentAliasList ()
+{
+ if ( m_bIsDirty )
+ {
+ loadFromDesktopFiles();
+ if ( !m_providers.count() )
+ return QStringList();
+ parseDescription();
+ }
+ return m_lstAlias;
+}
+
diff --git a/kcontrol/kio/fakeuaprovider.h b/kcontrol/kio/fakeuaprovider.h
new file mode 100644
index 000000000..fedf155bf
--- /dev/null
+++ b/kcontrol/kio/fakeuaprovider.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2001 Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 __FAKE_UAS_PROVIDER_H___
+#define __FAKE_UAS_PROVIDER_H___
+
+#include <ktrader.h>
+
+class QString;
+class QStringList;
+
+class FakeUASProvider
+{
+public:
+ enum StatusCode {
+ SUCCEEDED=0,
+ ALREADY_EXISTS,
+ DUPLICATE_ENTRY
+ };
+
+ FakeUASProvider();
+ ~FakeUASProvider(){};
+
+ StatusCode createNewUAProvider( const QString& );
+ QString aliasStr( const QString& );
+ QString agentStr( const QString& );
+ QStringList userAgentStringList();
+ QStringList userAgentAliasList();
+ bool isListDirty() const { return m_bIsDirty; }
+ void setListDirty( bool dirty ) { m_bIsDirty = dirty; }
+
+protected:
+ void loadFromDesktopFiles();
+ void parseDescription();
+
+private:
+ KTrader::OfferList m_providers;
+ QStringList m_lstIdentity;
+ QStringList m_lstAlias;
+ bool m_bIsDirty;
+};
+#endif
diff --git a/kcontrol/kio/kcookiesmain.cpp b/kcontrol/kio/kcookiesmain.cpp
new file mode 100644
index 000000000..f25a28011
--- /dev/null
+++ b/kcontrol/kio/kcookiesmain.cpp
@@ -0,0 +1,99 @@
+// kcookiesmain.cpp - Cookies configuration
+//
+// First version of cookies configuration by Waldo Bastian <bastian@kde.org>
+// This dialog box created by David Faure <faure@kde.org>
+
+#include <qlayout.h>
+#include <qtabwidget.h>
+
+#include <klocale.h>
+#include <kapplication.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <dcopref.h>
+
+#include "kcookiesmain.h"
+#include "kcookiespolicies.h"
+#include "kcookiesmanagement.h"
+
+KCookiesMain::KCookiesMain(QWidget *parent)
+ : KCModule(parent, "kcmkio")
+{
+ management = 0;
+ bool managerOK = true;
+
+ DCOPReply reply = DCOPRef( "kded", "kded" ).call( "loadModule",
+ QCString( "kcookiejar" ) );
+
+ if( !reply.isValid() )
+ {
+ managerOK = false;
+ kdDebug(7103) << "kcm_kio: KDED could not load KCookiejar!" << endl;
+ KMessageBox::sorry(0, i18n("Unable to start the cookie handler service.\n"
+ "You will not be able to manage the cookies that "
+ "are stored on your computer."));
+ }
+
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ tab = new QTabWidget(this);
+ layout->addWidget(tab);
+
+ policies = new KCookiesPolicies(this);
+ tab->addTab(policies, i18n("&Policy"));
+ connect(policies, SIGNAL(changed(bool)), SIGNAL(changed(bool)));
+
+ if( managerOK )
+ {
+ management = new KCookiesManagement(this);
+ tab->addTab(management, i18n("&Management"));
+ connect(management, SIGNAL(changed(bool)), SIGNAL(changed(bool)));
+ }
+}
+
+KCookiesMain::~KCookiesMain()
+{
+}
+
+void KCookiesMain::load()
+{
+ policies->load();
+ if( management )
+ management->load();
+}
+
+void KCookiesMain::save()
+{
+ policies->save();
+ if ( management )
+ management->save();
+}
+
+void KCookiesMain::defaults()
+{
+ KCModule* module = static_cast<KCModule*>(tab->currentPage());
+
+ if ( module == policies )
+ policies->defaults();
+ else if( management )
+ management->defaults();
+}
+
+QString KCookiesMain::quickHelp() const
+{
+ return i18n("<h1>Cookies</h1> Cookies contain information that Konqueror"
+ " (or other KDE applications using the HTTP protocol) stores on your"
+ " computer, initiated by a remote Internet server. This means that"
+ " a web server can store information about you and your browsing activities"
+ " on your machine for later use. You might consider this an invasion of"
+ " privacy. <p> However, cookies are useful in certain situations. For example, they"
+ " are often used by Internet shops, so you can 'put things into a shopping basket'."
+ " Some sites require you have a browser that supports cookies. <p>"
+ " Because most people want a compromise between privacy and the benefits cookies offer,"
+ " KDE offers you the ability to customize the way it handles cookies. So you might want"
+ " to set KDE's default policy to ask you whenever a server wants to set a cookie,"
+ " allowing you to decide. For your favorite shopping web sites that you trust, you might"
+ " want to set the policy to accept, then you can access the web sites without being prompted"
+ " every time KDE receives a cookie." );
+}
+
+#include "kcookiesmain.moc"
diff --git a/kcontrol/kio/kcookiesmain.h b/kcontrol/kio/kcookiesmain.h
new file mode 100644
index 000000000..fef111100
--- /dev/null
+++ b/kcontrol/kio/kcookiesmain.h
@@ -0,0 +1,37 @@
+// kcookiesmain.h - Cookies configuration
+//
+// First version of cookies configuration by Waldo Bastian <bastian@kde.org>
+// This dialog box created by David Faure <faure@kde.org>
+
+#ifndef __KCOOKIESMAIN_H
+#define __KCOOKIESMAIN_H
+
+#include <kcmodule.h>
+
+class QTabWidget;
+class DCOPClient;
+class KCookiesPolicies;
+class KCookiesManagement;
+
+class KCookiesMain : public KCModule
+{
+ Q_OBJECT
+public:
+ KCookiesMain(QWidget *parent = 0L);
+ ~KCookiesMain();
+
+ KCookiesPolicies* policyDlg() { return policies; }
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ virtual QString quickHelp() const;
+
+private:
+
+ QTabWidget* tab;
+ KCookiesPolicies* policies;
+ KCookiesManagement* management;
+};
+
+#endif // __KCOOKIESMAIN_H
diff --git a/kcontrol/kio/kcookiesmanagement.cpp b/kcontrol/kio/kcookiesmanagement.cpp
new file mode 100644
index 000000000..58e983439
--- /dev/null
+++ b/kcontrol/kio/kcookiesmanagement.cpp
@@ -0,0 +1,489 @@
+/**
+ * kcookiesmanagement.cpp - Cookies manager
+ *
+ * Copyright 2000-2001 Marco Pinelli <pinmc@orion.it>
+ * Copyright (c) 2000-2001 Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 <qapplication.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qgroupbox.h>
+#include <qhbox.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qdatetime.h>
+#include <qtoolbutton.h>
+
+#include <kidna.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kdialog.h>
+#include <kiconloader.h>
+#include <klineedit.h>
+#include <klistview.h>
+#include <klistviewsearchline.h>
+#include <kmessagebox.h>
+#include <dcopref.h>
+
+#include "kcookiesmain.h"
+#include "kcookiespolicies.h"
+#include "kcookiesmanagement.h"
+#include "kcookiesmanagementdlg_ui.h"
+
+#include <assert.h>
+
+struct CookieProp
+{
+ QString host;
+ QString name;
+ QString value;
+ QString domain;
+ QString path;
+ QString expireDate;
+ QString secure;
+ bool allLoaded;
+};
+
+CookieListViewItem::CookieListViewItem(QListView *parent, QString dom)
+ :QListViewItem(parent)
+{
+ init( 0, dom );
+}
+
+CookieListViewItem::CookieListViewItem(QListViewItem *parent, CookieProp *cookie)
+ :QListViewItem(parent)
+{
+ init( cookie );
+}
+
+CookieListViewItem::~CookieListViewItem()
+{
+ delete mCookie;
+}
+
+void CookieListViewItem::init( CookieProp* cookie, QString domain,
+ bool cookieLoaded )
+{
+ mCookie = cookie;
+ mDomain = domain;
+ mCookiesLoaded = cookieLoaded;
+}
+
+CookieProp* CookieListViewItem::leaveCookie()
+{
+ CookieProp *ret = mCookie;
+ mCookie = 0;
+ return ret;
+}
+
+QString CookieListViewItem::text(int f) const
+{
+ if (mCookie)
+ return f == 0 ? QString::null : KIDNA::toUnicode(mCookie->host);
+ else
+ return f == 0 ? KIDNA::toUnicode(mDomain) : QString::null;
+}
+
+KCookiesManagement::KCookiesManagement(QWidget *parent)
+ : KCModule(parent, "kcmkio")
+{
+ // Toplevel layout
+ QVBoxLayout* mainLayout = new QVBoxLayout(this, KDialog::marginHint(),
+ KDialog::spacingHint());
+
+ dlg = new KCookiesManagementDlgUI (this);
+
+ dlg->tbClearSearchLine->setIconSet(SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase"));
+ dlg->kListViewSearchLine->setListView(dlg->lvCookies);
+
+ mainLayout->addWidget(dlg);
+ dlg->lvCookies->setSorting(0);
+
+ connect(dlg->lvCookies, SIGNAL(expanded(QListViewItem*)), SLOT(getCookies(QListViewItem*)) );
+ connect(dlg->lvCookies, SIGNAL(selectionChanged(QListViewItem*)), SLOT(showCookieDetails(QListViewItem*)) );
+
+ connect(dlg->pbDelete, SIGNAL(clicked()), SLOT(deleteCookie()));
+ connect(dlg->pbDeleteAll, SIGNAL(clicked()), SLOT(deleteAllCookies()));
+ connect(dlg->pbReload, SIGNAL(clicked()), SLOT(getDomains()));
+ connect(dlg->pbPolicy, SIGNAL(clicked()), SLOT(doPolicy()));
+
+ connect(dlg->lvCookies, SIGNAL(doubleClicked (QListViewItem *)), SLOT(doPolicy()));
+ deletedCookies.setAutoDelete(true);
+ m_bDeleteAll = false;
+ mainWidget = parent;
+
+ load();
+}
+
+KCookiesManagement::~KCookiesManagement()
+{
+}
+
+void KCookiesManagement::load()
+{
+ reset();
+ getDomains();
+}
+
+void KCookiesManagement::save()
+{
+ // If delete all cookies was requested!
+ if(m_bDeleteAll)
+ {
+ if(!DCOPRef("kded", "kcookiejar").send("deleteAllCookies"))
+ {
+ QString caption = i18n ("DCOP Communication Error");
+ QString message = i18n ("Unable to delete all the cookies as requested.");
+ KMessageBox::sorry (this, message,caption);
+ return;
+ }
+ m_bDeleteAll = false; // deleted[Cookies|Domains] have been cleared yet
+ }
+
+ // Certain groups of cookies were deleted...
+ QStringList::Iterator dIt = deletedDomains.begin();
+ while( dIt != deletedDomains.end() )
+ {
+ QByteArray call;
+ QByteArray reply;
+ QCString replyType;
+ QDataStream callStream(call, IO_WriteOnly);
+ callStream << *dIt;
+
+ if( !DCOPRef("kded", "kcookiejar").send("deleteCookiesFromDomain", (*dIt)) )
+ {
+ QString caption = i18n ("DCOP Communication Error");
+ QString message = i18n ("Unable to delete cookies as requested.");
+ KMessageBox::sorry (this, message,caption);
+ return;
+ }
+
+ dIt = deletedDomains.remove(dIt);
+ }
+
+ // Individual cookies were deleted...
+ bool success = true; // Maybe we can go on...
+ QDictIterator<CookiePropList> cookiesDom(deletedCookies);
+
+ while(cookiesDom.current())
+ {
+ CookiePropList *list = cookiesDom.current();
+ QPtrListIterator<CookieProp> cookie(*list);
+
+ while(*cookie)
+ {
+ if( !DCOPRef("kded", "kcookiejar").send("deleteCookie",(*cookie)->domain,
+ (*cookie)->host, (*cookie)->path,
+ (*cookie)->name) )
+ {
+ success = false;
+ break;
+ }
+
+ list->removeRef(*cookie);
+ }
+
+ if(!success)
+ break;
+
+ deletedCookies.remove(cookiesDom.currentKey());
+ }
+
+ emit changed( false );
+}
+
+void KCookiesManagement::defaults()
+{
+ reset();
+ getDomains();
+ emit changed (false);
+}
+
+void KCookiesManagement::reset()
+{
+ m_bDeleteAll = false;
+ clearCookieDetails();
+ dlg->lvCookies->clear();
+ deletedDomains.clear();
+ deletedCookies.clear();
+ dlg->pbDelete->setEnabled(false);
+ dlg->pbDeleteAll->setEnabled(false);
+ dlg->pbPolicy->setEnabled(false);
+}
+
+void KCookiesManagement::clearCookieDetails()
+{
+ dlg->leName->clear();
+ dlg->leValue->clear();
+ dlg->leDomain->clear();
+ dlg->lePath->clear();
+ dlg->leExpires->clear();
+ dlg->leSecure->clear();
+}
+
+QString KCookiesManagement::quickHelp() const
+{
+ return i18n("<h1>Cookies Management Quick Help</h1>" );
+}
+
+void KCookiesManagement::getDomains()
+{
+ DCOPReply reply = DCOPRef("kded", "kcookiejar").call("findDomains");
+
+ if( !reply.isValid() )
+ {
+ QString caption = i18n ("Information Lookup Failure");
+ QString message = i18n ("Unable to retrieve information about the "
+ "cookies stored on your computer.");
+ KMessageBox::sorry (this, message, caption);
+ return;
+ }
+
+ QStringList domains = reply;
+
+ if ( dlg->lvCookies->childCount() )
+ {
+ reset();
+ dlg->lvCookies->setCurrentItem( 0L );
+ }
+
+ CookieListViewItem *dom;
+ for(QStringList::Iterator dIt = domains.begin(); dIt != domains.end(); dIt++)
+ {
+ dom = new CookieListViewItem(dlg->lvCookies, *dIt);
+ dom->setExpandable(true);
+ }
+
+ // are ther any cookies?
+ dlg->pbDeleteAll->setEnabled(dlg->lvCookies->childCount());
+}
+
+void KCookiesManagement::getCookies(QListViewItem *cookieDom)
+{
+ CookieListViewItem* ckd = static_cast<CookieListViewItem*>(cookieDom);
+ if ( ckd->cookiesLoaded() )
+ return;
+
+ QValueList<int> fields;
+ fields << 0 << 1 << 2 << 3;
+
+ DCOPReply reply = DCOPRef ("kded", "kcookiejar").call ("findCookies",
+ DCOPArg(fields, "QValueList<int>"),
+ ckd->domain(),
+ QString::null,
+ QString::null,
+ QString::null);
+ if(reply.isValid())
+ {
+ QStringList fieldVal = reply;
+ QStringList::Iterator fIt = fieldVal.begin();
+
+ while(fIt != fieldVal.end())
+ {
+ CookieProp *details = new CookieProp;
+ details->domain = *fIt++;
+ details->path = *fIt++;
+ details->name = *fIt++;
+ details->host = *fIt++;
+ details->allLoaded = false;
+ new CookieListViewItem(cookieDom, details);
+ }
+
+ static_cast<CookieListViewItem*>(cookieDom)->setCookiesLoaded();
+ }
+}
+
+bool KCookiesManagement::cookieDetails(CookieProp *cookie)
+{
+ QValueList<int> fields;
+ fields << 4 << 5 << 7;
+
+ DCOPReply reply = DCOPRef ("kded", "kcookiejar").call ("findCookies",
+ DCOPArg(fields, "QValueList<int>"),
+ cookie->domain,
+ cookie->host,
+ cookie->path,
+ cookie->name);
+ if( !reply.isValid() )
+ return false;
+
+ QStringList fieldVal = reply;
+
+ QStringList::Iterator c = fieldVal.begin();
+ cookie->value = *c++;
+ unsigned tmp = (*c++).toUInt();
+
+ if( tmp == 0 )
+ cookie->expireDate = i18n("End of session");
+ else
+ {
+ QDateTime expDate;
+ expDate.setTime_t(tmp);
+ cookie->expireDate = KGlobal::locale()->formatDateTime(expDate);
+ }
+
+ tmp = (*c).toUInt();
+ cookie->secure = i18n(tmp ? "Yes" : "No");
+ cookie->allLoaded = true;
+ return true;
+}
+
+void KCookiesManagement::showCookieDetails(QListViewItem* item)
+{
+ kdDebug () << "::showCookieDetails... " << endl;
+ CookieProp *cookie = static_cast<CookieListViewItem*>(item)->cookie();
+ if( cookie )
+ {
+ if( cookie->allLoaded || cookieDetails(cookie) )
+ {
+ dlg->leName->validateAndSet(cookie->name,0,0,0);
+ dlg->leValue->validateAndSet(cookie->value,0,0,0);
+ dlg->leDomain->validateAndSet(cookie->domain,0,0,0);
+ dlg->lePath->validateAndSet(cookie->path,0,0,0);
+ dlg->leExpires->validateAndSet(cookie->expireDate,0,0,0);
+ dlg->leSecure->validateAndSet(cookie->secure,0,0,0);
+ }
+
+ dlg->pbPolicy->setEnabled (true);
+ }
+ else
+ {
+ clearCookieDetails();
+ dlg->pbPolicy->setEnabled(false);
+ }
+
+ dlg->pbDelete->setEnabled(true);
+}
+
+void KCookiesManagement::doPolicy()
+{
+ // Get current item
+ CookieListViewItem *item = static_cast<CookieListViewItem*>( dlg->lvCookies->currentItem() );
+
+ if( item && item->cookie())
+ {
+ CookieProp *cookie = item->cookie();
+
+ QString domain = cookie->domain;
+
+ if( domain.isEmpty() )
+ {
+ CookieListViewItem *parent = static_cast<CookieListViewItem*>( item->parent() );
+
+ if ( parent )
+ domain = parent->domain ();
+ }
+
+ KCookiesMain* mainDlg =static_cast<KCookiesMain*>( mainWidget );
+ // must be present or something is really wrong.
+ assert (mainDlg);
+
+ KCookiesPolicies* policyDlg = mainDlg->policyDlg();
+ // must be present unless someone rewrote the widget in which case
+ // this needs to be re-written as well.
+ assert (policyDlg);
+ policyDlg->addNewPolicy(domain);
+ }
+}
+
+
+void KCookiesManagement::deleteCookie(QListViewItem* deleteItem)
+{
+ CookieListViewItem *item = static_cast<CookieListViewItem*>( deleteItem );
+ if( item->cookie() )
+ {
+ CookieListViewItem *parent = static_cast<CookieListViewItem*>(item->parent());
+ CookiePropList *list = deletedCookies.find(parent->domain());
+ if(!list)
+ {
+ list = new CookiePropList;
+ list->setAutoDelete(true);
+ deletedCookies.insert(parent->domain(), list);
+ }
+
+ list->append(item->leaveCookie());
+ delete item;
+
+ if(parent->childCount() == 0)
+ delete parent;
+ }
+ else
+ {
+ deletedDomains.append(item->domain());
+ delete item;
+ }
+}
+
+void KCookiesManagement::deleteCookie()
+{
+ deleteCookie(dlg->lvCookies->currentItem());
+
+ QListViewItem* currentItem = dlg->lvCookies->currentItem();
+
+ if ( currentItem )
+ {
+ dlg->lvCookies->setSelected( currentItem, true );
+ showCookieDetails( currentItem );
+ }
+ else
+ clearCookieDetails();
+
+ dlg->pbDeleteAll->setEnabled(dlg->lvCookies->childCount());
+
+ const bool hasSelectedItem = dlg->lvCookies->selectedItem();
+ dlg->pbDelete->setEnabled(hasSelectedItem);
+ dlg->pbPolicy->setEnabled(hasSelectedItem);
+
+ emit changed( true );
+}
+
+void KCookiesManagement::deleteAllCookies()
+{
+ if ( dlg->kListViewSearchLine->text().isEmpty())
+ {
+ reset();
+ m_bDeleteAll = true;
+ }
+ else
+ {
+ QListViewItem* item = dlg->lvCookies->firstChild();
+
+ while (item)
+ {
+ if (item->isVisible())
+ {
+ deleteCookie(item);
+ item = dlg->lvCookies->currentItem();
+ }
+ else
+ item = item->nextSibling();
+ }
+
+ const int count = dlg->lvCookies->childCount();
+ m_bDeleteAll = (count == 0);
+ dlg->pbDeleteAll->setEnabled(count);
+
+ const bool hasSelectedItem = dlg->lvCookies->selectedItem();
+ dlg->pbDelete->setEnabled(hasSelectedItem);
+ dlg->pbPolicy->setEnabled(hasSelectedItem);
+ }
+
+ emit changed( true );
+}
+
+#include "kcookiesmanagement.moc"
diff --git a/kcontrol/kio/kcookiesmanagement.h b/kcontrol/kio/kcookiesmanagement.h
new file mode 100644
index 000000000..636be0ed3
--- /dev/null
+++ b/kcontrol/kio/kcookiesmanagement.h
@@ -0,0 +1,101 @@
+/**
+ * kcookiesmanagement.h - Cookies manager
+ *
+ * Copyright 2000-2001 Marco Pinelli <pinmc@orion.it>
+ *
+ * Contributors:
+ * Copyright (c) 2000-2001 Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 __KCOOKIESMANAGEMENT_H
+#define __KCOOKIESMANAGEMENT_H
+
+#include <qdict.h>
+#include <qstringlist.h>
+#include <qlistview.h>
+
+#include <kcmodule.h>
+
+
+class DCOPClient;
+class KCookiesManagementDlgUI;
+
+struct CookieProp;
+
+class CookieListViewItem : public QListViewItem
+{
+public:
+ CookieListViewItem(QListView *parent, QString dom);
+ CookieListViewItem(QListViewItem *parent, CookieProp *cookie);
+ ~CookieListViewItem();
+
+ QString domain() const { return mDomain; }
+ CookieProp* cookie() const { return mCookie; }
+ CookieProp* leaveCookie();
+ void setCookiesLoaded() { mCookiesLoaded = true; }
+ bool cookiesLoaded() const { return mCookiesLoaded; }
+ virtual QString text(int f) const;
+
+private:
+ void init( CookieProp* cookie,
+ QString domain = QString::null,
+ bool cookieLoaded=false );
+ CookieProp *mCookie;
+ QString mDomain;
+ bool mCookiesLoaded;
+};
+
+class KCookiesManagement : public KCModule
+{
+ Q_OBJECT
+
+public:
+ KCookiesManagement(QWidget *parent = 0 );
+ ~KCookiesManagement();
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ virtual QString quickHelp() const;
+
+private slots:
+ void deleteCookie();
+ void deleteAllCookies();
+ void getDomains();
+ void getCookies(QListViewItem*);
+ void showCookieDetails(QListViewItem*);
+ void doPolicy();
+
+private:
+ void reset ();
+ void deleteCookie(QListViewItem*);
+ bool cookieDetails(CookieProp *cookie);
+ void clearCookieDetails();
+ bool policyenabled();
+
+private:
+ bool m_bDeleteAll;
+
+ QWidget* mainWidget;
+ KCookiesManagementDlgUI* dlg;
+
+ QStringList deletedDomains;
+ typedef QPtrList<CookieProp> CookiePropList;
+ QDict<CookiePropList> deletedCookies;
+};
+
+#endif // __KCOOKIESMANAGEMENT_H
diff --git a/kcontrol/kio/kcookiesmanagementdlg_ui.ui b/kcontrol/kio/kcookiesmanagementdlg_ui.ui
new file mode 100644
index 000000000..f36c0a707
--- /dev/null
+++ b/kcontrol/kio/kcookiesmanagementdlg_ui.ui
@@ -0,0 +1,323 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KCookiesManagementDlgUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KCookiesManagementDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>294</width>
+ <height>432</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView" row="1" column="0">
+ <column>
+ <property name="text">
+ <string>Domain [Group]</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Host [Set By]</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>lvCookies</cstring>
+ </property>
+ <property name="selectionMode" stdset="0">
+ <enum>Single</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="treeStepSize">
+ <number>15</number>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbDelete</cstring>
+ </property>
+ <property name="text">
+ <string>D&amp;elete</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbDeleteAll</cstring>
+ </property>
+ <property name="text">
+ <string>Delete A&amp;ll</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbPolicy</cstring>
+ </property>
+ <property name="text">
+ <string>Change &amp;Policy...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbReload</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Reload List</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>62</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>tbClearSearchLine</cstring>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="textLabel">
+ <string>Clear Search</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Search:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>kListViewSearchLine</cstring>
+ </property>
+ </widget>
+ <widget class="KListViewSearchLine">
+ <property name="name">
+ <cstring>kListViewSearchLine</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Search interactively for domains and hosts</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>gbDetails</cstring>
+ </property>
+ <property name="title">
+ <string>Details</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>leDomain</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>lePath</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>leSecure</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lbName</cstring>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leName</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lbValue</cstring>
+ </property>
+ <property name="text">
+ <string>Value:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leValue</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>lbDomain</cstring>
+ </property>
+ <property name="text">
+ <string>Domain:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leDomain</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>lbPath</cstring>
+ </property>
+ <property name="text">
+ <string>Path:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>lePath</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>lbExpires</cstring>
+ </property>
+ <property name="text">
+ <string>Expires:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leExpires</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>lbSecure</cstring>
+ </property>
+ <property name="text">
+ <string>Secure:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leSecure</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>leValue</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>leExpires</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>leName</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>tbClearSearchLine</sender>
+ <signal>clicked()</signal>
+ <receiver>kListViewSearchLine</receiver>
+ <slot>clear()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+<includehints>
+ <includehint>klistviewsearchline.h</includehint>
+</includehints>
+</UI>
diff --git a/kcontrol/kio/kcookiespolicies.cpp b/kcontrol/kio/kcookiespolicies.cpp
new file mode 100644
index 000000000..7ee302ec1
--- /dev/null
+++ b/kcontrol/kio/kcookiespolicies.cpp
@@ -0,0 +1,474 @@
+/**
+ * kcookiespolicies.cpp - Cookies configuration
+ *
+ * Original Authors
+ * Copyright (c) Waldo Bastian <bastian@kde.org>
+ * Copyright (c) 1999 David Faure <faure@kde.org>
+ *
+ * Re-written by:
+ * Copyright (c) 2000- Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 <qheader.h>
+#include <qvbox.h>
+#include <qlayout.h>
+#include <qcheckbox.h>
+#include <qwhatsthis.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qtoolbutton.h>
+#include <qvbuttongroup.h>
+
+#include <kiconloader.h>
+#include <kidna.h>
+#include <kmessagebox.h>
+#include <klistview.h>
+#include <klistviewsearchline.h>
+#include <klocale.h>
+#include <kconfig.h>
+#include <dcopref.h>
+
+#include "ksaveioconfig.h"
+
+#include "kcookiespolicies.h"
+#include "kcookiespoliciesdlg_ui.h"
+
+KCookiesPolicies::KCookiesPolicies(QWidget *parent)
+ :KCModule(parent, "kcmkio")
+{
+ QVBoxLayout *mainLayout = new QVBoxLayout(this, 0, 0);
+
+ dlg = new KCookiesPolicyDlgUI (this);
+ dlg->lvDomainPolicy->header()->setStretchEnabled(true, 0);
+ dlg->lvDomainPolicy->setColumnWidthMode(0, KListView::Manual);
+ dlg->lvDomainPolicy->setColumnWidthMode(1, KListView::Maximum);
+ dlg->tbClearSearchLine->setIconSet(SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase"));
+ dlg->kListViewSearchLine->setListView(dlg->lvDomainPolicy);
+ QValueList<int> columns;
+ columns.append(0);
+ dlg->kListViewSearchLine->setSearchColumns(columns);
+
+ mainLayout->addWidget(dlg);
+
+ load();
+}
+
+KCookiesPolicies::~KCookiesPolicies()
+{
+}
+
+void KCookiesPolicies::configChanged ()
+{
+ //kdDebug() << "KCookiesPolicies::configChanged..." << endl;
+ emit changed((d_configChanged=true));
+}
+
+void KCookiesPolicies::cookiesEnabled( bool enable )
+{
+ dlg->bgDefault->setEnabled( enable );
+ dlg->bgPreferences->setEnabled ( enable );
+ dlg->gbDomainSpecific->setEnabled( enable );
+
+ if (enable)
+ {
+ ignoreCookieExpirationDate ( enable );
+ autoAcceptSessionCookies ( enable );
+ }
+}
+
+void KCookiesPolicies::ignoreCookieExpirationDate ( bool enable )
+{
+ bool isAutoAcceptChecked = dlg->cbAutoAcceptSessionCookies->isChecked();
+ enable = (enable && isAutoAcceptChecked);
+
+ dlg->bgDefault->setEnabled( !enable );
+ dlg->gbDomainSpecific->setEnabled( !enable );
+}
+
+void KCookiesPolicies::autoAcceptSessionCookies ( bool enable )
+{
+ bool isIgnoreExpirationChecked = dlg->cbIgnoreCookieExpirationDate->isChecked();
+ enable = (enable && isIgnoreExpirationChecked);
+
+ dlg->bgDefault->setEnabled( !enable );
+ dlg->gbDomainSpecific->setEnabled( !enable );
+}
+
+void KCookiesPolicies::addNewPolicy(const QString& domain)
+{
+ PolicyDlg pdlg (i18n("New Cookie Policy"), this);
+ pdlg.setEnableHostEdit (true, domain);
+
+ if (dlg->rbPolicyAccept->isChecked())
+ pdlg.setPolicy(KCookieAdvice::Reject);
+ else
+ pdlg.setPolicy(KCookieAdvice::Accept);
+
+ if (pdlg.exec() && !pdlg.domain().isEmpty())
+ {
+ QString domain = KIDNA::toUnicode(pdlg.domain());
+ int advice = pdlg.advice();
+
+ if ( !handleDuplicate(domain, advice) )
+ {
+ const char* strAdvice = KCookieAdvice::adviceToStr(advice);
+ QListViewItem* index = new QListViewItem (dlg->lvDomainPolicy,
+ domain, i18n(strAdvice));
+ m_pDomainPolicy.insert (index, strAdvice);
+ configChanged();
+ }
+ }
+}
+
+
+void KCookiesPolicies::addPressed()
+{
+ addNewPolicy (QString::null);
+}
+
+void KCookiesPolicies::changePressed()
+{
+ QListViewItem* index = dlg->lvDomainPolicy->currentItem();
+
+ if (!index)
+ return;
+
+ QString oldDomain = index->text(0);
+
+ PolicyDlg pdlg (i18n("Change Cookie Policy"), this);
+ pdlg.setPolicy (KCookieAdvice::strToAdvice(m_pDomainPolicy[index]));
+ pdlg.setEnableHostEdit (true, oldDomain);
+
+ if( pdlg.exec() && !pdlg.domain().isEmpty())
+ {
+ QString newDomain = KIDNA::toUnicode(pdlg.domain());
+ int advice = pdlg.advice();
+ if (newDomain == oldDomain || !handleDuplicate(newDomain, advice))
+ {
+ m_pDomainPolicy[index] = KCookieAdvice::adviceToStr(advice);
+ index->setText(0, newDomain);
+ index->setText(1, i18n(m_pDomainPolicy[index]) );
+ configChanged();
+ }
+ }
+}
+
+bool KCookiesPolicies::handleDuplicate( const QString& domain, int advice )
+{
+ QListViewItem* item = dlg->lvDomainPolicy->firstChild();
+ while ( item != 0 )
+ {
+ if ( item->text(0) == domain )
+ {
+ QString msg = i18n("<qt>A policy already exists for"
+ "<center><b>%1</b></center>"
+ "Do you want to replace it?</qt>").arg(domain);
+ int res = KMessageBox::warningContinueCancel(this, msg,
+ i18n("Duplicate Policy"),
+ i18n("Replace"));
+ if ( res == KMessageBox::Continue )
+ {
+ m_pDomainPolicy[item]= KCookieAdvice::adviceToStr(advice);
+ item->setText(0, domain);
+ item->setText(1, i18n(m_pDomainPolicy[item]));
+ configChanged();
+ return true;
+ }
+ else
+ return true; // User Cancelled!!
+ }
+ item = item->nextSibling();
+ }
+ return false;
+}
+
+void KCookiesPolicies::deletePressed()
+{
+ QListViewItem* nextItem = 0L;
+ QListViewItem* item = dlg->lvDomainPolicy->firstChild ();
+
+ while (item != 0L)
+ {
+ if (dlg->lvDomainPolicy->isSelected (item))
+ {
+ nextItem = item->itemBelow();
+ if ( !nextItem )
+ nextItem = item->itemAbove();
+
+ delete item;
+ item = nextItem;
+ }
+ else
+ {
+ item = item->itemBelow();
+ }
+ }
+
+ if (nextItem)
+ dlg->lvDomainPolicy->setSelected (nextItem, true);
+
+ updateButtons();
+ configChanged();
+}
+
+void KCookiesPolicies::deleteAllPressed()
+{
+ m_pDomainPolicy.clear();
+ dlg->lvDomainPolicy->clear();
+ updateButtons();
+ configChanged();
+}
+
+void KCookiesPolicies::updateButtons()
+{
+ bool hasItems = dlg->lvDomainPolicy->childCount() > 0;
+
+ dlg->pbChange->setEnabled ((hasItems && d_itemsSelected == 1));
+ dlg->pbDelete->setEnabled ((hasItems && d_itemsSelected > 0));
+ dlg->pbDeleteAll->setEnabled ( hasItems );
+}
+
+void KCookiesPolicies::updateDomainList(const QStringList &domainConfig)
+{
+ dlg->lvDomainPolicy->clear();
+
+ QStringList::ConstIterator it = domainConfig.begin();
+ for (; it != domainConfig.end(); ++it)
+ {
+ QString domain;
+ KCookieAdvice::Value advice = KCookieAdvice::Dunno;
+
+ splitDomainAdvice(*it, domain, advice);
+
+ if (!domain.isEmpty())
+ {
+ QListViewItem* index = new QListViewItem( dlg->lvDomainPolicy, KIDNA::toUnicode(domain),
+ i18n(KCookieAdvice::adviceToStr(advice)) );
+ m_pDomainPolicy[index] = KCookieAdvice::adviceToStr(advice);
+ }
+ }
+}
+
+void KCookiesPolicies::selectionChanged ()
+{
+ QListViewItem* item = dlg->lvDomainPolicy->firstChild ();
+
+ d_itemsSelected = 0;
+
+ while (item != 0L)
+ {
+ if (dlg->lvDomainPolicy->isSelected (item))
+ d_itemsSelected++;
+ item = item->nextSibling ();
+ }
+
+ updateButtons ();
+}
+
+void KCookiesPolicies::load()
+{
+ d_itemsSelected = 0;
+ d_configChanged = false;
+
+ KConfig cfg ("kcookiejarrc", true);
+ cfg.setGroup ("Cookie Policy");
+
+ bool enableCookies = cfg.readBoolEntry("Cookies", true);
+ dlg->cbEnableCookies->setChecked (enableCookies);
+ cookiesEnabled( enableCookies );
+
+ KCookieAdvice::Value advice = KCookieAdvice::strToAdvice (cfg.readEntry(
+ "CookieGlobalAdvice", "Ask"));
+ switch (advice)
+ {
+ case KCookieAdvice::Accept:
+ dlg->rbPolicyAccept->setChecked (true);
+ break;
+ case KCookieAdvice::Reject:
+ dlg->rbPolicyReject->setChecked (true);
+ break;
+ case KCookieAdvice::Ask:
+ case KCookieAdvice::Dunno:
+ default:
+ dlg->rbPolicyAsk->setChecked (true);
+ }
+
+ bool enable = cfg.readBoolEntry("RejectCrossDomainCookies", true);
+ dlg->cbRejectCrossDomainCookies->setChecked (enable);
+
+ bool sessionCookies = cfg.readBoolEntry("AcceptSessionCookies", true);
+ dlg->cbAutoAcceptSessionCookies->setChecked (sessionCookies);
+ bool cookieExpiration = cfg.readBoolEntry("IgnoreExpirationDate", false);
+ dlg->cbIgnoreCookieExpirationDate->setChecked (cookieExpiration);
+ updateDomainList(cfg.readListEntry("CookieDomainAdvice"));
+
+ if (enableCookies)
+ {
+ ignoreCookieExpirationDate( cookieExpiration );
+ autoAcceptSessionCookies( sessionCookies );
+ updateButtons();
+ }
+
+ // Connect the main swicth :) Enable/disable cookie support
+ connect( dlg->cbEnableCookies, SIGNAL( toggled(bool) ),
+ SLOT( cookiesEnabled(bool) ) );
+ connect( dlg->cbEnableCookies, SIGNAL( toggled(bool) ),
+ SLOT( configChanged() ) );
+
+ // Connect the preference check boxes...
+ connect ( dlg->cbRejectCrossDomainCookies, SIGNAL(clicked()),
+ SLOT(configChanged()));
+ connect ( dlg->cbAutoAcceptSessionCookies, SIGNAL(toggled(bool)),
+ SLOT(configChanged()));
+ connect ( dlg->cbIgnoreCookieExpirationDate, SIGNAL(toggled(bool)),
+ SLOT(configChanged()));
+
+ connect ( dlg->cbAutoAcceptSessionCookies, SIGNAL(toggled(bool)),
+ SLOT(autoAcceptSessionCookies(bool)));
+ connect ( dlg->cbIgnoreCookieExpirationDate, SIGNAL(toggled(bool)),
+ SLOT(ignoreCookieExpirationDate(bool)));
+
+ // Connect the default cookie policy radio buttons...
+ connect(dlg->bgDefault, SIGNAL(clicked(int)), SLOT(configChanged()));
+
+ // Connect signals from the domain specific policy listview.
+ connect( dlg->lvDomainPolicy, SIGNAL(selectionChanged()),
+ SLOT(selectionChanged()) );
+ connect( dlg->lvDomainPolicy, SIGNAL(doubleClicked (QListViewItem *)),
+ SLOT(changePressed() ) );
+ connect( dlg->lvDomainPolicy, SIGNAL(returnPressed ( QListViewItem * )),
+ SLOT(changePressed() ) );
+
+ // Connect the buttons...
+ connect( dlg->pbNew, SIGNAL(clicked()), SLOT( addPressed() ) );
+ connect( dlg->pbChange, SIGNAL( clicked() ), SLOT( changePressed() ) );
+ connect( dlg->pbDelete, SIGNAL( clicked() ), SLOT( deletePressed() ) );
+ connect( dlg->pbDeleteAll, SIGNAL( clicked() ), SLOT( deleteAllPressed() ) );
+}
+
+void KCookiesPolicies::save()
+{
+ // If nothing changed, ignore the save request.
+ if (!d_configChanged)
+ return;
+
+ KConfig cfg ( "kcookiejarrc" );
+ cfg.setGroup( "Cookie Policy" );
+
+ bool state = dlg->cbEnableCookies->isChecked();
+ cfg.writeEntry( "Cookies", state );
+ state = dlg->cbRejectCrossDomainCookies->isChecked();
+ cfg.writeEntry( "RejectCrossDomainCookies", state );
+ state = dlg->cbAutoAcceptSessionCookies->isChecked();
+ cfg.writeEntry( "AcceptSessionCookies", state );
+ state = dlg->cbIgnoreCookieExpirationDate->isChecked();
+ cfg.writeEntry( "IgnoreExpirationDate", state );
+
+ QString advice;
+ if (dlg->rbPolicyAccept->isChecked())
+ advice = KCookieAdvice::adviceToStr(KCookieAdvice::Accept);
+ else if (dlg->rbPolicyReject->isChecked())
+ advice = KCookieAdvice::adviceToStr(KCookieAdvice::Reject);
+ else
+ advice = KCookieAdvice::adviceToStr(KCookieAdvice::Ask);
+
+ cfg.writeEntry("CookieGlobalAdvice", advice);
+
+ QStringList domainConfig;
+ QListViewItem *at = dlg->lvDomainPolicy->firstChild();
+
+ while( at )
+ {
+ domainConfig.append(QString::fromLatin1("%1:%2").arg(KIDNA::toAscii(at->text(0))).arg(m_pDomainPolicy[at]));
+ at = at->nextSibling();
+ }
+
+ cfg.writeEntry("CookieDomainAdvice", domainConfig);
+ cfg.sync();
+
+ // Update the cookiejar...
+ if (!dlg->cbEnableCookies->isChecked())
+ (void)DCOPRef("kded", "kcookiejar").send("shutdown");
+ else
+ {
+ if (!DCOPRef("kded", "kcookiejar").send("reloadPolicy"))
+ KMessageBox::sorry(0, i18n("Unable to communicate with the cookie handler service.\n"
+ "Any changes you made will not take effect until the service "
+ "is restarted."));
+ }
+
+ // Force running io-slave to reload configurations...
+ KSaveIOConfig::updateRunningIOSlaves (this);
+ emit changed( false );
+}
+
+
+void KCookiesPolicies::defaults()
+{
+ dlg->cbEnableCookies->setChecked( true );
+ dlg->rbPolicyAsk->setChecked( true );
+ dlg->rbPolicyAccept->setChecked( false );
+ dlg->rbPolicyReject->setChecked( false );
+ dlg->cbRejectCrossDomainCookies->setChecked( true );
+ dlg->cbAutoAcceptSessionCookies->setChecked( true );
+ dlg->cbIgnoreCookieExpirationDate->setChecked( false );
+ dlg->lvDomainPolicy->clear();
+
+ cookiesEnabled( dlg->cbEnableCookies->isChecked() );
+ updateButtons();
+}
+
+void KCookiesPolicies::splitDomainAdvice (const QString& cfg, QString &domain,
+ KCookieAdvice::Value &advice)
+{
+ int sepPos = cfg.findRev(':');
+
+ // Ignore any policy that does not contain a domain...
+ if ( sepPos <= 0 )
+ return;
+
+ domain = cfg.left(sepPos);
+ advice = KCookieAdvice::strToAdvice( cfg.mid( sepPos+1 ) );
+}
+
+QString KCookiesPolicies::quickHelp() const
+{
+ return i18n("<h1>Cookies</h1> Cookies contain information that Konqueror"
+ " (or any other KDE application using the HTTP protocol) stores"
+ " on your computer from a remote Internet server. This means"
+ " that a web server can store information about you and your"
+ " browsing activities on your machine for later use. You might"
+ " consider this an invasion of privacy.<p>However, cookies are"
+ " useful in certain situations. For example, they are often used"
+ " by Internet shops, so you can 'put things into a shopping"
+ " basket'. Some sites require you have a browser that supports"
+ " cookies.<p>Because most people want a compromise between privacy"
+ " and the benefits cookies offer, KDE offers you the ability to"
+ " customize the way it handles cookies. You might, for example"
+ " want to set KDE's default policy to ask you whenever a server"
+ " wants to set a cookie or simply reject or accept everything."
+ " For example, you might choose to accept all cookies from your"
+ " favorite shopping web site. For this all you have to do is"
+ " either browse to that particular site and when you are presented"
+ " with the cookie dialog box, click on <i> This domain </i> under"
+ " the 'apply to' tab and choose accept or simply specify the name"
+ " of the site in the <i> Domain Specific Policy </i> tab and set"
+ " it to accept. This enables you to receive cookies from trusted"
+ " web sites without being asked every time KDE receives a cookie."
+ );
+}
+
+#include "kcookiespolicies.moc"
diff --git a/kcontrol/kio/kcookiespolicies.h b/kcontrol/kio/kcookiespolicies.h
new file mode 100644
index 000000000..5b2eaf086
--- /dev/null
+++ b/kcontrol/kio/kcookiespolicies.h
@@ -0,0 +1,81 @@
+/**
+ * kcookiespolicies.h - Cookies configuration
+ *
+ * Original Authors
+ * Copyright (c) Waldo Bastian <bastian@kde.org>
+ * Copyright (c) 1999 David Faure <faure@kde.org>
+ *
+ * Re-written by:
+ * Copyright (c) 2000- Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 __KCOOKIESPOLICIES_H
+#define __KCOOKIESPOLICIES_H
+
+#include <qmap.h>
+#include <kcmodule.h>
+
+#include "policydlg.h"
+
+class QListViewItem;
+
+class DCOPClient;
+class KCookiesPolicyDlgUI;
+
+class KCookiesPolicies : public KCModule
+{
+ Q_OBJECT
+
+public:
+ KCookiesPolicies(QWidget *parent = 0);
+ ~KCookiesPolicies();
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ virtual QString quickHelp() const;
+
+ void addNewPolicy(const QString& domain);
+
+protected slots:
+ void autoAcceptSessionCookies ( bool );
+ void ignoreCookieExpirationDate ( bool );
+ void cookiesEnabled( bool );
+ void configChanged();
+
+ void selectionChanged();
+ void updateButtons();
+
+ void deleteAllPressed();
+ void deletePressed();
+ void changePressed();
+ void addPressed();
+
+private:
+ void updateDomainList(const QStringList& list);
+ bool handleDuplicate( const QString& domain, int );
+ void splitDomainAdvice (const QString& configStr, QString &domain,
+ KCookieAdvice::Value &advice);
+
+private:
+ int d_itemsSelected;
+ bool d_configChanged;
+ KCookiesPolicyDlgUI* dlg;
+ QMap<QListViewItem*, const char*> m_pDomainPolicy;
+};
+
+#endif // __KCOOKIESPOLICIES_H
diff --git a/kcontrol/kio/kcookiespoliciesdlg_ui.ui b/kcontrol/kio/kcookiespoliciesdlg_ui.ui
new file mode 100644
index 000000000..435ca8640
--- /dev/null
+++ b/kcontrol/kio/kcookiespoliciesdlg_ui.ui
@@ -0,0 +1,323 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KCookiesPolicyDlgUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KCookiesPolicyDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>444</width>
+ <height>552</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>cbEnableCookies</cstring>
+ </property>
+ <property name="text">
+ <string>Enable coo&amp;kies</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enable cookie support. Normally you will want to have cookie support enabled and customize it to suit your privacy needs.&lt;p&gt;
+Please note that disabling cookie support might make many web sites unbrowsable.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>bgPreferences</cstring>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbRejectCrossDomainCookies</cstring>
+ </property>
+ <property name="text">
+ <string>Only acce&amp;pt cookies from originating server</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Reject the so called third-party cookies. These are cookies that originate from a site other than the one you are currently browsing. For example, if you visit &lt;b&gt;www.foobar.com&lt;/b&gt; while this option is on, only cookies that originate from www.foobar.com will be processed per your settings. Cookies from any other site will be rejected. This reduces the chances of site operators compiling a profile about your daily browsing habits.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbAutoAcceptSessionCookies</cstring>
+ </property>
+ <property name="text">
+ <string>Automaticall&amp;y accept session cookies</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Automatically accept temporary cookies meant to expire at the end of the current session. Such cookies will not be stored in your computer's hard drive or storage device. Instead, they are deleted when you close all applications (e.g. your browser) that use them.&lt;p&gt;
+&lt;u&gt;NOTE:&lt;/u&gt; Checking this option along with the next one will override your default as well as site specific cookie policies. However, doing so also increases your privacy since all cookies will be removed when the current session ends.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbIgnoreCookieExpirationDate</cstring>
+ </property>
+ <property name="text">
+ <string>Treat &amp;all cookies as session cookies</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Treat all cookies as session cookies. Session cookies are small pieces of data that are temporarily stored in your computer's memory until you quit or close all applications (e.g. your browser) that use them. Unlike regular cookies, session cookies are never stored on your hard drive or other storage medium.&lt;p&gt;
+&lt;u&gt;NOTE:&lt;/u&gt; Checking this option along with the previous one will override your default as well as site specific cookie policies. However, doing so also increases your privacy since all cookies will be removed when the current session ends.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup" row="2" column="0">
+ <property name="name">
+ <cstring>bgDefault</cstring>
+ </property>
+ <property name="title">
+ <string>Default Policy</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Determines how cookies received from a remote machine will be handled:
+&lt;ul&gt;
+&lt;li&gt;&lt;b&gt;Ask&lt;/b&gt; will cause KDE to ask for your confirmation whenever a server wants to set a cookie."&lt;/li&gt;
+&lt;li&gt;&lt;b&gt;Accept&lt;/b&gt; will cause cookies to be accepted without prompting you.&lt;/li&gt;
+&lt;li&gt;&lt;b&gt;Reject&lt;/b&gt; will cause the cookiejar to refuse all cookies it receives.&lt;/li&gt;
+&lt;/ul&gt;&lt;p&gt;
+&lt;u&gt;NOTE:&lt;/u&gt; Domain specific policies, which can be set below, always take precedence over the default policy.
+&lt;/qt&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbPolicyAsk</cstring>
+ </property>
+ <property name="text">
+ <string>Ask &amp;for confirmation</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbPolicyAccept</cstring>
+ </property>
+ <property name="text">
+ <string>Accep&amp;t all cookies</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbPolicyReject</cstring>
+ </property>
+ <property name="text">
+ <string>Re&amp;ject all cookies</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="3" column="0">
+ <property name="name">
+ <cstring>gbDomainSpecific</cstring>
+ </property>
+ <property name="title">
+ <string>Site Policy</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+To add a new policy, simply click on the &lt;b&gt;Add...&lt;/b&gt; button and supply the necessary information. To change an existing policy, use the &lt;b&gt;Change...&lt;/b&gt; button and choose the new policy from the policy dialog box. Clicking on the &lt;b&gt;Delete&lt;/b&gt; button will remove the currently selected policy causing the default policy setting to be used for that domain whereas &lt;b&gt;Delete All&lt;/b&gt; will remove all the site specific policies.
+&lt;/qt&gt;</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbChange</cstring>
+ </property>
+ <property name="text">
+ <string>Chan&amp;ge...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbDelete</cstring>
+ </property>
+ <property name="text">
+ <string>D&amp;elete</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbDeleteAll</cstring>
+ </property>
+ <property name="text">
+ <string>Delete A&amp;ll</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="KListView" row="1" column="0" rowspan="2" colspan="1">
+ <column>
+ <property name="text">
+ <string>Domain</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Policy</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>lvDomainPolicy</cstring>
+ </property>
+ <property name="selectionMode" stdset="0">
+ <enum>Extended</enum>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="treeStepSize">
+ <number>0</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+List of sites for which you have set a specific cookie policy. Specific policies override the default policy setting for these sites.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>tbClearSearchLine</cstring>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="textLabel">
+ <string>Clear Search</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Search:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>kListViewSearchLine</cstring>
+ </property>
+ </widget>
+ <widget class="KListViewSearchLine">
+ <property name="name">
+ <cstring>kListViewSearchLine</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Search interactively for domains</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>tbClearSearchLine</sender>
+ <signal>clicked()</signal>
+ <receiver>kListViewSearchLine</receiver>
+ <slot>clear()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+<includehints>
+ <includehint>klistview.h</includehint>
+ <includehint>klistviewsearchline.h</includehint>
+</includehints>
+</UI>
diff --git a/kcontrol/kio/kenvvarproxydlg.cpp b/kcontrol/kio/kenvvarproxydlg.cpp
new file mode 100644
index 000000000..eaad2b1b6
--- /dev/null
+++ b/kcontrol/kio/kenvvarproxydlg.cpp
@@ -0,0 +1,303 @@
+/*
+ kenvvarproxydlg.cpp - Proxy configuration dialog
+
+ Copyright (C) 2001- Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 <stdlib.h>
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qcheckbox.h>
+#include <qwhatsthis.h>
+#include <qpushbutton.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <klineedit.h>
+#include <kmessagebox.h>
+
+#include "envvarproxy_ui.h"
+#include "kenvvarproxydlg.h"
+
+
+#define ENV_FTP_PROXY "FTP_PROXY,ftp_proxy,FTPPROXY,ftpproxy,PROXY,proxy"
+#define ENV_HTTP_PROXY "HTTP_PROXY,http_proxy,HTTPPROXY,httpproxy,PROXY,proxy"
+#define ENV_HTTPS_PROXY "HTTPS_PROXY,https_proxy,HTTPSPROXY,httpsproxy,PROXY,proxy"
+#define NO_PROXY "NO_PROXY,no_proxy"
+
+
+static QString getProxyEnv(const QString& var)
+{
+ return QString::fromLocal8Bit(::getenv(var.local8Bit().data()));
+}
+
+static bool autoDetectProxySetting(const QString& type, QString& proxyEnv)
+{
+ QStringList list = QStringList::split( ',', type);
+ QStringList::ConstIterator it = list.begin();
+ QStringList::ConstIterator end = list.end();
+
+ for(; it != end; ++it)
+ {
+ if(!getProxyEnv(*it).isEmpty())
+ {
+ proxyEnv = *it;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+KEnvVarProxyDlg::KEnvVarProxyDlg( QWidget* parent, const char* name )
+ :KProxyDialogBase( parent, name, true,
+ i18n( "Variable Proxy Configuration" ) )
+{
+ mDlg = new EnvVarProxyDlgUI( this );
+ setMainWidget( mDlg );
+ mDlg->leHttp->setMinimumWidth( mDlg->leHttp->fontMetrics().maxWidth() * 20 );
+ init();
+}
+
+KEnvVarProxyDlg::~KEnvVarProxyDlg ()
+{
+}
+
+void KEnvVarProxyDlg::init()
+{
+ m_bHasValidData = false;
+
+ connect( mDlg->cbShowValue, SIGNAL( clicked() ), SLOT( showValuePressed() ) );
+ connect( mDlg->pbVerify, SIGNAL( clicked() ), SLOT( verifyPressed() ) );
+ connect( mDlg->pbDetect, SIGNAL( clicked() ), SLOT( autoDetectPressed() ) );
+}
+
+void KEnvVarProxyDlg::setProxyData( const KProxyData& data )
+{
+ // Setup HTTP Proxy...
+ if (!getProxyEnv(data.proxyList["http"]).isEmpty())
+ mEnvVarsMap["http"] = data.proxyList["http"];
+
+ // Setup HTTPS Proxy...
+ if (!getProxyEnv(data.proxyList["https"]).isEmpty())
+ mEnvVarsMap["https"] = data.proxyList["https"];
+
+ // Setup FTP Proxy...
+ if (!getProxyEnv(data.proxyList["ftp"]).isEmpty())
+ mEnvVarsMap["ftp"] = data.proxyList["ftp"];
+
+ // Setup NO Proxy For...
+ QString noProxyFor = data.noProxyFor.join("");
+ if (!getProxyEnv(noProxyFor).isEmpty())
+ mEnvVarsMap["noProxy"] = noProxyFor;
+
+ mDlg->cbShowValue->setChecked( data.showEnvVarValue );
+ showValue();
+}
+
+const KProxyData KEnvVarProxyDlg::data() const
+{
+ KProxyData data;
+
+ if (m_bHasValidData)
+ {
+ data.proxyList["http"] = mEnvVarsMap["http"];
+ data.proxyList["https"] = mEnvVarsMap["https"];
+ data.proxyList["ftp"] = mEnvVarsMap["ftp"];
+ data.noProxyFor = mEnvVarsMap["noProxy"];
+ data.type = KProtocolManager::EnvVarProxy;
+ data.showEnvVarValue = mDlg->cbShowValue->isChecked();
+ }
+
+ return data;
+}
+
+
+void KEnvVarProxyDlg::verifyPressed()
+{
+ if ( !validate() )
+ {
+ QString msg = i18n("You must specify at least one valid proxy "
+ "environment variable.");
+
+ QString details = i18n("<qt>Make sure you entered the actual environment "
+ "variable name rather than its value. For "
+ "example, if the environment variable is <br><b>"
+ "HTTP_PROXY=http://localhost:3128</b><br> you need "
+ "to enter <b>HTTP_PROXY</b> here instead of the "
+ "actual value http://localhost:3128.</qt>");
+
+ KMessageBox::detailedSorry( this, msg, details,
+ i18n("Invalid Proxy Setup") );
+ }
+ else
+ {
+ KMessageBox::information( this, i18n("Successfully verified."),
+ i18n("Proxy Setup") );
+ }
+}
+
+void KEnvVarProxyDlg::autoDetectPressed()
+{
+ bool found = false;
+
+ setHighLight (mDlg->lbHttp, false);
+ setHighLight (mDlg->lbHttps, false);
+ setHighLight (mDlg->lbFtp, false);
+ setHighLight (mDlg->lbNoProxy, false);
+
+ // Detect HTTP proxy settings...
+ found |= autoDetectProxySetting (QString::fromLatin1(ENV_HTTP_PROXY), mEnvVarsMap["http"]);
+
+ // Detect HTTPS proxy settings...
+ found |= autoDetectProxySetting (QString::fromLatin1(ENV_HTTPS_PROXY), mEnvVarsMap["https"]);
+
+ // Detect FTP proxy settings...
+ found |= autoDetectProxySetting (QString::fromLatin1(ENV_FTP_PROXY), mEnvVarsMap["ftp"]);
+
+ // Detect the NO_PROXY settings...
+ found |= autoDetectProxySetting (QString::fromLatin1(NO_PROXY), mEnvVarsMap["noProxy"]);
+
+ if ( !found )
+ {
+ QString msg = i18n("Did not detect any environment variables "
+ "commonly used to set system wide proxy "
+ "information.");
+
+ QString details = i18n("<qt>To learn about the variable names the "
+ "automatic detection process searches for, "
+ "press OK, click on the quick help button "
+ "on the window title bar of the "
+ "previous dialog and then click on the "
+ "\"<b>Auto Detect</b>\" button.</qt>");
+
+ KMessageBox::detailedSorry( this, msg, details,
+ i18n("Automatic Proxy Variable Detection") );
+ return;
+ }
+
+ showValue();
+}
+
+void KEnvVarProxyDlg::updateVariables()
+{
+ QString text = mDlg->leHttp->text();
+ if (mEnvVarsMap["http"] != text)
+ mEnvVarsMap["http"] = text;
+
+ text = mDlg->leHttps->text();
+ if (mEnvVarsMap["https"] != text)
+ mEnvVarsMap["https"] = text;
+
+ text = mDlg->leFtp->text();
+ if (mEnvVarsMap["ftp"] != text)
+ mEnvVarsMap["ftp"] = text;
+
+ text = mDlg->leNoProxy->text();
+ if (mEnvVarsMap["noProxy"] != text)
+ mEnvVarsMap["noProxy"] = text;
+}
+
+void KEnvVarProxyDlg::showValuePressed()
+{
+ // Only update the variables whenever
+ if (mDlg->cbShowValue->isChecked())
+ updateVariables();
+
+ showValue();
+}
+
+void KEnvVarProxyDlg::showValue()
+{
+ bool enable = mDlg->cbShowValue->isChecked();
+
+ mDlg->leHttp->setReadOnly (enable);
+ mDlg->leHttps->setReadOnly (enable);
+ mDlg->leFtp->setReadOnly (enable);
+ mDlg->leNoProxy->setReadOnly (enable);
+
+ if (enable)
+ {
+ mDlg->leHttp->setText(getProxyEnv(mEnvVarsMap["http"]));
+ mDlg->leHttps->setText(getProxyEnv(mEnvVarsMap["https"]));
+ mDlg->leFtp->setText(getProxyEnv(mEnvVarsMap["ftp"]));
+ mDlg->leNoProxy->setText(getProxyEnv(mEnvVarsMap["noProxy"]));
+ }
+ else
+ {
+ mDlg->leHttp->setText(mEnvVarsMap["http"]);
+ mDlg->leHttps->setText(mEnvVarsMap["https"]);
+ mDlg->leFtp->setText(mEnvVarsMap["ftp"]);
+ mDlg->leNoProxy->setText(mEnvVarsMap["noProxy"]);
+ }
+}
+
+bool KEnvVarProxyDlg::validate(bool erase)
+{
+ m_bHasValidData = false;
+
+ if(!mDlg->cbShowValue->isChecked())
+ updateVariables();
+
+ bool notFound = getProxyEnv(mEnvVarsMap["http"]).isEmpty();
+ m_bHasValidData |= !notFound;
+ setHighLight (mDlg->lbHttp, notFound);
+ if(notFound && erase) mEnvVarsMap["http"] = QString::null;
+
+ notFound = getProxyEnv(mEnvVarsMap["https"]).isEmpty();
+ m_bHasValidData |= !notFound;
+ setHighLight (mDlg->lbHttps, notFound);
+ if(notFound && erase) mEnvVarsMap["https"] = QString::null;
+
+ notFound = getProxyEnv(mEnvVarsMap["ftp"]).isEmpty();
+ m_bHasValidData |= !notFound;
+ setHighLight (mDlg->lbFtp, notFound);
+ if(notFound && erase) mEnvVarsMap["ftp"] = QString::null;
+
+ notFound = getProxyEnv(mEnvVarsMap["noProxy"]).isEmpty();
+ m_bHasValidData |= !notFound;
+ setHighLight (mDlg->lbNoProxy, notFound);
+ if(notFound && erase) mEnvVarsMap["noProxy"] = QString::null;
+
+ return m_bHasValidData;
+}
+
+void KEnvVarProxyDlg::slotOk()
+{
+ if(!validate(true))
+ {
+ QString msg = i18n("You must specify at least one valid proxy "
+ "environment variable.");
+
+ QString details = i18n("<qt>Make sure you entered the actual environment "
+ "variable name rather than its value. For "
+ "example, if the environment variable is <br><b>"
+ "HTTP_PROXY=http://localhost:3128</b><br> you need "
+ "to enter <b>HTTP_PROXY</b> here instead of the "
+ "actual value http://localhost:3128.</qt>");
+
+ KMessageBox::detailedError( this, msg, details,
+ i18n("Invalid Proxy Setup") );
+ return;
+ }
+
+ KDialogBase::slotOk ();
+}
+
+#include "kenvvarproxydlg.moc"
diff --git a/kcontrol/kio/kenvvarproxydlg.h b/kcontrol/kio/kenvvarproxydlg.h
new file mode 100644
index 000000000..bf4c073a6
--- /dev/null
+++ b/kcontrol/kio/kenvvarproxydlg.h
@@ -0,0 +1,57 @@
+/*
+ kenvvarproxydlg.h - Base dialog box for proxy configuration
+
+ Copyright (C) 2001- Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 KENVVAR_PROXY_DIALOG_H
+#define KENVVAR_PROXY_DIALOG_H
+
+#include <qmap.h>
+
+#include "kproxydlgbase.h"
+
+class EnvVarProxyDlgUI;
+
+class KEnvVarProxyDlg : public KProxyDialogBase
+{
+ Q_OBJECT
+
+public:
+ KEnvVarProxyDlg( QWidget* parent = 0, const char* name = 0 );
+ ~KEnvVarProxyDlg();
+
+ virtual const KProxyData data() const;
+ virtual void setProxyData( const KProxyData &data );
+
+protected slots:
+ virtual void slotOk();
+ void verifyPressed();
+ void showValuePressed();
+ void autoDetectPressed();
+
+protected:
+ void init();
+ bool validate(bool erase = false);
+ void showValue();
+ void updateVariables();
+
+private:
+ EnvVarProxyDlgUI* mDlg;
+ QMap<QString, QString> mEnvVarsMap;
+};
+#endif
diff --git a/kcontrol/kio/kio_ftprc.kcfg b/kcontrol/kio/kio_ftprc.kcfg
new file mode 100644
index 000000000..610b2e68a
--- /dev/null
+++ b/kcontrol/kio/kio_ftprc.kcfg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+ <kcfgfile name="kio_ftprc" />
+ <group name="DesktopIcons" >
+
+ <entry name="DisablePassiveMode" type="Bool">
+ <label>Disable Passive FTP</label>
+ <whatsthis>When FTP connections are passive the client connects to the server, instead of the other way round, so firewalls do not block the connection; old FTP servers may not support Passive FTP though.</whatsthis>
+ <default>false</default>
+ </entry>
+
+ <entry name="MarkPartial" type="Bool">
+ <label>Mark partially uploaded files</label>
+ <whatsthis>While a file is being uploaded its extension is ".part". When fully uploaded it is renamed to its real name.</whatsthis>
+ <default>true</default>
+ </entry>
+
+ </group>
+</kcfg>
diff --git a/kcontrol/kio/kio_ftprc.kcfgc b/kcontrol/kio/kio_ftprc.kcfgc
new file mode 100644
index 000000000..7b5ca780f
--- /dev/null
+++ b/kcontrol/kio/kio_ftprc.kcfgc
@@ -0,0 +1,5 @@
+File=kio_ftprc.kcfg
+ClassName=KioFtp
+Singleton=true
+Mutators=true
+
diff --git a/kcontrol/kio/kioslave.kcfg b/kcontrol/kio/kioslave.kcfg
new file mode 100644
index 000000000..4dcce7191
--- /dev/null
+++ b/kcontrol/kio/kioslave.kcfg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+ <kcfgfile name="kio_ftprc" />
+ <group name="General">
+ <entry name="PersistentProxyConnection" type="Bool">
+ <default>false</default>
+ </entry>
+ <entry name="ProxyConnectTimeout" type="UInt" >
+ <default>10</default>
+ <min>2</min>
+ <max>3600</max>
+ </entry>
+ <entry name="ConnectTimeout" type="UInt" >
+ <default>20</default>
+ <min>2</min>
+ <max>3600</max>
+ </entry>
+ <entry name="ReadTimeout" type="UInt" >
+ <default>15</default>
+ <min>2</min>
+ <max>3600</max>
+ </entry>
+ <entry name="ResponseTimeout" type="UInt" >
+ <default>600</default>
+ <min>2</min>
+ <max>3600</max>
+ </entry>
+ </group>
+ <group name="Proxy Settings" >
+ <entry name="AuthMode" type="String" >
+ </entry>
+ <entry name="ReversedException" type="Bool">
+ </entry>
+ <entry name="ftpProxy" type="String">
+ </entry>
+ <entry name="httpProxy" type="String">
+ </entry>
+ <entry name="httpsProxy" type="String">
+ </entry>
+ </group>
+</kcfg>
diff --git a/kcontrol/kio/kioslave.kcfgc b/kcontrol/kio/kioslave.kcfgc
new file mode 100644
index 000000000..7b5ca780f
--- /dev/null
+++ b/kcontrol/kio/kioslave.kcfgc
@@ -0,0 +1,5 @@
+File=kio_ftprc.kcfg
+ClassName=KioFtp
+Singleton=true
+Mutators=true
+
diff --git a/kcontrol/kio/kmanualproxydlg.cpp b/kcontrol/kio/kmanualproxydlg.cpp
new file mode 100644
index 000000000..9a3df6afb
--- /dev/null
+++ b/kcontrol/kio/kmanualproxydlg.cpp
@@ -0,0 +1,498 @@
+/*
+ kmanualproxydlg.cpp - Proxy configuration dialog
+
+ Copyright (C) 2001-2004 Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 <qlabel.h>
+#include <qlayout.h>
+#include <qspinbox.h>
+#include <qcheckbox.h>
+#include <qwhatsthis.h>
+#include <qpushbutton.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <knuminput.h>
+#include <klistbox.h>
+#include <klineedit.h>
+#include <kicontheme.h>
+#include <kurifilter.h>
+#include <kmessagebox.h>
+#include <kiconloader.h>
+#include <kinputdialog.h>
+#include <kio/ioslave_defaults.h>
+
+#include "manualproxy_ui.h"
+#include "kmanualproxydlg.h"
+
+
+KManualProxyDlg::KManualProxyDlg( QWidget* parent, const char* name )
+ :KProxyDialogBase( parent, name, true,
+ i18n("Manual Proxy Configuration") )
+{
+ mDlg = new ManualProxyDlgUI (this);
+ setMainWidget( mDlg );
+
+ mDlg->pbCopyDown->setPixmap( BarIcon("down", KIcon::SizeSmall) );
+ QSizePolicy sizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed,
+ mDlg->pbCopyDown->sizePolicy().hasHeightForWidth() );
+ mDlg->pbCopyDown->setSizePolicy( sizePolicy );
+
+ init();
+}
+
+void KManualProxyDlg::init()
+{
+ mDlg->sbHttp->setRange( 0, MAX_PORT_VALUE );
+ mDlg->sbHttps->setRange( 0, MAX_PORT_VALUE );
+ mDlg->sbFtp->setRange( 0, MAX_PORT_VALUE );
+
+ connect( mDlg->pbNew, SIGNAL( clicked() ), SLOT( newPressed() ) );
+ connect( mDlg->pbChange, SIGNAL( clicked() ), SLOT( changePressed() ) );
+ connect( mDlg->pbDelete, SIGNAL( clicked() ), SLOT( deletePressed() ) );
+ connect( mDlg->pbDeleteAll, SIGNAL( clicked() ), SLOT( deleteAllPressed() ) );
+
+ connect( mDlg->lbExceptions, SIGNAL(selectionChanged()), SLOT(updateButtons()) );
+ connect( mDlg->lbExceptions, SIGNAL(doubleClicked (QListBoxItem *)), SLOT(changePressed()));
+
+ connect( mDlg->cbSameProxy, SIGNAL( toggled(bool) ), SLOT( sameProxy(bool) ) );
+ connect( mDlg->pbCopyDown, SIGNAL( clicked() ), SLOT( copyDown() ) );
+
+ connect( mDlg->leHttp, SIGNAL(textChanged(const QString&)), SLOT(textChanged(const QString&)) );
+ connect( mDlg->sbHttp, SIGNAL(valueChanged(int)), SLOT(valueChanged (int)) );
+}
+
+void KManualProxyDlg::setProxyData( const KProxyData &data )
+{
+ KURL url;
+
+ // Set the HTTP proxy...
+ if (!isValidURL(data.proxyList["http"], &url))
+ mDlg->sbHttp->setValue( DEFAULT_PROXY_PORT );
+ else
+ {
+ int port = url.port();
+ if ( port <= 0 )
+ port = DEFAULT_PROXY_PORT;
+
+ url.setPort( 0 );
+ mDlg->leHttp->setText( url.url() );
+ mDlg->sbHttp->setValue( port );
+ }
+
+ bool useSameProxy = (!mDlg->leHttp->text().isEmpty () &&
+ data.proxyList["http"] == data.proxyList["https"] &&
+ data.proxyList["http"] == data.proxyList["ftp"]);
+
+ mDlg->cbSameProxy->setChecked ( useSameProxy );
+
+ if ( useSameProxy )
+ {
+ mDlg->leHttps->setText ( mDlg->leHttp->text() );
+ mDlg->leFtp->setText ( mDlg->leHttp->text() );
+ mDlg->sbHttps->setValue( mDlg->sbHttp->value() );
+ mDlg->sbFtp->setValue( mDlg->sbHttp->value() );
+
+ sameProxy ( true );
+ }
+ else
+ {
+ // Set the HTTPS proxy...
+ if( !isValidURL( data.proxyList["https"], &url ) )
+ mDlg->sbHttps->setValue( DEFAULT_PROXY_PORT );
+ else
+ {
+ int port = url.port();
+ if ( port <= 0 )
+ port = DEFAULT_PROXY_PORT;
+
+ url.setPort( 0 );
+ mDlg->leHttps->setText( url.url() );
+ mDlg->sbHttps->setValue( port );
+ }
+
+ // Set the FTP proxy...
+ if( !isValidURL( data.proxyList["ftp"], &url ) )
+ mDlg->sbFtp->setValue( DEFAULT_PROXY_PORT );
+ else
+ {
+ int port = url.port();
+ if ( port <= 0 )
+ port = DEFAULT_PROXY_PORT;
+
+ url.setPort( 0 );
+ mDlg->leFtp->setText( url.url() );
+ mDlg->sbFtp->setValue( port );
+ }
+ }
+
+ QStringList::ConstIterator it = data.noProxyFor.begin();
+ for( ; it != data.noProxyFor.end(); ++it )
+ {
+ // "no_proxy" is a keyword used by the environment variable
+ // based configuration. We ignore it here as it is not applicable...
+ if ((*it).lower() != "no_proxy" && !(*it).isEmpty())
+ {
+ // Validate the NOPROXYFOR entries and use only hostnames if the entry is
+ // a valid or legitimate URL. NOTE: needed to catch manual manipulation
+ // of the proxy config files...
+ if( isValidURL( *it ) || ((*it).length() >= 3 && (*it).startsWith(".")) )
+ mDlg->lbExceptions->insertItem( *it );
+ }
+ }
+
+ mDlg->cbReverseProxy->setChecked( data.useReverseProxy );
+}
+
+const KProxyData KManualProxyDlg::data() const
+{
+ KProxyData data;
+
+ if (!m_bHasValidData)
+ return data;
+
+ data.proxyList["http"] = urlFromInput( mDlg->leHttp, mDlg->sbHttp );
+
+ if ( mDlg->cbSameProxy->isChecked () )
+ {
+ data.proxyList["https"] = data.proxyList["http"];
+ data.proxyList["ftp"] = data.proxyList["http"];
+ }
+ else
+ {
+ data.proxyList["https"] = urlFromInput( mDlg->leHttps, mDlg->sbHttps );
+ data.proxyList["ftp"] = urlFromInput( mDlg->leFtp, mDlg->sbFtp );
+ }
+
+ if ( mDlg->lbExceptions->count() )
+ {
+ QListBoxItem* item = mDlg->lbExceptions->firstItem();
+ for( ; item != 0L; item = item->next() )
+ data.noProxyFor << item->text();
+ }
+
+ data.type = KProtocolManager::ManualProxy;
+ data.useReverseProxy = mDlg->cbReverseProxy->isChecked();
+
+ return data;
+}
+
+void KManualProxyDlg::sameProxy( bool enable )
+{
+ mDlg->leHttps->setEnabled (!enable );
+ mDlg->leFtp->setEnabled (!enable );
+ mDlg->sbHttps->setEnabled (!enable );
+ mDlg->sbFtp->setEnabled (!enable );
+ mDlg->pbCopyDown->setEnabled( !enable );
+
+ if (enable)
+ {
+ mOldFtpText = mDlg->leFtp->text();
+ mOldHttpsText = mDlg->leHttps->text();
+
+ mOldFtpPort = mDlg->sbFtp->value();
+ mOldHttpsPort = mDlg->sbHttps->value();
+
+ int port = mDlg->sbHttp->value();
+ QString text = mDlg->leHttp->text();
+
+ mDlg->leFtp->setText (text);
+ mDlg->leHttps->setText (text);
+
+ mDlg->sbFtp->setValue (port);
+ mDlg->sbHttps->setValue (port);
+
+ if (mDlg->lbHttps->font().bold())
+ setHighLight( mDlg->lbHttps, false );
+
+ if (mDlg->lbFtp->font().bold())
+ setHighLight( mDlg->lbFtp, false );
+ }
+ else
+ {
+ mDlg->leFtp->setText (mOldFtpText);
+ mDlg->leHttps->setText (mOldHttpsText);
+
+ mDlg->sbFtp->setValue (mOldFtpPort);
+ mDlg->sbHttps->setValue (mOldHttpsPort);
+ }
+}
+
+bool KManualProxyDlg::validate()
+{
+ KURL filteredURL;
+ unsigned short count = 0;
+
+ if ( isValidURL( mDlg->leHttp->text(), &filteredURL ) )
+ {
+ mDlg->leHttp->setText( filteredURL.url() );
+ count++;
+ }
+ else
+ setHighLight( mDlg->lbHttp, true );
+
+ if ( !mDlg->cbSameProxy->isChecked () )
+ {
+ if ( isValidURL( mDlg->leHttps->text(), &filteredURL ) )
+ {
+ mDlg->leHttps->setText( filteredURL.url() );
+ count++;
+ }
+ else
+ setHighLight( mDlg->lbHttps, true );
+
+ if ( isValidURL( mDlg->leFtp->text(), &filteredURL ) )
+ {
+ mDlg->leFtp->setText( filteredURL.url() );
+ count++;
+ }
+ else
+ setHighLight( mDlg->lbFtp, true );
+ }
+
+ if ( count == 0 )
+ {
+ showErrorMsg( i18n("Invalid Proxy Setting"),
+ i18n("One or more of the specified proxy settings are "
+ "invalid. The incorrect entries are highlighted.") );
+ }
+
+ return (count > 0);
+}
+
+void KManualProxyDlg::textChanged(const QString& text)
+{
+ if (!mDlg->cbSameProxy->isChecked())
+ return;
+
+ mDlg->leFtp->setText( text );
+ mDlg->leHttps->setText( text );
+}
+
+void KManualProxyDlg::valueChanged(int value)
+{
+ if (!mDlg->cbSameProxy->isChecked())
+ return;
+
+ mDlg->sbFtp->setValue (value);
+ mDlg->sbHttps->setValue (value);
+ }
+
+void KManualProxyDlg::copyDown()
+{
+ int action = -1;
+
+ if ( !mDlg->leHttp->text().isEmpty() )
+ action += 4;
+ else if ( !mDlg->leHttps->text().isEmpty() )
+ action += 3;
+
+ switch ( action )
+ {
+ case 3:
+ mDlg->leHttps->setText( mDlg->leHttp->text() );
+ mDlg->sbHttps->setValue( mDlg->sbHttp->value() );
+ mDlg->leFtp->setText( mDlg->leHttp->text() );
+ mDlg->sbFtp->setValue( mDlg->sbHttp->value() );
+ break;
+ case 2:
+ mDlg->leFtp->setText( mDlg->leHttps->text() );
+ mDlg->sbFtp->setValue( mDlg->sbHttps->value() );
+ break;
+ case 1:
+ case 0:
+ default:
+ break;
+ }
+}
+
+void KManualProxyDlg::slotOk()
+{
+ //qDebug("m_bHasValidData: %s" , m_bHasValidData ? "true" : "false");
+ if ( m_bHasValidData || validate() )
+ {
+ KDialogBase::slotOk();
+ m_bHasValidData = true;
+ }
+}
+
+bool KManualProxyDlg::handleDuplicate( const QString& site )
+{
+ QListBoxItem* item = mDlg->lbExceptions->firstItem();
+ while ( item != 0 )
+ {
+ if ( item->text().findRev( site ) != -1 &&
+ item != mDlg->lbExceptions->selectedItem() )
+ {
+ QString msg = i18n("You entered a duplicate address. "
+ "Please try again.");
+ QString details = i18n("<qt><center><b>%1</b></center> "
+ "is already in the list.</qt>").arg(site);
+ KMessageBox::detailedError( this, msg, details, i18n("Duplicate Entry") );
+ return true;
+ }
+
+ item = item->next();
+ }
+ return false;
+}
+
+void KManualProxyDlg::newPressed()
+{
+ QString result;
+ if( getException(result, i18n("New Exception")) && !handleDuplicate(result) )
+ mDlg->lbExceptions->insertItem( result );
+}
+
+void KManualProxyDlg::changePressed()
+{
+ QString result;
+ if( getException( result, i18n("Change Exception"),
+ mDlg->lbExceptions->currentText() ) &&
+ !handleDuplicate( result ) )
+ mDlg->lbExceptions->changeItem( result, mDlg->lbExceptions->currentItem() );
+}
+
+void KManualProxyDlg::deletePressed()
+{
+ mDlg->lbExceptions->removeItem( mDlg->lbExceptions->currentItem() );
+ mDlg->lbExceptions->setSelected( mDlg->lbExceptions->currentItem(), true );
+ updateButtons();
+}
+
+void KManualProxyDlg::deleteAllPressed()
+{
+ mDlg->lbExceptions->clear();
+ updateButtons();
+}
+
+void KManualProxyDlg::updateButtons()
+{
+ bool hasItems = mDlg->lbExceptions->count() > 0;
+ bool itemSelected = (hasItems && mDlg->lbExceptions->selectedItem()!=0);
+
+ mDlg->pbDeleteAll->setEnabled( hasItems );
+ mDlg->pbDelete->setEnabled( itemSelected );
+ mDlg->pbChange->setEnabled( itemSelected );
+}
+
+QString KManualProxyDlg::urlFromInput(const KLineEdit* edit,
+ const QSpinBox* spin) const
+{
+ if (!edit)
+ return QString::null;
+
+ KURL u( edit->text() );
+
+ if (spin)
+ u.setPort( spin->value() );
+
+ return u.url();
+}
+
+bool KManualProxyDlg::isValidURL( const QString& _url, KURL* result ) const
+{
+ KURL url (_url);
+
+ QStringList filters;
+ filters << "kshorturifilter" << "localdomainurifilter";
+
+ // If the typed URL is malformed, and the filters cannot filter it
+ // then it must be an invalid entry.
+ if( !(url.isValid() || KURIFilter::self()->filterURI(url, filters)) &&
+ !url.hasHost() )
+ return false;
+
+ QString host (url.host());
+
+ // We only check for a relevant subset of characters that are
+ // not allowed in <authority> component of a URL.
+ if ( host.contains ('*') || host.contains (' ') || host.contains ('?') )
+ return false;
+
+ if ( result )
+ *result = url;
+
+ return true;
+}
+
+void KManualProxyDlg::showErrorMsg( const QString& caption,
+ const QString& message )
+{
+ QString cap( caption );
+ QString msg( message );
+
+ if ( cap.isNull() )
+ cap = i18n("Invalid Entry");
+
+ if ( msg.isNull() )
+ msg = i18n("The address you have entered is not valid.");
+
+ QString details = i18n("<qt>Make sure none of the addresses or URLs you "
+ "specified contain invalid or wildcard characters "
+ "such as spaces, asterisks (*), or question marks(?).<p>"
+ "<u>Examples of VALID entries:</u><br/>"
+ "<code>http://mycompany.com, 192.168.10.1, "
+ "mycompany.com, localhost, http://localhost</code><p>"
+ "<u>Examples of INVALID entries:</u><br/>"
+ "<code>http://my company.com, http:/mycompany,com "
+ "file:/localhost</code></qt>");
+
+ KMessageBox::detailedError( this, msg, details, cap );
+}
+
+bool KManualProxyDlg::getException ( QString& result,
+ const QString& caption,
+ const QString& value )
+{
+ QString label;
+
+ // Specify the appropriate message...
+ if ( mDlg->cbReverseProxy->isChecked() )
+ label = i18n("Enter the URL or address that should use the above proxy "
+ "settings:");
+ else
+ label = i18n("Enter the address or URL that should be excluded from "
+ "using the above proxy settings:");
+
+ QString whatsThis = i18n("<qt>Enter a valid address or url.<p>"
+ "<b><u>NOTE:</u></b> Wildcard matching such as "
+ "<code>*.kde.org</code> is not supported. If you want "
+ "to match any host in the <code>.kde.org</code> domain, "
+ "e.g. <code>printing.kde.org</code>, then simply enter "
+ "<code>.kde.org</code></qt>");
+
+ bool ok;
+ result = KInputDialog::text( caption, label, value, &ok, 0, 0, 0,
+ QString::null, whatsThis );
+
+ // If the user pressed cancel, do nothing...
+ if (!ok)
+ return false;
+
+ // If the typed URL is malformed, and the filters cannot filter it
+ // then it must be an invalid entry,
+ if( isValidURL(result) || (result.length() >= 3 && result.startsWith(".")))
+ return true;
+
+ showErrorMsg();
+ return false;
+}
+
+#include "kmanualproxydlg.moc"
diff --git a/kcontrol/kio/kmanualproxydlg.h b/kcontrol/kio/kmanualproxydlg.h
new file mode 100644
index 000000000..a21e3775c
--- /dev/null
+++ b/kcontrol/kio/kmanualproxydlg.h
@@ -0,0 +1,77 @@
+/*
+ kmanualproxydlg.h - Base dialog box for proxy configuration
+
+ Copyright (C) 2001-2004 Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 KMANUAL_PROXY_DIALOG_H
+#define KMANUAL_PROXY_DIALOG_H
+
+#include "kproxydlgbase.h"
+
+class QSpinBox;
+class KLineEdit;
+class ManualProxyDlgUI;
+
+class KManualProxyDlg : public KProxyDialogBase
+{
+ Q_OBJECT
+
+public:
+ KManualProxyDlg( QWidget* parent = 0, const char* name = 0 );
+ ~KManualProxyDlg() {};
+
+ virtual void setProxyData( const KProxyData &data );
+ virtual const KProxyData data() const;
+
+protected:
+ void init();
+ bool validate();
+
+protected slots:
+ virtual void slotOk();
+
+ void copyDown();
+ void sameProxy( bool );
+ void valueChanged (int value);
+ void textChanged (const QString&);
+
+ void newPressed();
+ void updateButtons();
+ void changePressed();
+ void deletePressed();
+ void deleteAllPressed();
+
+private:
+ QString urlFromInput( const KLineEdit* edit, const QSpinBox* spin ) const;
+ bool isValidURL( const QString&, KURL* = 0 ) const;
+ bool handleDuplicate( const QString& );
+ bool getException ( QString&, const QString&,
+ const QString& value = QString::null );
+ void showErrorMsg( const QString& caption = QString::null,
+ const QString& message = QString::null );
+
+private:
+ ManualProxyDlgUI* mDlg;
+
+ int mOldFtpPort;
+ int mOldHttpsPort;
+ QString mOldFtpText;
+ QString mOldHttpsText;
+};
+#endif
diff --git a/kcontrol/kio/kproxydlg.cpp b/kcontrol/kio/kproxydlg.cpp
new file mode 100644
index 000000000..c7f9d7d20
--- /dev/null
+++ b/kcontrol/kio/kproxydlg.cpp
@@ -0,0 +1,375 @@
+/*
+ kproxydlg.cpp - Proxy configuration dialog
+
+ Copyright (C) 2001- Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 <qlabel.h>
+#include <qlayout.h>
+#include <qregexp.h>
+#include <qcheckbox.h>
+#include <qwhatsthis.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+
+#include <klocale.h>
+#include <klineedit.h>
+#include <kmessagebox.h>
+
+#include "ksaveioconfig.h"
+#include "kenvvarproxydlg.h"
+#include "kmanualproxydlg.h"
+
+#include "socks.h"
+#include "kproxydlg.h"
+#include "kproxydlg_ui.h"
+
+KProxyOptions::KProxyOptions (QWidget* parent )
+ :KCModule (parent, "kcmkio")
+{
+ QVBoxLayout *layout = new QVBoxLayout(this);
+
+ mTab = new QTabWidget(this);
+ layout->addWidget(mTab);
+
+ mProxy = new KProxyDialog(mTab);
+ mSocks = new KSocksConfig(mTab);
+
+ mTab->addTab(mProxy, i18n("&Proxy"));
+ mTab->addTab(mSocks, i18n("&SOCKS"));
+
+ connect(mProxy, SIGNAL(changed(bool)), SIGNAL(changed(bool)));
+ connect(mSocks, SIGNAL(changed(bool)), SIGNAL(changed(bool)));
+ connect(mTab, SIGNAL(currentChanged(QWidget *)), SIGNAL(quickHelpChanged()));
+}
+
+KProxyOptions::~KProxyOptions()
+{
+}
+
+void KProxyOptions::load()
+{
+ mProxy->load();
+ mSocks->load();
+}
+
+void KProxyOptions::save()
+{
+ mProxy->save();
+ mSocks->save();
+}
+
+void KProxyOptions::defaults()
+{
+ mProxy->defaults();
+ mSocks->defaults();
+}
+
+QString KProxyOptions::quickHelp() const
+{
+ QWidget *w = mTab->currentPage();
+
+ if (w && w->inherits("KCModule"))
+ {
+ KCModule *m = static_cast<KCModule *>(w);
+ return m->quickHelp();
+ }
+
+ return QString::null;
+}
+
+
+KProxyDialog::KProxyDialog( QWidget* parent)
+ :KCModule( parent, "kcmkio" )
+{
+ QVBoxLayout* mainLayout = new QVBoxLayout( this, KDialog::marginHint(),
+ KDialog::spacingHint() );
+
+ mDlg = new KProxyDialogUI( this );
+ mainLayout->addWidget( mDlg );
+ mainLayout->addStretch();
+
+ // signals and slots connections
+ connect( mDlg->rbNoProxy, SIGNAL( toggled(bool) ),
+ SLOT( slotUseProxyChanged() ) );
+
+ connect( mDlg->rbAutoDiscover, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+ connect( mDlg->rbAutoScript, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+
+ connect( mDlg->rbPrompt, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+ connect( mDlg->rbPresetLogin, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+
+ connect( mDlg->cbPersConn, SIGNAL( toggled(bool) ),
+ SLOT( slotChanged() ) );
+
+ connect( mDlg->location, SIGNAL( textChanged(const QString&) ),
+ SLOT( slotChanged() ) );
+
+ connect( mDlg->pbEnvSetup, SIGNAL( clicked() ), SLOT( setupEnvProxy() ) );
+ connect( mDlg->pbManSetup, SIGNAL( clicked() ), SLOT( setupManProxy() ) );
+
+ load();
+}
+
+KProxyDialog::~KProxyDialog()
+{
+ delete mData;
+ mData = 0;
+}
+
+void KProxyDialog::load()
+{
+ mDefaultData = false;
+ mData = new KProxyData;
+
+ KProtocolManager proto;
+ bool useProxy = proto.useProxy();
+ mData->type = proto.proxyType();
+ mData->proxyList["http"] = proto.proxyFor( "http" );
+ mData->proxyList["https"] = proto.proxyFor( "https" );
+ mData->proxyList["ftp"] = proto.proxyFor( "ftp" );
+ mData->proxyList["script"] = proto.proxyConfigScript();
+ mData->useReverseProxy = proto.useReverseProxy();
+ mData->noProxyFor = QStringList::split( QRegExp("[',''\t'' ']"),
+ proto.noProxyForRaw() );
+
+ mDlg->gbAuth->setEnabled( useProxy );
+ mDlg->gbOptions->setEnabled( useProxy );
+
+ mDlg->cbPersConn->setChecked( proto.persistentProxyConnection() );
+
+ if ( !mData->proxyList["script"].isEmpty() )
+ mDlg->location->lineEdit()->setText( mData->proxyList["script"] );
+
+ switch ( mData->type )
+ {
+ case KProtocolManager::WPADProxy:
+ mDlg->rbAutoDiscover->setChecked( true );
+ break;
+ case KProtocolManager::PACProxy:
+ mDlg->rbAutoScript->setChecked( true );
+ break;
+ case KProtocolManager::ManualProxy:
+ mDlg->rbManual->setChecked( true );
+ break;
+ case KProtocolManager::EnvVarProxy:
+ mDlg->rbEnvVar->setChecked( true );
+ break;
+ case KProtocolManager::NoProxy:
+ default:
+ mDlg->rbNoProxy->setChecked( true );
+ break;
+ }
+
+ switch( proto.proxyAuthMode() )
+ {
+ case KProtocolManager::Prompt:
+ mDlg->rbPrompt->setChecked( true );
+ break;
+ case KProtocolManager::Automatic:
+ mDlg->rbPresetLogin->setChecked( true );
+ default:
+ break;
+ }
+}
+
+void KProxyDialog::save()
+{
+ bool updateProxyScout = false;
+
+ if (mDefaultData)
+ mData->reset ();
+
+ if ( mDlg->rbNoProxy->isChecked() )
+ {
+ KSaveIOConfig::setProxyType( KProtocolManager::NoProxy );
+ }
+ else
+ {
+ if ( mDlg->rbAutoDiscover->isChecked() )
+ {
+ KSaveIOConfig::setProxyType( KProtocolManager::WPADProxy );
+ updateProxyScout = true;
+ }
+ else if ( mDlg->rbAutoScript->isChecked() )
+ {
+ KURL u( mDlg->location->lineEdit()->text() );
+
+ if ( !u.isValid() )
+ {
+ showInvalidMessage( i18n("The address of the automatic proxy "
+ "configuration script is invalid. Please "
+ "correct this problem before proceeding. "
+ "Otherwise, your changes you will be "
+ "ignored.") );
+ return;
+ }
+ else
+ {
+ KSaveIOConfig::setProxyType( KProtocolManager::PACProxy );
+ mData->proxyList["script"] = u.url();
+ updateProxyScout = true;
+ }
+ }
+ else if ( mDlg->rbManual->isChecked() )
+ {
+ if ( mData->type != KProtocolManager::ManualProxy )
+ {
+ // Let's try a bit harder to determine if the previous
+ // proxy setting was indeed a manual proxy
+ KURL u ( mData->proxyList["http"] );
+ bool validProxy = (u.isValid() && u.port() != 0);
+ u= mData->proxyList["https"];
+ validProxy |= (u.isValid() && u.port() != 0);
+ u= mData->proxyList["ftp"];
+ validProxy |= (u.isValid() && u.port() != 0);
+
+ if (!validProxy)
+ {
+ showInvalidMessage();
+ return;
+ }
+
+ mData->type = KProtocolManager::ManualProxy;
+ }
+
+ KSaveIOConfig::setProxyType( KProtocolManager::ManualProxy );
+ }
+ else if ( mDlg->rbEnvVar->isChecked() )
+ {
+ if ( mData->type != KProtocolManager::EnvVarProxy )
+ {
+ showInvalidMessage();
+ return;
+ }
+
+ KSaveIOConfig::setProxyType( KProtocolManager::EnvVarProxy );
+ }
+
+ if ( mDlg->rbPrompt->isChecked() )
+ KSaveIOConfig::setProxyAuthMode( KProtocolManager::Prompt );
+ else if ( mDlg->rbPresetLogin->isChecked() )
+ KSaveIOConfig::setProxyAuthMode( KProtocolManager::Automatic );
+ }
+
+ KSaveIOConfig::setPersistentProxyConnection( mDlg->cbPersConn->isChecked() );
+
+ // Save the common proxy setting...
+ KSaveIOConfig::setProxyFor( "ftp", mData->proxyList["ftp"] );
+ KSaveIOConfig::setProxyFor( "http", mData->proxyList["http"] );
+ KSaveIOConfig::setProxyFor( "https", mData->proxyList["https"] );
+
+ KSaveIOConfig::setProxyConfigScript( mData->proxyList["script"] );
+ KSaveIOConfig::setUseReverseProxy( mData->useReverseProxy );
+ KSaveIOConfig::setNoProxyFor( mData->noProxyFor.join(",") );
+
+
+ KSaveIOConfig::updateRunningIOSlaves (this);
+ if ( updateProxyScout )
+ KSaveIOConfig::updateProxyScout( this );
+
+ emit changed( false );
+}
+
+void KProxyDialog::defaults()
+{
+ mDefaultData = true;
+ mDlg->rbNoProxy->setChecked( true );
+ mDlg->location->lineEdit()->clear();
+ mDlg->cbPersConn->setChecked( false );
+ emit changed( true );
+}
+
+void KProxyDialog::setupManProxy()
+{
+ KManualProxyDlg dlgManual( this );
+
+ dlgManual.setProxyData( *mData );
+
+ if ( dlgManual.exec() == QDialog::Accepted )
+ {
+ *mData = dlgManual.data();
+ mDlg->rbManual->setChecked(true);
+ emit changed( true );
+ }
+}
+
+void KProxyDialog::setupEnvProxy()
+{
+ KEnvVarProxyDlg dlgEnv( this );
+
+ dlgEnv.setProxyData( *mData );
+
+ if ( dlgEnv.exec() == QDialog::Accepted )
+ {
+ *mData = dlgEnv.data();
+ mDlg->rbEnvVar->setChecked(true);
+ emit changed( true );
+ }
+}
+
+void KProxyDialog::slotChanged()
+{
+ mDefaultData = false;
+ emit changed( true );
+}
+
+void KProxyDialog::slotUseProxyChanged()
+{
+ mDefaultData = false;
+ bool useProxy = !(mDlg->rbNoProxy->isChecked());
+ mDlg->gbAuth->setEnabled(useProxy);
+ mDlg->gbOptions->setEnabled(useProxy);
+ emit changed( true );
+}
+
+QString KProxyDialog::quickHelp() const
+{
+ return i18n( "<h1>Proxy</h1>"
+ "<p>A proxy server is an intermediate program that sits between "
+ "your machine and the Internet and provides services such as "
+ "web page caching and/or filtering.</p>"
+ "<p>Caching proxy servers give you faster access to sites you have "
+ "already visited by locally storing or caching the content of those "
+ "pages; filtering proxy servers, on the other hand, provide the "
+ "ability to block out requests for ads, spam, or anything else you "
+ "want to block.</p>"
+ "<p><u>Note:</u> Some proxy servers provide both services.</p>" );
+}
+
+void KProxyDialog::showInvalidMessage( const QString& _msg )
+{
+ QString msg;
+
+ if( !_msg.isEmpty() )
+ msg = _msg;
+ else
+ msg = i18n( "<qt>The proxy settings you specified are invalid."
+ "<p>Please click on the <b>Setup...</b> "
+ "button and correct the problem before proceeding; "
+ "otherwise your changes will be ignored.</qt>" );
+
+ KMessageBox::error( this, msg, i18n("Invalid Proxy Setup") );
+}
+
+#include "kproxydlg.moc"
diff --git a/kcontrol/kio/kproxydlg.h b/kcontrol/kio/kproxydlg.h
new file mode 100644
index 000000000..bbac5641d
--- /dev/null
+++ b/kcontrol/kio/kproxydlg.h
@@ -0,0 +1,82 @@
+/*
+ kproxydlg.h - Proxy configuration dialog
+
+ Copyright (C) 2001- Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 _KPROXYDIALOG_H
+#define _KPROXYDIALOG_H
+
+#include <qstring.h>
+
+#include <kcmodule.h>
+
+class QTabWidget;
+
+class KProxyData;
+class KProxyDialogUI;
+
+class KProxyOptions : public KCModule
+{
+ Q_OBJECT
+
+public:
+ KProxyOptions( QWidget* parent = 0 );
+ ~KProxyOptions();
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ virtual QString quickHelp() const;
+
+private:
+ KCModule* mProxy;
+ KCModule* mSocks;
+ QTabWidget* mTab;
+};
+
+class KProxyDialog : public KCModule
+{
+ Q_OBJECT
+
+public:
+ KProxyDialog( QWidget* parent = 0 );
+ ~KProxyDialog();
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ QString quickHelp() const;
+
+private slots:
+ void slotChanged();
+ void slotUseProxyChanged();
+
+ void setupManProxy();
+ void setupEnvProxy();
+
+private:
+ void showInvalidMessage( const QString& _msg = QString::null );
+
+private:
+ KProxyDialogUI* mDlg;
+ KProxyData* mData;
+ bool mDefaultData;
+};
+
+#endif
diff --git a/kcontrol/kio/kproxydlg_ui.ui b/kcontrol/kio/kproxydlg_ui.ui
new file mode 100644
index 000000000..1a6b5d6e2
--- /dev/null
+++ b/kcontrol/kio/kproxydlg_ui.ui
@@ -0,0 +1,441 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>KProxyDialogUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>ProxyDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>418</width>
+ <height>420</height>
+ </rect>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Setup proxy configuration.
+&lt;p&gt;
+A proxy server is an intermediate machine that sits between your computer and the Internet and provides services such as web page caching and filtering. Caching proxy servers give you faster access to web sites you have already visited by locally storing or caching those pages; filtering proxy servers usually provide the ability to block out requests for ads, spam, or anything else you want to block.
+&lt;p&gt;
+If you are uncertain whether or not you need to use a proxy server to connect to the Internet, consult your Internet service provider's setup guide or your system administrator.
+&lt;/qt&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>gbConfigure</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbNoProxy</cstring>
+ </property>
+ <property name="text">
+ <string>Connect to the &amp;Internet directly</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Connect to the Internet directly.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbAutoDiscover</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>A&amp;utomatically detect proxy configuration</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Automatically detect and configure the proxy settings.&lt;p&gt;
+Automatic detection is performed using the &lt;b&gt;Web Proxy Auto-Discovery Protocol (WPAD)&lt;/b&gt;.&lt;p&gt;
+&lt;b&gt;NOTE:&lt;/b&gt; This option might not work properly or not work at all in some UNIX/Linux distributions. If you encounter a problem when using this option, please check the FAQ section at http://konqueror.kde.org.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbAutoScript</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>U&amp;se the following proxy configuration URL</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Use the specified proxy script URL to configure the proxy settings.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KURLRequester">
+ <property name="name">
+ <cstring>location</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the address for the proxy configuration script.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbEnvVar</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Use preset proxy environment &amp;variables</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Use environment variables to configure the proxy settings.&lt;p&gt;
+Environment variables such as &lt;b&gt;HTTP_PROXY&lt;/b&gt; and &lt;b&gt;NO_PROXY&lt;/b&gt; are usually used in multi-user UNIX installations, where both graphical and non-graphical applications need to share the same proxy configuration information.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbEnvSetup</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Setup...</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Show the proxy environment variable configuration dialog.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbManual</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Manually specify the proxy settings</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Manually enter proxy server configuration information.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbManSetup</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Setup...</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Show the manual proxy configuration dialog.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>gbAuth</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>Authori&amp;zation</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbPrompt</cstring>
+ </property>
+ <property name="text">
+ <string>Prompt as &amp;needed</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Prompt for login information whenever it is required.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>rbPresetLogin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Use the following lo&amp;gin information.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Use the information below to login into proxy servers as needed.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KLineEdit" row="1" column="2">
+ <property name="name">
+ <cstring>lePassword</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="echoMode">
+ <enum>Password</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Login password.</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="2">
+ <property name="name">
+ <cstring>leUsername</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Login name.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>lbPassword</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Password:</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Login password.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>lbUsername</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Username:</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Login name.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>gbOptions</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>O&amp;ptions</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbPersConn</cstring>
+ </property>
+ <property name="text">
+ <string>Use persistent connections to proxy</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Use persistent proxy connection.&lt;p&gt;
+Although a persistent proxy connection is faster, note that it only works correctly with proxies that are fully HTTP 1.1 compliant. Do &lt;b&gt;not&lt;/b&gt; use this option in combination with non-HTTP 1.1 compliant proxy servers such as JunkBuster and WWWOfle.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>rbPresetLogin</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>leUsername</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>rbPresetLogin</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>lbUsername</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>rbPresetLogin</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>lePassword</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>rbPresetLogin</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>lbPassword</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>rbAutoScript</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>location</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/kcontrol/kio/kproxydlgbase.cpp b/kcontrol/kio/kproxydlgbase.cpp
new file mode 100644
index 000000000..c901037e3
--- /dev/null
+++ b/kcontrol/kio/kproxydlgbase.cpp
@@ -0,0 +1,74 @@
+ /*
+ kproxydlgbase.h - Base dialog box for proxy configuration
+
+ Copyright (C) 2001- Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 "kproxydlgbase.h"
+
+KProxyData::KProxyData()
+{
+ init ();
+}
+
+KProxyData::KProxyData(const KProxyData &data)
+{
+ (*this) = data;
+}
+
+KProxyData& KProxyData::operator=( const KProxyData &data )
+{
+ useReverseProxy = data.useReverseProxy;
+ showEnvVarValue = data.showEnvVarValue;
+ noProxyFor = data.noProxyFor;
+ proxyList = data.proxyList;
+ type = data.type;
+
+ return (*this);
+}
+
+void KProxyData::reset()
+{
+ init();
+}
+
+void KProxyData::init()
+{
+ proxyList.clear();
+ noProxyFor.clear();
+ useReverseProxy = false;
+ showEnvVarValue = false;
+}
+
+
+KProxyDialogBase::KProxyDialogBase( QWidget* parent, const char* name,
+ bool modal, const QString &caption )
+ :KDialogBase( parent, name, modal, caption, Ok|Cancel, Ok, true )
+{
+ m_bHasValidData = false;
+}
+
+void KProxyDialogBase::setHighLight (QWidget* widget, bool highlight)
+{
+ if (!widget)
+ return;
+
+ QFont f = widget->font();
+ f.setBold( highlight );
+ widget->setFont( f );
+}
diff --git a/kcontrol/kio/kproxydlgbase.h b/kcontrol/kio/kproxydlgbase.h
new file mode 100644
index 000000000..7c39f31c0
--- /dev/null
+++ b/kcontrol/kio/kproxydlgbase.h
@@ -0,0 +1,68 @@
+/*
+ kproxydlgbase.h - Base dialog box for proxy configuration
+
+ Copyright (C) 2001- Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License (GPL) version 2 as published by the Free Software
+ Foundation.
+
+ 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 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 KPROXY_DIALOG_BASE_H
+#define KPROXY_DIALOG_BASE_H
+
+#include <qmap.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include <kdialogbase.h>
+#include <kprotocolmanager.h>
+
+class KProxyData
+{
+public:
+ KProxyData();
+ KProxyData( const KProxyData &data );
+
+ void reset ();
+ KProxyData& operator=( const KProxyData &data );
+
+ bool useReverseProxy;
+ bool showEnvVarValue;
+ QStringList noProxyFor;
+ KProtocolManager::ProxyType type;
+ QMap<QString, QString> proxyList;
+
+private:
+ void init();
+};
+
+
+class KProxyDialogBase : public KDialogBase
+{
+public:
+ KProxyDialogBase( QWidget* parent = 0, const char* name = 0,
+ bool modal = false, const QString &caption = QString::null);
+
+ virtual ~KProxyDialogBase() {};
+
+ virtual const KProxyData data() const=0;
+
+ virtual void setProxyData (const KProxyData&)=0;
+
+protected:
+ void setHighLight (QWidget* widget = 0, bool highlight = false);
+ bool m_bHasValidData;
+};
+#endif
diff --git a/kcontrol/kio/ksaveioconfig.cpp b/kcontrol/kio/ksaveioconfig.cpp
new file mode 100644
index 000000000..a251c0aed
--- /dev/null
+++ b/kcontrol/kio/ksaveioconfig.cpp
@@ -0,0 +1,260 @@
+/*
+ Copyright (C) 2001 Dawit Alemayehu <adawit@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 <dcopref.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kstaticdeleter.h>
+#include <kio/ioslave_defaults.h>
+
+#include "ksaveioconfig.h"
+
+class KSaveIOConfigPrivate
+{
+public:
+ KSaveIOConfigPrivate ();
+ ~KSaveIOConfigPrivate ();
+
+ KConfig* config;
+ KConfig* http_config;
+};
+
+static KSaveIOConfigPrivate *ksiocpref = 0;
+static KStaticDeleter<KSaveIOConfigPrivate> ksiocp;
+
+KSaveIOConfigPrivate::KSaveIOConfigPrivate (): config(0), http_config(0)
+{
+ ksiocp.setObject (ksiocpref, this);
+}
+
+KSaveIOConfigPrivate::~KSaveIOConfigPrivate ()
+{
+ delete config;
+}
+
+KSaveIOConfigPrivate* KSaveIOConfig::d = 0;
+
+KConfig* KSaveIOConfig::config()
+{
+ if (!d)
+ d = new KSaveIOConfigPrivate;
+
+ if (!d->config)
+ d->config = new KConfig("kioslaverc", false, false);
+
+ return d->config;
+}
+
+KConfig* KSaveIOConfig::http_config()
+{
+ if (!d)
+ d = new KSaveIOConfigPrivate;
+
+ if (!d->http_config)
+ d->http_config = new KConfig("kio_httprc", false, false);
+
+ return d->http_config;
+}
+
+void KSaveIOConfig::reparseConfiguration ()
+{
+ delete d->config;
+ d->config = 0;
+}
+
+void KSaveIOConfig::setReadTimeout( int _timeout )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry("ReadTimeout", QMAX(MIN_TIMEOUT_VALUE,_timeout));
+ cfg->sync();
+}
+
+void KSaveIOConfig::setConnectTimeout( int _timeout )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry("ConnectTimeout", QMAX(MIN_TIMEOUT_VALUE,_timeout));
+ cfg->sync();
+}
+
+void KSaveIOConfig::setProxyConnectTimeout( int _timeout )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry("ProxyConnectTimeout", QMAX(MIN_TIMEOUT_VALUE,_timeout));
+ cfg->sync();
+}
+
+void KSaveIOConfig::setResponseTimeout( int _timeout )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry("ResponseTimeout", QMAX(MIN_TIMEOUT_VALUE,_timeout));
+ cfg->sync();
+}
+
+
+void KSaveIOConfig::setMarkPartial( bool _mode )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry( "MarkPartial", _mode );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setMinimumKeepSize( int _size )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry( "MinimumKeepSize", _size );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setAutoResume( bool _mode )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry( "AutoResume", _mode );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setUseCache( bool _mode )
+{
+ KConfig* cfg = http_config ();
+ cfg->writeEntry( "UseCache", _mode );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setMaxCacheSize( int cache_size )
+{
+ KConfig* cfg = http_config ();
+ cfg->writeEntry( "MaxCacheSize", cache_size );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setCacheControl(KIO::CacheControl policy)
+{
+ KConfig* cfg = http_config ();
+ QString tmp = KIO::getCacheControlString(policy);
+ cfg->writeEntry("cache", tmp);
+ cfg->sync();
+}
+
+void KSaveIOConfig::setMaxCacheAge( int cache_age )
+{
+ KConfig* cfg = http_config ();
+ cfg->writeEntry( "MaxCacheAge", cache_age );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setUseReverseProxy( bool mode )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( "Proxy Settings" );
+ cfg->writeEntry("ReversedException", mode);
+ cfg->sync();
+}
+
+void KSaveIOConfig::setProxyType(KProtocolManager::ProxyType type)
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( "Proxy Settings" );
+ cfg->writeEntry( "ProxyType", static_cast<int>(type) );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setProxyAuthMode(KProtocolManager::ProxyAuthMode mode)
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( "Proxy Settings" );
+ cfg->writeEntry( "AuthMode", static_cast<int>(mode) );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setNoProxyFor( const QString& _noproxy )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( "Proxy Settings" );
+ cfg->writeEntry( "NoProxyFor", _noproxy );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setProxyFor( const QString& protocol,
+ const QString& _proxy )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( "Proxy Settings" );
+ cfg->writeEntry( protocol.lower() + "Proxy", _proxy );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setProxyConfigScript( const QString& _url )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( "Proxy Settings" );
+ cfg->writeEntry( "Proxy Config Script", _url );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setPersistentProxyConnection( bool enable )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry( "PersistentProxyConnection", enable );
+ cfg->sync();
+}
+
+void KSaveIOConfig::setPersistentConnections( bool enable )
+{
+ KConfig* cfg = config ();
+ cfg->setGroup( QString::null );
+ cfg->writeEntry( "PersistentConnections", enable );
+ cfg->sync();
+}
+
+void KSaveIOConfig::updateRunningIOSlaves (QWidget *parent)
+{
+ // Inform all running io-slaves about the changes...
+ // if we cannot update, ioslaves inform the end user...
+ if (!DCOPRef("*", "KIO::Scheduler").send("reparseSlaveConfiguration", QString::null))
+ {
+ QString caption = i18n("Update Failed");
+ QString message = i18n("You have to restart the running applications "
+ "for these changes to take effect.");
+ KMessageBox::information (parent, message, caption);
+ return;
+ }
+}
+
+void KSaveIOConfig::updateProxyScout( QWidget * parent )
+{
+ // Inform the proxyscout kded module about changes
+ // if we cannot update, ioslaves inform the end user...
+ if (!DCOPRef("kded", "proxyscout").send("reset"))
+ {
+ QString caption = i18n("Update Failed");
+ QString message = i18n("You have to restart KDE "
+ "for these changes to take effect.");
+ KMessageBox::information (parent, message, caption);
+ return;
+ }
+}
+
diff --git a/kcontrol/kio/ksaveioconfig.h b/kcontrol/kio/ksaveioconfig.h
new file mode 100644
index 000000000..3a6528ed2
--- /dev/null
+++ b/kcontrol/kio/ksaveioconfig.h
@@ -0,0 +1,96 @@
+/*
+ Copyright (C) 2001 Dawit Alemayehu <adawit@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 KSAVEIO_CONFIG_H_
+#define KSAVEIO_CONFIG_H_
+
+#include <kprotocolmanager.h>
+
+class QWidget;
+class KSaveIOConfigPrivate;
+
+class KSaveIOConfig
+{
+public:
+
+ /* Reload config file (kioslaverc) */
+ static void reparseConfiguration();
+
+
+ /** Timeout Settings */
+ static void setReadTimeout( int );
+
+ static void setConnectTimeout( int );
+
+ static void setProxyConnectTimeout( int );
+
+ static void setResponseTimeout( int );
+
+
+ /** Cache Settings */
+ static void setMaxCacheAge( int );
+
+ static void setUseCache( bool );
+
+ static void setMaxCacheSize( int );
+
+ static void setCacheControl( KIO::CacheControl );
+
+
+ /** Proxy Settings */
+ static void setUseReverseProxy( bool );
+
+ static void setProxyType( KProtocolManager::ProxyType );
+
+ static void setProxyAuthMode( KProtocolManager::ProxyAuthMode );
+
+ static void setProxyConfigScript( const QString& );
+
+ static void setProxyFor( const QString&, const QString& );
+
+ static void setNoProxyFor( const QString& );
+
+
+ /** Miscelaneous Settings */
+ static void setMarkPartial( bool );
+
+ static void setMinimumKeepSize( int );
+
+ static void setAutoResume( bool );
+
+ static void setPersistentConnections( bool );
+
+ static void setPersistentProxyConnection( bool );
+
+
+ /** Update all running io-slaves */
+ static void updateRunningIOSlaves (QWidget * parent = 0L);
+
+ /** Update proxy scout */
+ static void updateProxyScout( QWidget * parent = 0L );
+
+protected:
+ static KConfig* config ();
+ static KConfig* http_config ();
+ KSaveIOConfig ();
+
+private:
+ static KSaveIOConfigPrivate* d;
+};
+#endif
diff --git a/kcontrol/kio/lanbrowser.desktop b/kcontrol/kio/lanbrowser.desktop
new file mode 100644
index 000000000..5d3965667
--- /dev/null
+++ b/kcontrol/kio/lanbrowser.desktop
@@ -0,0 +1,226 @@
+[Desktop Entry]
+Type=Application
+Icon=samba
+Exec=kcmshell lanbrowser
+
+
+X-KDE-Library=kio
+X-KDE-FactoryName=lanbrowser
+
+Name=Local Network Browsing
+Name[af]=Plaaslike Netwerk Blaaiïng
+Name[ar]=تصفح الشبكة المحلية
+Name[az]=Yerli Şəbəkə
+Name[be]=Прагляд мясцовай сеткі
+Name[bg]=Локална мрежа
+Name[bn]=স্থানীয় নেটওয়ার্ক ব্রাউজিং
+Name[br]=Furchal ar rouedad lec'hel
+Name[bs]=Pregledanje lokalne mreže
+Name[ca]=Navegació per la xarxa local
+Name[cs]=Prohlížení lokální sítě
+Name[csb]=Przezéranié môlowi sécë
+Name[cy]=Pori Rhwydwaith Lleol
+Name[da]=Lokal netværkssøgning
+Name[de]=Netzwerk-Browser
+Name[el]=Τοπική περιήγηση δικτύου
+Name[eo]=Traserĉado de la loka reto
+Name[es]=Navegación por la red local
+Name[et]=Kohtvõrgu lehitsemine
+Name[eu]=Sare lokaleko arakaketa
+Name[fa]=مرور شبکۀ محلی
+Name[fi]=Paikallisverkon selaus
+Name[fr]=Navigation dans le réseau local
+Name[fy]=Lokaal netwurk
+Name[ga]=Brabhsáil an Líonra Logánta
+Name[gl]=Exploración da Rede Local
+Name[he]=עיון ברשת המקומית
+Name[hi]=स्थानीय नेटवर्क ब्राउजिंग
+Name[hr]=Pregledavanje lokalne mreže
+Name[hu]=Hálózatböngészés
+Name[is]=Staðarnetsflakk
+Name[it]=Navigazione rete locale
+Name[ja]=ローカルネットワーク参照
+Name[ka]=ლოკალური ქსელის მიმოხილვა
+Name[kk]=Жергілікті желіні шолу
+Name[km]=ការ​រុករក​បណ្ដាញ​មូលដ្ឋាន
+Name[ko]=로컬 네트워크 탐색
+Name[lo]=ເຄືອຂ່າຍພາຍໃນ
+Name[lt]=Vietinio tinklo naršymas
+Name[lv]=Lokālā Tīkla pārlūkošana
+Name[mk]=Прелистување на локалната мрежа
+Name[mn]=Дотоод Сүлжээ-Хөтөч
+Name[ms]=Pelayaran Rangkaian Setempat
+Name[mt]=Browsing tan-Network Lokali
+Name[nb]=Lokalt nettverk
+Name[nds]=Lokaal Nettwarkkieker
+Name[ne]=स्थानीय सञ्जाल ब्राउजिङ
+Name[nl]=Lokaal netwerk
+Name[nn]=Lokalt nettverk
+Name[nso]=Boinyakisi bja Kgokagano ya Selegae
+Name[pa]=ਸਥਾਨਕ ਨੈੱਟਵਰਕ ਝਲਕਾਰਾ
+Name[pl]=Przeglądanie sieci lokalnej
+Name[pt]=Navegação na Rede Local
+Name[pt_BR]=Navegação em Rede Local
+Name[ro]=Răsfoire rețea locală
+Name[ru]=Обзор локальной сети
+Name[rw]=Gucukumbura Urusobemiyoboro rwa Hafi
+Name[se]=Báikkálaš fierbmebláđđen
+Name[sk]=Prehliadanie lokálnej siete
+Name[sl]=Brskanje po krajevnem omrežju
+Name[sr]=Прегледање локалне мреже
+Name[sr@Latn]=Pregledanje lokalne mreže
+Name[sv]=Lokal nätverksbläddring
+Name[ta]=உள் வலைதல உலாவுதல்
+Name[te]=స్థానిక నెట్వర్క్ బ్రౌజింగ్
+Name[tg]=Обзори шабакаи локалӣ
+Name[th]=เรียกดูเครือข่ายท้องถิ่น
+Name[tr]=Yerel Ağ Tarama
+Name[tt]=Cirle Çeltärne Küzläw
+Name[uk]=Перегляд локальної мережі
+Name[uz]=Lokal tarmoqni koʻrish
+Name[uz@cyrillic]=Локал тармоқни кўриш
+Name[ven]=Burausini ya vhukwamani ha hefhano
+Name[vi]=Duyệt mạng nội bộ
+Name[wa]=Naiviaedje del locåle rantoele
+Name[xh]=Ukhangelo Lomsebenzi womnatha Wobulali
+Name[zh_CN]=局域网浏览
+Name[zh_TW]=區域網路瀏覽
+Name[zu]=Ukucinga oxhumanweni oluseduze
+
+Comment=Setup lisa, reslisa and the ioslaves
+Comment[af]=Stel lisa, reslisa en die ioslaves op
+Comment[az]=Lisa, reslisa və ioslaves-i quraşdır
+Comment[be]=Настаўленні lisa, reslisa і ioslaves
+Comment[bg]=Настройване на lisa, reslisa и ioslaves
+Comment[bn]=lisa, reslisa এবং ioslaves সেট-আপ
+Comment[br]=Kefluniadur lisa, reslisa and skalvoù IO
+Comment[bs]=Podesite lisa, reslisa i ioslaves
+Comment[ca]=Arranja lisa, reslisa i els ioslaves
+Comment[cs]=Nastavení Lisa, ResLisa a pomocných zařízení
+Comment[csb]=Ùstôw lisa, reslisa ë procedurów wé/wi
+Comment[cy]=Gosodiad lisa,reslisa a'r gweision-io
+Comment[da]=Opsætning af lisa, reslisa og ioslaverne
+Comment[de]=Einrichtung von LISa, resLISa und Ein-/Ausgabemodulen
+Comment[el]=Ρύθμιση του lisa, reslisa και των ioslaves
+Comment[eo]=Agordo de Lisa, Reslisa kaj la Enel-sklavoj
+Comment[es]=Configuración de lisa, reslisa y los ioslaves
+Comment[et]=Lisa, reslisa ja KIO moodulite seadistamine
+Comment[eu]=Konfiguratu lisa, reslisa eta ioslave-ak
+Comment[fa]=برپایی lisa، reslisa و ioslaves
+Comment[fi]=Lisan, Reslisan ja KIO-palveluiden asetukset
+Comment[fr]=Configuration de LISa, ResLISa et des modules d'entrées-sorties
+Comment[fy]=Lisa, reslisa en de ioslaves ynstelle
+Comment[ga]=Socraigh lisa, reslisa agus ioslaves
+Comment[gl]=Configurar lisa, reslisa e os escravos I/O
+Comment[he]=שינוי הגדרות reslisa ,lisa והפרוטוקולים
+Comment[hi]=लिसा,रेसलिसा तथा आईओस्लेव्स सेटअप करें
+Comment[hr]=Postavke za module lisa, reslisu i ioslaves
+Comment[hu]=A Lisa, a ResLisa és a KDE protokollok beállításai
+Comment[is]=Stilla lisa, reslisa og I/Ú-þrælana
+Comment[it]=Imposta lisa, reslisa e gli ioslave
+Comment[ja]=lisa, reslisa, ioslave の設定
+Comment[ka]=lisa, reslisa და ioslaves -ს კონფიგურაცია
+Comment[kk]=lisa, reslisa және the ioslaves дегендерді орнату
+Comment[km]=ដំឡើង lisa, reslisa និង ioslaves
+Comment[ko]=lisa, reslisa, IO 슬레이브 설정
+Comment[lt]=Lisa, reslisa ir ioslaves nustatymas
+Comment[lv]=Uzstāda lisa, reslisa un iovergus
+Comment[mk]=Поставете ги lisa, reslisa и ioslaves
+Comment[mn]=LISa, resLISa ба Оролт/Гаралт-модулын тохируулга
+Comment[mt]=Issettja lisa, reslisa u l-ioslaves
+Comment[nb]=Oppsett av lisa, reslisa og i/u-slavene
+Comment[nds]=Lisa, reslisa un de In-/Utgaavdeensten instellen
+Comment[ne]=लिसा, रेसलिसा र इओस्लेभ सेटअप गर्नुहोस्
+Comment[nl]=Lisa, reslisa en de ioslaves instellen
+Comment[nn]=Oppsett av lisa, reslisa og i/u-slavane
+Comment[nso]=Beakanya lisa, reslisa le ioslaves
+Comment[pa]=lisa, reslisa ਤੇ ioslaves ਸੈੱਟਅੱਪ
+Comment[pl]=Ustawienie lisa, reslisa i procedur we/wy
+Comment[pt]=Configurar o lisa, o reslisa e os seus ioslaves
+Comment[pt_BR]=Configura lisa, reslisa e os escravos
+Comment[ro]=Setează lisa, reslisa și dispozitivele I/O
+Comment[ru]=Настройка lisa, reslisa и ioslaves
+Comment[rw]=Kugena imiterere ya lisa, reslisa na ioslaves
+Comment[se]=Heivet lisa,reslisa ja s/o-šlávaid
+Comment[sk]=Nastavenie lisa, reslisa a IO klientov
+Comment[sl]=Nastavitve lisa, reslisa in ioslave
+Comment[sr]=Подешавање lisa-e, reslisa-e, и ioslave-ова
+Comment[sr@Latn]=Podešavanje lisa-e, reslisa-e, i ioslave-ova
+Comment[sv]=Ställ in lisa, reslisa och I/O-slavarna
+Comment[ta]= லிசா, ரெஸ்லிசா மற்றும் ஐஓஸ்லேவ்ஸ் அமைப்பு
+Comment[tg]=Танзимоти lisa, reslisa ва ioslaves
+Comment[th]=ตั้งค่า lisa, reslisa และ ioslaves
+Comment[tr]=lisa, reslisa ve ioslaves kurulumu
+Comment[tt]=lisa, reslisa, ioslaves caylawları
+Comment[uk]=Встановлення lisa,reslisa та ioslaves
+Comment[uz]=Lisa, reslisa va ioslave xizmatlarni moslash
+Comment[uz@cyrillic]=Lisa, reslisa ва ioslave хизматларни мослаш
+Comment[ven]=Vhekanyani lisa,reslisa na ioslaves
+Comment[vi]=Cài đặt lisa,reslisa và các ioslave
+Comment[wa]=Apontiaedje di lisa, reslisa et les ioslaves
+Comment[xh]=Cwangcisa i lisa, reslisa ne ioslaves
+Comment[zh_CN]=设置 lisa、reslisa 和 ioslaves
+Comment[zu]=lungiselela i-lisa, i-reslisa ne-ioslaves
+
+Keywords=samba,smb,windows,network
+Keywords[az]=xml,rpc,daemon,demon,port,qapı,network,şəbəkə,samba,smb,windows
+Keywords[be]=Сетка,Навакольнае асяроддзе,samba,smb,windows,network
+Keywords[bg]=самба, мрежа, локална, преглед, връзка, samba, smb, windows, network
+Keywords[br]=samba,smb,prenester,rouedad
+Keywords[bs]=samba,smb,windows,network,mreža
+Keywords[ca]=samba,smb,windows,xarxa
+Keywords[cs]=samba,smb,windows,síť
+Keywords[csb]=samba,smb,windows,séc
+Keywords[cy]=samba,smb,windows, rhwydwaith
+Keywords[da]=samba,smb,windows,netværk
+Keywords[de]=samba,smb,windows,netzwerk
+Keywords[el]=samba,smb,windows,δίκτυο
+Keywords[eo]=samba,smb,fenestro,windows,reto
+Keywords[es]=samba,smb,windows,red
+Keywords[et]=samba,smb,windows,võrk
+Keywords[eu]=samba,smb,windows,sarea
+Keywords[fa]=samba، smb، پنجره‌ها، شبکه
+Keywords[fi]=samba,smb,windows,verkko
+Keywords[fr]=samba,smb,windows,réseau
+Keywords[fy]=samba,smb,windows,netwurk
+Keywords[ga]=samba,smb,windows,líonra
+Keywords[gl]=samba,smb,windows,rede
+Keywords[he]=סמבה,smb,חלונות,רשת, samba,windows,network
+Keywords[hi]=साम्बा,एसएमबी,विंडोज़,नेटवर्क
+Keywords[hr]=samba,smb,windows,network,mreža
+Keywords[hu]=Samba,smb,Windows,hálózat
+Keywords[is]=samba,smb,windows,network,net
+Keywords[it]=samba,smb,windows,rete
+Keywords[ja]=samba,smb,ウィンドウズ,ネットワーク
+Keywords[km]=samba,smb,windows,បណ្ដាញ
+Keywords[lt]=samba,smb,windows,network,tinklas
+Keywords[lv]=samba,smb,windows,tīkls
+Keywords[mk]=samba,smb,windows,network,мрежа,заеднички,Виндоус
+Keywords[nb]=samba,smb,windows,nettverk
+Keywords[nds]=samba,smb,Windows,Nettwark
+Keywords[ne]=साम्बा, smb, सञ्झ्याल, सञ्जाल
+Keywords[nl]=samba,smb,windows,netwerk
+Keywords[nn]=samba,smb,windows,nettverk
+Keywords[pa]=samba,smb,windows,network,ਨੈੱਟਵਰਕ,ਸਾਂਬਾ
+Keywords[pl]=samba,smb,windows,sieć
+Keywords[pt]=samba,smb,windows,rede
+Keywords[pt_BR]=samba,smb,windows,rede
+Keywords[ro]=samba,smb,windows,rețea
+Keywords[rw]=samba,smb,windows,urusobemiyoboro
+Keywords[se]=samba,smb,windows,fierpmádat
+Keywords[sk]=samba,smb,windows,sieť
+Keywords[sl]=samba,smb,windows,network,omrežje
+Keywords[sr]=samba,smb,windows,network,мрежа,самба
+Keywords[sr@Latn]=samba,smb,windows,network,mreža,samba
+Keywords[sv]=samba,smb,windows,nätverk
+Keywords[ta]=சாம்ப்,smb,சாளரங்கள்,வலைதளம்
+Keywords[th]=samba,smb,วินโดวส์,เครือข่าย
+Keywords[tr]=samba,smb,windows,ağ
+Keywords[uk]=samba,smb,windows,мережа
+Keywords[uz]=samba,smb,windows,tarmoq
+Keywords[uz@cyrillic]=samba,smb,windows,тармоқ
+Keywords[vi]=samba,smb,cửa sổ,mạng
+Keywords[wa]=samba,smb,windows,network,rantoele
+Keywords[zh_CN]=samba,smb,windows,network,网络
+
+Categories=Qt;KDE;X-KDE-settings-network;
diff --git a/kcontrol/kio/main.cpp b/kcontrol/kio/main.cpp
new file mode 100644
index 000000000..dfe2eb0f8
--- /dev/null
+++ b/kcontrol/kio/main.cpp
@@ -0,0 +1,158 @@
+// (c) Torben Weis 1998
+// (c) David Faure 1998
+/*
+ * main.cpp for lisa,reslisa,kio_lan and kio_rlan kcm module
+ *
+ * Copyright (C) 2000,2001 Alexander Neundorf <neundorf@kde.org>
+ *
+ * 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 <qfile.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qtabwidget.h>
+
+#include <kcmoduleloader.h>
+#include <klocale.h>
+
+#include "kcookiesmain.h"
+#include "netpref.h"
+#include "smbrodlg.h"
+#include "useragentdlg.h"
+#include "kproxydlg.h"
+#include "cache.h"
+
+#include "main.h"
+
+extern "C"
+{
+
+ KDE_EXPORT KCModule *create_cookie(QWidget *parent, const char /**name*/)
+ {
+ return new KCookiesMain(parent);
+ }
+
+ KDE_EXPORT KCModule *create_smb(QWidget *parent, const char /**name*/)
+ {
+ return new SMBRoOptions(parent);
+ }
+
+ KDE_EXPORT KCModule *create_useragent(QWidget *parent, const char /**name*/)
+ {
+ return new UserAgentDlg(parent);
+ }
+
+ KDE_EXPORT KCModule *create_proxy(QWidget *parent, const char /**name*/)
+ {
+ return new KProxyOptions(parent);
+ }
+
+ KDE_EXPORT KCModule *create_cache(QWidget *parent, const char /**name*/)
+ {
+ return new KCacheConfigDialog( parent );
+ }
+
+ KDE_EXPORT KCModule *create_netpref(QWidget *parent, const char /**name*/)
+ {
+ return new KIOPreferences(parent);
+ }
+
+ KDE_EXPORT KCModule *create_lanbrowser(QWidget *parent, const char *)
+ {
+ return new LanBrowser(parent);
+ }
+
+}
+
+LanBrowser::LanBrowser(QWidget *parent)
+:KCModule(parent,"kcmkio")
+,layout(this)
+,tabs(this)
+{
+ setQuickHelp( i18n("<h1>Local Network Browsing</h1>Here you setup your "
+ "<b>\"Network Neighborhood\"</b>. You "
+ "can use either the LISa daemon and the lan:/ ioslave, or the "
+ "ResLISa daemon and the rlan:/ ioslave.<br><br>"
+ "About the <b>LAN ioslave</b> configuration:<br> If you select it, the "
+ "ioslave, <i>if available</i>, will check whether the host "
+ "supports this service when you open this host. Please note "
+ "that paranoid people might consider even this to be an attack.<br>"
+ "<i>Always</i> means that you will always see the links for the "
+ "services, regardless of whether they are actually offered by the host. "
+ "<i>Never</i> means that you will never have the links to the services. "
+ "In both cases you will not contact the host, so nobody will ever regard "
+ "you as an attacker.<br><br>More information about <b>LISa</b> "
+ "can be found at <a href=\"http://lisa-home.sourceforge.net\">"
+ "the LISa Homepage</a> or contact Alexander Neundorf "
+ "&lt;<a href=\"mailto:neundorf@kde.org\">neundorf@kde.org</a>&gt;."));
+
+ layout.addWidget(&tabs);
+
+ smbPage = create_smb(&tabs, 0);
+ tabs.addTab(smbPage, i18n("&Windows Shares"));
+ connect(smbPage,SIGNAL(changed(bool)), SLOT( changed() ));
+
+ lisaPage = KCModuleLoader::loadModule("kcmlisa", KCModuleLoader::None, &tabs);
+ if (lisaPage)
+ {
+ tabs.addTab(lisaPage,i18n("&LISa Daemon"));
+ connect(lisaPage,SIGNAL(changed()), SLOT( changed() ));
+ }
+
+// resLisaPage = KCModuleLoader::loadModule("kcmreslisa", &tabs);
+// if (resLisaPage)
+// {
+// tabs.addTab(resLisaPage,i18n("R&esLISa Daemon"));
+// connect(resLisaPage,SIGNAL(changed()), SLOT( changed() ));
+// }
+
+ kioLanPage = KCModuleLoader::loadModule("kcmkiolan", KCModuleLoader::None, &tabs);
+ if (kioLanPage)
+ {
+ tabs.addTab(kioLanPage,i18n("lan:/ Iosla&ve"));
+ connect(kioLanPage,SIGNAL(changed()), SLOT( changed() ));
+ }
+
+ setButtons(Apply|Help);
+ load();
+}
+
+void LanBrowser::load()
+{
+ smbPage->load();
+ if (lisaPage)
+ lisaPage->load();
+// if (resLisaPage)
+// resLisaPage->load();
+ if (kioLanPage)
+ kioLanPage->load();
+ emit changed(false);
+}
+
+void LanBrowser::save()
+{
+ smbPage->save();
+// if (resLisaPage)
+// resLisaPage->save();
+ if (kioLanPage)
+ kioLanPage->save();
+ if (lisaPage)
+ lisaPage->save();
+ emit changed(false);
+}
+
+#include "main.moc"
+
diff --git a/kcontrol/kio/main.h b/kcontrol/kio/main.h
new file mode 100644
index 000000000..d2499c5e4
--- /dev/null
+++ b/kcontrol/kio/main.h
@@ -0,0 +1,46 @@
+/*
+ * main.cpp for lisa,reslisa,kio_lan and kio_rlan kcm module
+ *
+ * Copyright (C) 2000 Alexander Neundorf <neundorf@kde.org>
+ *
+ * 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 MYMAIN_H
+#define MYMAIN_H
+
+#include <kcmodule.h>
+#include <kglobal.h>
+
+class QTabWidget;
+
+class LanBrowser:public KCModule
+{
+ Q_OBJECT
+ public:
+ LanBrowser(QWidget *parent=0);
+ virtual void load();
+ virtual void save();
+
+ private:
+ QVBoxLayout layout;
+ QTabWidget tabs;
+ KCModule *smbPage;
+ KCModule *lisaPage;
+// KCModule *resLisaPage;
+ KCModule *kioLanPage;
+};
+#endif
+
diff --git a/kcontrol/kio/manualproxy_ui.ui b/kcontrol/kio/manualproxy_ui.ui
new file mode 100644
index 000000000..1c8ef8634
--- /dev/null
+++ b/kcontrol/kio/manualproxy_ui.ui
@@ -0,0 +1,317 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>ManualProxyDlgUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>ManualProxyDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>489</width>
+ <height>438</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>gbServers</cstring>
+ </property>
+ <property name="title">
+ <string>Ser&amp;vers</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>lbFtp</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;FTP:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leFtp</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lbHttps</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>HTTP&amp;S:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leHttps</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lbHttp</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>H&amp;TTP:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leHttp</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>leHttp</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the address of the HTTP proxy server.</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>leHttps</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the address of the HTTPS proxy server.</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>leFtp</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the address of the FTP proxy server.</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>sbFtp</cstring>
+ </property>
+ <property name="maxValue">
+ <number>65536</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the port number of the FTP proxy server. Default 8080. Another common value is 3128.</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="2">
+ <property name="name">
+ <cstring>sbHttps</cstring>
+ </property>
+ <property name="maxValue">
+ <number>65536</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the port number of the HTTP proxy server. Default is 8080. Another common value is 3128.</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="2">
+ <property name="name">
+ <cstring>sbHttp</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="maxValue">
+ <number>65536</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the port number of the HTTP proxy server. Default is 8080. Another common value is 3128.</string>
+ </property>
+ </widget>
+ <spacer row="3" column="0">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Minimum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox" row="3" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>cbSameProxy</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Use the same proxy server for all protocols</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="3">
+ <property name="name">
+ <cstring>pbCopyDown</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>gbExceptions</cstring>
+ </property>
+ <property name="title">
+ <string>E&amp;xceptions</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbReverseProxy</cstring>
+ </property>
+ <property name="text">
+ <string>Use proxy only for entries in this list</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Reverse the use of the exception list. Checking this box will result in the proxy servers being used only when the requested URL matches one of the addresses listed here.&lt;p&gt;This feature is useful if all you want or need is to use a proxy server for a few specific sites.&lt;p&gt;If you have more complex requirements you might want to use a configuration script.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton" row="3" column="1">
+ <property name="name">
+ <cstring>pbDeleteAll</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>D&amp;elete All</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Remove all proxy exception addresses from the list.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>pbDelete</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>De&amp;lete</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Remove the selected proxy exception address from the list.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>pbNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New...</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Add new proxy exception address to the list.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>pbChange</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>C&amp;hange...</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Change the selected proxy exception address.</string>
+ </property>
+ </widget>
+ <spacer row="4" column="1">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>114</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KListBox" row="0" column="0" rowspan="5" colspan="1">
+ <property name="name">
+ <cstring>lbExceptions</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<tabstops>
+ <tabstop>leHttp</tabstop>
+ <tabstop>sbHttp</tabstop>
+ <tabstop>leHttps</tabstop>
+ <tabstop>sbHttps</tabstop>
+ <tabstop>leFtp</tabstop>
+ <tabstop>sbFtp</tabstop>
+ <tabstop>cbSameProxy</tabstop>
+ <tabstop>pbCopyDown</tabstop>
+ <tabstop>cbReverseProxy</tabstop>
+ <tabstop>pbNew</tabstop>
+ <tabstop>pbChange</tabstop>
+ <tabstop>pbDelete</tabstop>
+ <tabstop>pbDeleteAll</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/kcontrol/kio/netpref.cpp b/kcontrol/kio/netpref.cpp
new file mode 100644
index 000000000..6aa20c4e7
--- /dev/null
+++ b/kcontrol/kio/netpref.cpp
@@ -0,0 +1,138 @@
+#include <qlayout.h>
+#include <qcheckbox.h>
+#include <qwhatsthis.h>
+#include <qvgroupbox.h>
+
+#include <kio/ioslave_defaults.h>
+#include <knuminput.h>
+#include <klocale.h>
+#include <kdialog.h>
+#include <kconfig.h>
+
+#include "ksaveioconfig.h"
+#include "netpref.h"
+
+#define MAX_TIMEOUT_VALUE 3600
+
+KIOPreferences::KIOPreferences( QWidget* parent )
+ :KCModule( parent, "kcmkio" )
+{
+ QVBoxLayout* mainLayout = new QVBoxLayout( this, 0,
+ KDialog::spacingHint() );
+ gb_Timeout = new QVGroupBox( i18n("Timeout Values"), this, "gb_Timeout" );
+ QWhatsThis::add( gb_Timeout, i18n("Here you can set timeout values. "
+ "You might want to tweak them if your "
+ "connection is very slow. The maximum "
+ "allowed value is %1 seconds.").arg(MAX_TIMEOUT_VALUE));
+ mainLayout->addWidget( gb_Timeout );
+
+ sb_socketRead = new KIntNumInput( gb_Timeout, "sb_socketRead" );
+ sb_socketRead->setSuffix( i18n( " sec" ) );
+ sb_socketRead->setLabel( i18n( "Soc&ket read:" ), AlignVCenter);
+ connect(sb_socketRead, SIGNAL(valueChanged ( int )),
+ this, SLOT(configChanged()));
+
+ sb_proxyConnect = new KIntNumInput( sb_socketRead, 0, gb_Timeout,
+ 10, "sb_proxyConnect" );
+ sb_proxyConnect->setSuffix( i18n( " sec" ) );
+ sb_proxyConnect->setLabel( i18n( "Pro&xy connect:" ), AlignVCenter);
+ connect(sb_proxyConnect, SIGNAL(valueChanged ( int )),
+ this, SLOT(configChanged()));
+
+ sb_serverConnect = new KIntNumInput( sb_proxyConnect, 0, gb_Timeout,
+ 10, "sb_serverConnect" );
+ sb_serverConnect->setSuffix( i18n( " sec" ) );
+ sb_serverConnect->setLabel( i18n("Server co&nnect:"), AlignVCenter);
+ connect(sb_serverConnect, SIGNAL(valueChanged ( int )),
+ this, SLOT(configChanged()));
+
+ sb_serverResponse = new KIntNumInput( sb_serverConnect, 0, gb_Timeout,
+ 10, "sb_serverResponse" );
+ sb_serverResponse->setSuffix( i18n( " sec" ) );
+ sb_serverResponse->setLabel( i18n("&Server response:"), AlignVCenter);
+ connect(sb_serverResponse, SIGNAL(valueChanged ( int )),
+ this, SLOT(configChanged()));
+
+ gb_Ftp = new QVGroupBox( i18n( "FTP Options" ), this, "gb_Ftp" );
+ cb_ftpEnablePasv = new QCheckBox( i18n( "Enable passive &mode (PASV)" ), gb_Ftp );
+ QWhatsThis::add(cb_ftpEnablePasv, i18n( "Enables FTP's \"passive\" mode. This is required to allow FTP to work from behind firewalls." ));
+ cb_ftpMarkPartial = new QCheckBox( i18n( "Mark &partially uploaded files" ), gb_Ftp );
+ QWhatsThis::add(cb_ftpMarkPartial, i18n( "<p>Marks partially uploaded FTP files.</p>"
+ "<p>When this option is enabled, partially uploaded files "
+ "will have a \".part\" extension. This extension will be removed "
+ "once the transfer is complete.</p>"));
+
+ mainLayout->addWidget( gb_Ftp );
+
+ connect(cb_ftpEnablePasv, SIGNAL(toggled(bool)), SLOT(configChanged()));
+ connect(cb_ftpMarkPartial, SIGNAL(toggled(bool)), SLOT(configChanged()));
+
+ mainLayout->addStretch();
+
+ load();
+}
+
+KIOPreferences::~KIOPreferences()
+{
+}
+
+void KIOPreferences::load()
+{
+ KProtocolManager proto;
+
+ sb_socketRead->setRange( MIN_TIMEOUT_VALUE, MAX_TIMEOUT_VALUE );
+ sb_serverResponse->setRange( MIN_TIMEOUT_VALUE, MAX_TIMEOUT_VALUE );
+ sb_serverConnect->setRange( MIN_TIMEOUT_VALUE, MAX_TIMEOUT_VALUE );
+ sb_proxyConnect->setRange( MIN_TIMEOUT_VALUE, MAX_TIMEOUT_VALUE );
+
+ sb_socketRead->setValue( proto.readTimeout() );
+ sb_serverResponse->setValue( proto.responseTimeout() );
+ sb_serverConnect->setValue( proto.connectTimeout() );
+ sb_proxyConnect->setValue( proto.proxyConnectTimeout() );
+
+ KConfig config( "kio_ftprc", true, false );
+ cb_ftpEnablePasv->setChecked( !config.readBoolEntry( "DisablePassiveMode", false ) );
+ cb_ftpMarkPartial->setChecked( config.readBoolEntry( "MarkPartial", true ) );
+ emit changed( false );
+}
+
+void KIOPreferences::save()
+{
+ KSaveIOConfig::setReadTimeout( sb_socketRead->value() );
+ KSaveIOConfig::setResponseTimeout( sb_serverResponse->value() );
+ KSaveIOConfig::setConnectTimeout( sb_serverConnect->value() );
+ KSaveIOConfig::setProxyConnectTimeout( sb_proxyConnect->value() );
+
+ KConfig config( "kio_ftprc", false, false );
+ config.writeEntry( "DisablePassiveMode", !cb_ftpEnablePasv->isChecked() );
+ config.writeEntry( "MarkPartial", cb_ftpMarkPartial->isChecked() );
+ config.sync();
+
+ KSaveIOConfig::updateRunningIOSlaves (this);
+
+ emit changed( false );
+}
+
+void KIOPreferences::defaults()
+{
+ sb_socketRead->setValue( DEFAULT_READ_TIMEOUT );
+ sb_serverResponse->setValue( DEFAULT_RESPONSE_TIMEOUT );
+ sb_serverConnect->setValue( DEFAULT_CONNECT_TIMEOUT );
+ sb_proxyConnect->setValue( DEFAULT_PROXY_CONNECT_TIMEOUT );
+
+ cb_ftpEnablePasv->setChecked( true );
+ cb_ftpMarkPartial->setChecked( true );
+
+ emit changed(true);
+}
+
+QString KIOPreferences::quickHelp() const
+{
+ return i18n("<h1>Network Preferences</h1>Here you can define"
+ " the behavior of KDE programs when using Internet"
+ " and network connections. If you experience timeouts"
+ " or use a modem to connect to the Internet, you might"
+ " want to adjust these settings." );
+}
+
+#include "netpref.moc"
diff --git a/kcontrol/kio/netpref.desktop b/kcontrol/kio/netpref.desktop
new file mode 100644
index 000000000..43349e926
--- /dev/null
+++ b/kcontrol/kio/netpref.desktop
@@ -0,0 +1,205 @@
+[Desktop Entry]
+Comment=Configure generic network preferences, like timeout values
+Comment[af]=Konfigureer generies netwerk voorkeure, hou van tydverstreke waardes
+Comment[ar]=إعداد تفضيلات الشبكة العامة، مثل قيم فترات الإنتظار
+Comment[az]=Ümumi şəbəkə qurğuları, məsələn vaxt dolması kimi
+Comment[be]=Настаўленні агульных уласцівасцяў сеткі, напр., тэрмінаў чакання
+Comment[bg]=Настройване на общите мрежови параметри
+Comment[bn]=বিবিধ নেটওয়ার্ক সেটিংস কনফিগারেশন, যথা টাইম-আউট মানসমূহ
+Comment[bs]=Podešavanje općih mrežnih postavki kao što su timeout vrijednosti
+Comment[ca]=Configuració de les preferències genèriques de la xarxa, com ara els valors per als temps d'expiració
+Comment[cs]=Nastavení obecných parametrů sítě, např. časových limitů
+Comment[csb]=Kònfigùracëjô sécoëch nastôwów jakno np. limitu czasu
+Comment[cy]=Ffurfweddu dewisiadau rhwydwaith generig, fel gwerthoedd goramser
+Comment[da]=Indstil generelle netværksvalg såsom timeout-værdier
+Comment[de]=Einfache Netzwerkeinstellungen vornehmen wie z. B. Zeitüberschreitungen
+Comment[el]=Ρύθμιση γενικών προτιμήσεων δικτύου, όπως τιμές χρονικών ορίων
+Comment[eo]=Ĝeneralaj retopcioj, kiel tempolimoj ktp.
+Comment[es]=Configuración de las preferencias genéricas de red, como los tiempos de desconexión
+Comment[et]=Üldised võrguseadistused
+Comment[eu]=Konfiguratu sarerako hobespen orokorrak (denbora-muga balioak, besteak beste)
+Comment[fa]=پیکربندی تنظیمات شبکۀ محلی، مانند مقادیر اتمام‌ وقت
+Comment[fi]=Muokkaa yleisiä verkkoasetuksia kuten aikakatkaisuarvoja
+Comment[fr]=Configuration générique du réseau, comme par exemple les valeurs des délais d'attente
+Comment[fy]=ynstelle fan algemiene netwurkfoarkar, sa as tiidslimytwearden
+Comment[gl]=Configurar as preferéncias xenéricas de rede, como os valores de agarda
+Comment[he]=שינוי הגדרות רשת כלליות כגון ערכי זמנים מוקצבים
+Comment[hi]=जेनेरिक नेटवर्क प्राथमिकताएँ, जैसे टाइम-आउट मूल्य- कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje generičkih mrežnih vrijednosti, poput vremena prekoračenja
+Comment[hu]=A hálózati paraméterek, például a várakozási idők beállítása
+Comment[is]=Tilgreina almennar netstillingar, t.d. hámarkstíma
+Comment[it]=Configura le preferenze di rete generiche, come ad esempio i tempi massimi
+Comment[ja]=タイムアウト値などの一般的なネットワーク設定
+Comment[ka]=ქსელის ზოგადი პარამეტრები, ისეთი როგორიცაა ტაიმაუტი
+Comment[kk]=Күту уақыты секілді желінің негізгі параметрлерін баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ចំណង់​ចំណូល​ចិត្ត​បណ្ដាញ​ទូទៅ ដូចជា​តម្លៃ​អស់​ពេល​ជាដើម
+Comment[ko]=제한 시간 값 같이 일반 네트워크에서 기본이 되는 값을 설정합니다
+Comment[lo]=ປັບແຕ່ງຄ່າທົ່ວໄປການລະບົບເຄືອຂ່າຍ ເຊັ່ນຄ່າການໃຊ້ເວລາເປັນຕົ້ນ
+Comment[lt]=Konfigūruoti bendrus tinklo pasirinkimus, tokius, kaip laiko limitai
+Comment[lv]=Konfigurē vispārējus tīkla uzstādījumus, kā noildzes vērtības
+Comment[mk]=Конфигурирајте ги општите мрежни параметри, како тајмаут вредности
+Comment[mn]=Ерөнхий сүлжээ-Тохируулга тохируулах Ж.нь.Хугацаа хэтрэлтийн хугацаа
+Comment[ms]=Konfigur keutamaan rangkaian generik, seperti nilai waktu rehat
+Comment[mt]=Hawn tista' tagħżel preferenzi ġeneriċi tan-network, bħal ħinijiet ta' stennija
+Comment[nb]=Angi generelle nettverksinnstillinger, f.eks. verdier for tidsavbrudd
+Comment[nds]=Standard-Nettwarkinstellen, as t.B. Tietgrenzen
+Comment[ne]=समय समाप्ति मान जस्तै जेनेरिक सञ्जाल प्राथमिकता कन्फिगर गर्नुहोस्
+Comment[nl]=Instellen van algemene netwerkvoorkeuren, zoals tijdslimietwaarden
+Comment[nn]=Oppsett av generelle nettverksinnstillingar, som til dømes tidsgrenser
+Comment[nso]=Beakanya dikganyogo tsa kgokagano ya kakaretso, goswana le maboleng a phelelo ya nako
+Comment[pa]=ਨੈੱਟਵਰਕ ਪਸੰਦ ਸੰਰਚਨਾ, ਜਿਵੇਂ ਸਮਾਂ-ਸੀਮਾ ਮੁੱਲ
+Comment[pl]=Konfiguracja niskopoziomowych ustawień sieciowych np. limitu czasu
+Comment[pt]=Configuração das opções gerais da rede, p.ex. tempos-limite
+Comment[pt_BR]=Configurar preferências genéricas para rede tais como valores de tempo limite
+Comment[ro]=Configurează opțiuni de rețea precum valorile temporizărilor
+Comment[ru]=Общие свойства сети, такие как значения времени ожидания
+Comment[rw]=Kuboneza ibijyanye n'urusobemiyoboro rusange, nk'uduciro tw'igihecyarenze
+Comment[se]=Oppalaš fierbmeoidimat, nugo áigemearit
+Comment[sk]=Nastavenie všeobecných parametrov siete, napr. dôb čakania
+Comment[sl]=Nastavljanje splošnih nastavitev omrežja kot na primer vrednosti zakasnitev
+Comment[sr]=Подешавања генеричких параметара мреже, као што је прекорачење времена...
+Comment[sr@Latn]=Podešavanja generičkih parametara mreže, kao što je prekoračenje vremena...
+Comment[sv]=Anpassa allmänna nätverksinställningar, som tidsgränser
+Comment[ta]=பிறப்பு வலைதள சலுகைகள், நேரமுடிவு மதிப்பு ஆகியவற்றை வடிவமை
+Comment[tg]= Хусусиятҳои шабакаи монанди мӯҳлати вақт, дар инҷо танзим кунед
+Comment[th]=ปรับแต่งค่าระบบเครือข่ายทั่วไป เช่น ค่าการใช้เวลา เป็นต้น
+Comment[tr]=Genel ağ tercihlerini yapılandır, zaman aşımı değerleri gibi
+Comment[tt]=Çeltärneñ töp köyläwläre; kötterü arası kebek.
+Comment[uk]=Налаштування загальних параметрів мережі, таких як значення тайм-аутів
+Comment[uz]=Taymaut qiymatiga oʻxshagan tarmoq parametrlarni moslash
+Comment[uz@cyrillic]=Таймаут қийматига ўхшаган тармоқ параметрларни мослаш
+Comment[ven]=Khonifigarani thodea dza vhukwamani sa tshifhinga tsho fhelaho
+Comment[vi]=Cấu hình mạng nói chung ví dụ như giới hạn thời gian
+Comment[wa]=Apontiaedje des preferinces rantoele djenerikes, come les valixhances di timeout
+Comment[xh]=Qwalasela iinketho zomsebenzi womnatha ka wonke-wonke, njengamaxabiso ophelelo lwexesha
+Comment[zh_CN]=配置通用网络首选项,例如超时值
+Comment[zh_TW]=設定一般網路喜好設定,例如逾時值
+Comment[zu]=Hlanganisela okuncanyelwa uwonkewonke koxhumano olusazekile, njengamanani esikhathi sokuphuma
+Exec=kcmshell netpref
+Icon=network
+Keywords=timeout,iopref,netpref,network preferences,ftp
+Keywords[be]=Тэрмін чакання,Уласцівасці сеткі,timeout,iopref,netpref,network preferences,ftp
+Keywords[bg]=просрочка, време, времето, пауза, прекъсване, връзка, timeout, iopref, netpref, network preferences, ftp
+Keywords[bs]=timeout,iopref,netpref,network preferences,ftp,mreža
+Keywords[ca]=temps d'expiració,iopref,netpref,preferències de la xarxa,ftp
+Keywords[cs]=časový limit,iopref,netpref,nastavení sítě,ftp
+Keywords[csb]=limit czasu, sécowé nastôwë,séc,nastôw wé/wi,ftp
+Keywords[da]=timeout,udløb,ioindst,netindst,netværksindstillinger,ftp
+Keywords[de]=Zeitlimit,Netzwerkeinstellungen,Ein-/Ausgabemodul-Einstellungen
+Keywords[el]=χρονικό όριο,iopref,netpref,προτιμήσεις δικτύου,ftp
+Keywords[eo]=tempolimo,enel-preferaĵoj,reto,retpreferaĵoj,ftp
+Keywords[es]=timeout,iopref,netpref,red preferencias,ftp
+Keywords[et]=taimaut,aegumine,võrgu seadistused,ftp
+Keywords[eu]=denbora-muga,iopref,netpref,sareko hobespenak, ftp
+Keywords[fa]=اتمام وقت، iopref، تنظیمات شبکه، قاپ
+Keywords[fr]=délai,configuration du réseau,réseau,entrées/sorties,ftp
+Keywords[fy]=timeout,iopref,netpref,netwurkfoarkar,tiidslimyt,ftp
+Keywords[gl]=timeout,iopref,netpref,preferéncias de rede, ftp
+Keywords[he]=זמן מוקצב,iopref,netpref,העדפות רשת, timeout,iopref,netpref,network preferences,ftp
+Keywords[hr]=timeout,prekoračenje vremena,iopref,netpref,network preferences,postavke mreže,ftp
+Keywords[hu]=várakozási idő,iopref,netpref,hálózati beállítások,ftp
+Keywords[is]=hámarkstími,iopref,netpref,netstillingar,ftp
+Keywords[it]=tempo massimo,timeout,iopref,netpref,rete,preferenze di rete,ftp
+Keywords[ja]=タイムアウト, iopref, netpref, ネットワーク設定, ftp
+Keywords[km]=អស់​ពេល,iopref,netpref,ចំណង់ចំណូល​ចិត្ត​បណ្ដាញ,ftp
+Keywords[lt]=timeout,iopref,netpref,network preferences,ftp,laiko limitas, tinklo pasirinkimai
+Keywords[mk]=timeout,iopref,netpref,network preferences,ftp,тајмаут,мрежни параметри
+Keywords[nb]=avbruddsverdi,I/U-innstillinger,nettverk,nettverksinnstillinger,ftp
+Keywords[nds]=timeout,iopref,netpref,Nettwarkinstellen,ftp,Tietgrenz,aflopen
+Keywords[ne]=समय समाप्त, iopref, netpref, सञ्जाल प्राथमिकता, ftp
+Keywords[nl]=timeout,iopref,netpref,netwerkvoorkeuren,tijdslimiet,ftp
+Keywords[nn]=tidsgrense,IU-oppsett,nettverksinnstillingar,nettverk,nettverksoppsett,ftp
+Keywords[pl]=limit czasu, ustawienia sieciowe,sieć,ustawienia we/wy,ftp
+Keywords[pt]=tempo limite,iopref,netpref,configuração da rede,ftp
+Keywords[pt_BR]=tempo limite,iopref,netpref,preferências de rede,ftp,configurações de rede
+Keywords[ro]=temporizare,iopref,netpref,preferințe de rețea,ftp
+Keywords[rw]= Igihecyarenze,iopref,netpref,ibijyana n'urusobemiyoboro,ftp
+Keywords[sl]=iztek,zakasnitev,iopref,netpref,nastavitve omrežja,ftp
+Keywords[sv]=tidsgräns,io-inställning,nät-inställning,nätverksinställningar,FTP
+Keywords[ta]=நேரம் முடிந்தது,iopref,netpref,வலைதளம் சலுகைகள்,ftp
+Keywords[th]=หมดเวลา,iopref,netpref,ปรับแต่งระบบเครือข่าย,ftp
+Keywords[tr]=zaman aşımı,ağ tercihleri,iopref,netpref,ftp
+Keywords[uk]=тайм-аут,iopref,netpref,параметри мережі,ftp
+Keywords[uz]=taymaut,iopref,netpref,tarmoq parametrlari,ftp
+Keywords[uz@cyrillic]=таймаут,iopref,netpref,тармоқ параметрлари,ftp
+Keywords[vi]=giới hạn thời gian,iopref,netpref,tuỳ chọn mạng
+Keywords[wa]=timeout,iopref,netpref,preferinces rantoele,ftp
+Keywords[zh_CN]=timeout,iopref,netpref,network preferences,超时,网络首选项,ftp
+Keywords[zh_TW]=timeout,iopref,netpref,network preferences,ftp,作業逾時,網路喜好設定
+Name=Connection Preferences
+Name[af]=Koppeling Voorkeure
+Name[ar]=تفضيلات الإتصال
+Name[be]=Уласцівасці злучэнняў
+Name[bg]=Настройване на връзката
+Name[bn]=যোগাযোগ পছন্দসমূহ
+Name[br]=Kefluniadur ar gevreadenn
+Name[bs]=Postavke konekcije
+Name[ca]=Preferències de connexió
+Name[cs]=Nastavení připojení
+Name[csb]=Kònfigùracëjô sparłãczeniów
+Name[da]=Indstillinger af forbindelse
+Name[de]=Verbindungseinstellungen
+Name[el]=Προτιμήσεις σύνδεσης
+Name[eo]=Konektaj Agordoj
+Name[es]=Preferencias de conexión
+Name[et]=Ühenduse seadistused
+Name[eu]=Konexio hobespenak
+Name[fa]=تنظیمات اتصال
+Name[fi]=Asetukset
+Name[fr]=Préférences de connexion
+Name[fy]=Ferbiningfoarkar
+Name[ga]=Sainroghanna Naisc
+Name[gl]=Preferéncias da Conexón
+Name[he]=העדפות חיבור
+Name[hi]=कनेक्शन वरीयताएँ
+Name[hr]=Postavke povezivanja
+Name[hu]=Hálózati paraméterek
+Name[is]=Stillingar tenginga
+Name[it]=Preferenze sulle connessioni
+Name[ja]=接続設定
+Name[ka]=კავშირის თვისებები
+Name[kk]=Қосылым параметрлері
+Name[km]=ចំណង់ចំណូល​ចិត្ត​ការ​តភ្ជាប់
+Name[ko]=연결 설정
+Name[lt]=Prisijungimo pasirinkimai
+Name[lv]=Savienojumu parametri
+Name[mk]=Параметри на поврзувањето
+Name[ms]=Keutamaan Sambungan
+Name[nb]=Forbindelsesinnstillinger
+Name[nds]=Instellen för de Verbinnen
+Name[ne]=जडान प्राथमिकता
+Name[nl]=Verbindingsvoorkeuren
+Name[nn]=Innstillingar for samband
+Name[pa]=ਕੁਨੈਕਸ਼ਨ ਪਸੰਦ
+Name[pl]=Konfiguracja połączeń
+Name[pt]=Preferências da Ligação
+Name[pt_BR]=Configurações de Conexão
+Name[ro]=Preferințe conexiune
+Name[ru]=Свойства соединения
+Name[rw]=Ibijyanye n'Ukwihuza
+Name[se]=Oktavuohta oidimat
+Name[sk]=Preferencie pripojenia
+Name[sl]=Lastnosti povezave
+Name[sr]=Подешавања повезивања
+Name[sr@Latn]=Podešavanja povezivanja
+Name[sv]=Anslutningsinställningar
+Name[ta]=இணைப்பு முன்னுரிமைகள்
+Name[tg]=Хусусиятҳои алоқа
+Name[th]=ค่าที่ชอบสำหรับการเชื่อมต่อ
+Name[tr]=Bağlantı Tercihleri
+Name[tt]=Totaşu Caylawları
+Name[uk]=Параметри з'єднання
+Name[uz]=Aloqa parametrlari
+Name[uz@cyrillic]=Алоқа параметрлари
+Name[vi]=Tuỳ chọn trong Nối mạng
+Name[wa]=Preferinces di raloyaedje
+Name[zh_CN]=连接首选项
+Name[zh_TW]=連線偏好設定
+Type=Application
+DocPath=kcontrol/netpref/index.html
+X-KDE-FactoryName=netpref
+X-KDE-Library=kio
+
+X-KDE-ParentApp=kcontrol
+
+Categories=Qt;KDE;X-KDE-settings-network;
diff --git a/kcontrol/kio/netpref.h b/kcontrol/kio/netpref.h
new file mode 100644
index 000000000..2e269d4cd
--- /dev/null
+++ b/kcontrol/kio/netpref.h
@@ -0,0 +1,44 @@
+#ifndef KIOPREFERENCES_H
+#define KIOPREFERENCES_H
+
+#include <kcmodule.h>
+
+class QLabel;
+class QVGroupBox;
+class QCheckBox;
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
+
+class KIntNumInput;
+
+class KIOPreferences : public KCModule
+{
+ Q_OBJECT
+
+public:
+ KIOPreferences( QWidget* parent = 0);
+ ~KIOPreferences();
+
+ void load();
+ void save();
+ void defaults();
+
+ QString quickHelp() const;
+
+protected slots:
+ void configChanged() { emit changed(true); }
+
+private:
+ QVGroupBox* gb_Ftp;
+ QVGroupBox* gb_Timeout;
+ QCheckBox* cb_ftpEnablePasv;
+ QCheckBox* cb_ftpMarkPartial;
+
+ KIntNumInput* sb_socketRead;
+ KIntNumInput* sb_proxyConnect;
+ KIntNumInput* sb_serverConnect;
+ KIntNumInput* sb_serverResponse;
+};
+
+#endif // KIOPREFERENCES_H
diff --git a/kcontrol/kio/policydlg.cpp b/kcontrol/kio/policydlg.cpp
new file mode 100644
index 000000000..8e59c4bb0
--- /dev/null
+++ b/kcontrol/kio/policydlg.cpp
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2000- Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 <qpushbutton.h>
+#include <qwhatsthis.h>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qvalidator.h>
+
+#include <klineedit.h>
+#include <kcombobox.h>
+#include <klocale.h>
+
+#include "policydlg.h"
+#include "policydlg_ui.h"
+
+
+class DomainLineValidator : public QValidator
+{
+public:
+ DomainLineValidator(QObject *parent)
+ :QValidator(parent, "domainValidator")
+ {
+ }
+
+ State validate(QString &input, int &) const
+ {
+ if (input.isEmpty() || (input == "."))
+ return Intermediate;
+
+ int length = input.length();
+
+ for(int i = 0 ; i < length; i++)
+ {
+ if (!input[i].isLetterOrNumber() && input[i] != '.' && input[i] != '-')
+ return Invalid;
+ }
+
+ return Acceptable;
+ }
+};
+
+
+PolicyDlg::PolicyDlg (const QString& caption, QWidget *parent,
+ const char *name)
+ : KDialogBase(parent, name, true, caption, Ok|Cancel, Ok, true)
+{
+ m_dlgUI = new PolicyDlgUI (this);
+ setMainWidget(m_dlgUI);
+
+ m_dlgUI->leDomain->setValidator(new DomainLineValidator(m_dlgUI->leDomain));
+ m_dlgUI->cbPolicy->setMinimumWidth( m_dlgUI->cbPolicy->fontMetrics().maxWidth() * 25 );
+
+ enableButtonOK( false );
+ connect(m_dlgUI->leDomain, SIGNAL(textChanged(const QString&)),
+ SLOT(slotTextChanged(const QString&)));
+
+ setFixedSize (sizeHint());
+ m_dlgUI->leDomain->setFocus ();
+}
+
+void PolicyDlg::setEnableHostEdit( bool state, const QString& host )
+{
+ if ( !host.isEmpty() )
+ m_dlgUI->leDomain->setText( host );
+ m_dlgUI->leDomain->setEnabled( state );
+}
+
+void PolicyDlg::setPolicy (int policy)
+{
+ if ( policy > -1 && policy <= static_cast<int>(m_dlgUI->cbPolicy->count()) )
+ m_dlgUI->cbPolicy->setCurrentItem(policy-1);
+
+ if ( !m_dlgUI->leDomain->isEnabled() )
+ m_dlgUI->cbPolicy->setFocus();
+}
+
+int PolicyDlg::advice () const
+{
+ return m_dlgUI->cbPolicy->currentItem() + 1;
+}
+
+QString PolicyDlg::domain () const
+{
+ return m_dlgUI->leDomain->text();
+}
+
+void PolicyDlg::slotTextChanged( const QString& text )
+{
+ enableButtonOK( text.length() > 1 );
+}
+#include "policydlg.moc"
diff --git a/kcontrol/kio/policydlg.h b/kcontrol/kio/policydlg.h
new file mode 100644
index 000000000..dcdca5136
--- /dev/null
+++ b/kcontrol/kio/policydlg.h
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2000- Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 _POLICYDLG_H
+#define _POLICYDLG_H
+
+#include <qstring.h>
+
+#include <kdialogbase.h>
+
+
+class QPushButton;
+class PolicyDlgUI;
+
+class KCookieAdvice
+{
+public:
+ enum Value {Dunno=0, Accept, Reject, Ask};
+
+ static const char * adviceToStr (const int& advice)
+ {
+ switch (advice)
+ {
+ case KCookieAdvice::Accept:
+ return I18N_NOOP("Accept");
+ case KCookieAdvice::Reject:
+ return I18N_NOOP("Reject");
+ case KCookieAdvice::Ask:
+ return I18N_NOOP("Ask");
+ default:
+ return I18N_NOOP("Dunno");
+ }
+ }
+
+ static KCookieAdvice::Value strToAdvice (const QString& advice)
+ {
+ if (advice.isEmpty())
+ return KCookieAdvice::Dunno;
+
+ if (advice.find (QString::fromLatin1("accept"), 0, false) == 0)
+ return KCookieAdvice::Accept;
+ else if (advice.find (QString::fromLatin1("reject"), 0, false) == 0)
+ return KCookieAdvice::Reject;
+ else if (advice.find (QString::fromLatin1("ask"), 0, false) == 0)
+ return KCookieAdvice::Ask;
+
+ return KCookieAdvice::Dunno;
+ }
+};
+
+class PolicyDlg : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ PolicyDlg (const QString& caption, QWidget *parent = 0,
+ const char *name = 0);
+ ~PolicyDlg (){};
+
+ int advice() const;
+ QString domain() const;
+
+ void setEnableHostEdit( bool, const QString& host = QString::null );
+ void setPolicy (int policy);
+
+protected slots:
+ void slotTextChanged( const QString& );
+
+private:
+ PolicyDlgUI* m_dlgUI;
+};
+#endif
diff --git a/kcontrol/kio/policydlg_ui.ui b/kcontrol/kio/policydlg_ui.ui
new file mode 100644
index 000000000..1bae63208
--- /dev/null
+++ b/kcontrol/kio/policydlg_ui.ui
@@ -0,0 +1,106 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>PolicyDlgUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>PolicyDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>291</width>
+ <height>120</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>lbDomain</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Domain name:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leDomain</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the host or domain to which this policy applies, e.g. &lt;b&gt;www.kde.org&lt;/b&gt; or &lt;b&gt;.kde.org&lt;/b&gt;.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>leDomain</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the host or domain to which this policy applies, e.g. &lt;b&gt;www.kde.org&lt;/b&gt; or &lt;b&gt;.kde.org&lt;/b&gt;.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>lbPolicy</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Policy:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>cbPolicy</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Select the desired policy:
+&lt;ul&gt;
+&lt;li&gt;&lt;b&gt;Accept&lt;/b&gt; - Allows this site to set cookies&lt;/li&gt;
+&lt;li&gt;&lt;b&gt;Reject&lt;/b&gt; - Refuse all cookies sent from this site&lt;/li&gt;
+&lt;li&gt;&lt;b&gt;Ask&lt;/b&gt; - Prompt when cookies are received from this site&lt;/li&gt;
+&lt;/ul&gt;
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="KComboBox">
+ <item>
+ <property name="text">
+ <string>Accept</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Reject</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Ask</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbPolicy</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Select the desired policy:
+&lt;ul&gt;
+&lt;li&gt;&lt;b&gt;Accept&lt;/b&gt; - Allows this site to set cookies&lt;/li&gt;
+&lt;li&gt;&lt;b&gt;Reject&lt;/b&gt; - Refuse all cookies sent from this site&lt;/li&gt;
+&lt;li&gt;&lt;b&gt;Ask&lt;/b&gt; - Prompt when cookies are received from this site&lt;/li&gt;
+&lt;/ul&gt;
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+</UI>
diff --git a/kcontrol/kio/proxy.desktop b/kcontrol/kio/proxy.desktop
new file mode 100644
index 000000000..6d2773bf7
--- /dev/null
+++ b/kcontrol/kio/proxy.desktop
@@ -0,0 +1,209 @@
+[Desktop Entry]
+Type=Application
+DocPath=kcontrol/proxy/index.html
+Icon=proxy
+Exec=kcmshell proxy
+
+
+X-KDE-Library=kio
+X-KDE-FactoryName=proxy
+X-KDE-ParentApp=kcontrol
+
+Name=Proxy
+Name[af]=Volmag
+Name[ar]=الوكيل
+Name[az]=Vəkil Verici
+Name[be]=Проксі
+Name[bg]=Прокси сървър
+Name[bn]=প্রক্সি
+Name[br]=Proksi
+Name[ca]=Intermediari
+Name[csb]=Pòstrzédnik (Proxy)
+Name[cy]=Dirprwy
+Name[el]=Διαμεσολαβητής
+Name[eo]=Prokuriloj
+Name[eu]=Proxya
+Name[fa]=پیشکار
+Name[fi]=Välityspalvelin
+Name[fr]=Serveur mandataire (proxy)
+Name[ga]=Seachfhreastalaí
+Name[he]=מתווכים
+Name[hi]=प्रॉक्सी
+Name[is]=Milliþjónn
+Name[ja]=プロキシ
+Name[ka]=პროქსი
+Name[kk]=Прокси
+Name[km]=ប្រូកស៊ី
+Name[ko]=프록시
+Name[lo]=ພຣັອກຊີ
+Name[mk]=Прокси
+Name[mn]=Итгэмжилэгч-сервер
+Name[ms]=Proksi
+Name[nb]=Mellomtjener
+Name[ne]=प्रोक्सी
+Name[nn]=Mellomtenar
+Name[nso]=Moemalegato
+Name[pa]=ਪਰਾਕਸੀ
+Name[pl]=Pośrednik (Proxy)
+Name[ru]=Прокси
+Name[rw]=Porogisi
+Name[se]=Gaskabálvá
+Name[sl]=Posrednik
+Name[sr]=Прокси
+Name[sr@Latn]=Proksi
+Name[sv]=Proxyservrar
+Name[ta]=பதிவாணை
+Name[te]=ప్రాక్సి
+Name[tg]=Прокси
+Name[th]=พร็อกซี
+Name[tr]=Vekil Sunucu
+Name[uk]=Проксі
+Name[uz]=Proksi
+Name[uz@cyrillic]=Прокси
+Name[ven]=Purokusi
+Name[xh]=Umntu onegunya lokusebenzela omnye
+Name[zh_CN]=代理
+Name[zh_TW]=代理
+Name[zu]=Umlingani
+Comment=Configure the proxy servers used
+Comment[af]=Konfigureer die volmag bedieners gebruik word
+Comment[ar]=إعداد خوادم التوكيل المستعملة
+Comment[az]=İşlədilən vəkil verici qurğuları
+Comment[be]=Настаўленні сервераў проксі
+Comment[bg]=Настройване на прокси сървъра
+Comment[bn]=ব্যবহৃত প্রক্সি সার্ভার কনফিগার করুন
+Comment[br]=Kefluniañ ar servijeroù proksi implijet
+Comment[bs]=Podesite proxy servere
+Comment[ca]=Configura els servidors intermediaris emprats
+Comment[cs]=Nastavení proxy serverů
+Comment[csb]=Kònfigùracëjô pòstrzédniczącëch serwerów (proxy)
+Comment[cy]=Ffurfweddu gweinyddion dirprwyol i'w defnyddio
+Comment[da]=Indstil de proxyservere der bruges
+Comment[de]=Proxy-Server einrichten
+Comment[el]=Ρυθμίστε τους διαμεσολαβητές που χρησιμοποιούνται
+Comment[eo]=Agordo de prokurilo
+Comment[es]=Configuración de los servidores Proxy usados
+Comment[et]=Kasutatavate proxy serverite seadistamine
+Comment[eu]=Konfiguratu erabilitako proxy zerbitzariak
+Comment[fa]=پیکربندی پیشکارهای استفاده‌شده
+Comment[fi]=Käytettävät välityspalvelimet
+Comment[fr]=Configuration des serveurs mandataires (proxy) utilisés
+Comment[fy]=Hjir kinne jo de Proxy-tsjinner ynstelle
+Comment[gl]=Configurar os servidores proxy empregados
+Comment[he]=שינוי הגדרות השרתים המתווכים שנעשה בהם שימוש
+Comment[hi]=उपयोग में प्रॉक्सी सर्वर कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje proxy poslužitelja
+Comment[hu]=A proxy kiszolgálók beállításai
+Comment[is]=Stilla milliþjóna sem á að nota
+Comment[it]=Configura il server proxy da usare
+Comment[ja]=プロキシサーバの設定
+Comment[ka]=გამოყენებული პროქსების კონფიგურაცია
+Comment[kk]=Қолданатын прокси серверлерді баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​ម៉ាស៊ីន​បម្រើ​ដែល​បាន​ប្រើ
+Comment[ko]=사용할 프록시 서버 설정
+Comment[lo]=ປັບແຕ່ງເຊີບເວີພຣັອກຊີ
+Comment[lt]=Konfigūruoti naudojamus proxy serverius
+Comment[mk]=Конфигурирајте ги прокси-серверите кои се користат
+Comment[mn]=Итгэмжилэгч сервер тохируулах
+Comment[ms]=Konfigur pelayan proksi yang digunakan
+Comment[mt]=Ikkonfigura servers proxy
+Comment[nb]=Oppsett av mellomtjenere
+Comment[nds]=De bruukten Proxies instellen
+Comment[ne]=प्रयोग गरिएको प्रोक्सी सर्भर कन्फिगर गर्नुहोस्
+Comment[nl]=Hier kunt u de Proxy-servers instellen
+Comment[nn]=Oppsett av mellomtenarar
+Comment[nso]=Beakanya diabi tsa moemalegato tseo di somisitswego
+Comment[pa]=ਵਰਤੇ ਜਾਂਦੇ ਪਰਾਕਸੀ ਸਰਵਰਾਂ ਦੀ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja serwerów pośredniczących (proxy)
+Comment[pt]=Configurar os servidores 'proxy' usados
+Comment[pt_BR]=Configura os servidores proxy usados
+Comment[ro]=Configurează serverele proxy utilizate
+Comment[ru]=Настройка серверов прокси
+Comment[rw]=Kuboneza amaseriveri porogisi akoreshwa
+Comment[se]=Heivet gaskabálváid mat geavahuvvojit
+Comment[sk]=Nastavenie proxy serverov
+Comment[sl]=Nastavitev uporabe posredniških strežnikov
+Comment[sr]=Подешавање коришћених прокси сервера
+Comment[sr@Latn]=Podešavanje korišćenih proksi servera
+Comment[sv]=Anpassa proxyservrar som används
+Comment[ta]=பயன்படுத்தப்பட்ட பதிவாணை சேவகன்களை அமை
+Comment[tg]=Танзими коргузорҳои прокси мавриди истифода
+Comment[th]=ปรับแต่งเซิร์ฟเวอร์พร็อกซี
+Comment[tr]=Vekil sunucularını yapılandırır
+Comment[tt]=Proxy serverlären caylaw
+Comment[uk]=Налаштування проксі-сервера
+Comment[uz]=Proksi serverlarini moslash
+Comment[uz@cyrillic]=Прокси серверларини мослаш
+Comment[ven]=Dzudzanyani dzisiva dza Proxy dzo shumiswaho
+Comment[vi]=Cấu hình máy chủ proxy được sử dụng
+Comment[wa]=Apontyî les sierveus proxy d' eployîs
+Comment[xh]=Qwalasela indlela abasebenziswa ngayo abancedisi be proxy
+Comment[zh_CN]=配置所用的代理服务器
+Comment[zh_TW]=設定使用的代理伺服器
+Comment[zu]=Hlanganisela abalekeleli abangabalingani abasetshenziswayo
+Keywords=Proxy,Proxy server,Firewall,Squid,proxy
+Keywords[ar]=الوكيل,خادم التوكيل,جدار عزل النار,Squid,الوكيل
+Keywords[az]=Proksi,vəkil verici,vəkil,Firewall,firewall,Squid,Proxy,proxy,atəş divarı,atəş
+Keywords[be]=Проксі,Сервер проксі,Брандмаўэр,проксі,Proxy,Proxy server,Firewall,Squid,proxy
+Keywords[bg]=прокси, сървър, посредник, Proxy, Proxy server, Firewall, Squid, proxy
+Keywords[br]=Proksi,Server proksi,Moger-tan,Squid,proksi
+Keywords[ca]=Intermediari,Servidor intermediari,Tallafocs,Squid,intermediari
+Keywords[csb]=proxy,pòstrzédnik,pòstrzédniczącô serwera,ògniowô scana,Squid
+Keywords[cy]=Dirprwy,Gweinydd dirprwyol,Mur gwarchod,Squid,dirprwy
+Keywords[da]=Proxy,Proxyserver,Brandmur,Squid,proxy
+Keywords[el]=Διαμεσολαβητής,Διαμεσολαβητής,Firewall,Squid,διαμεσολαβητής
+Keywords[eo]=Prokurilo,Prokuro-servo,Fajroŝirmilo,Squid
+Keywords[es]=Proxy,servidor Proxy,Cortafuegos,Squid,proxy
+Keywords[et]=proxy,proxy server,tulemüür,squid
+Keywords[eu]=Proxya,Proxy zerbitzaria,Firewalla,Squid,proxya
+Keywords[fa]=پیشکار، پیشکاری، دیوارۀ آتش، Squid،پیشکار
+Keywords[fi]=Välityspalvelin,Palomuuri,Squid
+Keywords[fr]=proxy,serveur mandataire,pare-feu,squid
+Keywords[fy]=proxy,proxy tsjinner,brânmourre,squid
+Keywords[ga]=Seachfhreastalaí,Balla Dóiteáin,Squid
+Keywords[gl]=Proxy,Servidor Proxy,Cortafogos,Squid,proxy
+Keywords[he]=מתווך,שרת מתווך,Firewall,Squid, Proxy,Proxy server,Squid,proxy
+Keywords[hi]=प्रॉक्सी,प्रॉक्सी सर्वर,फायरवाल,एसक्यू-आईडी,प्रॉक्सी
+Keywords[hr]=Proxy,Proxy server,Proxy poslužitelj, Firewall,Squid,proxy,Vatrozid
+Keywords[hu]=proxy,proxy kiszolgáló,tűzfal,Squid,proxy
+Keywords[is]=Eldveggur,Proxy,Proxy server,Firewall,Squid,proxy
+Keywords[it]=proxy,server proxy,firewall,Squid
+Keywords[ja]=プロキシ,プロキシサーバ,ファイアウォール,Squid,プロキシ
+Keywords[ka]=პროქსი,პროქსი სერვერი,ფაირვოლი,Squid,პროქსი
+Keywords[km]=ប្រូកស៊ី,ម៉ាស៊ីន​បម្រើ​ប្រូកស៊ី,ជញ្ជាំង​ភ្លើង,Squid,ប្រូកស៊ី
+Keywords[lo]=ພຣັອກຊີ,ເຊີເວີພຣັອກຊີ,ໄຟລ໌ວອລ໌,ສະວິກ,ພຣັອກຊີ
+Keywords[lt]=Proxy,Proxy server,Firewall,Squid,proxy, proxy serveris,ugniasienė
+Keywords[mk]=Proxy,Proxy server,Firewall,Squid,proxy, Прокси,Прокси сервер,Огнен Ѕид,прокси
+Keywords[mn]=Итгэмжилэгч,Итгэмжилэгч сервер,Firewall,Squid,proxy
+Keywords[nb]=proxy,mellomtjener,brannmur,squid
+Keywords[nds]=Proxy,Proxyserver,Nettdiek,Squid,proxy
+Keywords[ne]=प्रोक्सी, प्रोक्सी सर्भर, फायरवाल, स्क्विड, प्रोक्सी
+Keywords[nl]=proxy,proxy server,firewall,squid
+Keywords[nn]=proxy,mellomtenar,brannmur,squid
+Keywords[nso]=Moemalegato,Moabi wa moemalegato,Firewall,Squid,moemalegato
+Keywords[pa]=Proxy,Proxy server,Firewall,Squid,ਪਰਾਕਸੀ, ਪਰਾਕਸੀ ਸਰਵਰ
+Keywords[pl]=proxy,pośrednik,serwer pośredniczący,zapora ogniowa,Squid
+Keywords[pt]=Proxy,Servidor proxy,Firewall,Squid,proxy
+Keywords[pt_BR]=Proxy,Servidor Proxy,Firewall,Squid,proxy
+Keywords[ro]=proxy,server proxy,firewall,squid,zid de foc
+Keywords[rw]=Porogisi, Seriveri porogisi,Urukuta-muriro,Squid,porogisi
+Keywords[se]=proxy,gaskabálvá,gaskabálvá,buollinmuvra,squid
+Keywords[sl]=posrednik,posredniški strežnik,požarni zid,squid,proxy
+Keywords[sr]=Прокси, Прокси сервер, Firewall, Squid, прокси
+Keywords[sr@Latn]=Proksi, Proksi server, Firewall, Squid, proksi
+Keywords[sv]=Proxy,Proxy-server,Brandvägg,Squid,proxy
+Keywords[ta]=பதிவாணை,பதிவாணை சேவகன்,ஃபயர்வால்,ஸ்க்யுட்,ப்ராக்சி
+Keywords[th]=พร็อกซี,เซิร์ฟเวอร์พร็อกซี,ไฟร์วอลล์,สควิด,พร็อกซี
+Keywords[tr]=Vekil,Vekil sunucu,Güvenlik duvarı,Squid,proxy
+Keywords[uk]=проксі,проксі-сервер,фаєрвол,Squid,proxy
+Keywords[uz]=Squid,Proksi,Proksi server,Fayervol,proksi
+Keywords[uz@cyrillic]=Squid,Прокси,Прокси сервер,Файервол,прокси
+Keywords[ven]=Purokusi,Siva ya Purokusi,Luvhondo lwa mulilo,Squid,Purokusi
+Keywords[vi]=Proxy,Máy phục vụ proxy,Tường lửa,Squid,proxy
+Keywords[wa]=Proxy,Proxy server,Firewall,Squid,proxy,sierveu proxy,meur siconte feu
+Keywords[xh]=Umntu onegunya lokudsebenzela omnye, umncedisi womntu onegunya,udonga lomlilo,Squid,umntu onegunya lokusebenzela omnye
+Keywords[zh_CN]=Proxy,Proxy server,Firewall,Squid,proxy,代理,代理服务器,防火墙
+Keywords[zh_TW]=Proxy,Proxy server,Firewall,Squid,proxy,代理,代理伺服器,防火牆
+Keywords[zu]=Umlingani,Umlekeleli ongumlingana,Firewall,Squid,umlingani
+
+Categories=Qt;KDE;X-KDE-settings-network;
diff --git a/kcontrol/kio/smb.desktop b/kcontrol/kio/smb.desktop
new file mode 100644
index 000000000..7a1330706
--- /dev/null
+++ b/kcontrol/kio/smb.desktop
@@ -0,0 +1,233 @@
+[Desktop Entry]
+Type=Application
+DocPath=kcontrol/smb/index.html
+Icon=samba
+Exec=kcmshell smb
+
+
+X-KDE-Library=kio
+X-KDE-FactoryName=smb
+X-KDE-ParentApp=kcontrol
+
+Name=Windows Shares
+Name[af]=Vensters Gedeelde bronne
+Name[ar]=مشاركات Windows
+Name[az]=Windows Payları
+Name[be]=Агульныя тэчкі Windows
+Name[bg]=Споделяне с Windows
+Name[bn]=উইণ্ডোস শেয়ারস
+Name[br]=Rannadur prenestrer
+Name[ca]=Comparticions Windows
+Name[cs]=Sdílené disky systému Microsoft Windows
+Name[csb]=Zbiérné dostónczi Windows
+Name[cy]=Rhaniadau Windows
+Name[da]=Windows-shares
+Name[de]=Windows-Freigaben
+Name[el]=Κοινόχρηστοι πόροι Windows
+Name[eo]=Vindozaj retdosierujoj
+Name[es]=Comparticiones Windows
+Name[et]=Windowsi ressursid
+Name[eu]=Windows konpartizioak
+Name[fa]=اشتراکهای ویندوزی
+Name[fi]=Windows-jaot
+Name[fr]=Partages Windows
+Name[fy]=Windows-netwurken
+Name[gl]=Comparticións con Windows
+Name[he]=שיתופי Windows
+Name[hi]=विंडोज़ साझेदारी
+Name[hr]=Windows dijeljenja
+Name[hu]=Samba kliens
+Name[id]=Share Windows
+Name[is]=SMB netdrif
+Name[it]=Condivisioni Windows
+Name[ja]=ウィンドウズ共有
+Name[ka]=Windows საზიარო
+Name[kk]=Windows ортақ ресурстары
+Name[ko]=윈도 공유
+Name[lo]=ການໃຊ້ຊັບພະຍາກອນຮ່ວມກັບວິນໂດສ໌
+Name[lt]=Windows bendro naudojimo diskai
+Name[lv]=Windows Šāres
+Name[mk]=Windows заеднички
+Name[mn]=Windows-Нөөцүүд
+Name[ms]=Kongsi Tetingkap
+Name[mt]=Shares tal-Windows
+Name[nb]=Delte Windows-ressurser
+Name[nds]=Windows-Freegaven
+Name[ne]=विण्डोज साझेदारी
+Name[nl]=Windows-netwerken
+Name[nn]=Delte Windows-ressursar
+Name[nso]=Dikabagano tsa Window
+Name[oc]=Directoris windows
+Name[pa]=ਵਿੰਡੋ (windows) ਸਾਂਝ
+Name[pl]=Udostępniane zasoby Windows
+Name[pt]=Partilhas do Windows
+Name[pt_BR]=Compartilhamentos Windows
+Name[ro]=Partajări Windows
+Name[ru]=Ресурсы Windows
+Name[rw]=Imigabane Windows
+Name[se]=Juohkojuvvon Windows-resurssat
+Name[sk]=Zdieľanie v sieti Windows
+Name[sl]=Souporabe iz Windows
+Name[sr]=Дељени Windows ресурси
+Name[sr@Latn]=Deljeni Windows resursi
+Name[sv]=Utdelade Windows-kataloger
+Name[ta]=சாளரங்களின் பங்குகள்
+Name[tg]=Иштирокоти Windows
+Name[th]=ใช้ทรัพยากรร่วมกับวินโดว์ส
+Name[tr]=Windows Paylaşımları
+Name[tt]=Windows Urtaqları
+Name[uk]=Спільні ресурси Windows
+Name[ven]=Mukovhekano wa dziwindo
+Name[vi]=Chia sẻ với Windows
+Name[wa]=Pårtaedjes avou Windows
+Name[xh]=Ulwahlulelwano lwe Windows
+Name[zh_CN]=Windows 共享资源
+Name[zh_TW]=Windows 資源共享
+Name[zu]=Izabelo zama-Window
+
+Comment=Use to configure which windows (SMB) filesystems you can browse
+Comment[af]=Gebruik na konfigureer wat vensters (Smb) lêerstelsels jy kan blaai
+Comment[ar]=إستعمل لإعداد أي من أنظمة الملفات (SMB) تستطيع التصفّح
+Comment[az]=Gəzə biləcəyiniz windows (SMB) fayl sistemlərini quraşdırmaqda işlədilir
+Comment[be]=Настаўленні файлавых сістэмаў SMB
+Comment[bg]=Настройване споделянето на файлове с Windows
+Comment[bn]=কোন কোন উইণ্ডোস (সাম্বা) শেয়ার ব্রাউজ করতে পারবেন তা নির্বাচন করতে ব্যবহার করুন
+Comment[br]=Implijit evit kefluniañ pe reizhiad restroù windows (SMB) a c'hellit furchal
+Comment[bs]=Koristite ovu opciju za podešavanje Windows (SMB) datotečnih sistema koje želite pregledavati
+Comment[ca]=S'usa per a configurar en quins sistemes de fitxers windows (SMB) es podrà navegar
+Comment[cs]=Použijte k nastavení systémů Windows (SMB), které chcete procházet
+Comment[csb]=Kònfigùracëjô przistãpnëch systemòwëch lopków z Windowsa (SMB)
+Comment[cy]=Defnyddio i ffurfweddu pa cysodau ffeil Windows (SMB) a fedrwch eu pori
+Comment[da]=Bruges til at indstille hvilke Windows-filsystemer (SMB) du kan se
+Comment[de]=Hier stellen Sie ein, welche (SMB-)Dateisysteme Sie durchsuchen können
+Comment[el]=Ρυθμίστε ποια συστήματα αρχείων windows (SMB) μπορείτε να επισκεφθείτε
+Comment[eo]=Retdosierujoj alireblaj per SMB
+Comment[es]=Úselo para configurar qué sistemas de archivos de Windows (SMB) puede examinar
+Comment[et]=Windowsi (SMB) jagatud resursside lehitsemise seadistused
+Comment[eu]=Erabil ezazu zein windows fitxategi sistema (SMB) araka dezakezunkonfiguratzeko
+Comment[fa]=استفاده جهت پیکربندی سیستم پرونده‌های ویندوزی(SMB) که می‌توانید مرور کنید.
+Comment[fi]=Käytä asettaaksesi windowsin (SMB) tiedostojärjestelmiä, joita voit selata
+Comment[fr]=Configuration des systèmes de fichiers Windows (SMB)
+Comment[fy]=Hjir kinne jo fêstelle mei wat fan Windows-triemsystemen (SMB) jo fia it netwurk blêdzje wolle.
+Comment[gl]=Use-o para configurar os sistemas de ficheiros windows (SMB) que pode navegar
+Comment[he]=שינוי ההגדרות בנוגע למערכות הקבצים של SMB) Windows) בהן ניתן לעיין
+Comment[hi]=कॉन्फ़िगर करने के लिए इस्तेमाल करें कि कौन सा विंडोज़ फ़ाइलसिस्टम (SMB) आप ब्राउज कर सकते हैं.
+Comment[hr]=Konfiguriranje Windows (SMB) datotečnih sustava koje smijete pregledavati
+Comment[hu]=Az SMB fájlrendszerek böngészésének beállításai
+Comment[id]=Digunakan untuk konfigurasi sistem file windows (SMB) yang digunakan
+Comment[is]=Stilla hvaða SMB netdiska (e. windows sameignir) þú getur skoðað
+Comment[it]=Configura quali filesystem windows (SMB) si possono sfogliare
+Comment[ja]=windows(SMB)ファイルシステムをブラウズするための設定
+Comment[ka]=გამოიყენება windows (SMB) ფაილური სისტემების ჩვენების მისათითებლად
+Comment[kk]=Windows-компьютерлердің қай файл жүйелері (SMB) қатынауға ашық екенін баптау
+Comment[km]=ប្រើ​ដើម្បី​កំណត់​រចនាសម្ព័ន្ធ ថា​តើ​ប្រព័ន្ធ​ឯកសារ Windows (SMB) ណា​មួយ​ដែល​អ្នក​អាច​រុករក
+Comment[ko]=윈도 (SMB) 파일 시스템 탐색 설정
+Comment[lo]=ໃຊ້ສຳລັບການປັບແຕ່ງການເອີ້ນລະບົບ ແຟ້ມຂອງວິນໂດສ໌ (SMB)
+Comment[lt]=Naudokite tai norėdami nustatyti kurias Windows (SMB) bylų sistemas Jūs galėsite naršyti
+Comment[lv]=Lietojiet, lai norādītu kuras windows (SMB) failu sistēmas Jūs varētu pārlūkot
+Comment[mk]=Користете го за да конфигурирате кои windows (SMB) датотечни системи можете да ги прелистувате
+Comment[mn]=Энд та ямар виндовс (SMB-)Файлын систем нэгжиж чадахаа тохируулж болно
+Comment[ms]=Guna untuk konfigur sistem fail tetingkap (SMB) mana yang anda boleh layar
+Comment[mt]=Uża dan biex tagħżel liema filesystems tal-Windows (SMB) tista' tibbrowsja
+Comment[nb]=Her kan du stille inn hvilke Windows-filsystemer (SMB) du kan lese
+Comment[nds]=Instellen, welke Windows- (SMB-) Dateisystemen Du bruken kannst
+Comment[ne]=तपाईँले ब्राउज गर्न सक्ने विण्डोजको (SMB) फाइल प्रणालीहरूमा कन्फिगर गर्न प्रयोग गर्नुहोस्
+Comment[nl]=Hier kunt u bepalen op welke Windows-bestandssytemen (SMB) u via het netwerk wilt kunnen bladeren.
+Comment[nn]=Her kan du setja opp kva for Windows-filsystem (SMB) du kan lesa
+Comment[nso]=E hlwela e beakanya gore ke di-system dife tsa faele ya window (SMB) tseo oka inyakisago tsona
+Comment[oc]=S'usa per configurar quins sistemes de fiquièrs windows (SMB) podetz fullejar
+Comment[pa]=ਸੰਰਚਨਾ ਵਰਤੋਂ, ਜੋ ਕਿ ਵਿੰਡੋ (SMB) ਫਾਇਲ ਸਿਸਟਮ ਦੀ ਝਲਕ ਵੇਖਾ ਸਕਦਾ ਹੈ
+Comment[pl]=Konfiguracja dostępnych systemów plików z Windows (SMB)
+Comment[pt]=Configuração das partilhas de Windows (SMB) a que você pode aceder
+Comment[pt_BR]=Use para configurar em quais sistemas de arquivos SMB (Rede Windows) você pode navegar
+Comment[ro]=Configurează partajările Windows (SMB) pe care le puteți răsfoi
+Comment[ru]=Настройка просмотра доступных разделяемых ресурсов Windows-машин
+Comment[rw]=Gukoresha mu kuboneza sisitemudosiye ya Windows (SMB) ushobora gucukumbura
+Comment[se]=Dás sáhtát heivehit guđe Windows-fiilavuogádaid (SMB) oaččut lohkat
+Comment[sk]=Konfigurácia súborového systému Windows (SMB), ktorý môžete prehliadať
+Comment[sl]=Uporabite za nastavitev datotečnih sistemov Windows (SMB), po katerih lahko brskate
+Comment[sr]=Користите да би подесили које Windows (SMB) системе фајлове ћете моћи да прегледате
+Comment[sr@Latn]=Koristite da bi podesili koje Windows (SMB) sisteme fajlove ćete moći da pregledate
+Comment[sv]=Använd detta för att ställa in vilka Windows-filsystem (SMB) som du kan komma åt
+Comment[ta]=நீங்கள் உலாவக்கூடிய சாளர கோப்பு அமைப்புகளை (SMB) வடிவமைக்கவும்
+Comment[tg]= Барои танзим кардани системаи windows, ки (SMB)-ро мехоҳед мурур кунед, қобили истифода аст
+Comment[th]=ใช้ปรับแต่งการเรียกดูระบบแฟ้มของวินโดว์ส (SMB)
+Comment[tr]=Gözatabileceğiniz windows (SMB) dosya sistemlerini yapılandırmakta kullanılır
+Comment[tt]=Windows çeltärendä büleneşkän belem qaraw tärtibeneñ caylawları
+Comment[uk]=Налаштування файлових систем Windows (SMB), для навігації
+Comment[ven]=I shuma u khonifigara uri ndi mashumele a (SMB) faela a windo ane ninga buronza
+Comment[vi]=Dùng để cấu hình hệ thống tập tin Windows (SMB) nào mà bạn có thể duyệt
+Comment[wa]=Eployî po-z apontyî ké sistinme di fitchî Windows (SMB) vos ploz foyter
+Comment[xh]=Sebenzisa ukuqwalasela eyiphi (SMB) indlela yousebenza okwaziyo ukukhangela iincwadi
+Comment[zh_CN]=配置您可以浏览的 Windows (SMB) 文件系统
+Comment[zh_TW]=設定您可以瀏覽的 Windows (SMB) 檔案系統
+Comment[zu]=Sebenzisa ukuhlanganisela ukuthi imaphi amasistimu amafayela ama-window (SMB) ongacinga kuwo
+
+Keywords=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords
+Keywords[ar]=SMB,SAMBA,زبون SMB,شبكة Windows,شبكة المنطقة المحلية,الشبكة,الجوار,الخادم,البث,WINS,المشاركة,تسجيل الدخول,كلمات المرور
+Keywords[az]=SMB,SAMBA,SMB alıcı,Windows şəbəkəsi,LAN,Şəbəkə,qonşular,Giriş,Parol,Paylaşım,WINS,yayın
+Keywords[be]=Кліент SMB,Сетка Windows,Навакольнае асяроддзе,Сетка,асяроддзе,Сервер,Публікацыя,Агульныя файлы,Уваход,Пароль,Паролі,Уліковы запіс,Сесія,SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords
+Keywords[bg]=самба, споделяне, файлове, принтери, печат, пароли, SMB, SAMBA, SMB client, Windows network, LAN, Network, neighborhood, Server, Broadcast, WINS, Share, Login, Passwords
+Keywords[ca]=SMB,SAMBA,Client SMB,Xarxa Windows,LAN,Xarxa,veïnat,servidor,Broadcast,WINS,Compartició,Accés,Contrasenyes
+Keywords[cs]=SMB,Samba,SMB klient,Síť Microsoft Windows,LAN,Síť,Okolní počítače,Server,Broadcast,WINS,Share,Login,Hesla
+Keywords[csb]=SMB,SAMBA,klient SMB,séc Windows,LAN,môlowô séc,sécowé òkrãże,serwera,rozgłôszanié,WINS,dostónk,logòwanié,parole
+Keywords[cy]=SMB,SAMBA,dibynnydd SMB,Rhwydwaith Windows,LAN,Rhwydwaith,cymdogaeth,Gweinydd,Darllediad,WINS,Rhanniad,Mewngofnodi,Cyfrineiriau
+Keywords[da]=SMB,Samba,SMB-klient,Windows-netværk,Lan,Netværk,arbejdsgruppe,server,Udsend,WINS,Del,Login,kodeord
+Keywords[de]=SMB,Samba,SMB-Client,Windows-Netzwerk,LAN,Netzwerk,Netzumgebung,Umgebung,Server,Broadcast,WINS,Freigabe,Anmeldung,Passwörter
+Keywords[el]=SMB,SAMBA,Πελάτης SMB,Δίκτυο Windows,LAN,Δίκτυο,γειτονιά,Εξυπηρετητής,Εκπομπή,WINDS,Κοινόχρηστος πόρος,Σύνδεση,Κωδικοί πρόσβασης
+Keywords[en_GB]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighbourhood,Server,Broadcast,WINS,Share,Login,Passwords
+Keywords[eo]=SMB,Sambo,kliento,Vindozo,reto,LAN,najbaraĵo,servilo,dissendo,WINS,retdosierujo,saluto,pasvorto
+Keywords[es]=SMB,SAMBA,Cliente SMB,Red Windows,LAN,Red,entorno,Servidor,Broadcast,WINS,Compartición,Entrada,Acceso,Contraseñas
+Keywords[et]=SMB,samba,SMB klient,Windowsi võrk,LAN,võrk,naabrus,server,broadcast,üldlevi,WINS,jagatud ressurss,kasutajanimi,paroolid
+Keywords[eu]=SMB,SAMBA,SMB bezeroa,Windows sarea,LAN,Sarea,ingurunea,Zerbitzaria,Broadcast,WINS,Konpartizioa,Saio hasiera,Pasahitza
+Keywords[fa]=SMB، SAMBA، کارخواه SMB، شبکۀ ویندوزی، شبکۀ داخلی، شبکه، مجاورت، کارساز، پخش، WINS، مشترک، ورود، اسم‌ رمزها
+Keywords[fi]=SMB,SAMBA,SMB-asiakas,Windows verkko,LAN,Verkko,Naapuruus,Palvelin,Jakelu,WINS,Jako,Kirjautuminen,Salasanat
+Keywords[fr]=smb,samba,client smb,réseau Windows,lan,réseau local,réseau,voisinage,serveur,broadcast,diffusion,wins,partage,connexion,mot de passe,windows,login
+Keywords[fy]=SMB,SAMBA,SMB-client,Windows-netwurk,LAN,netwurk,omwrâld,neighborhood,server,broadcast,WINS,share,Oanmelde,login,wachtwurden,netwurk
+Keywords[gl]=SMB,SAMBA,cliente SMB,rede Windows,LAN,Rede,veciñanza,Servidor,Broadcast,WINS,Compartición,Login,Inicio,Contrasinais
+Keywords[he]=שיתוף,כניסה למערכת,ססמאות,WINS,רשת מקומית,רשת,שכנים,שרת,שידור,רשת Windows,תוכנית SMB,SAMBA,SMB, SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords
+Keywords[hi]=एसएमबी,साम्बा,एसएमबी क्लाएंट,विंडोज़ नेटवर्क,लैन,नेटवर्क,नेबरहुड,सर्वर,ब्राडकास्ट,विन्स,साझेदारी,लॉगइन,पासवर्ड
+Keywords[hr]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,SMB klijent,Windows mreža,Mreža,susjedstvo,Poslužitelj,Opća objava,Dijeljenje,Prijava,Lozinke
+Keywords[hu]=SMB,Samba,SMB-kliens,Windows-hálózat,LAN,hálózat,környezet,kiszolgáló,broadcast,WINS,megosztás,bejelentkezés,jelszavak
+Keywords[id]=SMB,SAMBA,klien SMB,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords
+Keywords[is]=Windows net,SMB netdrif,netdrif,net,SMB biðill,Net,nágrenni,þjónn,deild,lykilorð,innskráning
+Keywords[it]=SMB,SAMBA,Client SMB,Rete Windows,LAN,Rete,Risorse di rete,Accesso,WINS,Login,Share,Condivisioni,Password,Broadcast,vicini,server,risorse di rete
+Keywords[ja]=SMB,SAMBA,SMBクライアント,Windowsネットワーク,LAN,ネットワーク,neighborhood,サーバ,ブロードキャスト,WINS,共有,ログイン,パスワード
+Keywords[km]=SMB,SAMBA,ម៉ាស៊ីន​ភ្ញៀវ SMB,បណ្ដាញ Windows,LAN,បណ្ដាញ,កុំព្យូទ័រ​ជិត​ខាង,ម៉ាស៊ីន​បម្រើ,ផ្សាយ,WINS,រួម,ចូល,ពាក្យ​សម្ងាត់
+Keywords[lo]=SMB,SAMBA,ໄຄລເອນ SMB,ລະບົບເຄືອຂ່າຍຂອງວິນໂດສ໌,ແລນ, ລະບົບເຄືອຂ່າຍ,ລະແວກດງວກັນ,ເຊີເວີ,ບອດຄາສ, WINS,ຊັບພະຍາກອນໃຊ້ຮ່ວມກັນ,ລັອກອິນ,ລະຫັດຜ່ານ
+Keywords[lt]=SMB,SAMBA,SMB client,SMB klientas,Windows network,Windows tinklas,LAN,vietinis tinklas,Network,tinklas,neighborhood,kaiminystė,Server,serveris,Broadcast,transliacija,WINS,Share,bendro naudojimo,bendro naudojimo diskas,Login,Passwords
+Keywords[lv]=SMB,SAMBA,SMB klients,Windows tīkls,LAN,Tīkls,kaimiņš,Serveris,Pārraide,WINS,Šāre,Pieteikšanās,Paroles
+Keywords[mk]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,клиент,Windows мрежа,Мрежа, соседство,Сервер,Емитување,WINS,Заеднички,Најава,Лозинки
+Keywords[mn]=SMB,Samba,SMB-Client,Виндовс-Сүлжээ,LAN,Сүлжээ, Сүлжээний орчин,Орчин,сервер,Цацалт,WINS,Share,Login,Нууц үгс
+Keywords[nb]=SMB,SAMBA,SMB-klient,Windows-nettverk,LAN,Nettverk,nabolag,tjener,kringkasting,WINS,deling,innlogging,passord,ressurs
+Keywords[nds]=SMB,SAMBA,SMB-Client,Windowsnettwark,LAN,Nettwark,Naverschap,Server,Broadcast,Rundroop,WINS,deelt Ressource,anmellen,Passwöör
+Keywords[ne]=SMB, SAMBA, SMB क्लाइन्ट,सञ्झ्याल सञ्जाल, LAN, सञ्जाल, छिमेकी, सर्भर, प्रसारण, WINS, बाडँफाट, लगइन, पासवर्ड
+Keywords[nl]=SMB,SAMBA,SMB-client,Windows-netwerk,LAN,netwerk,omgeving,neighborhood,server,broadcast,WINS,share,inloggen,login,aanmelden,wachtwoorden,netwerk
+Keywords[nn]=SMB,SAMBA,SMB-klient,Windows-nettverk,LAN,nettverk,nabolag,grannelag,tenar,kringkasting,WINS,deling,innlogging,passord,ressurs
+Keywords[nso]=SMB,SAMBA,Moreki wa SMB,Kgokagano ya di-Window,LAN,Kgokagano,boagisane,Moabi,Kgaso,WINS,Kabagano,Tseno,Mantsuphetiso
+Keywords[pa]=SMB,SAMBA,SMB ਕਲਾਂਇਟ,Windows network,LAN,ਨੈਟਵਰਕ,ਗੁਆਂਢੀ, ਸਰਵਰ,Broadcast,WINS,ਸਾਂਝ, ਲਾਗਿੰਨ, ਗੁਪਤ-ਕੋਡ
+Keywords[pl]=SMB,SAMBA,klient SMB,sieć Windows,LAN,sieć lokalna,otoczenie sieciowe,serwer,rozgłoszenie,WINS,zasób,logowanie,hasła
+Keywords[pt]=SMB,SAMBA,cliente SMB,rede Windows,Windows,LAN,rede,vizinhança de rede,servidor,difusão,WINS,partilha,login,senhas
+Keywords[pt_BR]=SMB,SAMBA,cliente SMB,rede Windows,LAN,rede,vizinhança,ambiente de rede,servidor,difusão,WINS,Volume,compartilhamento,login,senhas
+Keywords[ro]=SMB,SAMBA,client SMB,Windows,LAN,rețea,vecinătate,server,difuziune,WINS,partajare,logare,parole
+Keywords[rw]=SMB,SAMBA,Umukiriya SMB, Urusobemiyoboro Windows,LAN,Urusobemiyoboro,Seriveri,Isakazamakuru,WINS,Isangira,Ifashayinjira,Amagambobanga
+Keywords[se]=SMB,SAMBA,SMB-klienta,Windows-fierpmádat,LAN,fierpmádat,WINS,sisačáliheapmi,beassansánit
+Keywords[sk]=SMB,SAMBA,SMB klient,sieť Windows,LAN,Sieť,WINS,broadcast,server,login,prihlásenie,heslá,share
+Keywords[sl]=SMB,SAMBA,odjemnik SMB,omrežje Windows,LAN,omrežje,omrežna soseščina,oddajanje,WINS,prijava,gesla
+Keywords[sr]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Сервер,Broadcast,WINS,Share,Login,Passwords,Мрежа,комшилук,дељење,пријава,лозинке
+Keywords[sr@Latn]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,Mreža,komšiluk,deljenje,prijava,lozinke
+Keywords[sv]=SMB,SAMBA,SMB-klient,Windowsnätverk,LAN,Nätverk,omgivning,Server,Broadcast,WINS,Utdelning,Lösenord,Inloggning
+Keywords[ta]=SMB,SAMBA,SMB உறுப்பினர்,சாளரங்கள் வலைதளம்,LAN,வலைதளம்,பல வலைதளங்கள்,சேவகன்,ஒலிப்பரப்புதல்,WINS,பங்கு,உள்நுழை,கடவுச்சொற்கள்
+Keywords[th]=SMB,SAMBA,ไคลเอนต์ SMB,ระบบเครือข่ายของวินโดว์ส,แลน,ระบบเครือข่าย,ที่ใกล้เคียง,เซิร์ฟเวอร์,ถ่ายทอด,WINS,ทรัพยากรใช้ร่วมกัน,ล็อกอิน,รหัสผ่าน
+Keywords[tr]=SMB,SAMBA,SMB istemci,Windows ağı,LAN,Ağ,komşular,Giriş,Parola,Paylaşım,WINS,yayın
+Keywords[uk]=клієнт SMB,мережа Windows,ЛОМ,LAN,мережа,оточення,SMB,SAMBA,сервер,мережа Windows,ЛОМ,LAN,мережа,оточення,SMB,SAMBA,сервер,трансляція,WINS,спільний ресурс,реєстрація,паролі
+Keywords[uz]=SMB,SAMBA,SMB klienti,Windows tarmogʻi,LAN,Tarmoq,tarmoq muhiti,Server,Broadcast,WINS,Share,Foydalanuvchi,Maxfiy soʻzlar
+Keywords[uz@cyrillic]=SMB,SAMBA,SMB клиенти,Windows тармоғи,LAN,Тармоқ,тармоқ муҳити,Сервер,Broadcast,WINS,Share,Фойдаланувчи,Махфий сўзлар
+Keywords[ven]=SMB,SAMBA,vhashumisani na SMB,Vhukwamani ha Dziwindo,LAN,Vhukwamani,vhadzulatsini,Siva,Hasha,WINS,U kovhekana,U loga,Dziphasiwede
+Keywords[vi]=SMB,SAMBA,SMB khách,Mạng Windows,LAN,Mạng,hàng xóm,Máy chủ,Broadcast,WINS,Chia xẻ,Đăng nhập,Mật khẩu
+Keywords[wa]=SMB,SAMBA,cliyint SMB,rantoele Windows,LAN,Rantoele,vijhnaedje,Sierveu,Broadcast,WINS,pårtaedje,pårtaedjî,Login,Passwords,sicrets,mots di passe
+Keywords[xh]=SMB,SAMBA,umxhasi we SMB,umsebenzi womnatha we Window,LAN, Umsebenzi womnatha,ubumelwane,Umncedisi,Usasazo,WINS,Yahlula,Igama elithile, Amagama agqithisiweyo
+Keywords[zh_CN]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,局域网,网络,邻居,服务器,广播,共享,登录,密码
+Keywords[zh_TW]=SMB,SAMBA,SMB client,Windows network,LAN,Network,neighborhood,Server,Broadcast,WINS,Share,Login,Passwords,客戶端程式,Windows 網路,區域網路,網路,網路芳鄰,伺服器,廣播,共享,登入,密碼
+Keywords[zu]=SMB,SAMBA,umxhasi we-SMB,uxhumano olusakazekile lwama-window,LAN,Uxhumano olusakazekile,isizinda,Umlekeleli,Sakaza,WINS, ukwabelana,Ukungena ngaphakathi,Amagama-okudlula
+
diff --git a/kcontrol/kio/smbrodlg.cpp b/kcontrol/kio/smbrodlg.cpp
new file mode 100644
index 000000000..dc075c793
--- /dev/null
+++ b/kcontrol/kio/smbrodlg.cpp
@@ -0,0 +1,191 @@
+/* This file is part of the KDE project
+
+ Copyright (C) 2000 Alexander Neundorf <neundorf@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 <qlayout.h>
+#include <qlabel.h>
+#include <qtextcodec.h>
+
+#include <klocale.h>
+#include <kconfig.h>
+#include <kglobal.h>
+#include <kcharsets.h>
+#include <kcombobox.h>
+#include <kdialog.h>
+
+#include "smbrodlg.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+
+SMBRoOptions::SMBRoOptions(QWidget *parent)
+ : KCModule(parent, "kcmkio")
+{
+ QGridLayout *layout = new QGridLayout(this,2,-1,KDialog::marginHint(),
+ KDialog::spacingHint());
+ QLabel *label=new QLabel(i18n("This is the configuration for the samba client only, not the server."),this);
+ layout->addMultiCellWidget(label,0,0,0,1);
+
+ m_userLe=new QLineEdit(this);
+ label=new QLabel(m_userLe,i18n("Default user name:"),this);
+ layout->addWidget(label,1,0);
+ layout->addWidget(m_userLe,1,1);
+
+ m_passwordLe=new QLineEdit(this);
+ m_passwordLe->setEchoMode(QLineEdit::Password);
+ label=new QLabel(m_passwordLe,i18n("Default password:"),this);
+ layout->addWidget(label,2,0);
+ layout->addWidget(m_passwordLe,2,1);
+
+/* m_workgroupLe=new QLineEdit(this);
+ label=new QLabel(m_workgroupLe,i18n("Workgroup:"),this);
+ layout->addWidget(label,3,0);
+ layout->addWidget(m_workgroupLe,3,1);
+
+ m_showHiddenShares=new QCheckBox(i18n("Show hidden shares"),this);
+ layout->addMultiCellWidget(m_showHiddenShares,4,4,0,1);
+
+ m_encodingList = new KComboBox( false, this );
+ QStringList _strList = KGlobal::charsets()->availableEncodingNames();
+ m_encodingList->insertStringList( _strList );
+
+ label = new QLabel( m_encodingList, i18n( "MS Windows encoding:" ), this );
+ layout->addWidget( label, 3, 0 );
+ layout->addWidget( m_encodingList, 3, 1 );
+ */
+
+ layout->addWidget(new QWidget(this),4,0);
+
+// connect(m_showHiddenShares, SIGNAL(toggled(bool)), this, SLOT(changed()));
+ connect(m_userLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed()));
+ connect(m_passwordLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed()));
+// connect(m_workgroupLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed()));
+// connect( m_encodingList, SIGNAL( activated( const QString & ) ), this , SLOT( changed() ) );
+
+ layout->setRowStretch(4, 1);
+
+ // finaly read the options
+ load();
+}
+
+SMBRoOptions::~SMBRoOptions()
+{
+}
+
+void SMBRoOptions::load()
+{
+ KConfig *cfg = new KConfig("kioslaverc");
+
+ QString tmp;
+ cfg->setGroup( "Browser Settings/SMBro" );
+ m_userLe->setText(cfg->readEntry("User"));
+// m_workgroupLe->setText(cfg->readEntry("Workgroup"));
+// m_showHiddenShares->setChecked(cfg->readBoolEntry("ShowHiddenShares",false));
+
+// QStringList _strList = KGlobal::charsets()->availableEncodingNames();
+// QString m_encoding = QTextCodec::codecForLocale()->name();
+// m_encodingList->setCurrentItem( _strList.findIndex( cfg->readEntry( "Encoding", m_encoding.lower() ) ) );
+
+ // unscramble
+ QString scrambled = cfg->readEntry( "Password" );
+ QString password = "";
+ for (uint i=0; i<scrambled.length()/3; i++)
+ {
+ QChar qc1 = scrambled[i*3];
+ QChar qc2 = scrambled[i*3+1];
+ QChar qc3 = scrambled[i*3+2];
+ unsigned int a1 = qc1.latin1() - '0';
+ unsigned int a2 = qc2.latin1() - 'A';
+ unsigned int a3 = qc3.latin1() - '0';
+ unsigned int num = ((a1 & 0x3F) << 10) | ((a2& 0x1F) << 5) | (a3 & 0x1F);
+ password[i] = QChar((uchar)((num - 17) ^ 173)); // restore
+ }
+ m_passwordLe->setText(password);
+
+ delete cfg;
+}
+
+void SMBRoOptions::save()
+{
+ KConfig *cfg = new KConfig("kioslaverc");
+
+ cfg->setGroup( "Browser Settings/SMBro" );
+ cfg->writeEntry( "User", m_userLe->text());
+// cfg->writeEntry( "Workgroup", m_workgroupLe->text());
+// cfg->writeEntry( "ShowHiddenShares", m_showHiddenShares->isChecked());
+// cfg->writeEntry( "Encoding", m_encodingList->currentText() );
+
+ //taken from Nicola Brodu's smb ioslave
+ //it's not really secure, but at
+ //least better than storing the plain password
+ QString password(m_passwordLe->text());
+ QString scrambled;
+ for (uint i=0; i<password.length(); i++)
+ {
+ QChar c = password[i];
+ unsigned int num = (c.unicode() ^ 173) + 17;
+ unsigned int a1 = (num & 0xFC00) >> 10;
+ unsigned int a2 = (num & 0x3E0) >> 5;
+ unsigned int a3 = (num & 0x1F);
+ scrambled += (char)(a1+'0');
+ scrambled += (char)(a2+'A');
+ scrambled += (char)(a3+'0');
+ }
+ cfg->writeEntry( "Password", scrambled);
+
+ delete cfg;
+}
+
+void SMBRoOptions::defaults()
+{
+ m_userLe->setText("");
+ m_passwordLe->setText("");
+// m_workgroupLe->setText("");
+// m_showHiddenShares->setChecked(false);
+}
+
+void SMBRoOptions::changed()
+{
+ emit KCModule::changed(true);
+}
+
+QString SMBRoOptions::quickHelp() const
+{
+ return i18n("<h1>Windows Shares</h1>Konqueror is able to access shared "
+ "windows filesystems if properly configured. If there is a "
+ "specific computer from which you want to browse, fill in "
+ "the <em>Browse server</em> field. This is mandatory if you "
+ "do not run Samba locally. The <em>Broadcast address</em> "
+ "and <em>WINS address</em> fields will also be available, if you "
+ "use the native code, or the location of the 'smb.conf' file "
+ "from which the options are read, when using Samba. In any case, the "
+ "broadcast address (interfaces in smb.conf) must be set up if it "
+ "is guessed incorrectly or you have multiple cards. A WINS server "
+ "usually improves performance, and reduces the network load a lot.<p>"
+ "The bindings are used to assign a default user for a given server, "
+ "possibly with the corresponding password, or for accessing specific "
+ "shares. If you choose to, new bindings will be created for logins and "
+ "shares accessed during browsing. You can edit all of them from here. "
+ "Passwords will be stored locally, and scrambled so as to render them "
+ "unreadable to the human eye. For security reasons, you may not want to "
+ "do that, as entries with passwords are clearly indicated as such.<p>");
+}
+
+#include "smbrodlg.moc"
diff --git a/kcontrol/kio/smbrodlg.h b/kcontrol/kio/smbrodlg.h
new file mode 100644
index 000000000..d72972516
--- /dev/null
+++ b/kcontrol/kio/smbrodlg.h
@@ -0,0 +1,55 @@
+/* This file is part of the KDE project
+
+ Copyright (C) 2000, 2005 Alexander Neundorf <neundorf@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 __SMBRODLG_H
+#define __SMBRODLG_H
+
+#include <qwidget.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+
+#include <kcmodule.h>
+
+class KComboBox;
+
+class SMBRoOptions : public KCModule
+{
+ Q_OBJECT
+ public:
+ SMBRoOptions(QWidget *parent = 0);
+ ~SMBRoOptions();
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ QString quickHelp() const;
+
+ private slots:
+ void changed();
+
+ private:
+ QLineEdit *m_userLe;
+ QLineEdit *m_passwordLe;
+// QLineEdit *m_workgroupLe; //currently unused, Alex
+// QCheckBox *m_showHiddenShares; //currently unused, Alex
+// KComboBox *m_encodingList; //currently unused
+};
+
+#endif
diff --git a/kcontrol/kio/socks.cpp b/kcontrol/kio/socks.cpp
new file mode 100644
index 000000000..9c6678a5d
--- /dev/null
+++ b/kcontrol/kio/socks.cpp
@@ -0,0 +1,279 @@
+/**
+ * socks.cpp
+ *
+ * Copyright (c) 2001 George Staikos <staikos@kde.org>
+ * Copyright (c) 2001 Daniel Molkentin <molkentin@kde.org> (designer port)
+ *
+ * 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 <qlayout.h>
+#include <qlabel.h>
+#include <qvbuttongroup.h>
+#include <qcheckbox.h>
+
+#include <kfiledialog.h>
+#include <klistview.h>
+#include <kmessagebox.h>
+#include <ksocks.h>
+#include <kapplication.h>
+
+#include "socks.h"
+#include <kaboutdata.h>
+
+KSocksConfig::KSocksConfig(QWidget *parent)
+ : KCModule(parent, "kcmkio")
+{
+
+ KAboutData *about =
+ new KAboutData(I18N_NOOP("kcmsocks"), I18N_NOOP("KDE SOCKS Control Module"),
+ 0, 0, KAboutData::License_GPL,
+ I18N_NOOP("(c) 2001 George Staikos"));
+
+ about->addAuthor("George Staikos", 0, "staikos@kde.org");
+
+ setAboutData( about );
+
+
+ QVBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
+ base = new SocksBase(this);
+ layout->add(base);
+
+ connect(base->_c_enableSocks, SIGNAL(clicked()), this, SLOT(enableChanged()));
+ connect(base->bg, SIGNAL(clicked(int)), this, SLOT(methodChanged(int)));
+
+ // The custom library
+ connect(base->_c_customPath, SIGNAL(openFileDialog(KURLRequester *)), this, SLOT(chooseCustomLib(KURLRequester *)));
+ connect(base->_c_customPath, SIGNAL(textChanged(const QString&)),
+ this, SLOT(customPathChanged(const QString&)));
+
+ // Additional libpaths
+ connect(base->_c_newPath, SIGNAL(openFileDialog(KURLRequester *)), this, SLOT(chooseCustomLib(KURLRequester *)));
+ connect(base->_c_newPath, SIGNAL(returnPressed(const QString&)),
+ this, SLOT(addThisLibrary(const QString&)));
+ connect(base->_c_newPath, SIGNAL(textChanged(const QString&)),
+ this, SLOT(libTextChanged(const QString&)));
+ connect(base->_c_add, SIGNAL(clicked()), this, SLOT(addLibrary()));
+ connect(base->_c_remove, SIGNAL(clicked()), this, SLOT(removeLibrary()));
+ connect(base->_c_libs, SIGNAL(selectionChanged()), this, SLOT(libSelection()));
+
+ // The "Test" button
+ connect(base->_c_test, SIGNAL(clicked()), this, SLOT(testClicked()));
+
+ // The config backend
+ load();
+}
+
+KSocksConfig::~KSocksConfig()
+{
+}
+
+void KSocksConfig::configChanged()
+{
+ emit changed(true);
+}
+
+void KSocksConfig::enableChanged()
+{
+ KMessageBox::information(NULL,
+ i18n("These changes will only apply to newly "
+ "started applications."),
+ i18n("SOCKS Support"),
+ "SOCKSdontshowagain");
+ emit changed(true);
+}
+
+
+void KSocksConfig::methodChanged(int id)
+{
+ if (id == 4) {
+ base->_c_customLabel->setEnabled(true);
+ base->_c_customPath->setEnabled(true);
+ } else {
+ base->_c_customLabel->setEnabled(false);
+ base->_c_customPath->setEnabled(false);
+ }
+ emit changed(true);
+}
+
+
+void KSocksConfig::customPathChanged(const QString&)
+{
+ emit changed(true);
+}
+
+
+void KSocksConfig::testClicked()
+{
+ save(); // we have to save before we can test! Perhaps
+ // it would be best to warn, though.
+
+ if (KSocks::self()->hasSocks()) {
+ KMessageBox::information(NULL,
+ i18n("Success: SOCKS was found and initialized."),
+ i18n("SOCKS Support"));
+ // Eventually we could actually attempt to connect to a site here.
+ } else {
+ KMessageBox::information(NULL,
+ i18n("SOCKS could not be loaded."),
+ i18n("SOCKS Support"));
+ }
+
+ KSocks::self()->die();
+
+}
+
+
+void KSocksConfig::chooseCustomLib(KURLRequester * url)
+{
+ url->setMode( KFile::Directory );
+/* QString newFile = KFileDialog::getOpenFileName();
+ if (newFile.length() > 0) {
+ base->_c_customPath->setURL(newFile);
+ emit changed(true);
+ }*/
+}
+
+
+
+void KSocksConfig::libTextChanged(const QString& lib)
+{
+ if (lib.length() > 0)
+ base-> _c_add->setEnabled(true);
+ else base->_c_add->setEnabled(false);
+}
+
+
+void KSocksConfig::addThisLibrary(const QString& lib)
+{
+ if (lib.length() > 0) {
+ new QListViewItem(base->_c_libs, lib);
+ base->_c_newPath->clear();
+ base->_c_add->setEnabled(false);
+ base->_c_newPath->setFocus();
+ emit changed(true);
+ }
+}
+
+
+void KSocksConfig::addLibrary()
+{
+ addThisLibrary(base->_c_newPath->url());
+}
+
+
+void KSocksConfig::removeLibrary()
+{
+ QListViewItem *thisitem = base->_c_libs->selectedItem();
+ base->_c_libs->takeItem(thisitem);
+ delete thisitem;
+ base->_c_libs->clearSelection();
+ base->_c_remove->setEnabled(false);
+ emit changed(true);
+}
+
+
+void KSocksConfig::libSelection()
+{
+ base->_c_remove->setEnabled(true);
+}
+
+
+void KSocksConfig::load()
+{
+ KConfigGroup config(kapp->config(), "Socks");
+ base->_c_enableSocks->setChecked(config.readBoolEntry("SOCKS_enable", false));
+ int id = config.readNumEntry("SOCKS_method", 1);
+ base->bg->setButton(id);
+ if (id == 4) {
+ base->_c_customLabel->setEnabled(true);
+ base->_c_customPath->setEnabled(true);
+ } else {
+ base->_c_customLabel->setEnabled(false);
+ base->_c_customPath->setEnabled(false);
+ }
+ base->_c_customPath->setURL(config.readPathEntry("SOCKS_lib"));
+
+ QListViewItem *thisitem;
+ while ((thisitem = base->_c_libs->firstChild())) {
+ base->_c_libs->takeItem(thisitem);
+ delete thisitem;
+ }
+
+ QStringList libs = config.readPathListEntry("SOCKS_lib_path");
+ for(QStringList::Iterator it = libs.begin();
+ it != libs.end();
+ ++it ) {
+ new QListViewItem(base->_c_libs, *it);
+ }
+ base->_c_libs->clearSelection();
+ base->_c_remove->setEnabled(false);
+ base->_c_add->setEnabled(false);
+ base->_c_newPath->clear();
+ emit changed(false);
+}
+
+void KSocksConfig::save()
+{
+ KConfigGroup config(kapp->config(), "Socks");
+ config.writeEntry("SOCKS_enable",base-> _c_enableSocks->isChecked(), true, true);
+ config.writeEntry("SOCKS_method", base->bg->id(base->bg->selected()), true, true);
+ config.writePathEntry("SOCKS_lib", base->_c_customPath->url(), true, true);
+ QListViewItem *thisitem = base->_c_libs->firstChild();
+
+ QStringList libs;
+ while (thisitem) {
+ libs << thisitem->text(0);
+ thisitem = thisitem->itemBelow();
+ }
+ config.writePathEntry("SOCKS_lib_path", libs, ',', true, true);
+
+ kapp->config()->sync();
+
+ emit changed(false);
+}
+
+void KSocksConfig::defaults()
+{
+
+ base->_c_enableSocks->setChecked(false);
+ base->bg->setButton(1);
+ base->_c_customLabel->setEnabled(false);
+ base->_c_customPath->setEnabled(false);
+ base->_c_customPath->setURL("");
+ QListViewItem *thisitem;
+ while ((thisitem = base->_c_libs->firstChild())) {
+ base->_c_libs->takeItem(thisitem);
+ delete thisitem;
+ }
+ base->_c_newPath->clear();
+ base->_c_add->setEnabled(false);
+ base->_c_remove->setEnabled(false);
+ emit changed(true);
+}
+
+QString KSocksConfig::quickHelp() const
+{
+ return i18n("<h1>SOCKS</h1><p>This module allows you to configure KDE support"
+ " for a SOCKS server or proxy.</p><p>SOCKS is a protocol to traverse firewalls"
+ " as described in <a href=\"http://rfc.net/rfc1928.html\">RFC 1928</a>."
+ " <p>If you have no idea what this is and if your system administrator does not"
+ " tell you to use it, leave it disabled.</p>");
+}
+
+
+#include "socks.moc"
+
diff --git a/kcontrol/kio/socks.h b/kcontrol/kio/socks.h
new file mode 100644
index 000000000..1d950f607
--- /dev/null
+++ b/kcontrol/kio/socks.h
@@ -0,0 +1,73 @@
+/**
+ * socks.h
+ *
+ * Copyright (c) 2001 George Staikos <staikos@kde.org>
+ * Copyright (c) 2001 Daniel Molkentin <molkentin@kde.org> (designer port)
+ *
+ * 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 _SOCKS_H
+#define _SOCKS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <kcmodule.h>
+
+#include "socksbase.h"
+
+
+class QVButtonGroup;
+
+class KSocksConfig : public KCModule
+{
+ Q_OBJECT
+public:
+ KSocksConfig(QWidget *parent);
+ virtual ~KSocksConfig();
+
+ SocksBase *base;
+
+ void load();
+ void save();
+ void defaults();
+
+ int buttons();
+ QString quickHelp() const;
+
+public slots:
+ void configChanged();
+
+private slots:
+ void enableChanged();
+ void methodChanged(int id);
+ void testClicked();
+ void chooseCustomLib(KURLRequester *url);
+ void customPathChanged(const QString&);
+ void addLibrary();
+ void libTextChanged(const QString& lib);
+ void addThisLibrary(const QString& lib);
+ void removeLibrary();
+ void libSelection();
+
+private:
+
+ bool _socksEnabled;
+ int _useWhat;
+};
+
+#endif
diff --git a/kcontrol/kio/socks.upd b/kcontrol/kio/socks.upd
new file mode 100644
index 000000000..ed0383275
--- /dev/null
+++ b/kcontrol/kio/socks.upd
@@ -0,0 +1,8 @@
+# Hello world
+Id=kde3.0/r1
+File=ksocksrc,kdeglobals
+Group=<default>,Socks
+Key=Custom Lib,SOCKS_lib
+Key=Enable SOCKS,SOCKS_enable
+Key=Lib Path,SOCKS_lib_path
+Key=SOCKS Method,SOCKS_method
diff --git a/kcontrol/kio/socksbase.ui b/kcontrol/kio/socksbase.ui
new file mode 100644
index 000000000..5def84076
--- /dev/null
+++ b/kcontrol/kio/socksbase.ui
@@ -0,0 +1,335 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>SocksBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>SocksBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>455</width>
+ <height>402</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>SOCKS</string>
+ </property>
+ <property name="layoutMargin" stdset="0">
+ </property>
+ <property name="layoutSpacing" stdset="0">
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>_c_enableSocks</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Enable SOCKS support</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Check this to enable SOCKS4 and SOCKS5 support in KDE applications and I/O subsystems.</string>
+ </property>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>bg</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>SOCKS Implementation</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton" row="0" column="0">
+ <property name="name">
+ <cstring>_c_detect</cstring>
+ </property>
+ <property name="text">
+ <string>A&amp;uto detect</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If you select Autodetect, then KDE will automatically search for an implementation of SOCKS on your computer.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="0" column="1">
+ <property name="name">
+ <cstring>_c_NEC</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;NEC SOCKS</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This will force KDE to use NEC SOCKS if it can be found.</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>_c_custom</cstring>
+ </property>
+ <property name="text">
+ <string>Use &amp;custom library</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>4</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Select custom if you wish to use an unlisted SOCKS library. Please note that this may not always work as it depends on the API of the library which you specify (below).</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>_c_customLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Path:</string>
+ </property>
+ <property name="indent">
+ <number>20</number>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>_c_customPath</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester">
+ <property name="name">
+ <cstring>_c_customPath</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Enter the path to an unsupported SOCKS library.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QRadioButton" row="0" column="2">
+ <property name="name">
+ <cstring>_c_Dante</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Dante</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>3</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This will force KDE to use Dante if it can be found.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>_c_addPaths</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Additional Library Search Paths</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Here you can specify additional directories to search for the SOCKS libraries. /usr/lib, /usr/local/lib, /usr/local/socks5/lib and /opt/socks5/lib are already searched by default.</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Path</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>_c_libs</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This is the list of additional paths that will be searched.</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester">
+ <property name="name">
+ <cstring>_c_newPath</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>25</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>_c_add</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Add</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>_c_remove</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Remove</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>_c_test</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Test</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Click here to test SOCKS support.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>_c_enableSocks</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>bg</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>_c_enableSocks</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>_c_addPaths</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>_c_enableSocks</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>_c_test</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="global" impldecl="in declaration">kurlrequester.h</include>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+</UI>
diff --git a/kcontrol/kio/uagentproviderdlg.cpp b/kcontrol/kio/uagentproviderdlg.cpp
new file mode 100644
index 000000000..3b71b29f4
--- /dev/null
+++ b/kcontrol/kio/uagentproviderdlg.cpp
@@ -0,0 +1,149 @@
+/**
+ * Copyright (c) 2001 Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 <qlabel.h>
+#include <qlayout.h>
+#include <qlistbox.h>
+#include <qwhatsthis.h>
+#include <qpushbutton.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <kcombobox.h>
+#include <klineedit.h>
+#include <kurllabel.h>
+
+#include "fakeuaprovider.h"
+#include "uagentproviderdlg.h"
+#include "uagentproviderdlg_ui.h"
+
+UALineEdit::UALineEdit( QWidget *parent, const char *name )
+ :KLineEdit( parent, name )
+{
+ // For now do not accept any drops since they might contain
+ // characters we do not accept.
+ // TODO: Re-implement ::dropEvent to allow acceptable formats...
+ setAcceptDrops( false );
+}
+
+void UALineEdit::keyPressEvent( QKeyEvent* e )
+{
+ int key = e->key();
+ QString keycode = e->text();
+ if ( (key >= Qt::Key_Escape && key <= Qt::Key_Help) || key == Qt::Key_Period ||
+ (cursorPosition() > 0 && key == Qt::Key_Minus) ||
+ (!keycode.isEmpty() && keycode.unicode()->isLetterOrNumber()) )
+ {
+ KLineEdit::keyPressEvent(e);
+ return;
+ }
+ e->accept();
+}
+
+UAProviderDlg::UAProviderDlg( const QString& caption, QWidget *parent,
+ FakeUASProvider* provider, const char *name )
+ :KDialog(parent, name, true), m_provider(provider)
+{
+ setCaption ( caption );
+
+ QVBoxLayout* mainLayout = new QVBoxLayout(this, 0, 0);
+
+ dlg = new UAProviderDlgUI (this);
+ mainLayout->addWidget(dlg);
+ //dlg->leIdentity->setEnableSqueezedText( true );
+
+ if (!m_provider)
+ {
+ setEnabled( false );
+ return;
+ }
+
+ init();
+}
+
+UAProviderDlg::~UAProviderDlg()
+{
+}
+
+void UAProviderDlg::init()
+{
+ connect( dlg->pbOk, SIGNAL(clicked()), SLOT(accept()) );
+ connect( dlg->pbCancel, SIGNAL(clicked()), SLOT(reject()) );
+
+ connect( dlg->leSite, SIGNAL(textChanged(const QString&)),
+ SLOT(slotTextChanged( const QString&)) );
+
+ connect( dlg->cbAlias, SIGNAL(activated(const QString&)),
+ SLOT(slotActivated(const QString&)) );
+
+ dlg->cbAlias->clear();
+ dlg->cbAlias->insertStringList( m_provider->userAgentAliasList() );
+ dlg->cbAlias->insertItem( "", 0 );
+ dlg->cbAlias->listBox()->sort();
+
+ dlg->leSite->setFocus();
+}
+
+void UAProviderDlg::slotActivated( const QString& text )
+{
+ if ( text.isEmpty() )
+ dlg->leIdentity->setText( "" );
+ else
+ dlg->leIdentity->setText( m_provider->agentStr(text) );
+
+ dlg->pbOk->setEnabled( (!dlg->leSite->text().isEmpty() && !text.isEmpty()) );
+}
+
+void UAProviderDlg::slotTextChanged( const QString& text )
+{
+ dlg->pbOk->setEnabled( (!text.isEmpty() && !dlg->cbAlias->currentText().isEmpty()) );
+}
+
+void UAProviderDlg::setSiteName( const QString& text )
+{
+ dlg->leSite->setText( text );
+}
+
+void UAProviderDlg::setIdentity( const QString& text )
+{
+ int id = dlg->cbAlias->listBox()->index( dlg->cbAlias->listBox()->findItem(text) );
+ dlg->cbAlias->setCurrentItem( id );
+ slotActivated( dlg->cbAlias->currentText() );
+ if ( !dlg->leSite->isEnabled() )
+ dlg->cbAlias->setFocus();
+}
+
+QString UAProviderDlg::siteName()
+{
+ QString site_name=dlg->leSite->text().lower();
+ site_name = site_name.remove( "https://" );
+ site_name = site_name.remove( "http://" );
+ return site_name;
+}
+
+QString UAProviderDlg::identity()
+{
+ return dlg->cbAlias->currentText();
+}
+
+QString UAProviderDlg::alias()
+{
+ return dlg->leIdentity->text();
+}
+
+#include "uagentproviderdlg.moc"
diff --git a/kcontrol/kio/uagentproviderdlg.h b/kcontrol/kio/uagentproviderdlg.h
new file mode 100644
index 000000000..67b38d42e
--- /dev/null
+++ b/kcontrol/kio/uagentproviderdlg.h
@@ -0,0 +1,68 @@
+/**
+ * Copyright (c) 2001 Dawit Alemayehu <adawit@kde.org>
+ *
+ * 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 __UAPROVIDERDLG_H___
+#define __UAPROVIDERDLG_H___
+
+
+#include <kdialog.h>
+#include <klineedit.h>
+
+
+class FakeUASProvider;
+class UAProviderDlgUI;
+
+class UALineEdit : public KLineEdit
+{
+ Q_OBJECT
+
+public:
+ UALineEdit( QWidget *parent, const char *name=0 );
+
+protected:
+ virtual void keyPressEvent( QKeyEvent * );
+};
+
+class UAProviderDlg : public KDialog
+{
+ Q_OBJECT
+
+public:
+ UAProviderDlg( const QString& caption, QWidget *parent = 0,
+ FakeUASProvider* provider = 0, const char *name = 0 );
+ ~UAProviderDlg();
+
+ void setSiteName( const QString& );
+ void setIdentity( const QString& );
+
+ QString siteName();
+ QString identity();
+ QString alias();
+
+protected slots:
+ void slotActivated( const QString& );
+ void slotTextChanged( const QString& );
+
+protected:
+ void init();
+
+private:
+ FakeUASProvider* m_provider;
+ UAProviderDlgUI* dlg;
+};
+#endif
diff --git a/kcontrol/kio/uagentproviderdlg_ui.ui b/kcontrol/kio/uagentproviderdlg_ui.ui
new file mode 100644
index 000000000..6f2a006ec
--- /dev/null
+++ b/kcontrol/kio/uagentproviderdlg_ui.ui
@@ -0,0 +1,207 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>UAProviderDlgUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>UAProviderDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>298</width>
+ <height>240</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lbSite</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;When browsing the following site:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leSite</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the site or domain name where a fake browser identification should be used.&lt;p&gt;
+&lt;u&gt;NOTE:&lt;/u&gt; Wildcard syntax such as \"*,?\" is NOT allowed: instead, use the top level address of a site to make generic matches; for example, if you want all KDE sites to receive a fake browser identification, you would enter &lt;code&gt;.kde.org&lt;/code&gt; - the fake identity would then be sent to any KDE site that ends with &lt;code&gt;.kde.org&lt;/code&gt;.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="0">
+ <property name="name">
+ <cstring>leSite</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Enter the site or domain name where a fake browser identification should be used.&lt;p&gt;
+&lt;u&gt;NOTE:&lt;/u&gt; Wildcard syntax such as \"*,?\" is NOT allowed: instead, use the top level address of a site to make generic matches; for example, if you want all KDE sites to receive a fake browser identification, you would enter &lt;code&gt;.kde.org&lt;/code&gt; - the fake identity would then be sent to any KDE site that ends with &lt;code&gt;.kde.org&lt;/code&gt;.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>lbAlias</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Use the following identification:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leIdentity</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Select the browser identification to use whenever contacting the site you specified above.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="3" column="0">
+ <property name="name">
+ <cstring>cbAlias</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Select the browser identification to use whenever contacting the site you specified above.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>lbIdentity</cstring>
+ </property>
+ <property name="text">
+ <string>Real identification:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leIdentity</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+The actual browser identification text that will be sent to the remote machine.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="5" column="0">
+ <property name="name">
+ <cstring>leIdentity</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+The actual browser identification text that will be sent to the remote machine.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <spacer row="6" column="0">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="8" column="0">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>29</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbOk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="Line" row="7" column="0">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+<includehints>
+ <includehint>klineedit.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+</includehints>
+</UI>
diff --git a/kcontrol/kio/uasprovider.desktop b/kcontrol/kio/uasprovider.desktop
new file mode 100644
index 000000000..a8fe24b0d
--- /dev/null
+++ b/kcontrol/kio/uasprovider.desktop
@@ -0,0 +1,98 @@
+[Desktop Entry]
+Type=ServiceType
+X-KDE-ServiceType=UserAgentStrings
+Comment=UserAgent Strings
+Comment[af]=Gebruiker agent Stringe
+Comment[ar]=سلاسل UserAgent
+Comment[az]=İstifadəçi Vasitəsi Kəliməsi
+Comment[be]=Радкі ідэнтыфікацыі вандроўніка UserAgent
+Comment[bg]=Идентификация на браузъра
+Comment[bs]=UserAgent stringovi
+Comment[ca]=Regles de l'agent d'usuari
+Comment[cs]=Řetězce uživatelského agenta
+Comment[csb]=Miona "Programë Brëkòwnika"
+Comment[cy]=Llinynnau Asiant y Defnyddiwr
+Comment[da]=Brugeragent-strenge
+Comment[de]=Browserkennungen
+Comment[el]=Συμβολοσειρές πράκτορα χρήστη
+Comment[eo]=Uzantoagento-frazoj
+Comment[es]=Cadenas del Agente de Usuario
+Comment[et]=Veebilehitseja identifikaatorid
+Comment[eu]=Erabiltzaile agentearen kateak
+Comment[fa]=رشته‌های عامل‌ کاربر
+Comment[fi]=Käyttäjäagenttimerkkijonot
+Comment[fr]=Chaînes d'identité du navigateur
+Comment[fy]=regels foar brûkersagint
+Comment[ga]=Teaghráin UserAgent
+Comment[gl]=Cadeas do Axente de Usuario
+Comment[he]=מחרוזות זיהוי דפדפן
+Comment[hi]=यूज़रएजेंट स्ट्रिंग्स
+Comment[hr]=Identifikacijske (UA - UserAgent) poruke
+Comment[hu]=Böngészőazonosítók
+Comment[is]=UserAgent strengir
+Comment[it]=Stringhe User Agent
+Comment[ja]=UserAgent 文字列
+Comment[ka]=Строки UserAgent
+Comment[kk]=UserAgent жолдары
+Comment[km]=ខ្សែ​អក្សរ​ភ្នាក់ងារ​អ្នក​ប្រើ
+Comment[ko]=UserAgent 문자열
+Comment[lo]=ຂໍ້ຄວາມສະແດງຕົວເຄື່ອງມືຂອງຜູ້ໃຊ້
+Comment[lt]=Vartojo agento eilutės
+Comment[lv]=LietotājaAģenta Rinda
+Comment[mk]=UserAgent низи
+Comment[mn]=UserAgent-Таних тэмдэг
+Comment[ms]=Rentetan Ejen Pengguna
+Comment[mt]=Test tal-UserAgent
+Comment[nb]=Brukeragentstrenger
+Comment[nds]=Nettkieker-Kennen instellen
+Comment[ne]=प्रयोगकर्ता एजेन्ट स्ट्रिङ
+Comment[nl]=regels voor Gebruikersagent
+Comment[nn]=Brukaragentstrengar
+Comment[nso]=Methalofoko ya Mothusi wa Modirisi
+Comment[pa]=ਉਪਭੋਗੀ-ਏਜੰਟ ਸਤਰਾਂ
+Comment[pl]=Nazwy "Programu Użytkownika"
+Comment[pt]=Mensagens do agente do utilizador
+Comment[pt_BR]=Strings de Agente de Usuários
+Comment[ro]=Texte "User Agent"
+Comment[ru]=Строки UserAgent
+Comment[rw]=Amakurikiranyanyuguti UmukoziUkoresha
+Comment[se]=Geavaheaddjeageanta-dovdamearkkat
+Comment[sk]=Reťazce WWW agenta
+Comment[sl]=Nizi uporabniškega agenta
+Comment[sr]=UserAgent низови
+Comment[sr@Latn]=UserAgent nizovi
+Comment[sv]=Användaragentsträngar
+Comment[ta]=பயன்படுத்துபவர் தொடர்ச்சிகள்
+Comment[tg]=Сатри оҷонсии корбар
+Comment[th]=ข้อความแสดงตัวเครื่องมือของผู้ใช้
+Comment[tr]=UserAgent Dizileri
+Comment[tt]=UserAgent Sätirläre
+Comment[uk]=Рядки агента користувача
+Comment[ven]=Mutevhe wa vhashumisi
+Comment[vi]=Chuỗi UserAgent
+Comment[wa]=Tchinnes d' idintité do betchteu
+Comment[xh]=Iqela lamagama UserAgent
+Comment[zh_CN]=用户代理设置
+Comment[zh_TW]=使用者代理字串設定
+Comment[zu]=Iqoqo lamagama lommeli womsebenzisi
+
+[PropertyDef::X-KDE-UA-TAG]
+Type=QString
+
+[PropertyDef::X-KDE-UA-FULL]
+Type=QString
+
+[PropertyDef::X-KDE-UA-NAME]
+Type=QString
+
+[PropertyDef::X-KDE-UA-VERSION]
+Type=QString
+
+[PropertyDef::X-KDE-UA-SYSNAME]
+Type=QString
+
+[PropertyDef::X-KDE-UA-SYSRELEASE]
+Type=QString
+
+[PropertyDef::X-KDE-UA-DYNAMIC-ENTRY]
+Type=bool
diff --git a/kcontrol/kio/uasproviders/Makefile.am b/kcontrol/kio/uasproviders/Makefile.am
new file mode 100644
index 000000000..b929efc1b
--- /dev/null
+++ b/kcontrol/kio/uasproviders/Makefile.am
@@ -0,0 +1,14 @@
+services_DATA = ie401onwinnt4.desktop ie45onwinnt5.desktop ie501onwinnt5.desktop \
+ ie50onppc.desktop \
+ ie55onwin98.desktop ie55onwinnt5.desktop ie60onwinnt51.desktop \
+ ie60oncurrent.desktop mozonwinxp.desktop mozonwin2000.desktop \
+ mozoncurrent16.desktop mozoncurrent12.desktop \
+ mozoncurrent.desktop nn301oncurrent.desktop nn475onwin95.desktop \
+ nn475oncurrent.desktop nn476onppc.desktop op403onwinnt4.desktop \
+ lynxoncurrent.desktop w3moncurrent.desktop wgetoncurrent.desktop \
+ ns71oncurrent.desktop ns71onwinnt51.desktop op75oncurrent.desktop \
+ safari12.desktop safari20.desktop googlebot.desktop \
+ firefox10oncurrent.desktop firefox15oncurrent.desktop
+
+servicesdir = $(kde_servicesdir)/useragentstrings
+
diff --git a/kcontrol/kio/uasproviders/firefox10oncurrent.desktop b/kcontrol/kio/uasproviders/firefox10oncurrent.desktop
new file mode 100644
index 000000000..1cfae8d0a
--- /dev/null
+++ b/kcontrol/kio/uasproviders/firefox10oncurrent.desktop
@@ -0,0 +1,70 @@
+[Desktop Entry]
+Name=UADescription (Firefox 1.0 on current)
+Name[af]=UA-beskrywing (Firefox 1.0 op huidige bedryfstelsel)
+Name[be]=UADescription (Firefox 1.0 на гэтай сістэме)
+Name[bs]=UADescription (Firefox 1.0 na trenutnom)
+Name[ca]=Descripció UA (Firefox 1.0 a l'actual)
+Name[cs]=Popis agenta (Firefox 1.0 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (FireFox 1.0)
+Name[da]=Brugeragentbeskrivelse (Firefox 1.0 på denne)
+Name[de]=Browserkennung (Firefox 1.0 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (Firefox 1.0 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (Fajrovulpo 1.0 sub nuna)
+Name[es]=UADescription (Firefox 1.0 en actual)
+Name[et]=UADescription (Selles masinas töötav Firefox 1.0)
+Name[eu]=UA azalpena (Firefox 1.0 unekoan)
+Name[fa]=UADescription (Firefox 1.0 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (Firefox 1.0)
+Name[fr]=Identité du navigateur (Firefox 1.0 sous le système actuel)
+Name[fy]=GA-omskriuwing (Firefox 1.0 op aktive)
+Name[ga]=UADescription (Firefox 1.0 ar an gcóras reatha)
+Name[gl]=UADescription (Firefox 3.01 no actual)
+Name[he]=UADescription (Firefox 1.0 בנוכחי)
+Name[hr]=UADescription (Firefox 1.0 na trenutnom)
+Name[hu]=Böngészőtípus (Firefox 1.0)
+Name[id]=UADescription (Firefox 1.0)
+Name[is]=UAD strengur (Firefox 1.0 á núverandi)
+Name[it]=DescrizioneUA (Firefox 1.0 su sistema attuale)
+Name[ka]=UADescription (Firefox 1.0 მიმდინარე სისტემაში)
+Name[kk]=UADescription (Firefox 1.0 осы орында)
+Name[km]=UADescription (Firefox 1.0 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 Firefox 1.5)
+Name[lt]=Naudotojo agento aprašymas (Firefox 1.0 ir esama)
+Name[lv]=UAApraksts (Firefox 1.0 uz tekošā)
+Name[mk]=UADescription (Firefox 1.0 на тековно)
+Name[nb]=Brukeragent (Firefox 1.0 på denne)
+Name[nds]=UA-Beschrieven (Firefox 1.0 op dit Systeem)
+Name[ne]=UA वर्णन (हाल फायरफक्स 1.0 मा)
+Name[nl]=GA-beschrijving (Firefox 1.0 op huidige)
+Name[nn]=Brukaragent (Firefox 1.0 herifrå)
+Name[pa]=UADescription (ਮੌਜੂਦਾ Firefox 1.0 ਉੱਤੇ)
+Name[pl]=Opis przeglądarki użytkownika (FireFox 1.0 na bieżącym systemie)
+Name[pt]=UADescription (Firefox 1.0 no sistema actual)
+Name[pt_BR]=UADescription (Firefox 1.0 no sistema atual)
+Name[ro]=Descriere UA (Firefox 1.0 pentru sistemul de operare curent)
+Name[ru]=UADescription (Firefox 1.0 на текущей системе)
+Name[rw]=UADescription (Firefox 1.0 ku igezweho)
+Name[se]=UA-čilgehus (Firefox 1.0 dán mašiinnas)
+Name[sl]=UAOpis (Firefox 1.0 na trenutnem)
+Name[sr]=UADescription (Firefox 1.0 на тренутном)
+Name[sr@Latn]=UADescription (Firefox 1.0 na trenutnom)
+Name[sv]=AA-beskrivning (Firefox 1.0 på aktuell)
+Name[ta]=UAவிவரம் (Firefox 1.0 on current)
+Name[tg]=UADescription (Системаи ҷорӣ Firefox 1.0)
+Name[th]=UADescription (ไฟร์ฟอกซ์ 1.0 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (Firefox 1.0)
+Name[tt]=UADescription (Firefox 1.0, şul uq astında)
+Name[uk]=UADescription (Firefox 1.0 на поточній)
+Name[uz]=UADescription (joriy bilan Firefox 1.0)
+Name[uz@cyrillic]=UADescription (жорий билан Firefox 1.0)
+Name[vi]=Mô tả UA (đang dùng Firefox 1.0)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Firefox 1.0 sol ci do moumint)
+Name[zh_CN]=用户代理描述 (运行于本机的 Firefox 1.0)
+Name[zh_TW]=使用者代理描述 (Firefox 1.0 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=FF
+X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appMachineType appSysName; appLanguage; rv:1.7.12) Gecko/20050915 Firefox/1.0.7
+X-KDE-UA-NAME=Firefox
+X-KDE-UA-VERSION=1.0.7
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/firefox15oncurrent.desktop b/kcontrol/kio/uasproviders/firefox15oncurrent.desktop
new file mode 100644
index 000000000..ecea40004
--- /dev/null
+++ b/kcontrol/kio/uasproviders/firefox15oncurrent.desktop
@@ -0,0 +1,58 @@
+[Desktop Entry]
+Name=UADescription (Firefox 1.5 on current)
+Name[bg]=UADescription (текущо Firefox 1.5)
+Name[ca]=Descripció UA (Firefox 1.5 a l'actual)
+Name[cs]=Popis UA (Firefox 1.5 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (FireFox 1.5)
+Name[da]=Brugeragentbeskrivelse (Firefox 1.5 på denne)
+Name[de]=Browserkennung (Firefox 1.5 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (Firefox 1.5 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (Fajrovulpo 1.5 sub nuna)
+Name[es]=UADescription (Firefox 1.5 en actual)
+Name[et]=UADescription (Selles masinas töötav Firefox 1.5)
+Name[fa]=UADescription (Firefox 1.5 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (Firefox 1.5)
+Name[fr]=Identité du navigateur (Firefox 1.5 sous le système actuel)
+Name[fy]=GA-omskriuwing (Firefox 1.5 op aktive)
+Name[gl]=UADescription (Firefox 1.5 na actual)
+Name[he]=UADescription (Firefox 1.5 בנוכחי)
+Name[hr]=UADescription (Firefox 1.5 na trenutnom)
+Name[hu]=Böngészőtípus (Firefox 1.5)
+Name[id]=UADescription (Firefox 1.5)
+Name[is]=UAD strengur (Firefox 1.5 á núverandi)
+Name[it]=DescrizioneUA (Firefox 1.5 su sistema attuale)
+Name[kk]=UADescription (Firefox 1.5 осы орында)
+Name[km]=UADescription (Firefox 1.5 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 Firefox 1.5)
+Name[lt]=Naudotojo agento aprašymas (Firefox 1.5 šioje sistemoje)
+Name[nb]=Brukeragent (Firefox 1.5 på denne)
+Name[nds]=UA-Beschrieven (Firefox 1.5 op dit Systeem)
+Name[ne]=यूए वर्णन (हाल फायरफक्स १.०)
+Name[nl]=GA-beschrijving (Firefox 1.0 op huidige machine/besturingssysteem)
+Name[nn]=Brukaragent (Firefox 1.5 herifrå)
+Name[pa]=UADescription (ਮੌਜੂਦਾ ਉੱਤੇ 1.5)
+Name[pl]=Opis przeglądarki użytkownika (Firefox 1.5 na bieżącym systemie)
+Name[pt]=UADescription (Firefox 1.5 no sistema actual)
+Name[pt_BR]=UADescription (Firefox 1.5 no sistema atual)
+Name[ro]=Descriere UA (Firefox 1.5 pe curent)
+Name[ru]=UADescription (Firefox 1.5 на текущей системе)
+Name[sl]=UAOpis (Firefox 1.5 na trenutnem)
+Name[sr]=UADescription (Firefox 1.5 на тренутном)
+Name[sr@Latn]=UADescription (Firefox 1.5 na trenutnom)
+Name[sv]=AA-beskrivning (Firefox 1.5 på aktuell)
+Name[tg]=UADescription (Системаи ҷорӣ Firefox 1.5)
+Name[th]=UADescription (ไฟร์ฟอกซ์ 1.5 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (Firefox 1.5)
+Name[uk]=UADescription (Firefox 1.5 на поточній)
+Name[uz]=UADescription (joriy bilan Firefox 1.5)
+Name[uz@cyrillic]=UADescription (жорий билан Firefox 1.5)
+Name[vi]=Mô tả UA (đang dùng Firefox 1.5)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Firefox 1.5 sol ci moumint)
+Name[zh_TW]=使用者代理描述 (Firefox 1.5 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=FF
+X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appMachineType appSysName; appLanguage; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
+X-KDE-UA-NAME=Firefox
+X-KDE-UA-VERSION=1.5.0.4
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/googlebot.desktop b/kcontrol/kio/uasproviders/googlebot.desktop
new file mode 100644
index 000000000..4644e13bf
--- /dev/null
+++ b/kcontrol/kio/uasproviders/googlebot.desktop
@@ -0,0 +1,44 @@
+[Desktop Entry]
+Name=UADescription (Googlebot/2.1)
+Name[af]=UA-beskrywing (Googlebot/2.1)
+Name[az]=İA İzahatı (Googlebot/2.1)
+Name[ca]=Descripció UA (Googlebot/2.1)
+Name[cs]=Popis agenta (Googlebot/2.1)
+Name[csb]=Òpis programë brëkòwnika (Googlebot/2.1)
+Name[de]=Browserkennung (Googlebot/2.1)
+Name[el]=Περιγραφή UA (Googlebot/2.1)
+Name[eo]=UA-Priskribo (Googlebot/2.1)
+Name[eu]=UA azalpena (Wget 1.5.3)
+Name[fi]=Käyttäjäagenttikuvaus (Googlebot/2.1)
+Name[fr]=Identité du navigateur (Googlebot/2.1)
+Name[fy]=GA-omskriuwing (Googlebot/2.1)
+Name[hi]=यूए-डिस्क्रिप्शन (गूगलबॉट/2.1)
+Name[hu]=Böngészőtípus (Googlebot/2.1)
+Name[is]=UAD strengur (Googlebot/2.1)
+Name[it]=DescrizioneUA (Googlebot/2.1)
+Name[lt]=Naudotojo agento aprašymas (Googlebot/2.1)
+Name[lv]=UAApraksts (Googlebot/2.1)
+Name[nb]=Brukeragent (Googlebot/2.1)
+Name[nds]=UA-Beschrieven (Googlebot/2.1)
+Name[ne]=UA वर्णन (गुगलबुट/2.1)
+Name[nl]=GA-beschrijving (Googlebot/2.1)
+Name[nn]=Brukaragent (Googlebot/2.1)
+Name[pl]=Opis przeglądarki użytkownika (Googlebot/2.1)
+Name[pt_BR]=Descrição (Googlebot/2.1)
+Name[ro]=Descriere UA (Googlebot/2.1)
+Name[se]=UA-čilgehus (Googlebot/2.1)
+Name[sl]=UAOpis (Googlebot/2.1)
+Name[sv]=AA-beskrivning (Googlebot/2.1)
+Name[ta]=UAவிவரம் (Googlebot/2.1)
+Name[tg]=UADescription (Системаи ҷорӣ Googlebot/2.1)
+Name[tr]=UA Tanımı (Googlebot/2.1)
+Name[vi]=Mô tả UA (Googlebot/2.1)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Googlebot/2.1)
+Name[zh_CN]=用户代理描述 (Google 机器人/2.1)
+Name[zh_TW]=使用者代理描述 (Googlebot/2.1)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MISC
+X-KDE-UA-FULL=Googlebot/2.1 (+http://www.googlebot.com/bot.html)
+X-KDE-UA-NAME=Googlebot
+X-KDE-UA-VERSION=2.1
diff --git a/kcontrol/kio/uasproviders/ie401onwinnt4.desktop b/kcontrol/kio/uasproviders/ie401onwinnt4.desktop
new file mode 100644
index 000000000..661590037
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ie401onwinnt4.desktop
@@ -0,0 +1,80 @@
+[Desktop Entry]
+Name=UADescription (IE 4.01 on Win 2000)
+Name[af]=UA-beskrywing (IE 4.01 op Win 2000)
+Name[be]=UADescription (IE 4.01 на Win 2000)
+Name[br]=UADescription (IE 4.01 war Win 2000)
+Name[ca]=Descripció de AU (IE 4.01 en Windows 2000)
+Name[cs]=Popis agenta (IE 4.01 na Win 2000)
+Name[csb]=Òpis programë brëkòwnika (IE 4.01 na Win 2000)
+Name[cy]=UADisgrifiad (IE 4.01 ar Win 2000)
+Name[da]=Brugeragentbeskrivelse (IE 4.01 på Win 2000)
+Name[de]=Browserkennung (IE 4.01 auf Windows 2000)
+Name[el]=Περιγραφή UA (IE 4.01 σε Win 2000)
+Name[eo]=UA-Priskribo (IE 4.01 sur Vindozo 2000)
+Name[es]=Descripción de AU (IE 4.01 en Windows 2000)
+Name[et]=UADescription (IE 4.01 Win2000 platvormil)
+Name[eu]=UA azalpena (IE 4.01 Win 2000-n)
+Name[fa]=UADescription (IE 4.01 در Win 2000)
+Name[fi]=Käyttäjäagenttikuvaus (IE 4.01 Win 2000:lla)
+Name[fr]=Identité du navigateur (IE 4.01 sous Windows 2000)
+Name[fy]=GA-omskriuwing (IE 4.01 op Win 2000)
+Name[ga]=UADescription (IE 4.01 ar Win 2000)
+Name[gl]=UADescription (IE 4.01 en Win 2000)
+Name[he]=UADescription (Win 2000ב־ IE 4.01)
+Name[hi]=यूएडी-डिस्क्रिप्शन (IE 4.01 विन 2000 पर)
+Name[hr]=UADescription (IE 4.01 na Win 2000)
+Name[hu]=Böngészőtípus (IE 4.01, Win 2000)
+Name[id]=UADescription (IE 4.01 di Win 2000)
+Name[is]=UAD strengur (IE 4.01 on Win 2000)
+Name[it]=DescrizioneUA (IE 4.01 su Win 2000)
+Name[ka]=UADescription (IE 4.01 Win 2000-ში)
+Name[kk]=UADescription (IE 4.01 / Win 2000)
+Name[km]=UADescription (IE 4.01 នៅ​លើ Win 2000)
+Name[ko]=UADescription (윈도 2000의 IE 4.01)
+Name[lo]=UADescription (IE 4.5 on Win 2000)
+Name[lt]=Naudotojo agento aprašymas (IE 4.01 ir Win 2000)
+Name[lv]=UAApraksts (IE 4.01 uz Win 2000)
+Name[mk]=UADescription (IE 4.01 на Win 2000)
+Name[mn]=UserAgent-Тодорхойлолт (IE 4.01 on Win 2000)
+Name[mt]=UADescription (IE 4.01 fuq Win 2000)
+Name[nb]=Brukeragent (IE 4.01 på Win 2000)
+Name[nds]=UA-Beschrieven (IE 4.01 op Win 2000)
+Name[ne]=UA वर्णन (Win 2000 मा IE 4.01)
+Name[nl]=GA-beschrijving (IE 4.01 op Win 2000)
+Name[nn]=Brukaragent (IE 4.01 på Win 2000)
+Name[nso]=UAThlaloso (IE 4.01 go Win 2000)
+Name[pa]=UADescription (ਵਿੰਡੋ ੨੦੦੦ 'ਤੇ IE 4.01)
+Name[pl]=Opis przeglądarki użytkownika (IE 4.01 na Win 2000)
+Name[pt]=UADescription (IE 4.01 no Win 2000)
+Name[pt_BR]=Descrição (IE 4.01 no Win 2000)
+Name[ro]=Descriere UA (IE 4.01 pentru Win 2000)
+Name[ru]=UADescription (IE 4.01 на Win 2000)
+Name[rw]=UADescription (IE 4.01 kuri Win 2000)
+Name[se]=UA-čilgehus (IE 4.01 ja Win 2000)
+Name[sk]=Popis agenta (IE 4.01 na Win 2000)
+Name[sl]=UAOpis (IE 4.01 na Windows 2000)
+Name[sr]=UADescription (IE 4.01 на Win 2000)
+Name[sr@Latn]=UADescription (IE 4.01 na Win 2000)
+Name[sv]=AA-beskrivning (IE 4.01 på Win 2000)
+Name[ta]=UAவிவரம் (IE 4.01 on Win 2000)
+Name[tg]=ТавзеҳиUA (IE 4.01 ба Win 2000)
+Name[th]=UADescription (IE 4.01 บน Win 2000)
+Name[tr]=UA Tanımı (Win 2000 üzerinde IE 4.01)
+Name[tt]=UADescription (IE 4.01, Win 2000 astında)
+Name[uk]=UADescription (IE 4.01 на Win 2000)
+Name[uz]=UADescription (Win 2000 bilan IE 4.01)
+Name[uz@cyrillic]=UADescription (Win 2000 билан IE 4.01)
+Name[ven]=Thalutshedzo ya UA (IE 4.01 on Win 2000)
+Name[vi]=Mô tả UA (IE 4.01 trên Win 2000)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 4.01 so Win 2000)
+Name[xh]=UADescription (IE 4.01 kwi Win 2000)
+Name[zh_CN]=用户代理描述 (运行于 Win 2000 的 IE 4.01)
+Name[zh_TW]=使用者代理描述 (IE 4.01 on Win 2000)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 4.01; Windows NT 5.0)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=4.01
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=2000
diff --git a/kcontrol/kio/uasproviders/ie45onwinnt5.desktop b/kcontrol/kio/uasproviders/ie45onwinnt5.desktop
new file mode 100644
index 000000000..25bf059d6
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ie45onwinnt5.desktop
@@ -0,0 +1,80 @@
+[Desktop Entry]
+Name=UADescription (IE 4.5 on Win 2000)
+Name[af]=UA-beskrywing (Ie 4.5 op Win 2000)
+Name[az]=UADescription (IE 5.5 on Win 2000)
+Name[be]=UADescription (IE 4.5 на Win 2000)
+Name[br]=UADescription (IE 4.5 war Win 2000)
+Name[ca]=Descripció de AU (IE 4.5 en Windows 2000)
+Name[cs]=Popis agenta (IE 4.5 na Win 2000)
+Name[csb]=Òpis programë brëkòwnika (IE 4.5 na Win 2000)
+Name[cy]=UADisgrifiad(IE 4.5 ar Win 2000)
+Name[da]=Brugeragentbeskrivelse (IE 4.5 på Win 2000)
+Name[de]=Browserkennung (IE 4.5 auf Windows 2000)
+Name[el]=Περιγραφή UA (IE 5.5 σε Win 2000)
+Name[eo]=UA-Priskribo (IE 4.5 sub Vindozo 2000)
+Name[es]=Descripción de AU (IE 4.5 en Windows 2000)
+Name[et]=UADescription (IE 4.5 Win2000 platvormil)
+Name[eu]=UA azalpena (IE 4.5 Win 2000-n)
+Name[fa]=UADescription (IE 4.5 در Win 2000)
+Name[fi]=Käyttäjäagenttikuvaus (IE 4.5 Win 2000:lla)
+Name[fr]=Identité du navigateur (IE 4.5 sous Windows 2000)
+Name[fy]=GA-omskriuwing (IE 4.5 op Win 2000)
+Name[ga]=UADescription (IE 4.5 ar Win 2000)
+Name[gl]=UADescription (IE 4.5 en Win 2000)
+Name[he]=UADescription (Win 2000ב־ IE 4.5)
+Name[hi]=यूएडी-डिस्क्रिप्शन (IE 4.5 विन 2000 पर)
+Name[hr]=UADescription (IE 4.5 na Win 2000)
+Name[hu]=Böngészőtípus (IE 4.5, Win 2000)
+Name[id]=UADescription (IE 4.5 di Win 2000)
+Name[is]=UAD strengur (IE 4.5 on Win 2000)
+Name[it]=DescrizioneUA (IE 4.5 su Win 2000)
+Name[ka]=UADescription (IE 4.5 Win 2000-ში)
+Name[kk]=UADescription (IE 4.5 / Win 2000)
+Name[km]=UADescription (IE 4.5 នៅ​លើ Win 2000)
+Name[ko]=UADescription (윈도 2000의 IE 5.5)
+Name[lt]=Naudotojo agento aprašymas (IE 4.5 ir Win 2000)
+Name[lv]=UAApraksts (IE 5.5 uz Win 2000)
+Name[mk]=UADescription (IE 4.5 на Win 2000)
+Name[mn]=UserAgent-Тодорхойлолт (IE 5.5 on Win 2000)
+Name[mt]=UADescription (IE 4.5 fuq Win 2000)
+Name[nb]=Brukeragent (IE 4.5 på Win 2000)
+Name[nds]=UA-Beschrieven (IE 4.5 op Win 2000)
+Name[ne]=UA वर्णन (Win 2000 मा IE 4.5)
+Name[nl]=GA-beschrijving (IE 4.5 op Win 2000)
+Name[nn]=Brukaragent (IE 4.5 på Win 2000)
+Name[nso]=UAThlaloso (IE 4.5 go Win 2000)
+Name[pa]=UADescription (ਵਿੰਡੋ ੨੦੦੦ 'ਤੇ IE 4.5)
+Name[pl]=Opis przeglądarki użytkownika (IE 4.5 na Win 2000)
+Name[pt]=UADescription (IE 4.5 no Win 2000)
+Name[pt_BR]=Descrição (IE 4.5 no Win 2000)
+Name[ro]=Descriere UA (IE 4.5 pentru Win 2000)
+Name[ru]=UADescription (IE 4.5 на Win 2000)
+Name[rw]=UADescription (IE 4.5 kuri Win 2000)
+Name[se]=UA-čilgehus (IE 4.5 ja Win 2000)
+Name[sk]=Popis agenta (IE 4.5 na Win 2000)
+Name[sl]=UAOpis (IE 4.5 v Windows 2000)
+Name[sr]=UADescription (IE 4.5 на Win 2000)
+Name[sr@Latn]=UADescription (IE 4.5 na Win 2000)
+Name[sv]=AA-beskrivning (IE 4.5 på Win 2000)
+Name[ta]=UAவிவரம் (IE 4.5 on Win 2000)
+Name[tg]=ТавзеҳиUA (IE 4.5 ба Win 2000)
+Name[th]=UADescription (IE 4.5 บน Win 2000)
+Name[tr]=UA Tanımı (Win 2000 üzerinde IE 4.5)
+Name[tt]=UADescription (IE 4.5, Win 2000 astında)
+Name[uk]=UADescription (IE 4.5 на Win 2000)
+Name[uz]=UADescription (Win 2000 bilan IE 4.5)
+Name[uz@cyrillic]=UADescription (Win 2000 билан IE 4.5)
+Name[ven]=Thalutshedzo ya UA (IE 4.5 on Win 2000)
+Name[vi]=Mô tả UA (IE 5.5 trên Win 2000)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 4.5 so Win 2000)Name=
+Name[xh]=UADescription (IE 4.5 kwi Win 2000)
+Name[zh_CN]=用户代理描述 (运行于 Win 2000 的 IE 4.5)
+Name[zh_TW]=使用者代理描述 (IE 4.5 on Win 2000)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 4.5; Windows NT 5.0)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=4.5
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=2000
diff --git a/kcontrol/kio/uasproviders/ie501onwinnt5.desktop b/kcontrol/kio/uasproviders/ie501onwinnt5.desktop
new file mode 100644
index 000000000..27b90f643
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ie501onwinnt5.desktop
@@ -0,0 +1,79 @@
+[Desktop Entry]
+Name=UADescription (IE 5.01 on Win 2000)
+Name[af]=Ua-beskrywing (Ie 5.01 op Win 2000)
+Name[be]=UADescription (IE 5.01 на Win 2000)
+Name[br]=UADescription (IE 5.01 war Win 2000)
+Name[ca]=Descripció de AU (IE 5.01 en Windows 2000)
+Name[cs]=Popis agenta (IE 5.01 na Win 2000)
+Name[csb]=Òpis programë brëkòwnika (IE 5.01 na Win 2000)
+Name[cy]=UADisgrifiad (IE 5.01 ar Win 2000)
+Name[da]=Brugeragentbeskrivelse (IE 5.01 på Win 2000)
+Name[de]=Browserkennung (IE 5.01 auf Windows 2000)
+Name[el]=Περιγραφή UA (IE 5.01 σε Win 2000)
+Name[eo]=UA-Priskribo (IE 5.01 sub Vindozo 2000)
+Name[es]=Descripción de AU (IE 5.01 en Windows 2000)
+Name[et]=UADescription (IE 5.01 Win2000 platvormil)
+Name[eu]=UA azalpena (IE 5.01 Win 2000-n)
+Name[fa]=UADescription (IE 5.01 در Win 2000)
+Name[fi]=Käyttäjäagenttikuvaus (IE 5.01 Win 2000:lla)
+Name[fr]=Identité du navigateur (IE 5.01 sous Windows 2000)
+Name[fy]=GA-omskriuwing (IE 5.01 op Win 2000)
+Name[ga]=UADescription (IE 5.01 ar Win 2000)
+Name[gl]=UADescription (IE 5.01 en Win 2000)
+Name[he]=UADescription (Win 2000ב־ IE 5.01)
+Name[hi]=यूएडी-डिस्क्रिप्शन (IE 5.01 विन 2000 पर)
+Name[hr]=UADescription (IE 5.01 na Win 2000)
+Name[hu]=Böngészőtípus (IE 5.01, Win 2000)
+Name[id]=UADescription (IE 5.01 di Win 2000)
+Name[is]=UAD strengur (IE 5.01 on Win 2000)
+Name[it]=DescrizioneUA (IE 5.01 su Win 2000)
+Name[ka]=UADescription (IE 5.01 Win 2000-ში)
+Name[kk]=UADescription (IE 5.01 / Win 2000)
+Name[km]=UADescription (IE 5.01 នៅ​លើ Win 2000)
+Name[ko]=UADescription (윈도 2000의 IE 4.01)
+Name[lt]=Naudotojo agento aprašymas (IE 5.01 ir Win 2000)
+Name[lv]=UAApraksts (IE 5.01 uz Win 2000)
+Name[mk]=UADescription (IE 5.01 на Win 2000)
+Name[mn]=UserAgent-Тодорхойлолт (IE 5.01 on Win 2000)
+Name[mt]=UADescription (IE 5.01 fuq Win 2000)
+Name[nb]=Brukeragent (IE 5.01 på Win 2000)
+Name[nds]=UA-Beschrieven (IE 5.01 op Win 2000)
+Name[ne]=UA वर्णन (Win 2000 मा IE 5.01)
+Name[nl]=GA-beschrijving (IE 5.01 op Win 2000)
+Name[nn]=Brukaragent (IE 5.01 på Win 2000)
+Name[nso]=UAThlaloso (IE 5.01 go Win 2000)
+Name[pa]=UADescription (ਵਿੰਡੋ ੨੦੦੦ 'ਤੇ IE 5.01)
+Name[pl]=Opis przeglądarki użytkownika (IE 5.01 na Win 2000)
+Name[pt]=UADescription (IE 5.01 no Win 2000)
+Name[pt_BR]=Descrição (IE 5.01 no Win 2000)
+Name[ro]=Descriere UA (IE 5.01 pentru Win 2000)
+Name[ru]=UADescription (IE 5.01 на Win 2000)
+Name[rw]=UADescription (IE 5.01 kuri Win 2000)
+Name[se]=UA-čilgehus (IE 5.01 ja Win 2000)
+Name[sk]=Popis agenta (IE 5.01 na Win 2000)
+Name[sl]=UAOpis (IE 5.01 na Windows 2000)
+Name[sr]=UADescription (IE 5.01 на Win 2000)
+Name[sr@Latn]=UADescription (IE 5.01 na Win 2000)
+Name[sv]=AA-beskrivning (IE 5.01 på Win 2000)
+Name[ta]=UAவிவரம் (IE 5.01 on Win 2000)
+Name[tg]=ТавзеҳиUA (IE 5.01 ба Win 2000)
+Name[th]=UADescription (IE 5.01 บน Win 2000)
+Name[tr]=UA Tanımı (Win 2000 üzerinde IE 5.01)
+Name[tt]=UADescription (IE 5.01, Win 2000 astında)
+Name[uk]=UADescription (IE 5.01 на Win 2000)
+Name[uz]=UADescription (Win 2000 bilan IE 5.01)
+Name[uz@cyrillic]=UADescription (Win 2000 билан IE 5.01)
+Name[ven]=Thalutshedzo (IE 5.01 on Win 2000)
+Name[vi]=Mô tả UA (IE 5.01 trên Win 2000)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 5.01 so Win 2000)
+Name[xh]=UADescription (IE 5.01 kwi Win 2000)
+Name[zh_CN]=用户代理描述 (运行于 Win 2000 的 IE 5.01)
+Name[zh_TW]=使用者代理描述 (IE 5.01 on Win 2000)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=5.01
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=2000
diff --git a/kcontrol/kio/uasproviders/ie50onppc.desktop b/kcontrol/kio/uasproviders/ie50onppc.desktop
new file mode 100644
index 000000000..6cb00f7e4
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ie50onppc.desktop
@@ -0,0 +1,79 @@
+[Desktop Entry]
+Name=UADescription (IE 5.0 on Mac PPC)
+Name[af]=UA-beskrywing (Ie 5.0 op Mac Ppc)
+Name[be]=UADescription (IE 5.0 на Mac PPC)
+Name[br]=UADescription (IE 5.0 war Mac PPC)
+Name[ca]=Descripció de AU (IE 5.0 en Mac PPC)
+Name[cs]=Popis agenta (IE 5.0 na Mac PPC)
+Name[csb]=Òpis programë brëkòwnika (IE 5.0 na Mac PPC)
+Name[cy]=UADisgrifiad (IE 5.0 ar Mac PPC)
+Name[da]=Brugeragentbeskrivelse (IE 5.0 på Mac PPC)
+Name[de]=Browserkennung (IE 5.0 auf Mac PPC)
+Name[el]=Περιγραφή UA (IE 5.0 σε Mac PPC)
+Name[eo]=UA-Priskribo (IE 5.0 sub Mac-PPC)
+Name[es]=Descripción de AU (IE 5.0 en Mac PPC)
+Name[et]=UADescription (IE 5.0 MacPPC platvormil)
+Name[eu]=UA azalpena (IE 5.0 Mac PPC-n)
+Name[fa]=UADescription (IE 5.0 در Mac PPC)
+Name[fi]=Käyttäjäagenttikuvaus (IE 5.0 Mac PPC:llä)
+Name[fr]=Identité du navigateur (IE 5.0 sous Mac PPC)
+Name[fy]=GA-omskriuwing (IE 5.0 op Mac PPC)
+Name[ga]=UADescription (IE 5.0 ar Mac PPC)
+Name[gl]=UADescription (IE 5.0 en Mac PPC)
+Name[he]=UADescription (Mac PPCב־ IE 5.0)
+Name[hi]=यूएडी-डिस्क्रिप्शन (IE 5.0 मैक पीपीसी पर)
+Name[hr]=UADescription (IE 5.0 na Mac PPC)
+Name[hu]=Böngészőtípus (IE 5.0, Mac PPC)
+Name[id]=UADescription (IE 5.0 di Mac PPC)
+Name[is]=UAD strengur (IE 5.0 on Mac PPC)
+Name[it]=DescrizioneUA (IE 5.0 su Mac PPC)
+Name[ka]=UADescription (IE 5.0 Mac PPC-ში)
+Name[kk]=UADescription (IE 5.0 / Mac PPC)
+Name[km]=UADescription (IE 5.0 នៅ​លើ Mac PPC)
+Name[ko]=UADescription (Mac PPC의 IE 5.0)
+Name[lt]=Naudotojo agento aprašymas (IE 5.0 ir Mac PPC)
+Name[lv]=UAApraksts (IE 5.0 uz Mac PPC)
+Name[mk]=UADescription (IE 5.0 на Mac PPC)
+Name[mn]=UserAgent-Тодорхойлолт (IE 5.0 on Mac PPC)
+Name[mt]=UADescription (IE 5.0 fuq Mac PPC)
+Name[nb]=Brukeragent (IE 5.0 på Mac PPC)
+Name[nds]=UA-Beschrieven (IE 5.0 op Mac PPC)
+Name[ne]=UA वर्णन (Mac PPC मा IE 5.0)
+Name[nl]=GA-beschrijving (IE 5.0 op Mac PPC)
+Name[nn]=Brukaragent (IE 5.0 på Mac PPC)
+Name[nso]=UAThlaloso (IE 5.0 go Mac PPC)
+Name[pa]=UADescription (ਮੈਕ PPC 'ਤੇ IE 5.0)
+Name[pl]=Opis przeglądarki użytkownika (IE 5.0 na Mac PPC)
+Name[pt]=UADescription (IE 5.0 no Mac PPC)
+Name[pt_BR]=Descrição (IE 5.0 no Mac PPC)
+Name[ro]=Descriere UA (IE 5.0 pentru Mac PPC)
+Name[ru]=UADescription (IE 5.0 на Mac PPC)
+Name[rw]=UADescription (IE 5.0 kuri Mac PPC)
+Name[se]=UA-čilgehus (IE 5.0 ja Mac PPC)
+Name[sk]=Popis agenta (IE 5.0 na Mac PPC)
+Name[sl]=UAOpis (IE 5.0 na Mac PPC)
+Name[sr]=UADescription (IE 5.0 на Mac PPC)
+Name[sr@Latn]=UADescription (IE 5.0 na Mac PPC)
+Name[sv]=AA-beskrivning (IE 5.0 på Mac PPC)
+Name[ta]=UAவிவரம் (IE 5.0 on Mac PPC)
+Name[tg]=ТавзеҳиUA (IE 5.0 ба Mac PPC)
+Name[th]=UADescription (IE 5.0 บน Mac PPC)
+Name[tr]=UA Tanımı (Mac PPC üzerinde IE 5.0)
+Name[tt]=UADescription (IE 5.0, Mac PPC astında)
+Name[uk]=UADescription (IE 5.0 на Mac PPC)
+Name[uz]=UADescription (Mac PPC bilan IE 5.0)
+Name[uz@cyrillic]=UADescription (Mac PPC билан IE 5.0)
+Name[ven]=Thalutshedzo ya UA (IE 5.0 on Mac PPC)
+Name[vi]=Mô tả UA (IE 5.0 trên Mac PPC)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 5.0 so Mac PPC)
+Name[xh]=UADescription (IE 5.0 kwi Mac PPC)
+Name[zh_CN]=用户代理描述 (运行于 Mac PPC 的 IE 5.0)
+Name[zh_TW]=使用者代理描述 (IE 5.0 on Mac PPC)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=5.0
+X-KDE-UA-SYSNAME=Mac
+X-KDE-UA-SYSRELEASE=PPC
diff --git a/kcontrol/kio/uasproviders/ie55onwin98.desktop b/kcontrol/kio/uasproviders/ie55onwin98.desktop
new file mode 100644
index 000000000..3d1aff5e8
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ie55onwin98.desktop
@@ -0,0 +1,79 @@
+[Desktop Entry]
+Name=UADescription (IE 5.5 on Win 98)
+Name[af]=UA-beskrywing (Ie 5.5 op Win 98)
+Name[be]=UADescription (IE 5.5 на Win 98)
+Name[br]=UADescription (IE 5.5 war Win 98)
+Name[ca]=Descripció de AU (IE 5.5 en Windows 98)
+Name[cs]=Popis agenta (IE 5.5 na Win 98)
+Name[csb]=Òpis programë brëkòwnika (IE 5.5 na Win 98)
+Name[cy]=UADisgrifiad (IE 5.5 ar Win 98)
+Name[da]=Brugeragentbeskrivelse (IE 5.5 på Win 98)
+Name[de]=Browserkennung (IE 5.5 unter Windows 98)
+Name[el]=Περιγραφή UA (IE 5.5 σε Win 98)
+Name[eo]=UA-Priskribo (IE 5.5 sub Vindozo 98)
+Name[es]=Descripción de AU (IE 5.5 en Windows 98)
+Name[et]=UADescription (IE 5.5 Win98 platvormil)
+Name[eu]=UA azalpena (IE 5.5 Win 98-an)
+Name[fa]=UADescription (IE 5.5 در Win 98)
+Name[fi]=Käyttäjäagenttikuvaus (IE 5.5 Win 98:lla)
+Name[fr]=Identité du navigateur (IE 5.5 sous Windows 98)
+Name[fy]=GA-omskriuwing (IE 5.5 op Win 98)
+Name[ga]=UADescription (IE 5.5 ar Win 98)
+Name[gl]=UADescription (IE 5.5 en Win 98)
+Name[he]=UADescription (Win 98ב־ IE 5.5)
+Name[hi]=यूएडी-डिस्क्रिप्शन (IE 5.5 विन 98 पर)
+Name[hr]=UADescription (IE 5.5 na Win 98)
+Name[hu]=Böngészőtípus (IE 5.5, Win 98)
+Name[id]=UADescription (IE 5.5 di Win 98)
+Name[is]=UAD strengur (IE 5.5 on Win 98)
+Name[it]=DescrizioneUA (IE 5.5 su Win 98)
+Name[ka]=UADescription (IE 5.5 Win 98-ში)
+Name[kk]=UADescription (IE 5.5 / Win 98)
+Name[km]=UADescription (IE 5.5 នៅ​លើ Win 98)
+Name[ko]=UADescription (윈도 2000의 IE 5.5)
+Name[lt]=Naudotojo agento aprašymas (IE 5.5 ir Win 98)
+Name[lv]=UAApraksts (IE 5.5 uz Win 98)
+Name[mk]=UADescription (IE 5.5 на Win 98)
+Name[mn]=UserAgent-Тодорхойлолт (IE 5.5 on Win 98)
+Name[mt]=UADescription (IE 5.5 fuq Win 98)
+Name[nb]=Brukeragent (IE 5.5 på Win 98)
+Name[nds]=UA-Beschrieven (IE 5.5 op Win 98)
+Name[ne]=UA वर्णन (Win 98 मा IE 5.5)
+Name[nl]=GA-beschrijving (IE 5.5 op Win 98)
+Name[nn]=Brukaragent (IE 5.5 på Win 98)
+Name[nso]=UAThlaloso (IE 5.5 go Win 98)
+Name[pa]=UADescription (ਵਿੰਡੋ ੯੮ 'ਤੇ IE 5.5)
+Name[pl]=Opis przeglądarki użytkownika (IE 5.5 na Win 98)
+Name[pt]=UADescription (IE 5.5 no Win 95)
+Name[pt_BR]=Descrição (IE 5.5 no Win 98)
+Name[ro]=Descriere UA (IE 5.5 pentru Win 98)
+Name[ru]=UADescription (IE 5.5 на Win 98)
+Name[rw]=UADescription (IE 5.5 kuri Win 98)
+Name[se]=UA-čilgehus (IE 5.5 ja Win 98)
+Name[sk]=Popis agenta (IE 5.5 na Win 98)
+Name[sl]=UAOpis (IE 5.5 na Windows 98)
+Name[sr]=UADescription (IE 5.5 на Win 98)
+Name[sr@Latn]=UADescription (IE 5.5 na Win 98)
+Name[sv]=AA-beskrivning (IE 5.5 på Win 98)
+Name[ta]=UAவிவரம் (IE 5.5 on Win 98)
+Name[tg]=ТавзеҳиUA (IE 5.5 ба Win 98)
+Name[th]=UADescription (IE 5.5 บน Win 98)
+Name[tr]=UA Tanımı (Win 98 üzerinde IE 5.5)
+Name[tt]=UADescription (IE 5.5, Win 98 astında)
+Name[uk]=UADescription (IE 5.5 на Win 98)
+Name[uz]=UADescription (Win 98 bilan IE 5.5)
+Name[uz@cyrillic]=UADescription (Win 98 билан IE 5.5)
+Name[ven]=Thalutshedzo ya UA (IE 5.5 on Win 98)
+Name[vi]=Mô tả UA (IE 5.5 trên Win 98)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 5.5 so Win 98)
+Name[xh]=UADescription UA (IE 5.5 kwi Win 98)
+Name[zh_CN]=用户代理描述 (运行于 Win 98 的 IE 5.5)
+Name[zh_TW]=使用者代理描述 (IE 5.5 on Win 98)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=5.5
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=98
diff --git a/kcontrol/kio/uasproviders/ie55onwinnt5.desktop b/kcontrol/kio/uasproviders/ie55onwinnt5.desktop
new file mode 100644
index 000000000..a283897e1
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ie55onwinnt5.desktop
@@ -0,0 +1,79 @@
+[Desktop Entry]
+Name=UADescription (IE 5.5 on Win 2000)
+Name[af]=UA-beskrywing (Ie 5.5 op Win 2000)
+Name[be]=UADescription (IE 5.5 на Win 2000)
+Name[br]=UADescription (IE 5.5 war Win 2000)
+Name[ca]=Descripció de AU (IE 5.5 en Windows 2000)
+Name[cs]=Popis agenta (IE 5.5 na Win 2000)
+Name[csb]=Òpis programë brëkòwnika (IE 5.5 na Win 2000)
+Name[cy]=UADisgrifiad (IE 5.5 ar Win 2000)
+Name[da]=Brugeragentbeskrivelse (IE 5.5 på Win 2000)
+Name[de]=Browserkennung (IE 5.5 unter Windows 2000)
+Name[el]=Περιγραφή UA (IE 5.5 σε Win 2000)
+Name[eo]=UA-Priskribo (IE 5.5 sub Vindozo 2000)
+Name[es]=Descripción de AU (IE 5.5 en Windows 2000)
+Name[et]=UADescription (IE 5.5 Win2000 platvormil)
+Name[eu]=UA azalpena (IE 5.5 Win 2000-n)
+Name[fa]=UADescription (IE 5.5 در Win 2000)
+Name[fi]=Käyttäjäagenttikuvaus (IE 5.5 Win 2000:lla)
+Name[fr]=Identité du navigateur (IE 5.5 sous Windows 2000)
+Name[fy]=GA-omskriuwing (IE 5.5 op Win 2000)
+Name[ga]=UADescription (IE 5.5 ar Win 2000)
+Name[gl]=UADescription (IE 5.5 en Win 2000)
+Name[he]=UADescription (Win 2000ב־ IE 5.5)
+Name[hi]=यूएडी-डिस्क्रिप्शन (IE 5.5 विन 2000 पर)
+Name[hr]=UADescription (IE 5.5 na Win 2000)
+Name[hu]=Böngészőtípus (IE 5.5, Win 2000)
+Name[id]=UADescription (IE 5.5 di Win 2000)
+Name[is]=UAD strengur (IE 5.5 on Win 2000)
+Name[it]=DescrizioneUA (IE 5.5 su Win 2000)
+Name[ka]=UADescription (IE 5.5 Win 2000-ში)
+Name[kk]=UADescription (IE 5.5 / Win 2000)
+Name[km]=UADescription (IE 5.5 នៅ​លើ Win 2000)
+Name[ko]=UADescription (윈도 2000의 IE 5.5)
+Name[lt]=Naudotojo agento aprašymas (IE 5.5 ir Win 2000)
+Name[lv]=UAApraksts (IE 5.5 uz Win 2000)
+Name[mk]=UADescription (IE 5.5 на Win 2000)
+Name[mn]=UserAgent-Тодорхойлолт (IE 5.5 on Win 2000)
+Name[mt]=UADescription (IE 5.5 fuq Win 2000)
+Name[nb]=Brukeragent (IE 5.5 på Win 2000)
+Name[nds]=UA-Beschrieven (IE 5.5 op Win 2000)
+Name[ne]=UA वर्णन (Win 2000मा IE 5.5)
+Name[nl]=GA-beschrijving (IE 5.5 op Win 2000)
+Name[nn]=Brukaragent (IE 5.5 på Win 2000)
+Name[nso]=UAThlaloso (IE 5.5 go Win 2000)
+Name[pa]=UADescription (ਵਿੰਡੋ ੨੦੦੦ 'ਤੇ IE 5.5)
+Name[pl]=Opis przeglądarki użytkownika (IE 5.5 na Win 2000)
+Name[pt]=UADescription (IE 5.5 no Win 2000)
+Name[pt_BR]=Descrição (IE 5.5 no Win 2000)
+Name[ro]=Descriere UA (IE 5.5 pentru Win 2000)
+Name[ru]=UADescription (IE 5.5 на Win 2000)
+Name[rw]=UADescription (IE 5.5 kuri Win 2000)
+Name[se]=UA-čilgehus (IE 5.5 ja Win 2000)
+Name[sk]=Popis agenta (IE 5.5 na Win 2000)
+Name[sl]=UAOpis (IE 5.5 na Windows 2000)
+Name[sr]=UADescription (IE 5.5 на Win 2000)
+Name[sr@Latn]=UADescription (IE 5.5 na Win 2000)
+Name[sv]=AA-beskrivning (IE 5.5 på Win 2000)
+Name[ta]=UAவிவரம் (IE 5.5 on Win 2000)
+Name[tg]=ТавзеҳиUA (IE 5.5 ба Win 2000)
+Name[th]=UADescription (IE 5.5 บน Win 2000)
+Name[tr]=UA Tanımı (Win 2000 üzerinde IE 5.5)
+Name[tt]=UADescription (IE 5.5, Win 2000 astında)
+Name[uk]=UADescription (IE 5.5 на Win 2000)
+Name[uz]=UADescription (Win 2000 bilan IE 5.5)
+Name[uz@cyrillic]=UADescription (Win 2000 билан IE 5.5)
+Name[ven]=Thalutshedzo ya UA (IE 5.5 on Win 2000)
+Name[vi]=Mô tả UA (IE 5.5 trên Win 2000)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 5.5 so Win 2000)
+Name[xh]=UADescription (IE 5.5 kwi Win 2000)
+Name[zh_CN]=用户代理描述 (运行于 Win 2000 的 IE 5.5)
+Name[zh_TW]=使用者代理描述 (IE 5.5 on Win 2000)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=5.5
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=2000
diff --git a/kcontrol/kio/uasproviders/ie60oncurrent.desktop b/kcontrol/kio/uasproviders/ie60oncurrent.desktop
new file mode 100644
index 000000000..e65fbb2a4
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ie60oncurrent.desktop
@@ -0,0 +1,69 @@
+[Desktop Entry]
+Name=UADescription (IE 6.0 on current)
+Name[af]=UA-beskrywing (IE 6.0 op huidige bedryfstelsel)
+Name[be]=UADescription (IE 6.0 на гэтай сістэме)
+Name[bs]=UADescription (IE 6.0 na trenutnom)
+Name[ca]=Descripció UA (IE 6.0 a l'actual)
+Name[cs]=Popis agenta (IE 6.0 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (IE 6.0)
+Name[da]=Brugeragentbeskrivelse (IE 6.0 på denne)
+Name[de]=Browserkennung (IE 6.0 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (IE 6.01 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (IE 6.0 sub nuna)
+Name[es]=UADescription (IE 6.0 en actual)
+Name[et]=UADescription (Selles masinas töötav IE 6.0)
+Name[eu]=UA azalpena (IE 6.0 unekoan)
+Name[fa]=UADescription (IE 6.0 در حال حاضر)
+Name[fr]=Identité du navigateur (IE 6.0 sous le système actuel)
+Name[fy]=GA-omskriuwing (IE 6.0 op aktive)
+Name[ga]=UADescription (IE 6.0 ar an gcóras reatha)
+Name[gl]=UADescription (IE 6.0 no actual)
+Name[he]=UADescription (NN 3.01 בנוכחי)
+Name[hr]=UADescription (IE 6.0 na trenutnom)
+Name[hu]=Böngészőtípus (IE 6.0)
+Name[id]=UADescription (IE 6.0)
+Name[is]=UAD strengur (IE 6.0 á núverandi)
+Name[it]=DescrizioneUA (IE 6.0 su sistema attuale)
+Name[ka]=UADescription (IE 6.0 მიმდინარე სისტემაში)
+Name[kk]=UADescription (IE 6.0 осы орында)
+Name[km]=UADescription (IE 6.0 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 IE 6.0)
+Name[lt]=Naudotojo agento aprašymas (IE 6.0 ir esama)
+Name[lv]=UAApraksts (IE 6.0 uz tekošā)
+Name[mk]=UADescription (IE 6.0 на тековно)
+Name[nb]=Brukeragent (IE 6.0 på denne)
+Name[nds]=UA-Beschrieven (IE 6.0 op dit Systeem)
+Name[ne]=UA वर्णन (हाल IE 6.0 मा)
+Name[nl]=GA-beschrijving (IE 6.0 op huidige)
+Name[nn]=Brukaragent (IE 6.0 herifrå)
+Name[pa]=UADescription (ਮੌਜੂਦਾ IE 6.0)
+Name[pl]=Opis przeglądarki użytkownika (IE 6.0 na bieżącym systemie)
+Name[pt]=UADescription (IE 6.0 no sistema actual)
+Name[pt_BR]=Descrição (IE 6.0 no sistema atual)
+Name[ro]=Descriere UA (IE 6.0 pentru sistemul de operare curent)
+Name[ru]=UADescription (IE 6.0 на текущей системе)
+Name[rw]=UADescription (IE 6.0 ku igezweho)
+Name[se]=UA-čilgehus (IE 6.0 dán mašiinnas)
+Name[sl]=UAOpis (IE 6.0 na trenutnem)
+Name[sr]=UADescription (IE 6.0 на тренутном)
+Name[sr@Latn]=UADescription (IE 6.0 na trenutnom)
+Name[sv]=AA-beskrivning (IE 6.0 på aktuell)
+Name[ta]=UAவிவரம் (IE 6.0 on current)
+Name[tg]=UADescription (Системаи ҷорӣ IE 6.0)
+Name[th]=UADescription (IE 6.0 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (bulunulanda IE 6.0)
+Name[tt]=UADescription (IE 6.0, şul uq astında)
+Name[uk]=UADescription (IE 6.0 на поточній)
+Name[uz]=UADescription (joriy bilan IE 6.0)
+Name[uz@cyrillic]=UADescription (жорий билан IE 6.0)
+Name[vi]=Mô tả UA (đang dùng IE 6.0)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 6.0 sol ci do moumint)
+Name[zh_CN]=用户代理描述 (运行于本机的 IE 6.0)
+Name[zh_TW]=使用者代理描述 (IE 6.0 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 6.0; appPlatform; appSysName appMachineType) Konqueror/3.5 (KHTML, like Gecko)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=6.0
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/ie60onwinnt51.desktop b/kcontrol/kio/uasproviders/ie60onwinnt51.desktop
new file mode 100644
index 000000000..c2afcb31f
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ie60onwinnt51.desktop
@@ -0,0 +1,81 @@
+[Desktop Entry]
+Name=UADescription (IE 6.0 on Win XP)
+Name[af]=UA-beskrywing (IE 6.0 op Win XP)
+Name[az]=İAİzahatı (Win XP üstündə IE 6.0)
+Name[be]=UADescription (IE 6.0 на Win XP)
+Name[br]=UADescription (IE 6.0 war Win XP)
+Name[bs]=UADescription (IE 5.0 on Win XP)
+Name[ca]=Descripció de AU (IE 6.0 en Win XP)
+Name[cs]=Popis agenta (IE 6.0 na Win XP)
+Name[csb]=Òpis programë brëkòwnika (IE 6.0 na Win XP)
+Name[cy]=UADisgrifiad (IE 6.0 ar Win XP)
+Name[da]=Brugeragentbeskrivelse (IE 6.0 på Win XP)
+Name[de]=Browserkennung (IE 6.0 unter Windows XP)
+Name[el]=Περιγραφή UA (IE 6.0 σε Win XP)
+Name[eo]=UA-Priskribo (IE 6.0 sub Vindozo XP)
+Name[es]=Descripción de AU (IE 6.0 en Win XP)
+Name[et]=UADescription (IE 6.0 Win XP platvormil)
+Name[eu]=UA azalpena (IE 6.0 Win XP-n)
+Name[fa]=UADescription (IE 6.0 در Win XP)
+Name[fi]=Käyttäjäagenttikuvaus (IE 6.0 Win XP:llä)
+Name[fr]=Identité du navigateur (IE 6.0 sous Windows XP)
+Name[fy]=GA-omskriuwing (IE 6.0 op Win XP)
+Name[ga]=UADescription (IE 6.0 ar Win XP)
+Name[gl]=UADescription (IE 6.0 en Win XP)
+Name[he]=UADescription (Win XPב־ IE 6.0)
+Name[hi]=यूएडी-डिस्क्रिप्शन (IE 6.0 विन एक्सपी पर)
+Name[hr]=UADescription (IE 5.0 na Win 95)
+Name[hu]=Böngészőtípus (IE 6.0, Win XP)
+Name[id]=UADescription (IE 6.0 di Win XP)
+Name[is]=UAD strengur (IE 5.0 on Win XP)
+Name[it]=DescrizioneUA (IE 6.0 su Win XP)
+Name[ka]=UADescription (IE 5.0 Win 95-ში)
+Name[kk]=UADescription (IE 6.0 / Win XP)
+Name[km]=UADescription (IE 6.0 នៅ​លើ Win XP)
+Name[ko]=UADescription (윈도 XP의 IE 6.0)
+Name[lt]=Naudotojo agento aprašymas (IE 6.0 ir Win XP)
+Name[lv]=UAApraksts (IE 6.0 uz Win XP)
+Name[mk]=UADescription (IE 6.0 на Win XP)
+Name[mn]=User-Agent-Тодорхойлолт (IE 6.0 on Win XP)
+Name[mt]=UADescription (IE 6.0 fuq Win XP)
+Name[nb]=Brukeragent (IE 6.0 på Win XP)
+Name[nds]=UA-Beschrieven (IE 6.0 op Win XP)
+Name[ne]=UA वर्णन (Win XP मा IE 6.0)
+Name[nl]=GA-beschrijving (IE 6.0 op Win XP)
+Name[nn]=Brukaragent (IE 6.0 på Win XP)
+Name[nso]=UAThlaloso (IE 6.0 go Win XP)
+Name[pa]=UADescription (ਵਿੰਡੋ XP 'ਤੇ IE 6.0)
+Name[pl]=Opis przeglądarki użytkownika (IE 6.0 na Win XP)
+Name[pt]=UADescription (IE 6.0 no Win XP)
+Name[pt_BR]=Descrição (IE 6.0 no Win XP)
+Name[ro]=Descriere UA (IE 6.0 pentru Win XP)
+Name[ru]=UADescription (IE 5.0 на Win 95)
+Name[rw]=UADescription (IE 6.0 kuri Win XP)
+Name[se]=UA-čilgehus (IE 6.0 ja Win XP)
+Name[sk]=Popis agenta (IE 6.0 na Win XP)
+Name[sl]=UAOpis (IE 6.0 na Windows XP)
+Name[sr]=UADescription (IE 6.0 на Win XP)
+Name[sr@Latn]=UADescription (IE 6.0 na Win XP)
+Name[sv]=AA-beskrivning (IE 6.0 på Win XP)
+Name[ta]=UAவிவரம்(IE 6.0 on Win XP)
+Name[tg]=ТавзеҳиUA (IE 6.0 ба Win XP)
+Name[th]=UADescription (IE 6.0 บน Win XP)
+Name[tr]=UA Tanımı (Win XP üzerinde IE 6.0)
+Name[tt]=UADescription (IE 6.0, Win XP astında)
+Name[uk]=UADescription (IE 6.0 на Win XP)
+Name[uz]=UADescription (Win XP bilan IE 6.0)
+Name[uz@cyrillic]=UADescription (Win XP билан IE 6.0)
+Name[ven]=Thalutshedzo ya UA (IE 5.0 kha Win XP)
+Name[vi]=Mô tả UA (IE 6.0 trên Win XP)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (IE 6.0 so Win XP)
+Name[xh]=UADescription (IE 6.0 kwi Win XP)
+Name[zh_CN]=用户代理描述 (运行于 Win XP 的 IE 6.0)
+Name[zh_TW]=使用者代理描述 (IE 6.0 on Win XP)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=IE
+X-KDE-UA-FULL=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
+X-KDE-UA-NAME=Internet Explorer
+X-KDE-UA-VERSION=6.0
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=XP
diff --git a/kcontrol/kio/uasproviders/lynxoncurrent.desktop b/kcontrol/kio/uasproviders/lynxoncurrent.desktop
new file mode 100644
index 000000000..400ed11ad
--- /dev/null
+++ b/kcontrol/kio/uasproviders/lynxoncurrent.desktop
@@ -0,0 +1,51 @@
+[Desktop Entry]
+Name=UADescription (Lynx 2.8.3)
+Name[af]=UA-beskrywing (Lynx 2.8.3)
+Name[ca]=Descripció de AU (Lynx 2.8.3)
+Name[cs]=Popis agenta (Lynx 2.8.3)
+Name[csb]=Òpis programë brëkòwnika (Lynx 2.8.3)
+Name[cy]=UADisgrifiad (Lynx 2.8.3)
+Name[da]=Brugeragentbeskrivelse (Lynx 2.8.3)
+Name[de]=Browserkennung (Lynx 2.8.3)
+Name[el]=Περιγραφή UA (Lynx 2.8.3)
+Name[eo]=UA-Priskribo (Lynx 2.8.3)
+Name[es]=Descripción de AU (Lynx 2.8.3)
+Name[eu]=UA azalpena (Lynx 2.8.3)
+Name[fi]=Käyttäjäagenttikuvaus (Lynx 2.8.3)
+Name[fr]=Identité du navigateur (Lynx 2.8.3)
+Name[fy]=GA-omskriuwing (Lynx 2.8.3)
+Name[hi]=यूएडी-डिस्क्रिप्शन (लायनक्स 2.8.3)
+Name[hu]=Böngészőtípus (Lynx 2.8.3)
+Name[is]=UAD strengur (Lynx 2.8.3)
+Name[it]=DescrizioneUA (Lynx 2.8.3)
+Name[lt]=Naudotojo agento aprašymas (Lynx 2.8.3)
+Name[lv]=UAApraksts (Lynx 2.8.3)
+Name[mn]=UserAgent-Тодорхойлолт (Lynx 2.8.3)
+Name[nb]=Brukeragent (Lynx 2.8.3)
+Name[nds]=UA-Beschrieven (Lynx 2.8.3)
+Name[ne]=UA वर्णन (Lynx 2.8.3)
+Name[nl]=GA-beschrijving (Lynx 2.8.3)
+Name[nn]=Brukaragent (Lynx 2.8.3)
+Name[nso]=UAThlaloso (Lynx 2.8.3)
+Name[pa]=UADescription(ਲੇਨਕਸ2.8.30)
+Name[pl]=Opis przeglądarki użytkownika (Lynx 2.8.3)
+Name[pt_BR]=Descrição (Lynx 2.8.3)
+Name[ro]=Descriere UA (Lynx 2.8.3)
+Name[se]=UA-čilgehus (Lynx 2.8.3)
+Name[sk]=Popis agenta (Lynx 2.8.3)
+Name[sl]=UAOpis (Lynx 2.8.3)
+Name[sv]=AA-beskrivning (Lynx 2.8.3)
+Name[ta]=UAவிவரம் (Lynx 2.8.3)
+Name[tg]=ТавзеҳиUA (Линукс 2.8.3)
+Name[tr]=UA Tanımı (Lynx 2.8.3)
+Name[ven]=Thalutshedzo ya UA (Lynx 2.8.3)
+Name[vi]=Mô tả UA (Lynx 2.8.3)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Lynx 2.8.3)
+Name[zh_CN]=用户代理描述 (Lynx 2.8.3)
+Name[zh_TW]=使用者代理描述 (Lynx 2.8.3)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MISC
+X-KDE-UA-FULL=Lynx/2.8.3dev.6 libwww-FM/2.14
+X-KDE-UA-NAME=Lynx
+X-KDE-UA-VERSION=2.8.3dev.6
diff --git a/kcontrol/kio/uasproviders/mozoncurrent.desktop b/kcontrol/kio/uasproviders/mozoncurrent.desktop
new file mode 100644
index 000000000..4e6f483a5
--- /dev/null
+++ b/kcontrol/kio/uasproviders/mozoncurrent.desktop
@@ -0,0 +1,70 @@
+[Desktop Entry]
+Name=UADescription (Mozilla 1.7 on current)
+Name[af]=UA-beskrywing (Mozilla 1.7 op huidige bedryfstelsel)
+Name[be]=UADescription (Mozilla 1.7 на гэтай сістэме)
+Name[bs]=UADescription (Mozilla 1.7 na trenutnom)
+Name[ca]=Descripció UA (Mozilla 1.7 a l'actual)
+Name[cs]=Popis agenta (Mozilla 1.7 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (Mozilla 1.7)
+Name[da]=Brugeragentbeskrivelse (Mozilla 1.7 på denne)
+Name[de]=Browserkennung (Mozilla 1.7 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (Mozilla 1.7 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (Mozilo 1.7 sub nuna)
+Name[es]=UADescription (Mozilla 1.7 en actual)
+Name[et]=UADescription (Selles masinas töötav Mozilla 1.7)
+Name[eu]=UA deskriptioa (Mozilla 1.7 unekoan)
+Name[fa]=UADescription (Mozilla 1.7 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (Mozilla 1.7 nykyisin)
+Name[fr]=Identité du navigateur (Mozilla 1.7 sous le système actuel)
+Name[fy]=GA-omskriuwing (Mozilla 1.7 op aktive)
+Name[ga]=UADescription (Mozilla 1.7 ar an gcóras reatha)
+Name[gl]=UADescription (Mozilla 1.6 no actual)
+Name[he]=UADescription (Mozilla 1.7 בנוכחי)
+Name[hr]=UADescription (Mozilla 1.7 na trenutnom)
+Name[hu]=Böngészőtípus (Mozilla 1.7)
+Name[id]=UADescription (Mozilla 1.7)
+Name[is]=UAD strengur (Mozilla 1.7 á núverandi)
+Name[it]=DescrizioneUA (Mozilla 1.7 su sistema attuale)
+Name[ka]=UADescription (Mozilla 1.7 მიმდინარე სისტემაში)
+Name[kk]=UADescription (Mozilla 1.7 осы орында)
+Name[km]=UADescription (Mozilla 1.7 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 Mozilla 1.7)
+Name[lt]=Naudotojo agento aprašymas (Mozilla 1.7 ir esama)
+Name[lv]=UAApraksts (Mozilla 1.7 uz tekošā)
+Name[mk]=UADescription (Mozilla 1.7 на тековно)
+Name[nb]=Brukeragent (Mozilla 1.7 herifra)
+Name[nds]=UA-Beschrieven (Mozilla 1.7 op dit Systeem)
+Name[ne]=UA वर्णन (हाल मोजिला १.७)
+Name[nl]=GA-beschrijving (Mozilla 1.7 op current)
+Name[nn]=Brukaragent (Mozilla 1.7 herifrå)
+Name[pa]=UADescription (ਮੌਜੂਦਾ Mozilla 1.7)
+Name[pl]=Opis przeglądarki użytkownika (Mozilla 1.7 na bieżącym systemie)
+Name[pt]=UADescription (Mozilla 1.7 no sistema actual)
+Name[pt_BR]=Descrição (Mozilla 1.7 no sistema atual)
+Name[ro]=Descriere UA (Mozilla 1.7 pentru sistemul de operare curent)
+Name[ru]=UADescription (Mozilla 1.7 на текущей системе)
+Name[rw]=UADescription (Mozilla 1.7 ku igezweho)
+Name[se]=UA-čilgehus (Mozilla 1.7 dán mašiinnas)
+Name[sl]=UAOpis (Mozilla 1.7 na trenutnem)
+Name[sr]=UADescription (Mozilla 1.7 на тренутном)
+Name[sr@Latn]=UADescription (Mozilla 1.7 na trenutnom)
+Name[sv]=AA-beskrivning (Mozilla 1.7 på aktuell)
+Name[ta]=UADescription (Mozilla 1.7 on current)
+Name[tg]=UADescription (Системаи ҷорӣ Mozilla 1.7)
+Name[th]=UADescription (มอซิลล่า 1.7 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (bulunulanda Mozilla 1.6)
+Name[tt]=UADescription (Mozilla 1.7, şul uq astında)
+Name[uk]=UADescription (Mozilla 1.7 на поточній)
+Name[uz]=UADescription (joriy bilan Mozilla 1.7)
+Name[uz@cyrillic]=UADescription (жорий билан Mozilla 1.7)
+Name[vi]=Mô tả UA (đang dùng Mozilla 1.7)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.7 sol ci do moumint)
+Name[zh_CN]=用户代理描述 (运行于本机的 Mozilla 1.7)
+Name[zh_TW]=使用者代理描述 (Mozilla 1.7 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MOZ
+X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appSysName appMachineType; appLanguage; rv:1.7.3) Gecko/20040916
+X-KDE-UA-NAME=Mozilla
+X-KDE-UA-VERSION=1.7.3
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/mozoncurrent12.desktop b/kcontrol/kio/uasproviders/mozoncurrent12.desktop
new file mode 100644
index 000000000..0155d1282
--- /dev/null
+++ b/kcontrol/kio/uasproviders/mozoncurrent12.desktop
@@ -0,0 +1,76 @@
+[Desktop Entry]
+Name=UADescription (Mozilla 1.2.1 on current)
+Name[af]=UA-beskrywing (Mozilla 1.2.1 op huidige bedryfstelsel)
+Name[az]=İAİzahatı (Hazırkı Mozilla 1.2.1)
+Name[be]=UADescription (Mozilla 1.2.1 на гэтай сістэме)
+Name[bs]=UADescription (Mozilla 1.2.1 na trenutnom)
+Name[ca]=Descripció de AU (Mozilla 1.2.1 sobre l'actual)
+Name[cs]=Popis agenta (Mozilla 1.2.1 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (Mozilla 1.2.1)
+Name[cy]=UADisgrifiad (Mozilla 1.2.1 ar gyfredol)
+Name[da]=Brugeragentbeskrivelse (Mozilla 1.2.1 på denne)
+Name[de]=Browserkennung (Mozilla 1.2.1 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (Mozilla 1.2.1 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (Mozilo 1.2.1 sub nuna)
+Name[es]=Descripción de AU (Mozilla 1.2.1 en actual
+Name[et]=UADescription (Selles masinas töötav Mozilla 1.2.1)
+Name[eu]=UA deskriptioa (Mozilla 1.2.1 unekoan)
+Name[fa]=UADescription (Mozilla 1.2.1 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (Mozilla 1.2.1 nykyisellä)
+Name[fr]=Identité du navigateur (Mozilla 1.2.1 sous le système actuel)
+Name[fy]=GA-omskriuwing (Mozilla 1.2.1 op aktive)
+Name[ga]=UADescription (Mozilla 1.2.1 ar an gcóras reatha)
+Name[gl]=UADescription (Mozilla 1.2.1 no actual)
+Name[he]=UADescription (Mozilla 1.2.1 בנוכחי)
+Name[hi]=यूएडी-डिस्क्रिप्शन (मोज़िला 1.2.1 हालिया पर)
+Name[hr]=UADescription (Mozilla 1.2.1 na trenutnom)
+Name[hu]=Böngészőtípus (Mozilla 1.2.1)
+Name[id]=UADescription (Mozilla 1.2.1)
+Name[is]=UAD strengur (Mozilla 1.2.1 on current)
+Name[it]=DescrizioneUA (Mozilla 1.2.1 su sistema attuale)
+Name[ka]=UADescription (Mozilla 1.2.1 მიმდინარე სისტემაში)
+Name[kk]=UADescription (Mozilla 1.2.1 осы орында)
+Name[km]=UADescription (Mozilla 1.2.1 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 Mozilla 1.2.1)
+Name[lt]=Naudotojo agento aprašymas (Mozilla 1.2.1 ir esama)
+Name[lv]=UAApraksts (Mozilla 1.2.1 uz tekošā)
+Name[mk]=UADescription (Mozilla 1.2.1 на тековниот)
+Name[mn]=UserAgent-Тодорхойлолт (Мокилла 1.2.1 идэвхитэй)
+Name[mt]=UADescription (Mozilla 1.2.1 fuq kurrenti)
+Name[nb]=Brukeragent (Mozilla 1.2.1 herifra)
+Name[nds]=UA-Beschrieven (Mozilla 1.2.1 op dit Systeem)
+Name[ne]=UA वर्णन (हाल मोजिला १.२.१)
+Name[nl]=GA-beschrijving (Mozilla 1.2.1 op current)
+Name[nn]=Brukaragent (Mozilla 1.2.1 herifrå)
+Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ ਮੌਜੀਲਾ ੧.੨.੧)
+Name[pl]=Opis przeglądarki użytkownika (Mozilla 1.2.1 na bieżącym systemie)
+Name[pt]=UADescription (Mozilla 1.2.1 no sistema actual)
+Name[pt_BR]=Descrição (Mozilla 1.2.1 no sistema atual)
+Name[ro]=Descriere UA (Mozilla 1.2.1 pentru sistemul de operare curent)
+Name[ru]=UADescription (Mozilla 1.2.1 на текущей системе)
+Name[rw]=UADescription (Mozilla 1.2.1 ku igezweho)
+Name[se]=UA-čilgehus (Mozilla 1.2.1 dan mašiinas)
+Name[sk]=UADescription (Mozilla 1.2.1)
+Name[sl]=UAOpis (Mozilla 1.2.1 na trenutnem)
+Name[sr]=UADescription (Mozilla 1.2.1 на тренутном)
+Name[sr@Latn]=UADescription (Mozilla 1.2.1 na trenutnom)
+Name[sv]=AA-beskrivning (Mozilla 1.2.1 på aktuell)
+Name[ta]=UAவிவரம் (M18 on current)
+Name[tg]=ТавзеҳиUA (Mozilla 1.2.1 равон)
+Name[th]=UADescription (มอซิลล่า 1.2.1 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (güncel üzerinde Mozilla 1.2.1)
+Name[tt]=UADescription (Mozilla 1.2.1, şul uq astında)
+Name[uk]=UADescription (Mozilla 1.2.1 на поточній ОС)
+Name[uz]=UADescription (joriy bilan Mozilla 1.2.1)
+Name[uz@cyrillic]=UADescription (жорий билан Mozilla 1.2.1)
+Name[vi]=Mô tả UA (đang dùng Mozilla 1.2.1)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.2.1 sol ci do moumint)
+Name[zh_CN]=用户代理描述 (运行于本机的 Mozilla 1.2.1)
+Name[zh_TW]=使用者代理描述 (Mozilla 1.2.1 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MOZ
+X-KDE-UA-FULL=Mozilla/5.0 (appSysName; U; appLanguage; rv:1.2.1) Gecko/20021130
+X-KDE-UA-NAME=Mozilla
+X-KDE-UA-VERSION=1.2.1
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/mozoncurrent16.desktop b/kcontrol/kio/uasproviders/mozoncurrent16.desktop
new file mode 100644
index 000000000..6867a5ee1
--- /dev/null
+++ b/kcontrol/kio/uasproviders/mozoncurrent16.desktop
@@ -0,0 +1,75 @@
+[Desktop Entry]
+Name=UADescription (Mozilla 1.6 on current)
+Name[af]=UA-beskrywing (Mozilla 1.6 op huidige bedryfstelsel)
+Name[az]=İA İzahatı (Mozilla 1.6 on current)
+Name[be]=UADescription (Mozilla 1.6 на гэтай сістэме)
+Name[bs]=UADescription (Mozilla 1.6 na trenutnom)
+Name[ca]=UADescription (Mozilla 1.6 a l'actual)
+Name[cs]=Popis agenta (Mozilla 1.6 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (Mozilla 1.6)
+Name[cy]=DisgrifiadUA (Mozilla 1.6 ar hyn o bryd)
+Name[da]=Brugeragentbeskrivelse (Mozilla 1.6 på denne)
+Name[de]=Browserkennung (Mozilla 1.6 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (Mozilla 1.6 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (Mozilo 1.6 sub nuna)
+Name[es]=Descripción de AU (Mozilla 1.6 en actual)
+Name[et]=UADescription (Selles masinas töötav Mozilla 1.6)
+Name[eu]=UA deskriptioa (Mozilla 1.6 unekoan)
+Name[fa]=UADescription (Mozilla 1.6 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (Mozilla 1.6 nykyisellä)
+Name[fr]=Identité du navigateur (Mozilla 1.6 sous le système actuel)
+Name[fy]=GA-omskriuwing (Mozilla 1.6 op aktive)
+Name[ga]=UADescription (Mozilla 1.6 ar an gcóras reatha)
+Name[gl]=UADescription (Mozilla 1.6 no actual)
+Name[he]=UADescription (Mozilla 1.6 בנוכחי)
+Name[hi]=यूए-डिस्क्रिप्शन (मौजूदा में मोज़िला 1.6)
+Name[hr]=UADescription (Mozilla 1.6 na trenutnom)
+Name[hu]=Böngészőtípus (Mozilla 1.6)
+Name[id]=UADescription (Mozilla 1.6)
+Name[is]=UAD strengur (Mozilla 1.6 on current)
+Name[it]=DescrizioneUA(Mozilla 1.6 su sistema attuale)
+Name[ka]=UADescription (Mozilla 1.6 მიმდინარე სისტემაში)
+Name[kk]=UADescription (Mozilla 1.6 осы орында)
+Name[km]=UADescription (Mozilla 1.6 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 Mozilla 1.7)
+Name[lt]=Naudotojo agento aprašymas (Mozilla 1.6 ir esama)
+Name[lv]=UAApraksts (Mozilla 1.6 uz tekošā)
+Name[mk]=UADescription (Mozilla 1.6 на тековниот)
+Name[mt]=UADescription (Mozilla 1.6 fuq kurrenti)
+Name[nb]=Brukeragent (Mozilla 1.6 herifra)
+Name[nds]=UA-Beschrieven (Mozilla 1.6 op dit Systeem)
+Name[ne]=UA वर्णन (हाल मोजिला १.६)
+Name[nl]=GA-beschrijving (Mozilla 1.6 op current)
+Name[nn]=Brukaragent (Mozilla 1.6 herifrå)
+Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ ਮੌਜੀਲਾ ੧.੬)
+Name[pl]=Opis przeglądarki użytkownika (Mozilla 1.6 na bieżącym systemie)
+Name[pt]=UADescription (Mozilla 1.6 no sistema actual)
+Name[pt_BR]=Descrição (Mozilla 1.6 no sistema atual)
+Name[ro]=Descriere UA (Mozilla 1.6 pentru sistemul de operare curent)
+Name[ru]=UADescription (Mozilla 1.6 на текущей системе)
+Name[rw]=UADescription (Mozilla 1.6 ku igezweho)
+Name[se]=UA-čilgehus (Mozilla 1.6 dan mašiinas)
+Name[sk]=Popis agenta (Mozilla 1.6 na aktuálnom)
+Name[sl]=UAOpis (Mozilla 1.6 na trenutnem)
+Name[sr]=UADescription (Mozilla 1.6 на тренутном)
+Name[sr@Latn]=UADescription (Mozilla 1.6 na trenutnom)
+Name[sv]=AA-beskrivning (Mozilla 1.6 på aktuell)
+Name[ta]=UADescription (Mozilla 1.6 தற்ப்போதில்)
+Name[tg]=UADescription (Системаи ҷорӣ Mozilla 1.6)
+Name[th]=UADescription (มอซิลล่า 1.6 บนระบบปัจจุบัน)
+Name[tr]=UATanımı (güncel üzerinde Mozilla 1.6)
+Name[tt]=UADescription (Mozilla 1.6, şul uq astında)
+Name[uk]=UADescription (Mozilla 1.6 на поточній ОС)
+Name[uz]=UADescription (joriy bilan Mozilla 1.6)
+Name[uz@cyrillic]=UADescription (жорий билан Mozilla 1.6)
+Name[vi]=Mô tả UA (đang dùng Mozilla 1.6)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.6 sol ci do moumint)
+Name[zh_CN]=用户代理描述 (运行于本机的 Mozilla 1.6)
+Name[zh_TW]=使用者代理描述 (Mozilla 1.6 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MOZ
+X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appSysName appMachineType; appLanguage; rv:1.6) Gecko/20040113
+X-KDE-UA-NAME=Mozilla
+X-KDE-UA-VERSION=1.6
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/mozonwin2000.desktop b/kcontrol/kio/uasproviders/mozonwin2000.desktop
new file mode 100644
index 000000000..1e2ac37aa
--- /dev/null
+++ b/kcontrol/kio/uasproviders/mozonwin2000.desktop
@@ -0,0 +1,73 @@
+[Desktop Entry]
+Name=UADescription (1.2.1 on Windows 2000)
+Name[af]=UA-beskrywing (1.2.1 op Windows 2000)
+Name[be]=UADescription (1.2.1 на Windows 2000)
+Name[br]=UADescription (1.2.1 war Windows 2000)
+Name[bs]=UADescription (1.2.1 na Windows 2000)
+Name[ca]=Descripció UA (1.2.1 a Windows 2000)
+Name[cs]=Popis agenta (1.2.1 na Windows 2000)
+Name[csb]=Òpis programë brëkòwnika (1.2.1 na Windows 2000)
+Name[da]=Brugeragentbeskrivelse (1.2.1 på Windows 2000)
+Name[de]=Browserkennung (1.2.1 unter Windows 2000)
+Name[el]=Περιγραφή UA (1.2.1 σε Windows 2000)
+Name[eo]=UA-Priskribo (1.2.1 sub Vindozo 2000)
+Name[es]=UADescription (1.2.1 en Windows 2000)
+Name[et]=UADescription (1.2.1 Windows 2000 platvormil)
+Name[eu]=UA azalpena (1.2.1 Windows 2000n)
+Name[fa]=UADescription (1.2.1 در Windows 2000)
+Name[fi]=Käyttäjäagenttikuvaus (1.2.1 Windows 2000)
+Name[fr]=Identité du navigateur (1.2.1 sous Windows 2000)
+Name[fy]=GA-omskriuwing (1.2.1 op Windows 2000)
+Name[ga]=UADescription (1.2.1 ar Windows 2000)
+Name[gl]=UADescription (1.2.1 en Windows 2000)
+Name[he]=UADescription (1.2.1 Windows2000ב־)
+Name[hr]=UADescription (1.2.1 na Windows 2000)
+Name[hu]=Böngészőtípus (Mozilla 1.2.1, Win 2000)
+Name[id]=UADescription (1.2.1 di Windows 2000)
+Name[is]=UAD strengur (1.2.1 á Windows 2000)
+Name[it]=DescrizioneUA (1.2.1 su Windows 2000)
+Name[ka]=UADescription (1.2.1 Windows 2000-ში)
+Name[kk]=UADescription (1.2.1 / Windows 2000)
+Name[km]=UADescription (1.2.1 នៅ​លើ Windows 2000)
+Name[ko]=UADescription (윈도 2000의 IE 4.01)
+Name[lt]=Naudotojo agento aprašymas (1.2.1 ir Windows 2000)
+Name[lv]=UAApraksts (1.2.1 uz Windows 2000)
+Name[mk]=UADescription (1.2.1 на Windows 2000)
+Name[nb]=Brukeragent (1.2.1 på Windows 2000)
+Name[nds]=UA-Beschrieven (1.2.1 op Windows 2000)
+Name[ne]=UA वर्णन (विण्डोज २०००मा १.२.१)
+Name[nl]=GA-beschrijving (1.2.1 op Windows 2000)
+Name[nn]=Brukaragent (1.2.1 på Windows 2000)
+Name[pa]=UADescription (Windows 2000 'ਤੇ 1.2.1)
+Name[pl]=Opis przeglądarki użytkownika (1.2.1 na Windows 2000)
+Name[pt]=UADescription (1.2.1 no Windows 2000)
+Name[pt_BR]=Descrição (1.2.1 no Windows 2000)
+Name[ro]=Descriere UA (1.2.1 pentru WinNT 2000)
+Name[ru]=UADescription (1.2.1 на Windows 2000)
+Name[rw]=UADescription (1.2.1 kuri Windows 2000)
+Name[se]=UA-čilgehus (1.2.1 ja Windows 2000)
+Name[sl]=UAOpis (1.2.1 na Windows 2000)
+Name[sr]=UADescription (1.2.1 на Windows 2000)
+Name[sr@Latn]=UADescription (1.2.1 na Windows 2000)
+Name[sv]=AA-beskrivning (1.2.1 på Windows 2000)
+Name[ta]=UAவிவரம் (1.2.1 on Windows 2000)
+Name[tg]=UADescription (1.2.1 дар асоси Windows 2000)
+Name[tr]=UA Tanımı (Windows 2000'de 1.2.1)
+Name[tt]=UADescription (1.2.1, Windows 2000 astında)
+Name[uk]=UADescription (1.2.1 на Windows 2000)
+Name[uz]=UADescription (Windows 2000 bilan 1.2.1)
+Name[uz@cyrillic]=UADescription (Windows 2000 билан 1.2.1)
+Name[vi]=Mô tả UA (1.2.1 trên Win 2000)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.2.1 so Windows 2000)
+Name[zh_CN]=用户代理描述 (运行于 Windows 2000 的 1.2.1)
+Name[zh_TW]=使用者代理描述 (1.2.1 on Windows 2000)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MOZ
+X-KDE-UA-FULL=Mozilla/5.0 (Windows; U; Windows NT 5.0; appLanguage; 1.2.1) Gecko/20021130
+X-KDE-UA-NAME=Mozilla
+X-KDE-UA-VERSION=1.2.1
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=2000
+X-KDE-UA-DYNAMIC-ENTRY=1
+
diff --git a/kcontrol/kio/uasproviders/mozonwinxp.desktop b/kcontrol/kio/uasproviders/mozonwinxp.desktop
new file mode 100644
index 000000000..3cc5f9029
--- /dev/null
+++ b/kcontrol/kio/uasproviders/mozonwinxp.desktop
@@ -0,0 +1,74 @@
+[Desktop Entry]
+Name=UADescription (Mozilla 1.7 on Windows XP)
+Name[af]=UA-beskrywing (Mozilla 1.7 op Windows XP)
+Name[be]=UADescription (Mozilla 1.7 на Windows XP)
+Name[br]=UADescription (Mozilla 1.7 war Windows XP)
+Name[bs]=UADescription (Mozilla 1.7 na Windows XP)
+Name[ca]=Descripció UA (Mozilla 1.7 a Windows XP)
+Name[cs]=Popis agenta (Mozilla 1.7 na Windows XP)
+Name[csb]=Òpis programë brëkòwnika (Mozilla 1.7 na Windows XP)
+Name[da]=Brugeragentbeskrivelse (Mozilla 1.7 på Windows XP)
+Name[de]=Browserkennung (Mozilla 1.7 unter Windows XP)
+Name[el]=Περιγραφή UA (Mozilla 1.7 σε Windows XP)
+Name[eo]=UA-Priskribo (Mozilo 1.7 sub Vindozo XP)
+Name[es]=UADescription (Mozilla 1.7 en Windows XP)
+Name[et]=UADescription (Mozilla 1.7 Windows XP platvormil)
+Name[eu]=UA azalpena (Mozilla 1.7 Windows XPn)
+Name[fa]=UADescription (Mozilla 1.7 در Windows XP)
+Name[fi]=Käyttäjäagenttikuvaus (Mozilla 1.7 Windows XP)
+Name[fr]=Identité du navigateur (Mozilla 1.7 sous Windows XP)
+Name[fy]=GA-omskriuwing (Mozilla 1.7 op Windows XP)
+Name[ga]=UADescription (Mozilla 1.7 ar Windows XP)
+Name[gl]=UADescription (Mozila 1.7 en Windows XP)
+Name[he]=UADescription (Mozilla 1.7 Windows XPב־)
+Name[hr]=UADescription (Mozilla 1.7 na Windows XP)
+Name[hu]=Böngészőtípus (Mozilla 1.7, Windows XP)
+Name[id]=UADescription (Mozilla 1.7 di Windows XP)
+Name[is]=UAD strengur (Mozilla 1.7 á Windows XP)
+Name[it]=DescrizioneUA (Mozilla 1.7 su Windows XP)
+Name[ka]=UADescription (Mozilla 1.7 Windows XP-ში)
+Name[kk]=UADescription (Mozilla 1.7 / Windows XP)
+Name[km]=UADescription (Mozilla 1.7 នៅ​លើ Windows XP)
+Name[ko]=UADescription (윈도 XP의 Mozilla 1.7)
+Name[lt]=Naudotojo agento aprašymas (Mozilla 1.7 ir Windows XP)
+Name[lv]=UAApraksts (Mozilla 1.7 uz Windows XP)
+Name[mk]=UADescription (Mozilla 1.7 на Windows XP)
+Name[nb]=Brukeragent (Mozilla 1.7 på Windows XP)
+Name[nds]=UA-Beschrieven (Mozilla 1.7 op Windows XP)
+Name[ne]=UA वर्णन (विण्डोज एक्स पीमा मोजिला १.७)
+Name[nl]=GA-beschrijving (Mozilla 1.7 op Windows XP)
+Name[nn]=Brukaragent (Mozilla 1.7 på Windows XP)
+Name[pa]=UADescription (Windows XP 'ਤੇ Mozilla 1.7)
+Name[pl]=Opis przeglądarki użytkownika (Mozilla 1.7 na Windows XP)
+Name[pt]=UADescription (Mozilla 1.7 no Windows XP)
+Name[pt_BR]=Descrição (Mozilla 1.7 no Windows XP)
+Name[ro]=Descriere UA (Mozilla 1.7 pentru Windows XP)
+Name[ru]=UADescription (Mozilla 1.7 на Windows XP)
+Name[rw]=UADescription (Mozilla 1.7 kuri Windows XP)
+Name[se]=UA-čilgehus (Mozilla 1.7 ja Windows XP)
+Name[sl]=UAOpis (Mozilla 1.7 na Windows XP)
+Name[sr]=UADescription (Mozilla 1.7 на Windows XP)
+Name[sr@Latn]=UADescription (Mozilla 1.7 na Windows XP)
+Name[sv]=AA-beskrivning (Mozilla 1.7 på Windows XP)
+Name[ta]=UAவிவரம் (Mozilla 1.7 on Windows XP)
+Name[tg]=UADescription (Mozilla 1.7 дар асоси Windows XP)
+Name[th]=UADescription (มอซิลล่า 1.7 บน Windows XP)
+Name[tr]=UA Tanımı (Windows XP'de Mozilla 1.7)
+Name[tt]=UADescription (Mozilla 1.7, Windows XP astında)
+Name[uk]=UADescription (Mozilla 1.7 на Windows XP)
+Name[uz]=UADescription (Windows XP bilan Mozilla 1.7)
+Name[uz@cyrillic]=UADescription (Windows XP билан Mozilla 1.7)
+Name[vi]=Mô tả UA (Mozilla 1.7 trên Win XP)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Mozilla 1.7 so Windows XP)
+Name[zh_CN]=用户代理描述 (运行于 Windows XP 的 NN 4.7)
+Name[zh_TW]=使用者代理描述 (Mozilla 1.7 on Windows XP)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MOZ
+X-KDE-UA-FULL=Mozilla/5.0 (Windows; U; Windows NT 5.1; appLanguage; rv:1.7.3) Gecko/20040916
+X-KDE-UA-NAME=Mozilla
+X-KDE-UA-VERSION=1.7.3
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=XP
+X-KDE-UA-DYNAMIC-ENTRY=1
+
diff --git a/kcontrol/kio/uasproviders/nn301oncurrent.desktop b/kcontrol/kio/uasproviders/nn301oncurrent.desktop
new file mode 100644
index 000000000..469b53b50
--- /dev/null
+++ b/kcontrol/kio/uasproviders/nn301oncurrent.desktop
@@ -0,0 +1,78 @@
+[Desktop Entry]
+Name=UADescription (NN 3.01 on current)
+Name[af]=UA-beskrywing (NN 3.01 op huidige bedryfstelsel)
+Name[be]=UADescription (NN 3.01 на гэтай сістэме)
+Name[bs]=UADescription (NN 3.01 na trenutnom)
+Name[ca]=Descripció de AU (NN 3.01 sobre l'actual)
+Name[cs]=Popis agenta (NN 3.01 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (NN 3.01)
+Name[cy]=UADisgrifiad (NN 3.01 ar gyfredol)
+Name[da]=Brugeragentbeskrivelse (NN 3.01 på denne)
+Name[de]=Browserkennung (NN 3.01 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (NN 3.01 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (NN 3.01 sub nuna)
+Name[es]=Descripción de AU (NN 3.01 en actual)
+Name[et]=UADescription (Selles masinas töötav Netscape 3.01)
+Name[eu]=UA azalpena (NN 3.01 unekoan)
+Name[fa]=UADescription (NN 3.01 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (NN 3.01 nykyisellä)
+Name[fr]=Identité du navigateur (Navigator 3.01 sous le système actuel)
+Name[fy]=GA-omskriuwing (NN 3.01 op aktive)
+Name[ga]=UADescription (NN 3.01 ar an gcóras reatha)
+Name[gl]=UADescription (NN 3.01 no actual)
+Name[he]=UADescription (NN 3.01 בנוכחי)
+Name[hi]=यूएडी-डिस्क्रिप्शन (एनएन 3.01 हालिया पर)
+Name[hr]=UADescription (NN 3.01 na trenutnom)
+Name[hu]=Böngészőtípus (NN 3.01)
+Name[id]=UADescription (NN 3.01)
+Name[is]=UAD strengur (NN 3.01 on current)
+Name[it]=DescrizioneUA (NN 3.01 su sistema attuale)
+Name[ka]=UADescription (NN 3.01 მიმდინარე სისტემაში)
+Name[kk]=UADescription (NN 3.01 осы орында)
+Name[km]=UADescription (NN 3.01 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 넷스케이프 3.01)
+Name[lt]=Naudotojo agento aprašymas (NN 3.01 ir esama)
+Name[lv]=UAApraksts (NN 3.01 uz tekošā)
+Name[mk]=UADescription (NN 3.01 на тековен)
+Name[mn]=UserAgent-Тодорхойлолт (NN 3.01 on current)
+Name[mt]=UADescription (NN 3.01 fuq kurrenti)
+Name[nb]=Brukeragent (NN 3.01 herifra)
+Name[nds]=UA-Beschrieven (NN 3.01 op dit Systeem)
+Name[ne]=UA वर्णन (हाल NN 3.01 मा)
+Name[nl]=GA-beschrijving (NN 3.01 op huidige)
+Name[nn]=Brukaragent (NN 3.01 herifrå)
+Name[nso]=UAThlaloso (NN 3.01 go ya bjale)
+Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ NN 3.01)
+Name[pl]=Opis przeglądarki użytkownika (NN 3.01 na bieżącym systemie)
+Name[pt]=UADescription (NN 3.01 no sistema actual)
+Name[pt_BR]=Descrição (NN 3.01 no sistema atual)
+Name[ro]=Descriere UA (NN 3.01 pentru sistemul de operare curent)
+Name[ru]=UADescription (NN 3.01 на текущей системе)
+Name[rw]=UADescription (NN 3.01 ku igezweho)
+Name[se]=UA-čilgehus (NN 3.01 dán mašiinnas)
+Name[sk]=Popis agenta (NN 3.01 na aktuálnom)
+Name[sl]=UAOpis (NN 3.01 na trenutnem)
+Name[sr]=UADescription (NN 3.01 на тренутном)
+Name[sr@Latn]=UADescription (NN 3.01 na trenutnom)
+Name[sv]=AA-beskrivning (NN 3.01 på aktuell)
+Name[ta]=UAவிவரம் (NN 3.01 on current)
+Name[tg]=ТавзеҳиUA (NN 3.01 равон)
+Name[th]=UADescription (NN 3.01 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (güncel üzerinde NN 3.01)
+Name[tt]=UADescription (NN 3.01, şul uq astında)
+Name[uk]=UADescription (NN 3.01 на поточній ОС)
+Name[uz]=UADescription (joriy bilan NN 3.01)
+Name[uz@cyrillic]=UADescription (жорий билан NN 3.01)
+Name[ven]=Thalutshedzo ya UA (NN 3.01 zwa zwino)
+Name[vi]=Mô tả UA (đang dùng NN 3.01)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (NN 3.01 sol ci do moumint)
+Name[xh]=UADescription (NN 3.01 okwangoku)
+Name[zh_CN]=用户代理描述 (运行于本机的 NN 3.01)
+Name[zh_TW]=使用者代理描述 (NN 3.01 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=NN
+X-KDE-UA-FULL=Mozilla/3.01 (appPlatform; I; appSysName appSysRelease appMachineType)
+X-KDE-UA-NAME=Netscape Navigator
+X-KDE-UA-VERSION=3.01
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/nn475oncurrent.desktop b/kcontrol/kio/uasproviders/nn475oncurrent.desktop
new file mode 100644
index 000000000..783ee5b99
--- /dev/null
+++ b/kcontrol/kio/uasproviders/nn475oncurrent.desktop
@@ -0,0 +1,78 @@
+[Desktop Entry]
+Name=UADescription (NN 4.76 on current)
+Name[af]=UA-beskrywing (NN 4.76 op huidige bedryfstelsel)
+Name[be]=UADescription (NN 4.76 на гэтай сістэме)
+Name[bs]=UADescription (NN 4.76 na trenutnom)
+Name[ca]=Descripció de AU (NN 4.76 sobre l'actual)
+Name[cs]=Popis agenta (NN 4.76 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (NN 4.76)
+Name[cy]=UADisgrifiad (NN 4.76 ar gyfredol)
+Name[da]=Brugeragentbeskrivelse (NN 4.76 på denne)
+Name[de]=Browserkennung (NN 4.76 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (NN 4.76 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (NN 4.76 sub nuna)
+Name[es]=Descripción de AU (NN 4.76 en actual)
+Name[et]=UADescription (Selles masinas töötav Netscape 4.76)
+Name[eu]=UA azalpena (NN 4.76 unekoan)
+Name[fa]=UADescription (NN 4.76 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (NN 4.76 nykyisellä)
+Name[fr]=Identité du navigateur (Navigator 4.76 sous le système actuel)
+Name[fy]=GA-omskriuwing (NN 4.76 op aktive)
+Name[ga]=UADescription (NN 4.76 ar an gcóras reatha)
+Name[gl]=UADescription (NN 4.76 no actual)
+Name[he]=UADescription (NN 4.76 בנוכחי)
+Name[hi]=यूएडी-डिस्क्रिप्शन (एनएन 4.76 हालिया पर)
+Name[hr]=UADescription (NN 4.76 na trenutnom)
+Name[hu]=Böngészőtípus (NN 4.76)
+Name[id]=UADescription (NN 4.76)
+Name[is]=UAD strengur (NN 4.76 on current)
+Name[it]=DescrizioneUA (NN 4.76)
+Name[ka]=UADescription (NN 4.76 მიმდინარე სისტემაში)
+Name[kk]=UADescription (NN 4.76 осы орында)
+Name[km]=UADescription (NN 4.76 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 넷스케이프 4.76)
+Name[lt]=Naudotojo agento aprašymas (NN 4.76 ir esama)
+Name[lv]=UAApraksts (NN 4.76 uz tekošā)
+Name[mk]=UADescription (NN 4.76 на тековен)
+Name[mn]=UserAgent-Тодорхойлолт (NN 4.76 on current)
+Name[mt]=UADescription (NN 4.76 fuq kurrenti)
+Name[nb]=Brukeragent (NN 4.76 herifra)
+Name[nds]=UA-Beschrieven (NN 4.76 op dit Systeem)
+Name[ne]=UA वर्णन (हाल NN 4.76 मा)
+Name[nl]=GA-beschrijving (NN 4.76 op huidige)
+Name[nn]=Brukaragent (NN 4.76 herifrå)
+Name[nso]=UAThlaloso (NN 4.76 go ya bjale)
+Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ NN 4.76)
+Name[pl]=Opis przeglądarki użytkownika (NN 4.76 na bieżącym systemie)
+Name[pt]=UADescription (NN 4.76 no sistema actual)
+Name[pt_BR]=Descrição (NN 4.76 no sistema atual)
+Name[ro]=Descriere UA (NN 4.76 pentru sistemul de operare curent)
+Name[ru]=UADescription (NN 4.76 на текущей системе)
+Name[rw]=UADescription (NN 4.76 ku igezweho)
+Name[se]=UA-čilgehus (NN 4.76 dán mašiinnas)
+Name[sk]=Popis agenta (NN 4.76 na aktuálnom)
+Name[sl]=UAOpis (NN 4.76 na trenutnem)
+Name[sr]=UADescription (NN 4.76 на тренутном)
+Name[sr@Latn]=UADescription (NN 4.76 na trenutnom)
+Name[sv]=AA-beskrivning (NN 4.76 på aktuell)
+Name[ta]=UAவிவரம் (NN 4.76 on current)
+Name[tg]=ТавзеҳиUA (NN 4.76 равон)
+Name[th]=UADescription (NN 4.76 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (güncel üzerinde NN 4.76)
+Name[tt]=UADescription (NN 4.76, şul uq astında)
+Name[uk]=UADescription (NN 4.76 на поточній ОС)
+Name[uz]=UADescription (joriy bilan NN 4.76)
+Name[uz@cyrillic]=UADescription (жорий билан NN 4.76)
+Name[ven]=Thalutshedzo ya UA (NN 4.76 zwa zwino)
+Name[vi]=Mô tả UA (đang dùng NN 4.76)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (NN 4.76 sol ci do moumint)
+Name[xh]=UADescription (NN 4.76 okwangoku)
+Name[zh_CN]=用户代理描述 (运行于本机的 NN 4.76)
+Name[zh_TW]=使用者代理描述 (NN 4.76 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=NN
+X-KDE-UA-FULL=Mozilla/4.76 (appPlatform; U; appSysName appSysRelease appMachineType)
+X-KDE-UA-NAME=Netscape Navigator
+X-KDE-UA-VERSION=4.76
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/nn475onwin95.desktop b/kcontrol/kio/uasproviders/nn475onwin95.desktop
new file mode 100644
index 000000000..9416516f4
--- /dev/null
+++ b/kcontrol/kio/uasproviders/nn475onwin95.desktop
@@ -0,0 +1,81 @@
+[Desktop Entry]
+Name=UADescription (NN 4.7 on Windows 95)
+Name[af]=UA-beskrywing (NN 4.7 op Windows 95)
+Name[be]=UADescription (NN 4.7 на Windows 95)
+Name[br]=UADescription (NN 4.7 war Windows 95)
+Name[bs]=UADescription (NN 4.7 na Windows 95)
+Name[ca]=Descripció de AU (NN 4.7 en Windows 95)
+Name[cs]=Popis agenta (NN 4.7 na Windows 95)
+Name[csb]=Òpis programë brëkòwnika (NN 4.7 na Windows 95)
+Name[cy]=UADisgrifiad (NN4.7 ar Windows 95)
+Name[da]=Brugeragentbeskrivelse (NN 4.7 på Windows 95)
+Name[de]=Browserkennung (NN 4.7 unter Windows 95)
+Name[el]=Περιγραφή UA (NN 4.7 σε Windows 95)
+Name[eo]=UA-Priskribo (NN 4.7 sub Vindozo 95)
+Name[es]=Descripción de AU (NN 4.7 en Windows 95)
+Name[et]=UADescription (Netscape 4.7 Win95 platvormil)
+Name[eu]=UA azalpena (NN 4.7 Windows 95-ean)
+Name[fa]=UADescription (NN 4.7 در Windows 95)
+Name[fi]=Käyttäjäagenttikuvaus (NN 4.7 Windows 95:lla)
+Name[fr]=Identité du navigateur (Navigator 4.7 sous Windows 95)
+Name[fy]=GA-omskriuwing (NN 4.76 op Windows 95)
+Name[ga]=UADescription (NN 4.7 ar Windows 95)
+Name[gl]=UADescription (NN 4.7 en Windows 95)
+Name[he]=UADescription (Windows 95ב־ NN 4.7)
+Name[hi]=यूएडी-डिस्क्रिप्शन (एनएन 4.7 विंडोज़ 95 पर)
+Name[hr]=UADescription (NN 4.7 na Windows 95)
+Name[hu]=Böngészőtípus (NN 4.7, Win 95)
+Name[id]=UADescription (NN 4.7 di Windows 95)
+Name[is]=UAD strengur (NN 4.7 on Windows 95)
+Name[it]=DescrizioneUA (NN 4.7 su Windows 95)
+Name[ka]=UADescription (NN 4.7 Windows 95-ში)
+Name[kk]=UADescription (NN 4.7 / Windows 95)
+Name[km]=UADescription (NN 4.7 នៅ​លើ Windows 95)
+Name[ko]=UADescription (윈도 95의 넷스케이프 4.7)
+Name[lt]=Naudotojo agento aprašymas (NN 4.7 ir Windows 95)
+Name[lv]=UAApraksts (NN 4.7 uz Windows 95)
+Name[mk]=UADescription (NN 4.7 на Windows 95)
+Name[mn]=UserAgent-Тодорхойлолт (NN 4.7 on Windows 95)
+Name[mt]=UADescription (NN 4.7 fuq Windows 95)
+Name[nb]=Brukeragent (NN 4.7 på Windows 95)
+Name[nds]=UA-Beschrieven (NN 4.7 op Windows 95)
+Name[ne]=UA वर्णन (विण्डोज ९५ मा NN 4.7)
+Name[nl]=GA-beschrijving (NN 4.76 op Windows 95)
+Name[nn]=Brukaragent (NN 4.7 på Windows 95)
+Name[nso]=UAThlaloso (NN4.7 go Windows 95)
+Name[pa]=UADescription (ਵਿੰਡੋ ੯੫ 'ਤੇ NN 4.7)
+Name[pl]=Opis przeglądarki użytkownika (NN 4.7 na Windows 95)
+Name[pt]=UADescription (NN 4.7 no Windows 95)
+Name[pt_BR]=Descrição (NN 4.7 no Windows 95)
+Name[ro]=Descriere UA (NN 4.7 pentru Windows 95)
+Name[ru]=UADescription (NN 4.7 на Windows 95)
+Name[rw]=UADescription (NN 4.7 kuri Windows 95)
+Name[se]=UA-čilgehus (NN 4.7 ja Windows 95)
+Name[sk]=Popis agenta (NN 4.7 na Windows 95)
+Name[sl]=UAOpis (NN 4.7 na Windows 95)
+Name[sr]=UADescription (NN 4.7 на Windows 95)
+Name[sr@Latn]=UADescription (NN 4.7 na Windows 95)
+Name[sv]=AA-beskrivning (NN 4.7 på Windows 95)
+Name[ta]=UAவிவரம் (NN 4.7 on Windows 95)
+Name[tg]=ТавзеҳиUA (NN 4.7 ба Windows 95)
+Name[th]=UADescription (NN 4.7 บน Windows 95)
+Name[tr]=UA Tanımı (Windows 95 üzerinde NN 4.7)
+Name[tt]=UADescription (NN 4.7, Windows 95 astında)
+Name[uk]=UADescription (NN 4.7 на Windows 95)
+Name[uz]=UADescription (Windows 95 bilan NN 4.7)
+Name[uz@cyrillic]=UADescription (Windows 95 билан NN 4.7)
+Name[ven]=Thalutshedzo ya UA (NN 4.7 kha 95)
+Name[vi]=Mô tả UA (NN 4.7 trên Windows 95)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (NN 4.7 so Windows 95)
+Name[xh]=UADescription (NN 4.7 kwi Windows.95)
+Name[zh_CN]=用户代理描述 (运行于 Windows 95 的 NN 4.7)
+Name[zh_TW]=使用者代理描述 (NN 4.7 on Windows 95)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=NN
+X-KDE-UA-FULL=Mozilla/4.7 [appLanguage] (Win95; U)
+X-KDE-UA-NAME=Netscape Navigator
+X-KDE-UA-VERSION=4.76
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=95
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/nn476onppc.desktop b/kcontrol/kio/uasproviders/nn476onppc.desktop
new file mode 100644
index 000000000..b24f83abc
--- /dev/null
+++ b/kcontrol/kio/uasproviders/nn476onppc.desktop
@@ -0,0 +1,82 @@
+[Desktop Entry]
+Name=UADescription (NN on Mac PPC)
+Name[af]=UA-beskrywing (NN op Mac PPC)
+Name[be]=UADescription (NN на Mac PPC)
+Name[br]=UADescription (NN war Mac PPC)
+Name[bs]=UADescription (NN na Mac PPC)
+Name[ca]=Descripció de AU (NN en Mac PPC)
+Name[cs]=Popis agenta (NN na Mac PPC)
+Name[csb]=Òpis programë brëkòwnika (NN na Mac PPC)
+Name[cy]=UADisgrifiad (NN ar Mac PPC)
+Name[da]=Brugeragentbeskrivelse (NN på Mac PPC)
+Name[de]=Browserkennung (NN auf Mac PPC)
+Name[el]=Περιγραφή UA (NN σε Mac PPC)
+Name[eo]=UA-Priskribo (NN sub Mac-PPC)
+Name[es]=Descripción de AU (NN en Mac PPC)
+Name[et]=UADescription (Netscape MacPPC platvormil)
+Name[eu]=UA azalpena (NN Mac PPC-n)
+Name[fa]=UADescription (NN در Mac PPC)
+Name[fi]=Käyttäjäagenttikuvaus (NN Mac PPC:llä)
+Name[fr]=Identité du navigateur (Navigator sous Mac PPC)
+Name[fy]=GA-omskriuwing (NN op Mac PPC)
+Name[ga]=UADescription (NN ar Mac PPC)
+Name[gl]=UADescription (NN en Mac PPC)
+Name[he]=UADescription (Mac PPCב־ NN)
+Name[hi]=यूएडी-डिस्क्रिप्शन (एनएन मैक पीपीसी पर)
+Name[hr]=UADescription (NN na Mac PPC)
+Name[hu]=Böngészőtípus (NN, Mac PPC)
+Name[id]=UADescription (NN di Mac PPC)
+Name[is]=UAD strengur (NN on Mac PPC)
+Name[it]=DescrizioneUA (NN su Mac PPC)
+Name[ka]=UADescription (NN на Mac PPC)
+Name[kk]=UADescription (NN / Mac PPC)
+Name[km]=UADescription (NN នៅ​លើ Mac PPC)
+Name[ko]=UADescription (Mac PPC의 IE 5.0)
+Name[lt]=Naudotojo agento aprašymas (NN ir Mac PPC)
+Name[lv]=UAApraksts (NN uz Mac PPC)
+Name[mk]=UADescription (NN на Mac PPC)
+Name[mn]=UserAgent-Тодорхойлолт (NN on Mac PPC)
+Name[mt]=UADescription (NN fuq Mac PPC)
+Name[nb]=Brukeragent (NN på Mac PPC)
+Name[nds]=UA-Beschrieven (NN op Mac PPC)
+Name[ne]=UA वर्णन (Mac PPC NN on)
+Name[nl]=GA-beschrijving (NN op Mac PPC)
+Name[nn]=Brukaragent (NN på Mac PPC)
+Name[nso]=UAThlaloso (NN go Mac PPC)
+Name[pa]=UADescription (Mac PPC 'ਤੇ N1)
+Name[pl]=Opis przeglądarki użytkownika (NN na Mac PPC)
+Name[pt]=UADescription (NN no Mac PPC)
+Name[pt_BR]=Descrição (NN no Mac PPC)
+Name[ro]=Descriere UA (NN pentru Mac PPC)
+Name[ru]=UADescription (NN на Mac PPC)
+Name[rw]=UADescription (NN kuri Mac PPC)
+Name[se]=UA-čilgehus (NN ja Mac PPC)
+Name[sk]=Popis agenta (NN na Mac PPC)
+Name[sl]=UAOpis (NN na Mac PPC)
+Name[sr]=UADescription (NN на Mac PPC-у)
+Name[sr@Latn]=UADescription (NN na Mac PPC-u)
+Name[sv]=AA-beskrivning (NN på Mac PPC)
+Name[ta]=UAவிவரம் (NN on Mac PPC)
+Name[tg]=ТавзеҳиUA (NN ба Mac PPC)
+Name[th]=UADescription (NN บน Mac PPC)
+Name[tr]=UA Tanımı (Mac PPC üzerinde NN)
+Name[tt]=UADescription (NN, Mac PPC astında)
+Name[uk]=UADescription (NN на Mac PPC)
+Name[uz]=UADescription (Mac PPC bilan NN)
+Name[uz@cyrillic]=UADescription (Mac PPC билан NN)
+Name[ven]=Thalutshedzo ya UA (NN kha Mac PPC)
+Name[vi]=Mô tả UA (NN trên Mac PPC)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (NN so Mac PPC)
+Name[xh]=UADescription (NN kwi Mac PPC)
+Name[zh_CN]=用户代理描述 (运行于 Mac PPC 的 NN)
+Name[zh_TW]=使用者代理描述 (NN on Mac PPC)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=NN
+X-KDE-UA-FULL=Mozilla/4.76 (Macintosh; U; PPC)
+X-KDE-UA-NAME=Netscape Navigator
+X-KDE-UA-VERSION=4.76
+X-KDE-UA-SYSNAME=Mac
+X-KDE-UA-SYSRELEASE=PPC
+
+
diff --git a/kcontrol/kio/uasproviders/ns71oncurrent.desktop b/kcontrol/kio/uasproviders/ns71oncurrent.desktop
new file mode 100644
index 000000000..6dc158c57
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ns71oncurrent.desktop
@@ -0,0 +1,72 @@
+[Desktop Entry]
+Name=UADescription (Netscape 7.1 on current)
+Name[af]=UA-beskrywing (Netscape 7.1 op huidige bedryfstelsel)
+Name[az]=İA İzahatı (Netscape 7.1 on current)
+Name[be]=UADescription (NN 3.01 на гэтай сістэме)
+Name[bs]=UADescription (Netscape 7.1 na trenutnom)
+Name[ca]=Descripció UA (Netscape 7.1 a l'actual)
+Name[cs]=Popis agenta (Netscape 7.1 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (Netscape 7.1)
+Name[da]=UADescription (Netscape 7.1 på denne)
+Name[de]=Browserkennung (Netscape 7.1 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (Netscape 7.1 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (Netskapo 7.1 sub nuna)
+Name[es]=UADescription (Netscape 7.1 en actual)
+Name[et]=UADescription (Selles masinas töötav Netscape 7.1)
+Name[eu]=UA azalpena (Netscape 7.1 unekoan)
+Name[fa]=UADescription (Netscape 7.1 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (Netscape 7.1 nykyisellä)
+Name[fr]=Identité du navigateur (Netscape 7.1 sous le système actuel)
+Name[fy]=GA-omskriuwing (Netscape 7.1 op aktive)
+Name[ga]=UADescription (Netscape 7.1 ar an gcóras reatha)
+Name[gl]=UADescription (Netscape 7.1 no actual)
+Name[he]=UADescription (Netscape 7.1 בנוכחי)
+Name[hi]=यूए-डिस्क्रिप्शन (मौजूदा में नेटस्केप 7.1)
+Name[hr]=UADescription (Netscape 7.1 na trenutnom)
+Name[hu]=Böngészőtípus (Netscape 7.1)
+Name[id]=UADescription (Netscape 7.1)
+Name[is]=UAD strengur (Netscape 7.1 á núverandi)
+Name[it]=DescrizioneUA (Netscape 7.1 su sistema attuale)
+Name[ka]=UADescription (Netscape 7.1 მიმდინარე სისტემაში)
+Name[kk]=UADescription (Netscape 7.1 осы орында)
+Name[km]=UADescription (Netscape 7.1 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 넷스케이프 7.1)
+Name[lt]=Naudotojo agento aprašymas (Netscape 7.1 ir esama)
+Name[lv]=UAApraksts (NN 7.1 uz tekošā)
+Name[mk]=UADescription (Netscape 7.1 на тековно)
+Name[mt]=UADescription (NN 3.01 fuq kurrenti)
+Name[nb]=Brukeragent (Netscape 7.1 herifra)
+Name[nds]=UA-Beschrieven (Netscape 7.1 op dit Systeem)
+Name[ne]=UA वर्णन (हाल नेटस्केप ७.१)
+Name[nl]=GA-beschrijving (Netscape 7.1 op current)
+Name[nn]=Brukaragent (Netscape 7.1 herifrå)
+Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ Netscape 7.1)
+Name[pl]=Opis przeglądarki użytkownika (Netscape 7.1 na bieżącym systemie)
+Name[pt]=UADescription (Netscape 7.1 no sistema actual)
+Name[pt_BR]=Descrição (Netscape 7.1 no sistema atual)
+Name[ro]=Descriere UA (Netscape 7.1 pentru sistemul de operare curent)
+Name[ru]=UADescription (Netscape 7.1 на текущей системе)
+Name[rw]=UADescription (Netscape 7.1 ku igezweho)
+Name[se]=UA-čilgehus (Netscape 7.1 dán mašiinnas)
+Name[sl]=UAOpis (Netscape 7.1 na trenutnem)
+Name[sr]=UADescription (Netscape 7.1 на тренутном)
+Name[sr@Latn]=UADescription (Netscape 7.1 na trenutnom)
+Name[sv]=AA-beskrivning (Netscape 7.1 på aktuell)
+Name[ta]=UAவிவரம் (நடப்பில் 3.01 நெட்ஸ்கேப்)
+Name[tg]=UADescription (Системаи ҷорӣ Netscape 7.1)
+Name[th]=UADescription (เน็ตสเคป 7.1 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (Netscape 7.1)
+Name[tt]=UADescription (Netscape 7.1, şul uq astında)
+Name[uz]=UADescription (joriy bilan Netscape 7.1)
+Name[uz@cyrillic]=UADescription (жорий билан Netscape 7.1)
+Name[vi]=Mô tả UA (đang dùng Netscape 7.1)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Netscape 7.1 sol ci do moumint)
+Name[zh_CN]=用户代理描述 (运行于本机的 Netscape 7.1)
+Name[zh_TW]=使用者代理描述 (Netscape 7.1 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=NN
+X-KDE-UA-FULL=Mozilla/5.0 (appPlatform; U; appSysName appMachineType; en-CA; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)
+X-KDE-UA-NAME=Netscape
+X-KDE-UA-VERSION=7.1
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/ns71onwinnt51.desktop b/kcontrol/kio/uasproviders/ns71onwinnt51.desktop
new file mode 100644
index 000000000..73cfb9d8a
--- /dev/null
+++ b/kcontrol/kio/uasproviders/ns71onwinnt51.desktop
@@ -0,0 +1,74 @@
+[Desktop Entry]
+Name=UADescription (Netscape 7.1 on XP)
+Name[af]=UA-beskrywing (Netscape 7.1 op XP)
+Name[az]=İA İzahatı (XP üstündə Netscape 7.1)
+Name[be]=UADescription (Netscape 7.1 на XP)
+Name[br]=UADescription (Netscape 7.1 war XP)
+Name[bs]=UADescription (Netscape 7.1 na XP)
+Name[ca]=Descripció UA (Netscape 7.1 a XP)
+Name[cs]=Popis agenta (Netscape 7.1 na XP)
+Name[csb]=Òpis programë brëkòwnika (Netscape 7.1 na Windows XP)
+Name[da]=UADescription (Netscape 7.1 på XP)
+Name[de]=Browserkennung (Netscape 7.1 unter Windows XP)
+Name[el]=Περιγραφή UA (Netscape 7.1 σε Win XP)
+Name[eo]=UA-Priskribo (Netskapo 7.1 sub Vindozo XP)
+Name[es]=UADescription (Netscape 7.1 en XP)
+Name[et]=UADescription (Netscape 7.1 Win XP platvormil)
+Name[eu]=UA azalpena (Netscape 7.1 XPn)
+Name[fa]=UADescription (Netscape 7.1 در XP)
+Name[fi]=Käyttäjäagenttikuvaus (Netscape 7.1 Win XP:llä)
+Name[fr]=Identité du navigateur (Netscape 7.1 sous Windows XP)
+Name[fy]=GA-omskriuwing (Netscape 7.1 op XP)
+Name[ga]=UADescription (Netscape 7.1 ar XP)
+Name[gl]=UADescription (Netscape 7.1 en Win XP)
+Name[he]=UADescription (Netscape 7.1 XPב־)
+Name[hi]=यूए-डिस्क्रिप्शन (एक्सपी में नेटस्केप 7.1)
+Name[hr]=UADescription (Netscape 7.1 na XP)
+Name[hu]=Böngészőtípus (Netscape 7.1 Windows XP)
+Name[id]=UADescription (Netscape 7.1 di XP)
+Name[is]=UAD strengur (Netscape 7.1 á XP)
+Name[it]=DescrizioneUA (Netscape 7.1 su XP)
+Name[ka]=UADescription (Netscape 7.1 XP-ში)
+Name[kk]=UADescription (Netscape 7.1 / XP)
+Name[km]=UADescription (Netscape 7.1 នៅ​លើ XP)
+Name[ko]=UADescription (윈도 XP의 넷스케이프 7.1)
+Name[lt]=Naudotojo agento aprašymas (Netscape 7.1 ir Windows XP)
+Name[lv]=UAApraksts (Netscape 7.1 uz XP)
+Name[mk]=UADescription (Netscape 7.1 на XP)
+Name[mt]=UADescription (IE 6.0 fuq Win XP)
+Name[nb]=Brukeragent (Netscape 7.1 på XP)
+Name[nds]=UA-Beschrieven (Netscape 7.1 op XP)
+Name[ne]=UA वर्णन (XP मा नेटस्केप ७.१)
+Name[nl]=GA-beschrijving (Netscape 7.1 op XP)
+Name[nn]=Brukaragent (Netscape 7.1 på XP)
+Name[pa]=UADescription (XP 'ਤੇ Netscape 7.1)
+Name[pl]=Opis przeglądarki użytkownika (Netscape 7.1 na Windows XP)
+Name[pt]=UADescription (Netscape 7.1 no XP)
+Name[pt_BR]=Descrição (Netscape 7.1 no XP)
+Name[ro]=Descriere UA (Netscape 7.1 pentru Win XP)
+Name[ru]=UADescription (Netscape 7.1 на XP)
+Name[rw]=UADescription (Netscape 7.1 kuri XP)
+Name[se]=UA-čilgehus (Netscape 7.1 on XP)
+Name[sl]=UAopis (Netscape 7.1 na Windows XP)
+Name[sr]=UADescription (Netscape 7.1 на XP)
+Name[sr@Latn]=UADescription (Netscape 7.1 na XP)
+Name[sv]=AA-beskrivning (Netscape 7.1 på XP)
+Name[ta]=UAவிவரம் ( XPல் நெட்ஸ்கேப் 7.1 )
+Name[tg]=UADescription (Netscape 7.1 дар асоси XP)
+Name[th]=UADescription (เน็ตสเคป 7.1 บน XP)
+Name[tr]=UA Tanımı (XP üzerinde Netscape 6.0)
+Name[tt]=UADescription (Netscape 7.1, XP astında)
+Name[uz]=UADescription (Windows XP bilan Netscape 7.1)
+Name[uz@cyrillic]=UADescription (Windows XP билан Netscape 7.1)
+Name[vi]=Mô tả UA (Netscape 7.1 trên Win XP)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Netscape 7.1 so XP)
+Name[zh_CN]=用户代理描述 (运行于 Win XP 的 Netscape 7.1)
+Name[zh_TW]=使用者代理描述 (Netscape 7.1 on XP)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=NN
+X-KDE-UA-FULL=Mozilla/5.0 (Windows; U; Windows NT 5.1; en-CA; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)
+X-KDE-UA-NAME=Netscape
+X-KDE-UA-VERSION=7.1
+X-KDE-UA-SYSNAME=Windows
+X-KDE-UA-SYSRELEASE=XP
diff --git a/kcontrol/kio/uasproviders/op403onwinnt4.desktop b/kcontrol/kio/uasproviders/op403onwinnt4.desktop
new file mode 100644
index 000000000..96111efa9
--- /dev/null
+++ b/kcontrol/kio/uasproviders/op403onwinnt4.desktop
@@ -0,0 +1,80 @@
+[Desktop Entry]
+Name=UADescription (Opera 4.03 on NT)
+Name[af]=UA-beskrywing (Opera 4.03 op NT)
+Name[be]=UADescription (Opera 4.03 на NT)
+Name[br]=UADescription (Opera 4.03 war NT)
+Name[bs]=UADescription (Opera 4.03 na NT)
+Name[ca]=Descripció de AU (Opera 4.03 en NT)
+Name[cs]=Popis agenta (Opera 4.03 na NT)
+Name[csb]=Òpis programë brëkòwnika (Opera 4.03 na NT)
+Name[cy]=UADisgrifiad (Opera 4.03 ar NT)
+Name[da]=Brugeragentbeskrivelse (Opera 4.03 på NT)
+Name[de]=Browserkennung (Opera 4.03 unter Windows NT)
+Name[el]=Περιγραφή UA (Opera 4.03 σε NT)
+Name[eo]=UA-Priskribo (Opera 4.03 sub NT)
+Name[es]=Descripción de AU (Opera 4.03 en NT)
+Name[et]=UADescription (Opera 4.03 WinNT platvormil)
+Name[eu]=UA azalpena (Opera 4.03 NT-n)
+Name[fa]=UADescription (Opera 4.03 در NT)
+Name[fi]=Käyttäjäagenttikuvaus (Opera 4.03 NT:llä)
+Name[fr]=Identité du navigateur (Opera 4.03 sous Windows NT)
+Name[fy]=GA-omskriuwing (Opera 4.03 op NT)
+Name[ga]=UADescription (Opera 4.03 ar NT)
+Name[gl]=UADescription (Opera 4.03 en NT)
+Name[he]=UADescription (NTב־ Opera 4.03)
+Name[hi]=यूएडी-डिस्क्रिप्शन (ओपेरा 4.03 एनटी पर)
+Name[hr]=UADescription (Opera 4.03 na NT)
+Name[hu]=Böngészőtípus (Opera 4.03, Win NT)
+Name[id]=UADescription (Opera 4.03 di NT)
+Name[is]=UAD strengur (Opera 4.03 on NT)
+Name[it]=DescrizioneUA (Opera 4.03 su NT)
+Name[ka]=UADescription (Opera 4.03 на NT)
+Name[kk]=UADescription (Opera 4.03 / NT)
+Name[km]=UADescription (Opera 4.03 នៅ​លើ NT)
+Name[ko]=UADescription (윈도 NT의 Opera 4.03)
+Name[lt]=Naudotojo agento aprašymas (Opera 4.03ir NT)
+Name[lv]=UAApraksts (Opera 4.03 uz NT)
+Name[mk]=UADescription (Opera 4.03 на NT)
+Name[mn]=UserAgent-Тодорхойлолт (Opera 4.03 on NT)
+Name[mt]=UADescription (Opera 4.03 fuq NT)
+Name[nb]=Brukeragent (Opera 4.03 på NT)
+Name[nds]=UA-Beschrieven (Opera 4.03 op NT)
+Name[ne]=UA वर्णन (NT मा Opera 4.03)
+Name[nl]=GA-beschrijving (Opera 4.03 op NT)
+Name[nn]=Brukaragent (Opera 4.03 på NT)
+Name[nso]=UAThlaloso (Opera 4.03 go NT)
+Name[pa]=UADescription (NT 'ਤੇ ਓਪੇਰਾ 4.03)
+Name[pl]=Opis przeglądarki użytkownika (Opera 4.03 na NT)
+Name[pt]=UADescription (Opera 4.03 em NT)
+Name[pt_BR]=Descrição (Opera 4.03 no NT)
+Name[ro]=Descriere UA (Opera 4.03 pentru NT)
+Name[ru]=UADescription (Opera 4.03 на NT)
+Name[rw]=UADescription (Opera 4.03 kuri NT)
+Name[se]=UA-čilgehus (Opera 4.03 ja NT)
+Name[sk]=Popis agenta (Opera 4.03 na NT)
+Name[sl]=UAOpis (Opera 4.03 na Windows NT)
+Name[sr]=UADescription (Opera 4.03 на NT-у)
+Name[sr@Latn]=UADescription (Opera 4.03 na NT-u)
+Name[sv]=AA-beskrivning (Opera 4.03 på NT)
+Name[ta]=UAவிவரம்(Opera 4.03 on NT)
+Name[tg]=ТавзеҳиUA (Opera 4.03 ба NT)
+Name[th]=UADescription (โอเปร่า 4.03 บน NT)
+Name[tr]=UA Tanımı (NT üzerinde Opera 4.03)
+Name[tt]=UADescription (Opera 4.03, şul uq astında)
+Name[uk]=UADescription (Opera 4.03 на NT)
+Name[uz]=UADescription (NT bilan Opera 4.03)
+Name[uz@cyrillic]=UADescription (NT билан Opera 4.03)
+Name[ven]=Thalutshedzo ya UA (Opera 4.03 kha NT)
+Name[vi]=Mô tả UA (Opera 4.03 trên NT)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Opera 4.03 so NT)
+Name[xh]=UADescription (Opera 4.03 kwi NT)
+Name[zh_CN]=用户代理描述 (运行于 NT 的 Opera 4.03)
+Name[zh_TW]=使用者代理描述 (Opera 4.03 on NT)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=OPR
+X-KDE-UA-FULL=Opera/4.03 (Windows NT 4.0; U)
+X-KDE-UA-NAME=Opera
+X-KDE-UA-VERSION=4.03
+X-KDE-UA-SYSNAME=Windows NT
+X-KDE-UA-SYSRELEASE=4.0
diff --git a/kcontrol/kio/uasproviders/op75oncurrent.desktop b/kcontrol/kio/uasproviders/op75oncurrent.desktop
new file mode 100644
index 000000000..ecd498f60
--- /dev/null
+++ b/kcontrol/kio/uasproviders/op75oncurrent.desktop
@@ -0,0 +1,69 @@
+[Desktop Entry]
+Name=UADescription (Opera 7.53 on current)
+Name[af]=UA-beskrywing (Opera 7.53 op huidige bedryfstelsel)
+Name[be]=UADescription (Opera 7.53 на гэтай сістэме)
+Name[bs]=UADescription (Opera 7.53 na trenutnom)
+Name[ca]=Descripció UA (Opera 7.53 a l'actual)
+Name[cs]=Popis agenta (Opera 7.53 na aktuálním)
+Name[csb]=Òpis programë brëkòwnika (Opera 7.53)
+Name[da]=UADescription (Opera 7.53 på denne)
+Name[de]=Browserkennung (Opera 7.53 unter aktuellem Betriebssystem)
+Name[el]=Περιγραφή UA (Opera 7.53 στο τρέχον σύστημα)
+Name[eo]=UA-Priskribo (Opera 7.53 sub nuna)
+Name[es]=UADescription (Opera 7.53 en actual)
+Name[et]=UADescription (Selles masinas töötav Opera 7.53)
+Name[eu]=UA azalpena (Opera 7.53 unekoan)
+Name[fa]=UADescription (Opera 7.53 در حال حاضر)
+Name[fi]=Käyttäjäagenttikuvaus (Opera 7.53 nykyisellä)
+Name[fr]=Identité du navigateur (Opera 7.53 sous le système actuel)
+Name[fy]=GA-omskriuwing (Opera 7.53 op aktive)
+Name[ga]=UADescription (Opera 7.53 ar an gcóras reatha)
+Name[gl]=UADescription (Opera 7.53 no actual)
+Name[hr]=UADescription (Opera 7.53 na trenutnom)
+Name[hu]=Böngészőtípus (Opera 7.53)
+Name[id]=UADescription (Opera 7.53)
+Name[is]=UAD strengur (Opera 7.53 á núverandi)
+Name[it]=DescrizioneUA (Opera 7.53 su sistema attuale)
+Name[ka]=UADescription (Opera 7.53 მიმდინარე სისტემაში)
+Name[kk]=UADescription (Opera 7.53 осы орында)
+Name[km]=UADescription (Opera 7.53 បច្ចុប្បន្ន)
+Name[ko]=UADescription (현재 플랫폼의 Opera 8.5)
+Name[lt]=Naudotojo agento aprašymas (Opera 7.53 ir esama)
+Name[lv]=UAApraksts (Opera 7.53 uz tekošā)
+Name[mk]=UADescription (Opera 7.53 на тековно)
+Name[nb]=Brukeragent (Opera 7.53 herifra)
+Name[nds]=UA-Beschrieven (Opera 7.53 op dit Systeem)
+Name[ne]=UA वर्णन (हाल Opera 7.53)
+Name[nl]=GA-beschrijving (Opera 7.53 op huidige)
+Name[nn]=Brukaragent (Opera 7.53 herifrå)
+Name[pa]=UADescription (ਮੌਜੂਦਾ 'ਤੇ ਓਪੇਰਾ 7.53)
+Name[pl]=Opis przeglądarki użytkownika (Opera 7.53 na bieżącym systemie)
+Name[pt]=UADescription (Opera 7.53 no sistema actual)
+Name[pt_BR]=Descrição (Opera 7.53 no sistema atual)
+Name[ro]=Descriere UA (Opera 7.53 pentru sistemul de operare curent)
+Name[ru]=UADescription (Opera 7.53 на текущей системе)
+Name[rw]=UADescription (Opera 7.53 ku igezweho)
+Name[se]=UA-čilgehus (Opera 7.53 dán mašiinnas)
+Name[sl]=UAOpis (Opera 7.53 na trenutnem)
+Name[sr]=UADescription (Opera 7.53 на тренутном)
+Name[sr@Latn]=UADescription (Opera 7.53 na trenutnom)
+Name[sv]=AA-beskrivning (Opera 7.53 på aktuell)
+Name[ta]=UAவிவரம் (நடப்பில் 7.53 ஓபெரா)
+Name[tg]=UADescription (Системаи ҷорӣ Opera 7.53)
+Name[th]=UADescription (โอเปร่า 7.53 บนระบบปัจจุบัน)
+Name[tr]=UA Tanımı (bulunulanda Opera 7.53)
+Name[tt]=UADescription (Opera 7.53, şul uq astında)
+Name[uk]=UADescription (Opera 7.53 на поточній)
+Name[uz]=UADescription (joriy bilan Opera 7.53)
+Name[uz@cyrillic]=UADescription (жорий билан Opera 7.53)
+Name[vi]=Mô tả UA (đang dùng Opera 7.53)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Opera 7.53 sol ci do moumint)
+Name[zh_CN]=用户代理描述 (运行于本机的 Opera 7.53)
+Name[zh_TW]=使用者代理描述 (Opera 7.53 on current)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=OPR
+X-KDE-UA-FULL=Opera/7.53 (appPlatform; appSysName appMachineType; U) [appLanguage]
+X-KDE-UA-NAME=Opera
+X-KDE-UA-VERSION=7.53
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/safari12.desktop b/kcontrol/kio/uasproviders/safari12.desktop
new file mode 100644
index 000000000..b6fd23d15
--- /dev/null
+++ b/kcontrol/kio/uasproviders/safari12.desktop
@@ -0,0 +1,73 @@
+[Desktop Entry]
+Name=UADescription (Safari 1.2 on MacOS X)
+Name[af]=UA-beskrywing (Safari 1.2 op MacOS X)
+Name[be]=UADescription (Safari 1.2 на MacOS X)
+Name[br]=UADescription (Safari 1.2 war MacOS X)
+Name[bs]=UADescription (Safari 1.2 na MacOS X)
+Name[ca]=Descripció UA (Safari 1.2 a MacOS X)
+Name[cs]=Popis agenta (Safari 1.2 na MacOS X)
+Name[csb]=Òpis programë brëkòwnika (Safari 1.2 na MacOS X)
+Name[da]=UADescription (Safari 1.2 på MacOS X)
+Name[de]=Browserkennung (Safari 1.2 unter MacOS X)
+Name[el]=Περιγραφή UA (Safari 1.2 σε MacOS X)
+Name[eo]=UA-Priskribo (Safari 1.2 sub MacOS X)
+Name[es]=UADescription (Safari 1.2 en MacOS X)
+Name[et]=UADescription (Safari 1.2 MacOS X platvormil)
+Name[eu]=UADescription (Safari 1.2 MacOS Xn)
+Name[fa]=UADescription (Safari 1.2 در MacOS X)
+Name[fi]=Käyttäjäagenttikuvaus (Safari 1.2 MacOS X:llä)
+Name[fr]=Identité du navigateur (Safari 1.2 sous MacOS X)
+Name[fy]=GA-omskriuwing (Safari 1.2 op MacOS X)
+Name[ga]=UADescription (Safari 1.2 ar MacOS X)
+Name[gl]=UADescription (Safari 1.2 en MacOS X)
+Name[he]=UADescription (Safari על MacOS X)
+Name[hr]=UADescription (Safari 1.2 na MacOS X)
+Name[hu]=Böngészőtípus (Safari 1.2, MacOS X)
+Name[id]=UADescription (Safari 1.2 di MacOS X)
+Name[is]=UAD strengur (Safari 1.2 á MacOS X)
+Name[it]=DescrizioneUA (Safari 1.2 su MacOS X)
+Name[ka]=UADescription (Safari 1.2 на Mac MacOS X)
+Name[kk]=UADescription (Safari 1.2 / MacOS X)
+Name[km]=UADescription (Safari 1.2 នៅ​លើ MacOS X)
+Name[ko]=UADescription (Mac OS X의 Safari 1.2)
+Name[lt]=Naudotojo agento aprašymas (Safari 1.2 ir MacOS X)
+Name[lv]=UAApraksts (Safari 1.2 uz MacOS X)
+Name[mk]=UADescription (Safari 1.2 на MacOS X)
+Name[nb]=Brukeragent (Safari 1.2 på MacOS X)
+Name[nds]=UA-Beschrieven (Safari 1.2 op MacOS X)
+Name[ne]=UA वर्णन (MacOS X मा Safari 1.2)
+Name[nl]=GA-beschrijving (Safari 1.2 op MacOS X)
+Name[nn]=Brukaragent (Safari 1.2 på MacOS X)
+Name[pa]=UADescription (MacOS X 'ਤੇ Safari 1.2)
+Name[pl]=Opis przeglądarki użytkownika (Safari 1.2 na MacOS X)
+Name[pt]=UADescription (Safari 1.2 no MacOS X)
+Name[pt_BR]=Descrição (Safari 1.2 no MacOS X)
+Name[ro]=Descriere UA (Safari 1.2 pentru MacOS X)
+Name[ru]=UADescription (Safari 1.2 на Mac MacOS X)
+Name[rw]=UADescription (Safari 1.2 kuri MacOS X)
+Name[se]=UA-čilgehus (Safari 1.2 ja MacOS X)
+Name[sl]=UAOpis (Safari 1.2 na MacOS X)
+Name[sr]=UADescription (Safari 1.2 на MacOS-у X)
+Name[sr@Latn]=UADescription (Safari 1.2 na MacOS-u X)
+Name[sv]=AA-beskrivning (Safari 1.2 på MacOS X)
+Name[ta]=UAவிவரம் (Safari 1.2 on MacOS X)
+Name[tg]=UADescription (Safari 1.2 дар асоси Mac MacOS X)
+Name[th]=UADescription (ซาฟารี 1.2 บน MacOS X)
+Name[tr]=UA Tanımı (MacOS X'de Safari 1.2)
+Name[tt]=UADescription (Safari 1.2, MacOS X astında)
+Name[uk]=UADescription (Safari 1.2 на MacOS X)
+Name[uz]=UADescription (MacOS X bilan Safari 1.2)
+Name[uz@cyrillic]=UADescription (MacOS X билан Safari 1.2)
+Name[vi]=Mô tả UA (Safari 1.2 trên MacOS X)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Safari 1.2 so MacOS X)
+Name[zh_CN]=用户代理描述 (运行于 MacOS X 的 Safari 1.2)
+Name[zh_TW]=使用者代理描述 (Safari 1.2 on MacOS X)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=SAF
+X-KDE-UA-FULL=Mozilla/5.0 (Macintosh; U; PPC Mac OS X; appLanguage) AppleWebKit/125.5.5 (KHTML, like Gecko) Safari/125.11
+X-KDE-UA-NAME=Safari
+X-KDE-UA-VERSION=1.2.4
+X-KDE-UA-SYSNAME=Mac OS
+X-KDE-UA-SYSRELEASE=X
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/safari20.desktop b/kcontrol/kio/uasproviders/safari20.desktop
new file mode 100644
index 000000000..14f3a8883
--- /dev/null
+++ b/kcontrol/kio/uasproviders/safari20.desktop
@@ -0,0 +1,59 @@
+[Desktop Entry]
+Name=UADescription (Safari 2.0 on MacOS X)
+Name[bg]=UADescription (Safari 2.0 на MacOS X)
+Name[ca]=Descripció UA (Safari 2.0 a MacOS X)
+Name[cs]=Popis UA (Safari 2.0 na MacOS X)
+Name[csb]=Òpis programë brëkòwnika (Safari 2.0 na MacOS X)
+Name[da]=UADescription (Safari 2.0 på MacOS X)
+Name[de]=Browserkennung (Safari 2.0 unter MacOS X)
+Name[el]=Περιγραφή UA (Safari 2 σε MacOS X)
+Name[eo]=UA-Priskribo (Safari 2.0 sub MacOS X)
+Name[es]=UADescription (Safari 2.0 en MacOS X)
+Name[et]=UADescription (Safari 2.0 MacOS X platvormil)
+Name[fi]=Käyttäjäagenttikuvaus (Safari 2.0 MacOS X:llä)
+Name[fr]=Identité du navigateur (Safari 2.0 sous MacOS X)
+Name[fy]=GA-omskriuwing (Safari 2.0 op MacOS X)
+Name[gl]=UADescription (Safari 2.0 en MacOS X)
+Name[he]=UADescription (Safari 2.0 על MacOS X)
+Name[hr]=UADescription (Safari 2.0 na MacOS X)
+Name[hu]=Böngészőtípus (Safari 2.0, MacOS X)
+Name[id]=UADescription (Safari 2.0 di MacOS X)
+Name[is]=UAD strengur (Safari 2.0 á MacOS X)
+Name[it]=DescrizioneUA (Safari 2.0 su MacOS X)
+Name[kk]=UADescription (Safari 2.0 / MacOS X)
+Name[km]=UADescription (Safari 2.0 នៅ​លើ MacOS X)
+Name[ko]=UADescription (Mac OS X의 Safari 2.0)
+Name[lt]=Naudotojo agento aprašymas (Safari 2.0 ir MacOS X)
+Name[nb]=Brukeragent (Safari 2.0 på MacOS X)
+Name[nds]=UA-Beschrieven (Safari 2.0 op MacOS X)
+Name[ne]=यूए वर्णन (MacOS X मा Safari 1.2)
+Name[nl]=GA-beschrijving (Safari 2.0 op MacOS X)
+Name[nn]=Brukaragent (Safari 2.0 på MacOS X)
+Name[pa]=UADescription (MacOS X ਉੱਤੇ ਸਫ਼ਾਰੀ 2.0)
+Name[pl]=Opis przeglądarki użytkownika (Safari 2.0 na MacOS X)
+Name[pt]=UADescription (Safari 2.0 no MacOS X)
+Name[pt_BR]=UADescription (Safari 2.0 no MacOS X)
+Name[ro]=Descriere UA (Safari 2.0 pentru MacOS X)
+Name[ru]=UADescription (Safari 2.0 на Mac MacOS X)
+Name[sl]=UAOpis (Safari 2.0 na MacOS X)
+Name[sr]=UADescription (Safari 2.0 на MacOS-у X)
+Name[sr@Latn]=UADescription (Safari 2.0 na MacOS-u X)
+Name[sv]=AA-beskrivning (Safari 2.0 på MacOS X)
+Name[tg]=UADescription (Safari 2.0 дар асоси Mac MacOS X)
+Name[th]=UADescription (ซาฟารี 2.0 บน MacOS X)
+Name[tr]=UA Tanımı (MacOS X'de Safari 1.2)
+Name[uk]=UADescription (Safari 2.0 на MacOS X)
+Name[uz]=UADescription (MacOS X bilan Safari 2.0)
+Name[uz@cyrillic]=UADescription (MacOS X билан Safari 2.0)
+Name[vi]=Mô tả UA (Safari 2.0 trên MacOS X)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Safari 2.0 so MacOS X)
+Name[zh_TW]=使用者代理描述 (Safari 2.0 on MacOS X)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=SAF
+X-KDE-UA-FULL=Mozilla/5.0 (Macintosh; U; PPC Mac OS X; appLanguage) AppleWebKit/412 (KHTML, like Gecko) Safari/412
+X-KDE-UA-NAME=Safari
+X-KDE-UA-VERSION=2.0
+X-KDE-UA-SYSNAME=Mac OS
+X-KDE-UA-SYSRELEASE=X
+X-KDE-UA-DYNAMIC-ENTRY=1
diff --git a/kcontrol/kio/uasproviders/w3moncurrent.desktop b/kcontrol/kio/uasproviders/w3moncurrent.desktop
new file mode 100644
index 000000000..e2b97276c
--- /dev/null
+++ b/kcontrol/kio/uasproviders/w3moncurrent.desktop
@@ -0,0 +1,50 @@
+[Desktop Entry]
+Name=UADescription (w3m 0.1.9)
+Name[af]=UA-beskrywing (w3m 0.1.9)
+Name[ca]=Descripció de AU (w3m 0.1.9)
+Name[cs]=Popis agenta (w3m 0.1.9)
+Name[csb]=Òpis programë brëkòwnika (w3m 0.1.9)
+Name[cy]=UADisgrifiad (w3m 0.1.9)
+Name[da]=Brugeragentbeskrivelse (w3m 0.1.9)
+Name[de]=Browserkennung (w3m 0.1.9)
+Name[el]=Περιγραφή UA (w3m 0.1.9)
+Name[eo]=UA-Priskribo (w3m 0.1.9)
+Name[es]=Descripción de AU (w3m 0.1.9)
+Name[eu]=UA azalpena (w3m 0.1.9)
+Name[fi]=Käyttäjäagenttikuvaus (w3m 0.1.9)
+Name[fr]=Identité du navigateur (w3m 0.1.9)
+Name[fy]=GA-omskriuwing (w3m 0.1.9)
+Name[hi]=यूएडी-डिस्क्रिप्शन (डब्ल्यू3एम 0.1.9)
+Name[hu]=Böngészőtípus (w3m 0.1.9)
+Name[is]=UAD strengur (w3m 0.1.9)
+Name[it]=DescrizioneUA (w3m 0.1.9)
+Name[lt]=Naudotojo agento aprašymas (w3m 0.1.9)
+Name[lv]=UAApraksts (w3m 0.1.9)
+Name[mn]=UserAgent-Тодорхойлолт (w3m 0.1.9)
+Name[nb]=Brukeragent (w3m 0.1.9)
+Name[nds]=UA-Beschrieven (w3m 0.1.9)
+Name[ne]=UA वर्णन (w3m 0.1.9)
+Name[nl]=GA-beschrijving (w3m 0.1.9)
+Name[nn]=Brukaragent (w3m 0.1.9)
+Name[nso]=UAThlaloso (w3m 0.1.9)
+Name[pl]=Opis przeglądarki użytkownika (w3m 0.1.9)
+Name[pt_BR]=Descrição (w3m 0.1.9)
+Name[ro]=Descriere UA (w3m 0.1.9)
+Name[se]=UA-čilgehus (w3m 0.1.9)
+Name[sk]=Popis agenta (w3m 0.1.9)
+Name[sl]=UAOpis (w3m 0.1.9)
+Name[sv]=AA-beskrivning (w3m 0.1.9)
+Name[ta]=UAவிவரம் (w3m 0.1.9)
+Name[tg]=ТавзеҳиUA (w3m 0.1.9)
+Name[tr]=UA Tanımı (w3m 0.1.9)
+Name[ven]=Thalutshedzo ya UA (w3m 0.1.9)
+Name[vi]=Mô tả UA (w3m 0.1.9)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (w3m 0.1.9)
+Name[zh_CN]=用户代理描述 (w3m 0.1.9)
+Name[zh_TW]=使用者代理描述 (w3m 0.1.9)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MISC
+X-KDE-UA-FULL=w3m/0.1.9
+X-KDE-UA-NAME=w3m
+X-KDE-UA-VERSION=0.1.9
diff --git a/kcontrol/kio/uasproviders/wgetoncurrent.desktop b/kcontrol/kio/uasproviders/wgetoncurrent.desktop
new file mode 100644
index 000000000..0f2da9fb9
--- /dev/null
+++ b/kcontrol/kio/uasproviders/wgetoncurrent.desktop
@@ -0,0 +1,50 @@
+[Desktop Entry]
+Name=UADescription (Wget 1.5.3)
+Name[af]=UA-beskrywing (Wget 1.5.3)
+Name[ca]=Descripció de AU (Wget 1.5.3)
+Name[cs]=Popis agenta (Wget 1.5.3)
+Name[csb]=Òpis programë brëkòwnika (Wget 1.5.3)
+Name[cy]=UADisgrifiad (Wget 1.5.3)
+Name[da]=Brugeragentbeskrivelse (Wget 1.5.3)
+Name[de]=Programmkennung (Wget 1.5.3)
+Name[el]=Περιγραφή UA (Wget 1.5.3)
+Name[eo]=UA-Priskribo (Wget 1.5.3)
+Name[es]=Descripción de AU (Wget 1.5.3)
+Name[eu]=UA azalpena (Wget 1.5.3)
+Name[fi]=Käyttäjäagenttikuvaus (Wget 1.5.3)
+Name[fr]=Identité du navigateur (Wget 1.5.3)
+Name[fy]=GA-omskriuwing (Wget 1.5.3)
+Name[hi]=यूएडी-डिस्क्रिप्शन (डब्ल्यूगेट 1.5.3)
+Name[hu]=Böngészőtípus (Wget 1.5.3)
+Name[is]=UAD strengur (Wget 1.5.3)
+Name[it]=DescrizioneUA (Wget 1.5.3)
+Name[lt]=Naudotojo agento aprašymas (Wget 1.5.3)
+Name[lv]=UAApraksts (Wget 1.5.3)
+Name[mn]=UserAgent-Тодорхойлолт (Wget 1.5.3)
+Name[nb]=Brukeragent (Wget 1.5.3)
+Name[nds]=UA-Beschrieven (Wget 1.5.3)
+Name[ne]=UA वर्णन (Wget 1.5.3)
+Name[nl]=GA-beschrijving (Wget 1.5.3)
+Name[nn]=Brukaragent (Wget 1.5.3)
+Name[nso]=UAThlaloso (Wget 1.5.3)
+Name[pl]=Opis przeglądarki użytkownika (Wget 1.5.3)
+Name[pt_BR]=Descrição (Wget 1.5.3)
+Name[ro]=Descriere UA (Wget 1.5.3)
+Name[se]=UA-čilgehus (Wget 1.5.3)
+Name[sk]=Popis agenta (Wget 1.5.3)
+Name[sl]=UAOpis (Wget 1.5.3)
+Name[sv]=AA-beskrivning (Wget 1.5.3)
+Name[ta]=UAவிவரம் (Wget 1.5.3)
+Name[tg]=ТавзеҳиUA (Wget 1.5.3)
+Name[tr]=UA Tanımı (Wget 1.5.3)
+Name[ven]=Thalutshedzo ya UA (Wget 1.5.3)
+Name[vi]=Mô tả UA (Wget 1.5.3)
+Name[wa]=Discrijhaedje di l' idintité do betchteu (Wget 1.5.3)
+Name[zh_CN]=用户代理描述 (Wget 1.5.3)
+Name[zh_TW]=使用者代理描述 (Wget 1.5.3)
+Type=Service
+ServiceTypes=UserAgentStrings
+X-KDE-UA-TAG=MISC
+X-KDE-UA-FULL=Wget/1.5.3
+X-KDE-UA-NAME=Wget
+X-KDE-UA-VERSION=1.5.3
diff --git a/kcontrol/kio/uninstall.desktop b/kcontrol/kio/uninstall.desktop
new file mode 100644
index 000000000..e1e3e1732
--- /dev/null
+++ b/kcontrol/kio/uninstall.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Hidden=true
diff --git a/kcontrol/kio/useragent.desktop b/kcontrol/kio/useragent.desktop
new file mode 100644
index 000000000..e6d719872
--- /dev/null
+++ b/kcontrol/kio/useragent.desktop
@@ -0,0 +1,232 @@
+[Desktop Entry]
+Type=Application
+Icon=agent
+Exec=kcmshell useragent
+DocPath=kcontrol/useragent/index.html
+
+
+X-KDE-Library=kio
+X-KDE-FactoryName=useragent
+X-KDE-ParentApp=kcontrol
+
+Name=Browser Identification
+Name[af]=Stelsel identifisering
+Name[ar]=تعريف المتصفح
+Name[az]=Səyyah Tanıdılması
+Name[be]=Ідэнтыфікацыя вандроўніка
+Name[bg]=Идентификация
+Name[bn]=ব্রাউজার সনাক্তকরণ
+Name[br]=Anvelezh ar furcher
+Name[bs]=Identifikacija browsera
+Name[ca]=Identificació del navegador
+Name[cs]=Identifikace prohlížeče
+Name[csb]=Identifikacëjô przezérnika
+Name[cy]=Enw'r Porwr
+Name[da]=Browser-identifikation
+Name[de]=Browserkennung
+Name[el]=Ταυτοποίηση περιηγητή
+Name[eo]=TTT-legila identeco
+Name[es]=Identificación del navegador
+Name[et]=Veebilehitseja identifikaator
+Name[eu]=Arakatzailearen identifikazioa
+Name[fa]=شناسایی مرورگر
+Name[fi]=Selaimen tunnistus
+Name[fr]=Identification du navigateur
+Name[fy]=Blêder identifikaasje
+Name[ga]=Aitheantas Brabhsálaithe
+Name[gl]=Identificación do Navegador
+Name[he]=זיהוי דפדפן
+Name[hi]= ब्राउज़र पहचान
+Name[hr]=Identifikacija preglednika
+Name[hu]=Böngészőazonosító
+Name[is]=Auðkenni vafra
+Name[it]=Identificazione browser
+Name[ja]=ブラウザ識別情報
+Name[ka]=ბრაუზერის ინდენტიფიკაცია
+Name[kk]=Браузердің өз туралы хабарлауы
+Name[km]=ការ​កំណត់​អត្តសញ្ញាណ​កម្មវិធី​រុករក
+Name[ko]=브라우저 증명
+Name[lo]=ການແຈ້ງເຕືອນ
+Name[lt]=Naršyklės identifikacija
+Name[lv]=Pārlūka identifikācija
+Name[mk]=Идентификација
+Name[mn]=Хөтөч-Тодотгол
+Name[ms]=Pengenalpastian Pelayar
+Name[mt]=Identifikazzjoni tal-browser
+Name[nb]=Nettleseridentifisering
+Name[nds]=Nettkieker-Identiteet
+Name[ne]=ब्राउजर पहिचान
+Name[nl]=Browseridentificatie
+Name[nn]=Nettlesaridentifikasjon
+Name[nso]=Boitsibiso bja Seinyakisi
+Name[pa]=ਝਲਕਾਰਾ ਪਛਾਣ
+Name[pl]=Identyfikacja przeglądarki
+Name[pt]=Identificação do Navegador
+Name[pt_BR]=Identificação do Navegador
+Name[ro]=Identificare navigator web
+Name[ru]=Идентификация браузера
+Name[rw]=Ikiranga Mucukumbuzi
+Name[se]=Fierpmádatloganidentifikašuvdna
+Name[sk]=Identifikácie prehliadača
+Name[sl]=Identifikacija brskalnika
+Name[sr]=Идентификација прегледача
+Name[sr@Latn]=Identifikacija pregledača
+Name[sv]=Webbläsaridentifikation
+Name[ta]=உலாவி அடையாளம்
+Name[tg]=Шиносоии тафсир
+Name[th]=การแสดงตัวของบราวเซอร์
+Name[tr]=Web tarayıcı kimliği
+Name[tt]=Browser Tanışması
+Name[uk]=Ідентифікація навігатора
+Name[ven]=U talusa ha burausu
+Name[vi]=Nhận diện trình duyệt
+Name[wa]=Inditifiaedje do betchteu
+Name[xh]=Uchazo Lomkhangeli zincwadi
+Name[zh_CN]=浏览器识别
+Name[zh_TW]=瀏覽器識別
+Name[zu]=Umazisi Womcingi
+
+Comment=Configure the way Konqueror reports itself
+Comment[af]=Stel die manier waarop Konqueror homself raporteer op
+Comment[ar]=إعداد طريقة التعريف لــ Konqueror عن نفسه
+Comment[az]=Konqeror-un özünü tanıtmasını quraşdır
+Comment[be]=Настаўленні спосабу прадстаўлення Konqueror у Сеціве
+Comment[bg]=Настройване идентификацията на браузъра
+Comment[bn]=কনকরার নিজেকে কিভাবে উপস্থাপন করবে তা কনফিগার করুন
+Comment[bs]=Podesite kako se Konqueror identificira serveru
+Comment[ca]=Configura com desitgeu que s'identifiqui el Konqueror
+Comment[cs]=Zde můžete jak se bude Konqueror hlásit webovým serverům
+Comment[csb]=Kònfigùracëjô ôrtu przedstôwianiô sã Konquerora
+Comment[cy]=Ffurfweddu'r ffordd y mae Konqueror yn adrodd ei hun
+Comment[da]=Indstil den måde Konquerors rapporterer sigselv
+Comment[de]=Kennungen für Konqueror als Webbrowser festlegen
+Comment[el]=Ρυθμίστε τον τρόπο με τον οποίο αναφέρεται το Konqueror
+Comment[eo]=Agordo de Konkeranto-"user agent"
+Comment[es]=Configuración del modo de autoidentificación de Konqueror
+Comment[et]=Viisi, kuidas Konqueror endast teada annab, seadistamine
+Comment[eu]=Konfiguratu nola azaltzen duen Konquerorrek bere burua
+Comment[fa]=پیکربندی روشی که Konqueror گزارش خود را می‌دهد.
+Comment[fi]=Vaihda Konquerorin esittäytymistapaa
+Comment[fr]=Configuration de la manière dont Konqueror se signale
+Comment[fy]=Hjir kinne jo fêststelle hoe Konqueror har by webtsjinners identifisearret
+Comment[gl]=Configurar o xeito en que Konqueror informa sobre si mesmo
+Comment[he]=שינוי הדרך שבה Konqueror מזדהה
+Comment[hi]=कॉन्करर अपने आप को जिस रूप में रिपोर्ट करे वैसा कॉन्फ़िगर करें
+Comment[hr]=Konfiguriranje načina na koji se Konqueror prijavljuje
+Comment[hu]=A Konqueror webböngésző kliensazonosítójának beállítása
+Comment[is]=Stilla hvernig Konqueror kynnir sig
+Comment[it]=Configura il modo in cui Konqueror si identifica presso i server
+Comment[ja]=Konqueror のブラウザ識別情報を設定
+Comment[ka]=Konqueror-ის იდენტიფიკაციის კონფიგურირება
+Comment[kk]=Konqueror өз туралы хабарлауын баптау
+Comment[km]=កំណត់​រចនាសម្ព័ន្ធ​របៀប​ដែល Konqueror រាយការណ៍​ខ្លួន​វា
+Comment[ko]=Konqueror가 자신을 보고하는 방법 설정
+Comment[lo]=ທ່ານສາມາດປັບແຕ່ງລັກສະນະແລະຄວາມຮູ້ສຶກໃນການໃຊ້ງານ Konqueror ໄດ້ທີ່ນີ້
+Comment[lt]=Čia galite nustatyti, kaip Konqueror save identifikuoja
+Comment[lv]=Norādiet kā Iekarotājs identificēs sevi
+Comment[mk]=Конфигурирајте го начинот на кој Konqueror се пријавува себе си
+Comment[mn]=Конкюрорыг вэб-Хөтөчөөр авах эсэхийг тогтоох
+Comment[ms]=Konfigur cara Konqueror melaporkan dirinya
+Comment[mt]=Ikkonfigura kif jirrapporta ruħu Konqueror
+Comment[nb]=Tilpass Konquerors egenrapportering
+Comment[nds]=Instellen, wat Konqueror seggt, woneem he is
+Comment[ne]=कन्क्वेररले प्रतिवेदन गर्ने तरिकामा कन्फिगर गर्नुहोस्
+Comment[nl]=Hier kunt u bepalen hoe Konqueror zich bij webservers identificeert
+Comment[nn]=Vel korleis Konqueror skal presentera seg sjølv
+Comment[nso]=Beakanya ka mokgwa wo Konqueror e ipegago ka gona
+Comment[pa]=ਕੋਨਕਿਉਰੋਰ ਦੇ ਖੁਦ ਨੂੰ ਜਾਣਕਾਰੀ ਦੇਣ ਦੇ ਢੰਗ ਦੀ ਸੰਰਚਨਾ
+Comment[pl]=Konfiguracja sposobu przedstawiania się Konquerora
+Comment[pt]=Configuração da forma como o Konqueror se apresenta
+Comment[pt_BR]=Configura o modo como o Konqueror se mostra externamente
+Comment[ro]=Configurează modul în care Konqueror se identifică la serverele de web
+Comment[ru]=Настройка идентификации Konqueror
+Comment[rw]=Kuboneza inzira Konqueror yitangaza
+Comment[se]=Vállje mo Konqueror galgá iežas ovdanbuktit
+Comment[sk]=Nastavenie identifikácie Konquerora
+Comment[sl]=Nastavitev načina predstavljanja Konquerorja
+Comment[sr]=Подешавање како Konqueror представља себе
+Comment[sr@Latn]=Podešavanje kako Konqueror predstavlja sebe
+Comment[sv]=Anpassa hur Konqueror identifierar sig
+Comment[ta]=கான்கொரர் அறிக்கைகளை வழிகளை வடிவமை
+Comment[tg]=Танзими идентификатсияи Konqueror
+Comment[th]=ปรับแต่งการแสดงตัวของคอนเควอร์เรอร์
+Comment[tr]=Konqueror'ın raporlama sistemini yapılandır
+Comment[tt]=Konqueror üz-üzen beldergän ısulın saylaw
+Comment[uk]=Тут можна налаштувати ідентифікацію Konqueror
+Comment[ven]=Dzudzanyani ndila ine Kongueror yadi vhiga ngayo
+Comment[vi]=Cấu hình cách Konqueror tự báo cáo
+Comment[wa]=Aponteye li manire ki Konqueror si prezinte
+Comment[xh]=Qwalasela indlela i Konqueror ezichaza ngayo
+Comment[zh_CN]=配置 Konqueror 的报告自己的方式
+Comment[zh_TW]=設定 Konqueror 回報自身狀況的方式
+Comment[zu]=Hlanganisela indlela i-Konqueror ezibika ngayo
+
+Keywords=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login
+Keywords[af]=Gebruiker Agent,Browser,Internet,WWW,Network,agent,bindings,server,login
+Keywords[ar]=عميل المستخدم,المتصفح,الشبكة العالمية,الشبكة,عميل,bindings,User Agent,Browser,Internet,WWW,Network,agent,bindings, server,login,خادم,دخول
+Keywords[az]=İstifadəçi Vasitəsi,Səyyah,İnternet,WWW,Şəbəkə,giriş,verici,vasitə
+Keywords[be]=Кліент,Вандроўнік,Сетка,Агент,сервер,уваход,сесія,User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login
+Keywords[bg]=идентификация, клиент, потребителски, браузър, Интернет, агент, сайт, представяне, User Agent, Browser, Internet, WWW, Network, agent, bindings, server, login
+Keywords[ca]=Agent d'usuari,Fullejador,Internet,WWW,Xarxa,agent,lligams,servidor,accés
+Keywords[cs]=Uživatelský agent,Prohlížeč,Internet,WWW,Síť,Agent,Vazby,Server,Login,Přihlášení
+Keywords[csb]=User Agent,programa brëkòwnika,przezérnik,Internet,WWW,séc,agent,sparłączenia,serwera,login
+Keywords[cy]=Asiant y Defnyddiwr,Porwr,Rhyngrwyd,WWW,Rhwydwaith,asiant,rhwymiadau,gweinydd,mewngofnodi
+Keywords[da]=Brugeragent,Internet,WWW,Netværk,agent,bindinger,server,login
+Keywords[de]=Browserkennung,Internetprogramm,Browser,Internet,WWW,Netzwerk,Server,Zuordnungen,Anmeldung
+Keywords[el]=Πράκτορας χρήστη,Περιηγητής,Διαδίκτυο,WWW,Δίκτυο,πράκτορας,bindings,εξυπηρετητής,σύνδεση
+Keywords[eo]=uzanto,agento,TTT,Interreto,WWW,reto,asocioj,servilo,saluto
+Keywords[es]=Agente de Usuario,Navegador,Internet,WWW,Red,agente,asociaciones,servidor,entrada,acceso
+Keywords[et]=kasutajaagent,identifikaator,veebilehitseja,Internet,WWW,võrk,agent,seosed,server,sisselogimine
+Keywords[eu]=Erabiltzaile agentea,Arakatzailea,Internet,WWW,sarea,agentea, elkarketak,zerbitzaria,saio-hasiera
+Keywords[fa]=عامل کاربر، مرورگر، اینترنت، WWW، شبکه، عامل، مقیدسازیها، کارساز، ورود
+Keywords[fi]=Käyttäjäagentti,Selain,Internet,WWW,Verkko,agentti,sidokset,palvelin,kirjautuminen
+Keywords[fr]=identité du navigateur,navigateur,WWW,réseau,associations,serveur,connexion,login,internet
+Keywords[fy]=user agent,browser,internet,www,netwurk,brûkersagint,agint,biningen,tsjinner,oanmelding
+Keywords[ga]=UserAgent,gníomhaire úsáideora,Brabhsálaí,Idirlíon,WWW,Líonra,Gréasán,gníomhaire,ceangail,freastalaí,logáil isteach
+Keywords[gl]=Axente de Usuario,User Agent,Navegador,Internet,WWW,Rede,axente,atallos,servidor,login
+Keywords[he]=רשת,זיהוי,קישורים,שרת,כניסה למערכת,דפדפן,זיהוי דפדפן,WWW,אינטרנט, User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login
+Keywords[hi]=उपयोक्ता एजेंट, ब्राउज़र,इंटरनेट,डब्ल्यूडब्ल्यूडब्ल्यू,नेटवर्क,एजेंट,बाइंडिंग्स,सर्वर,लॉगइन
+Keywords[hr]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,Korisnički agent,Preglednik,Mreža,povezivanja,poslužitelj,prijava
+Keywords[hu]=böngészőtípus,böngésző,internet,WWW,hálózat,azonosító,hozzárendelések,kiszolgáló,bejelentkezés
+Keywords[id]=Agen User,Browser,Internet,WWW,Jaringan,agent,bindings,server,login
+Keywords[is]=Vafraauðkenning,Auðkennig,Auðkenning Vafra,Vafri,Net,Netið,bindingar,þjónn,innstimplun,innskráning
+Keywords[it]=User agent,Navigazione,Browser,Internet,WWW,Rete,agent,collegamenti,server,login,accesso
+Keywords[ja]=ユーザエージェント,ブラウザ,インターネット, WWW,ネットワーク,エージェント,バインディング,サーバ,ログイン
+Keywords[km]=ភ្នាក់ងារ​អ្នក​ប្រើ,កម្មវិធី​រុករក,អ៊ិនធឺណិត,វើលវ៉ាយវិប,បណ្ដាញ,ភ្នាក់ងារ,ការ​ចង,ម៉ាស៊ីន​បម្រើ,ចូល
+Keywords[lt]=Naudotojo agentas,User-Agent,Naršyklė,Internet,WWW,Tinklas,agentas,sietis,serveris, registracija
+Keywords[lv]=Lietotāja Aģents,Pārlūks,Internets,WWW,Tīkls,aģents,sasaistes,serveris,pieteikšanās
+Keywords[mk]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,Кориснички агент,Прелистувач,Интернет,Мрежа,агент,поврзувања,сервер,најава
+Keywords[mn]=User Agent,Интернэт програм,Хөтөч,Интернэт,WWW,Сүлжээ,сервер,Холбоос,Нэвтрэлт
+Keywords[nb]=brukaragent,nettleser,internett,WWW,verdensveven,nettverk,agent,tjener,innlogging
+Keywords[nds]=User Agent,Browser,Internet,WWW,Nettwark,agent,bindings,Server,Nettkieker,anmellen
+Keywords[ne]=प्रयोगकर्ता एजेन्ट, ब्राउजर, इन्टरनेट, WWW, सञ्जाल, एजेन्ट, बाइन्डिङहरू, सर्भर, लगइन
+Keywords[nl]=user agent,browser,internet,www,netwerk,gebruikersagent,agent,bindingen,server,login
+Keywords[nn]=brukaragent,nettlesar,internett,WWW,verdsveven,nettverk,agent,tenar,innlogging
+Keywords[nso]=Mothusi wa Modirisi,Seinyakisi,Internet,WWW,Kgokagano,mothusi, ditlemo,moabi,tseno
+Keywords[pa]=WWW,Network,agent,bindings,ਏਜੰਟ,ਸਰਵਰ,ਲਾਗਿੰਨ,ਇੰਟਰਨੈਟ,ਝਲਕਾਰਾ,ਉਪਭੋਗੀ ਏਜੰਟ,ਨੈਟਵਰਕ
+Keywords[pl]=User Agent,program użytkownika,przeglądarka,Internet,WWW,sieć,agent,powiązania,serwer,login
+Keywords[pt]=agente do utilizador,navegador,internet,WWW,rede
+Keywords[pt_BR]=Agente de usuário,navegador,Internet,WWW,Rede,agente,ligações,servidor,login
+Keywords[ro]=agent utilizator,User Agent,navigator,browser,Internet,WWW,rețea,agent,asocieri,server,logare
+Keywords[rw]=Umukozi Ukoresha,Mucukumbuzi,Interineti,WWW,Urusoberemiyoboro,umukozi, Ibyafataranyijwe,seriveri,ifashayinjira
+Keywords[se]=geavaheaddjiageanta,fierpmádatlogan,fierpmádat,WWW,interneahtta,fierbmi, ageanta,bálvá,sisačáliheapmi
+Keywords[sk]=User Agent,Prehliadač,Internet,WWW,Sieť,agent,server,login,prihlásenie
+Keywords[sl]=uporabniški agent,brskalnik,internet,WWW,splet,omrežje,strežnik,prijava
+Keywords[sr]=User Агент,Browser,Интернет,WWW,Network,агент,bindings,сервер,login, Мрежа,прегледач,агент,кориснички агент
+Keywords[sr@Latn]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login, Mreža,pregledač,agent,korisnički agent
+Keywords[sv]=Användaragent,Webbläsare,Internet,WWW,Nätverk,agent,bindningar, server,inloggning
+Keywords[ta]=பயன்படுத்துபவர் முகவர்,உலாவி,வலைபின்னல்,WWW,வலைதளம்,முகவர்,bindings,சேவகன்,உள்நுழை
+Keywords[th]=เครื่องมือของผู้ใช้,บราวเซอร์,อินเทอร์เน็ต,WWW,เครือข่าย,เครื่องมือ,การจับคู่,เซิร์ฟเวอร์,ล็อกอิน
+Keywords[tr]=Kullanıcı Aracısı,Tarayıcı,İnternet,WWW,Ağ,giriş,sunucu,aracı
+Keywords[uk]=агент навігатора,навігатор,Інтернет,WWW,мережа,агент,прив'язки,сервер,реєстрація
+Keywords[uz]=User Agent,WWW,agent,bindings,Brauzer,Internet,Tarmoq,server
+Keywords[uz@cyrillic]=User Agent,WWW,agent,bindings,Браузер,Интернет,Тармоқ,сервер
+Keywords[ven]=Mushumisi,Buronza.Inithanete,WWW,Vhgukwamani,Mushumeli,dzithanganyo,Siva,U loga
+Keywords[vi]=Trình khách,Trình duyệt,Internet,WWW,Mạng,khách,tổ hợp,máy chủ,đăng nhập
+Keywords[wa]=User Agent,idintité do betchteu,betchteu,Internet,daedntoele,WWW,rantoele,idintité,agent,sierveu,login,elodjaedje
+Keywords[xh]=Ummeli womsebenzisi,Umkhangeli zincwadi,Internet,WWW,Umsebenzi womnatha,ummeli,izibophelelo,umncedisi,igama elithile
+Keywords[zh_CN]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,用户代理,Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,用户代理,浏览,网络,代理,关联,服务器,登录
+Keywords[zh_TW]=User Agent,Browser,Internet,WWW,Network,agent,bindings,server,login,使用者代理程式,瀏覽器,網際網路,網路,代理程式,伺服器,登入
+Keywords[zu]=Ummeli Womsebenzisi,Umcingi,Internet,WWW,Uxhumano olusakazekile, ummeli,izibongo,umlekeleli,ngena ngaphakathi
+
+Categories=Qt;KDE;X-KDE-settings-webbrowsing;
diff --git a/kcontrol/kio/useragentdlg.cpp b/kcontrol/kio/useragentdlg.cpp
new file mode 100644
index 000000000..b8256b946
--- /dev/null
+++ b/kcontrol/kio/useragentdlg.cpp
@@ -0,0 +1,403 @@
+/*
+ Original Authors:
+ Copyright (c) Kalle Dalheimer 1997
+ Copyright (c) David Faure <faure@kde.org> 1998
+ Copyright (c) Dirk Mueller <mueller@kde.org> 2000
+
+ Completely re-written by:
+ Copyright (C) 2000- Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License (GPL)
+ version 2 as published by the Free Software Foundation.
+
+ 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 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 <qvbox.h>
+#include <qlayout.h>
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qpushbutton.h>
+#include <qvbuttongroup.h>
+
+#include <kdebug.h>
+#include <kconfig.h>
+#include <klocale.h>
+#include <klistview.h>
+#include <kmessagebox.h>
+#include <ksimpleconfig.h>
+#include <kio/http_slave_defaults.h>
+
+#include "ksaveioconfig.h"
+#include "fakeuaprovider.h"
+#include "uagentproviderdlg.h"
+
+#include "useragentdlg.h"
+#include "useragentdlg_ui.h"
+
+UserAgentDlg::UserAgentDlg( QWidget * parent )
+ :KCModule( parent, "kcmkio" )
+{
+ QVBoxLayout *mainLayout = new QVBoxLayout(this, 0, KDialog::spacingHint());
+
+ dlg = new UserAgentDlgUI (this);
+ mainLayout->addWidget(dlg);
+
+ dlg->lvDomainPolicyList->setSorting(0);
+
+ connect( dlg->cbSendUAString, SIGNAL(clicked()), SLOT(configChanged()) );
+
+ connect( dlg->gbDefaultId, SIGNAL(clicked(int)),
+ SLOT(changeDefaultUAModifiers(int)));
+
+ connect( dlg->lvDomainPolicyList, SIGNAL(selectionChanged()),
+ SLOT(selectionChanged()) );
+ connect( dlg->lvDomainPolicyList, SIGNAL(doubleClicked (QListViewItem *)),
+ SLOT(changePressed()) );
+ connect( dlg->lvDomainPolicyList, SIGNAL( returnPressed ( QListViewItem * ) ),
+ SLOT( changePressed() ));
+
+ connect( dlg->pbNew, SIGNAL(clicked()), SLOT( addPressed() ) );
+ connect( dlg->pbChange, SIGNAL( clicked() ), SLOT( changePressed() ) );
+ connect( dlg->pbDelete, SIGNAL( clicked() ), SLOT( deletePressed() ) );
+ connect( dlg->pbDeleteAll, SIGNAL( clicked() ), SLOT( deleteAllPressed() ) );
+
+ load();
+}
+
+UserAgentDlg::~UserAgentDlg()
+{
+ delete m_provider;
+ delete m_config;
+}
+
+void UserAgentDlg::load()
+{
+ d_itemsSelected = 0;
+ dlg->lvDomainPolicyList->clear();
+
+ m_config = new KConfig("kio_httprc", false, false);
+ m_provider = new FakeUASProvider();
+
+ QStringList list = m_config->groupList();
+ for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
+ {
+ if ( (*it) == "<default>")
+ continue;
+ QString domain = *it;
+ m_config->setGroup(*it);
+ QString agentStr = m_config->readEntry("UserAgent");
+ if (!agentStr.isEmpty())
+ {
+ QString realName = m_provider->aliasStr(agentStr);
+ (void) new QListViewItem( dlg->lvDomainPolicyList, domain.lower(), realName, agentStr );
+ }
+ }
+
+ // Update buttons and checkboxes...
+ m_config->setGroup(QString::null);
+ bool b = m_config->readBoolEntry("SendUserAgent", true);
+ dlg->cbSendUAString->setChecked( b );
+ m_ua_keys = m_config->readEntry("UserAgentKeys", DEFAULT_USER_AGENT_KEYS).lower();
+ dlg->leDefaultId->setSqueezedText( KProtocolManager::defaultUserAgent( m_ua_keys ) );
+ dlg->cbOS->setChecked( m_ua_keys.contains('o') );
+ dlg->cbOSVersion->setChecked( m_ua_keys.contains('v') );
+ dlg->cbOSVersion->setEnabled( m_ua_keys.contains('o') );
+ dlg->cbPlatform->setChecked( m_ua_keys.contains('p') );
+ dlg->cbProcessorType->setChecked( m_ua_keys.contains('m') );
+ dlg->cbLanguage->setChecked( m_ua_keys.contains('l') );
+ updateButtons();
+ emit changed( false );
+}
+
+void UserAgentDlg::updateButtons()
+{
+ bool hasItems = dlg->lvDomainPolicyList->childCount() > 0;
+
+ dlg->pbChange->setEnabled ((hasItems && d_itemsSelected == 1));
+ dlg->pbDelete->setEnabled ((hasItems && d_itemsSelected > 0));
+ dlg->pbDeleteAll->setEnabled ( hasItems );
+}
+
+void UserAgentDlg::defaults()
+{
+ dlg->lvDomainPolicyList->clear();
+ m_ua_keys = DEFAULT_USER_AGENT_KEYS;
+ dlg->leDefaultId->setSqueezedText( KProtocolManager::defaultUserAgent(m_ua_keys) );
+ dlg->cbOS->setChecked( m_ua_keys.contains('o') );
+ dlg->cbOSVersion->setChecked( m_ua_keys.contains('v') );
+ dlg->cbOSVersion->setEnabled( m_ua_keys.contains('o') );
+ dlg->cbPlatform->setChecked( m_ua_keys.contains('p') );
+ dlg->cbProcessorType->setChecked( m_ua_keys.contains('m') );
+ dlg->cbLanguage->setChecked( m_ua_keys.contains('l') );
+ dlg->cbSendUAString->setChecked( true );
+ updateButtons();
+ configChanged();
+}
+
+void UserAgentDlg::save()
+{
+ QStringList deleteList;
+
+ // This is tricky because we have to take care to delete entries
+ // as well.
+ QStringList list = m_config->groupList();
+ for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
+ {
+ if ( (*it) == "<default>")
+ continue;
+ QString domain = *it;
+ m_config->setGroup(*it);
+ if (m_config->hasKey("UserAgent"))
+ deleteList.append(*it);
+ }
+
+ QListViewItem* it = dlg->lvDomainPolicyList->firstChild();
+ while(it)
+ {
+ QString domain = it->text(0);
+ if (domain[0] == '.')
+ domain = domain.mid(1);
+ QString userAgent = it->text(2);
+ m_config->setGroup(domain);
+ m_config->writeEntry("UserAgent", userAgent);
+ deleteList.remove(domain);
+
+ it = it->nextSibling();
+ }
+
+ m_config->setGroup(QString::null);
+ m_config->writeEntry("SendUserAgent", dlg->cbSendUAString->isChecked());
+ m_config->writeEntry("UserAgentKeys", m_ua_keys );
+ m_config->sync();
+
+ // Delete all entries from deleteList.
+ if (!deleteList.isEmpty())
+ {
+ // Remove entries from local file.
+ KSimpleConfig cfg("kio_httprc");
+ for ( QStringList::Iterator it = deleteList.begin();
+ it != deleteList.end(); ++it )
+ {
+ cfg.setGroup(*it);
+ cfg.deleteEntry("UserAgent", false);
+ cfg.deleteGroup(*it, false); // Delete if empty.
+ }
+ cfg.sync();
+
+ m_config->reparseConfiguration();
+ // Check everything is gone, reset to blank otherwise.
+ for ( QStringList::Iterator it = deleteList.begin();
+ it != deleteList.end(); ++it )
+ {
+ m_config->setGroup(*it);
+ if (m_config->hasKey("UserAgent"))
+ m_config->writeEntry("UserAgent", QString::null);
+ }
+ m_config->sync();
+ }
+
+ KSaveIOConfig::updateRunningIOSlaves (this);
+
+ emit changed( false );
+}
+
+bool UserAgentDlg::handleDuplicate( const QString& site,
+ const QString& identity,
+ const QString& alias )
+{
+ QListViewItem* item = dlg->lvDomainPolicyList->firstChild();
+ while ( item != 0 )
+ {
+ if ( item->text(0) == site )
+ {
+ QString msg = i18n("<qt><center>Found an existing identification for"
+ "<br/><b>%1</b><br/>"
+ "Do you want to replace it?</center>"
+ "</qt>").arg(site);
+ int res = KMessageBox::warningContinueCancel(this, msg,
+ i18n("Duplicate Identification"),
+ i18n("Replace"));
+ if ( res == KMessageBox::Continue )
+ {
+ item->setText(0, site);
+ item->setText(1, identity);
+ item->setText(2, alias);
+ configChanged();
+ }
+ return true;
+ }
+ item = item->nextSibling();
+ }
+ return false;
+}
+
+void UserAgentDlg::addPressed()
+{
+ UAProviderDlg pdlg ( i18n("Add Identification"), this, m_provider );
+
+ if ( pdlg.exec() == QDialog::Accepted )
+ {
+ if ( !handleDuplicate( pdlg.siteName(), pdlg.identity(), pdlg.alias() ) )
+ {
+ QListViewItem* index = new QListViewItem( dlg->lvDomainPolicyList,
+ pdlg.siteName(),
+ pdlg.identity(),
+ pdlg.alias() );
+ dlg->lvDomainPolicyList->sort();
+ dlg->lvDomainPolicyList->setCurrentItem( index );
+ configChanged();
+ }
+ }
+}
+
+void UserAgentDlg::changePressed()
+{
+ UAProviderDlg pdlg ( i18n("Modify Identification"), this, m_provider );
+
+ QListViewItem *index = dlg->lvDomainPolicyList->currentItem();
+
+ if(!index)
+ return;
+
+ QString old_site = index->text(0);
+ pdlg.setSiteName( old_site );
+ pdlg.setIdentity( index->text(1) );
+
+ if ( pdlg.exec() == QDialog::Accepted )
+ {
+ QString new_site = pdlg.siteName();
+ if ( new_site == old_site ||
+ !handleDuplicate( new_site, pdlg.identity(), pdlg.alias() ) )
+ {
+ index->setText( 0, new_site );
+ index->setText( 1, pdlg.identity() );
+ index->setText( 2, pdlg.alias() );
+ configChanged();
+ }
+ }
+}
+
+void UserAgentDlg::deletePressed()
+{
+ QListViewItem* item;
+ QListViewItem* nextItem = 0;
+
+ item = dlg->lvDomainPolicyList->firstChild ();
+
+ while (item != 0L)
+ {
+ if (dlg->lvDomainPolicyList->isSelected (item))
+ {
+ nextItem = item->itemBelow();
+ if ( !nextItem )
+ nextItem = item->itemAbove();
+
+ delete item;
+ item = nextItem;
+ }
+ else
+ {
+ item = item->itemBelow();
+ }
+ }
+
+ if (nextItem)
+ dlg->lvDomainPolicyList->setSelected (nextItem, true);
+
+ updateButtons();
+ configChanged();
+}
+
+void UserAgentDlg::deleteAllPressed()
+{
+ dlg->lvDomainPolicyList->clear();
+ updateButtons();
+ configChanged();
+}
+
+void UserAgentDlg::configChanged()
+{
+ emit changed ( true );
+}
+
+void UserAgentDlg::changeDefaultUAModifiers( int )
+{
+ m_ua_keys = ":"; // Make sure it's not empty
+
+ if ( dlg->cbOS->isChecked() )
+ m_ua_keys += 'o';
+
+ if ( dlg->cbOSVersion->isChecked() )
+ m_ua_keys += 'v';
+
+ if ( dlg->cbPlatform->isChecked() )
+ m_ua_keys += 'p';
+
+ if ( dlg->cbProcessorType->isChecked() )
+ m_ua_keys += 'm';
+
+ if ( dlg->cbLanguage->isChecked() )
+ m_ua_keys += 'l';
+
+ dlg->cbOSVersion->setEnabled(m_ua_keys.contains('o'));
+
+ QString modVal = KProtocolManager::defaultUserAgent( m_ua_keys );
+ if ( dlg->leDefaultId->text() != modVal )
+ {
+ dlg->leDefaultId->setSqueezedText(modVal);
+ configChanged();
+ }
+}
+
+void UserAgentDlg::selectionChanged ()
+{
+ QListViewItem* item;
+
+ d_itemsSelected = 0;
+ item = dlg->lvDomainPolicyList->firstChild ();
+
+ while (item != 0L)
+ {
+ if (dlg->lvDomainPolicyList->isSelected (item))
+ d_itemsSelected++;
+ item = item->nextSibling ();
+ }
+
+ updateButtons ();
+}
+
+QString UserAgentDlg::quickHelp() const
+{
+ return i18n( "<h1>Browser Identification</h1> "
+ "The browser-identification module allows you to have full "
+ "control over how Konqueror will identify itself to web "
+ "sites you browse."
+ "<P>This ability to fake identification is necessary because "
+ "some web sites do not display properly when they detect that "
+ "they are not talking to current versions of either Netscape "
+ "Navigator or Internet Explorer, even if the browser actually "
+ "supports all the necessary features to render those pages "
+ "properly. "
+ "For such sites, you can use this feature to try to browse "
+ "them. Please understand that this might not always work, since "
+ "such sites might be using non-standard web protocols and or "
+ "specifications."
+ "<P><u>NOTE:</u> To obtain specific help on a particular section "
+ "of the dialog box, simply click on the quick help button on "
+ "the window title bar, then click on the section "
+ "for which you are seeking help." );
+}
+
+#include "useragentdlg.moc"
diff --git a/kcontrol/kio/useragentdlg.h b/kcontrol/kio/useragentdlg.h
new file mode 100644
index 000000000..56534e142
--- /dev/null
+++ b/kcontrol/kio/useragentdlg.h
@@ -0,0 +1,83 @@
+/*
+ Original Authors:
+ Copyright (c) Kalle Dalheimer 1997
+ Copyright (c) David Faure <faure@kde.org> 1998
+ Copyright (c) Dirk Mueller <mueller@kde.org> 2000
+
+ Completely re-written by:
+ Copyright (C) 2000- Dawit Alemayehu <adawit@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License (GPL)
+ version 2 as published by the Free Software Foundation.
+
+ 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 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 _USERAGENTDLG_H
+#define _USERAGENTDLG_H
+
+#include <kcmodule.h>
+
+class KConfig;
+class FakeUASProvider;
+class UserAgentDlgUI;
+
+class UserAgentDlg : public KCModule
+{
+ Q_OBJECT
+
+public:
+ UserAgentDlg ( QWidget * parent = 0) ;
+ ~UserAgentDlg();
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ QString quickHelp() const;
+
+private slots:
+ void updateButtons();
+ void selectionChanged();
+
+ void addPressed();
+ void changePressed();
+ void deletePressed();
+ void deleteAllPressed();
+
+ void configChanged();
+ void changeDefaultUAModifiers( int );
+
+private:
+ bool handleDuplicate( const QString&, const QString&, const QString& );
+
+ enum {
+ SHOW_OS = 0,
+ SHOW_OS_VERSION,
+ SHOW_PLATFORM,
+ SHOW_MACHINE,
+ SHOW_LANGUAGE
+ };
+
+ // Useragent modifiers...
+ QString m_ua_keys;
+
+ // Fake user-agent modifiers...
+ FakeUASProvider* m_provider;
+
+ //
+ int d_itemsSelected;
+
+ KConfig *m_config;
+ UserAgentDlgUI* dlg;
+};
+
+#endif
diff --git a/kcontrol/kio/useragentdlg_ui.ui b/kcontrol/kio/useragentdlg_ui.ui
new file mode 100644
index 000000000..0db2a2440
--- /dev/null
+++ b/kcontrol/kio/useragentdlg_ui.ui
@@ -0,0 +1,355 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>UserAgentDlgUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>UserAgentDlgUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>395</width>
+ <height>470</height>
+ </rect>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Here you can modify the default browser-identification text or set a site &lt;code&gt;(eg. www.kde.org)&lt;/code&gt; or a domain &lt;code&gt;(eg. kde.org)&lt;/code&gt; specific identification text.&lt;p&gt;
+To add a new site specific identification text, click the &lt;code&gt;New&lt;/code&gt; button and supply the necessary information. To change an existing site specific entry, click on the &lt;code&gt;Change&lt;/code&gt; button. The &lt;code&gt;Delete&lt;/code&gt; button will remove the selected site specific identification text, causing the setting to be used for that site or domain.
+&lt;/qt&gt;</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbSendUAString</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Send identification</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Send the browser identification to web sites.&lt;p&gt;
+&lt;u&gt;NOTE:&lt;/u&gt; Many sites rely on this information to display pages properly, hence, it is highly recommended that you do not totally disable this feature but rather customize it.&lt;p&gt;
+By default, only minimal identification information is sent to remote sites. The identification text that will be sent is shown below.
+&lt;/qt&gt;</string>
+ </property>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>gbDefaultId</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="title">
+ <string>Default Identification</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The browser identification text sent to the sites you visit. Use the provided options to customize it.</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>leDefaultId</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="frameShape">
+ <enum>Box</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The browser identification text sent to the sites you visit. You can customize it using the options provided below.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbOS</cstring>
+ </property>
+ <property name="text">
+ <string>Add operating s&amp;ystem name</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Includes your operating system's name in the browser identification text.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbOSVersion</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Add operating system &amp;version</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Includes your operating system's version number in the browser identification text.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbPlatform</cstring>
+ </property>
+ <property name="text">
+ <string>Add &amp;platform name</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Includes your platform type in the browser identification text</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbProcessorType</cstring>
+ </property>
+ <property name="text">
+ <string>Add &amp;machine (processor) type</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Includes your machine's CPU type in the browser identification text.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>cbLanguage</cstring>
+ </property>
+ <property name="text">
+ <string>Add lang&amp;uage information</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Includes your language settings in the browser identification text.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>gbDomainPolicy</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="title">
+ <string>Site Specific Identification</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Site Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Identification</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>User Agent</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>lvDomainPolicyList</cstring>
+ </property>
+ <property name="selectionMode" stdset="0">
+ <enum>Extended</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ <property name="treeStepSize">
+ <number>0</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>List of sites for which the specified identification text will be used instead of the default one.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New...</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Add new identification text for a site.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbChange</cstring>
+ </property>
+ <property name="text">
+ <string>Chan&amp;ge...</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Change the selected identifier text.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbDelete</cstring>
+ </property>
+ <property name="text">
+ <string>D&amp;elete</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Delete the selected identifier text.</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>pbDeleteAll</cstring>
+ </property>
+ <property name="text">
+ <string>Delete A&amp;ll</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Delete all identifiers.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>cbOS</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cbOSVersion</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cbSendUAString</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>gbDefaultId</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cbSendUAString</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>gbDomainPolicy</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+<includehints>
+ <includehint>klineedit.h</includehint>
+ <includehint>klistview.h</includehint>
+</includehints>
+</UI>