Index: kioslave/devices/kio_devices.cc
===================================================================
RCS file: /home/kde/kdebase/kioslave/devices/kio_devices.cc,v
retrieving revision 1.19
diff -u -3 -p -r1.19 kio_devices.cc
--- kioslave/devices/kio_devices.cc	29 Aug 2003 19:18:36 -0000	1.19
+++ kioslave/devices/kio_devices.cc	13 May 2004 12:02:44 -0000
@@ -436,30 +436,33 @@ void HelloProtocol::listRoot()
 
 	QStringList list=deviceList();
 	count=0;
-        for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
+	for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
 	{
 		if ((*it)=="!!!ERROR!!!")
 		{
-                        error(KIO::ERR_SLAVE_DEFINED,i18n("The KDE mountwatcher is not running. Please activate it in Control Center->KDE Components->Service Manager, if you want to use the devices:/ protocol"));
-                        return;
+			error(KIO::ERR_SLAVE_DEFINED,i18n("The KDE mountwatcher is not running. Please activate it in Control Center->KDE Components->Service Manager, if you want to use the devices:/ protocol"));
+			return;
 		}
-// FIXME: look for the real ending
 		QString url="devices:/"+(*it); ++it;
 		QString name=*it; ++it;
 		++it; ++it;
 		QString type=*it; ++it; ++it;
 		createFileEntry(entry,name,url,type);
 		listEntry(entry,false);
+
+		// look for the end
+		while (*it != "---")
+			++it;
 		count++;
 	}
-        totalSize(count);
-        listEntry(entry, true);
+	totalSize(count);
+	listEntry(entry, true);
 
 
-        // Jobs entry
+	// Jobs entry
 
-        // finish
-        finished();
+	// finish
+	finished();
 }
 
 #if 0
@@ -490,29 +493,29 @@ void HelloProtocol::listRoot()
 
 void addAtom(KIO::UDSEntry& entry, unsigned int ID, long l, const QString& s = QString::null)
 {
-        KIO::UDSAtom    atom;
-        atom.m_uds = ID;
-        atom.m_long = l;
-        atom.m_str = s;
-        entry.append(atom);
+	KIO::UDSAtom    atom;
+	atom.m_uds = ID;
+	atom.m_long = l;
+	atom.m_str = s;
+	entry.append(atom);
 }
 
 static void createFileEntry(KIO::UDSEntry& entry, const QString& name, const QString& url, const QString& mime)
 {
-        entry.clear();
-        addAtom(entry, KIO::UDS_NAME, 0, name);
-        addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR);//REG);
-        addAtom(entry, KIO::UDS_URL, 0, url);
-        addAtom(entry, KIO::UDS_ACCESS, 0500);
-       if (mime.startsWith("icon:")) {
-                kdDebug()<<"setting prefered icon:"<<mime.right(mime.length()-5)<<endl;
-                addAtom(entry,KIO::UDS_ICON_NAME,0,mime.right(mime.length()-5));
-                addAtom(entry,KIO::UDS_MIME_TYPE,0,"inode/directory");
-        }
+	entry.clear();
+	addAtom(entry, KIO::UDS_NAME, 0, name);
+	addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR);//REG);
+	addAtom(entry, KIO::UDS_URL, 0, url);
+	addAtom(entry, KIO::UDS_ACCESS, 0500);
+	if (mime.startsWith("icon:")) {
+		kdDebug()<<"setting prefered icon:"<<mime.right(mime.length()-5)<<endl;
+		addAtom(entry,KIO::UDS_ICON_NAME,0,mime.right(mime.length()-5));
+		addAtom(entry,KIO::UDS_MIME_TYPE,0,"inode/directory");
+	}
 	else
-	        addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime);
-        addAtom(entry, KIO::UDS_SIZE, 0);
-        addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "inode/directory");
+		addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime);
+	addAtom(entry, KIO::UDS_SIZE, 0);
+	addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "inode/directory");
 	addAtom(entry, KIO::UDS_CREATION_TIME,1);
 	addAtom(entry, KIO::UDS_MODIFICATION_TIME,time(0));
 }
@@ -520,22 +523,25 @@ static void createFileEntry(KIO::UDSEntr
 
 static void createDirEntry(KIO::UDSEntry& entry, const QString& name, const QString& url, const QString& mime)
 {
-        entry.clear();
-        addAtom(entry, KIO::UDS_NAME, 0, name);
-        addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR);
-        addAtom(entry, KIO::UDS_ACCESS, 0500);
+	entry.clear();
+	addAtom(entry, KIO::UDS_NAME, 0, name);
+	addAtom(entry, KIO::UDS_FILE_TYPE, S_IFDIR);
+	addAtom(entry, KIO::UDS_ACCESS, 0500);
 	kdDebug()<<"DEVICES: "<<mime<<endl;
 	if (mime.startsWith("icon:")) {
 		kdDebug()<<"setting prefered icon:"<<mime.right(mime.length()-5)<<endl;
 		addAtom(entry,KIO::UDS_ICON_NAME,0,mime.right(mime.length()-5));
 		addAtom(entry,KIO::UDS_MIME_TYPE,0,"inode/directory");	
 	}
-        else {
+	else {
 		addAtom(entry, KIO::UDS_MIME_TYPE, 0, mime);
 	}
-        addAtom(entry, KIO::UDS_URL, 0, url);
-        addAtom(entry, KIO::UDS_SIZE, 0);
-        addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "inode/directory");
+	addAtom(entry, KIO::UDS_URL, 0, url);
+	addAtom(entry, KIO::UDS_SIZE, 0);
+	addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "inode/directory");
 
-//        addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/x-desktop");
+//	addAtom(entry, KIO::UDS_GUESSED_MIME_TYPE, 0, "application/x-desktop");
 }
+
+// vim: noet
+
Index: kioslave/devices/kdedmodule/disklist.cpp
===================================================================
RCS file: /home/kde/kdebase/kioslave/devices/kdedmodule/disklist.cpp,v
retrieving revision 1.15
diff -u -3 -p -r1.15 disklist.cpp
--- kioslave/devices/kdedmodule/disklist.cpp	26 Jul 2003 10:41:22 -0000	1.15
+++ kioslave/devices/kdedmodule/disklist.cpp	13 May 2004 12:02:44 -0000
@@ -202,6 +202,7 @@ void DiskList::replaceDeviceEntry(DiskEn
 void DiskList::readFSTAB()
 {
    KMountPoint::List mountPoints = KMountPoint::possibleMountPoints(0);
+   disks->clear();
 
    for(KMountPoint::List::ConstIterator it = mountPoints.begin(); 
        it != mountPoints.end(); ++it)
@@ -211,6 +212,7 @@ void DiskList::readFSTAB()
       disk->setDeviceName(mp->mountedFrom());
       disk->setMountPoint(mp->mountPoint());
       disk->setFsType(mp->mountType());
+	  disk->setHotplug(mp->hotplug());
       if (!ignoreDisk(disk))
          replaceDeviceEntry(disk);
       else
Index: kioslave/devices/kdedmodule/disks.cpp
===================================================================
RCS file: /home/kde/kdebase/kioslave/devices/kdedmodule/disks.cpp,v
retrieving revision 1.27
diff -u -3 -p -r1.27 disks.cpp
--- kioslave/devices/kdedmodule/disks.cpp	26 Jul 2003 10:41:22 -0000	1.27
+++ kioslave/devices/kdedmodule/disks.cpp	13 May 2004 12:02:44 -0000
@@ -62,6 +62,7 @@ QString DiskEntry::niceDescription()
 	else if (dType.contains("cdwriter")) return i18n("CD Recorder");
 	else if (dType.contains("floppy")) return i18n("Floppy");
 	else if (dType.contains("zip")) return i18n("Zip Disk");
+	else if (dType.contains("hotplug")) return i18n("Hot-Plugged Device");
 	else return i18n("Unknown");
 }
 
@@ -92,11 +93,9 @@ QString DiskEntry::discType()
 			kdDebug(7020)<<"Type according to proc file system:"<<tmpInfo<<endl;
 //			tmpInfo.fromLatin1(str,len);
 			if (tmpInfo.contains("disk")) typeName="kdedevice/hdd";
-			else
-				if (tmpInfo.contains("cdrom")) typeName="kdedevice/cdrom";
-				else
-					if (tmpInfo.contains("floppy")) typeName="kdedevice/zip"; // eg IDE zip drives
-					else typeName="kdedevice/hdd";
+			else if (tmpInfo.contains("cdrom")) typeName="kdedevice/cdrom";
+			else if (tmpInfo.contains("floppy")) typeName="kdedevice/zip"; // eg IDE zip drives
+			else typeName="kdedevice/hdd";
 		}
 		infoFile.close();
 	} else typeName="kdedevice/hdd"; // this should never be reached
@@ -114,7 +113,9 @@ QString DiskEntry::discType()
     else
 #endif
     /* Guessing of cdrom and cd recorder devices */
-    if (-1!=mountPoint().find("cdrom",0,FALSE)) typeName="kdedevice/cdrom";
+			
+    if (hotplug()) typeName="kdedevice/hotplug";
+    else if (-1!=mountPoint().find("cdrom",0,FALSE)) typeName="kdedevice/cdrom";
     else if (-1!=deviceName().find("cdrom",0,FALSE)) typeName="kdedevice/cdrom";
     else if (-1!=mountPoint().find("cdwriter",0,FALSE)) typeName="kdedevice/cdwriter";
     else if (-1!=deviceName().find("cdwriter",0,FALSE)) typeName="kdedevice/cdwriter";
@@ -182,4 +183,9 @@ void DiskEntry::setMounted(bool nowMount
   isMounted=nowMounted;
 }
 
+void DiskEntry::setHotplug(bool hotplug)
+{
+  isHotplug = hotplug;
+}
+
 #include "disks.moc"
Index: kioslave/devices/kdedmodule/disks.h
===================================================================
RCS file: /home/kde/kdebase/kioslave/devices/kdedmodule/disks.h,v
retrieving revision 1.9
diff -u -3 -p -r1.9 disks.h
--- kioslave/devices/kdedmodule/disks.h	13 May 2003 11:27:48 -0000	1.9
+++ kioslave/devices/kdedmodule/disks.h	13 May 2004 12:02:44 -0000
@@ -47,6 +47,7 @@ public:
   QString realDeviceName() const { return realDevice; };
   QString mountPoint() const { return mountedOn; };
   bool mounted() const { return isMounted; }
+  bool hotplug() const { return isHotplug; }
   ino_t inode() const {return m_inode; };
   bool inodeType() const {return m_inodeType;};
   QString fsType() const { return type; };
@@ -59,6 +60,7 @@ public slots:
   void setMountPoint(const QString & mountPoint);
   void setFsType(const QString & fsType);
   void setMounted(bool nowMounted);
+  void setHotplug(bool hotplug);
 
 private:
   void init();
@@ -70,6 +72,7 @@ private:
   QString     mountedOn;
 
   bool        isMounted;
+  bool        isHotplug;
   bool        m_inodeType;
 
   ino_t	      m_inode;
Index: kioslave/devices/kdedmodule/mountwatcher.cpp
===================================================================
RCS file: /home/kde/kdebase/kioslave/devices/kdedmodule/mountwatcher.cpp,v
retrieving revision 1.31
diff -u -3 -p -r1.31 mountwatcher.cpp
--- kioslave/devices/kdedmodule/mountwatcher.cpp	29 Aug 2003 14:40:56 -0000	1.31
+++ kioslave/devices/kdedmodule/mountwatcher.cpp	13 May 2004 12:02:44 -0000
@@ -373,6 +373,7 @@ void MountWatcherModule::readDFDone()
 		completeList<<it.data().url;
 		completeList<<it.data().mimeType;
 		completeList<<(it.data().mountState?"true":"false");
+		// presumably all special entries aren't hotplug?
 		completeList<<"---";
 
 	}
Index: kioslave/devices/mimetypes/Makefile.am
===================================================================
RCS file: /home/kde/kdebase/kioslave/devices/mimetypes/Makefile.am,v
retrieving revision 1.8
diff -u -3 -p -r1.8 Makefile.am
--- kioslave/devices/mimetypes/Makefile.am	15 Dec 2002 19:36:08 -0000	1.8
+++ kioslave/devices/mimetypes/Makefile.am	13 May 2004 12:02:44 -0000
@@ -5,7 +5,9 @@ mimetype_DATA = floppy_mounted.desktop f
 		dvd_mounted.desktop dvd_unmounted.desktop \
 		cdwriter_mounted.desktop cdwriter_unmounted.desktop \
 		smb_mounted.desktop smb_unmounted.desktop\
-		nfs_mounted.desktop nfs_unmounted.desktop
+		nfs_mounted.desktop nfs_unmounted.desktop \
+		hotplug_mounted.desktop hotplug_unmounted.desktop
+
 mimetypedir = $(kde_mimedir)/kdedevice
 
 konqydir = $(kde_datadir)/konqueror/servicemenus
@@ -16,5 +18,6 @@ konqy_DATA = floppy_mounted_konqy.deskto
 	cdwriter_mounted_konqy.desktop cdwriter_unmounted_konqy.desktop	\
 	hdd_mounted_konqy.desktop hdd_unmounted_konqy.desktop		\
 	smb_mounted_konqy.desktop nfs_mounted_konqy.desktop \
-	zip_mounted_konqy.desktop zip_unmounted_konqy.desktop
+	zip_mounted_konqy.desktop zip_unmounted_konqy.desktop \
+	hotplug_mounted_konqy.desktop hotplug_unmounted_konqy.desktop
 
Index: kioslave/devices/mimetypes/hotplug_mounted.desktop
===================================================================
RCS file: kioslave/devices/mimetypes/hotplug_mounted.desktop
diff -N kioslave/devices/mimetypes/hotplug_mounted.desktop
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ kioslave/devices/mimetypes/hotplug_mounted.desktop	13 May 2004 12:02:44 -0000
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Icon=nfs_mount
+Type=MimeType
+MimeType=kdedevice/hotplug_mounted
+Comment=Mounted Hot-Pluggable Device
+Patterns=
+
+X-KDE-AutoEmbed=true
Index: kioslave/devices/mimetypes/hotplug_mounted_konqy.desktop
===================================================================
RCS file: kioslave/devices/mimetypes/hotplug_mounted_konqy.desktop
diff -N kioslave/devices/mimetypes/hotplug_mounted_konqy.desktop
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ kioslave/devices/mimetypes/hotplug_mounted_konqy.desktop	13 May 2004 12:02:44 -0000
@@ -0,0 +1,59 @@
+[Desktop Entry]
+ServiceTypes=kdedevice/hotplug_mounted
+Actions=hotplug_unmount
+
+[Desktop Action hotplug_unmount]
+Name=Unmount
+Name[af]=Ontkoppel
+Name[bg]=Демонтиране
+Name[bs]=Demontiraj
+Name[ca]= Desmunta
+Name[cs]=Odpojit
+Name[cy]=Dadosod
+Name[da]=Afmontér
+Name[de]=Laufwerkeinbindung lösen
+Name[el]=Αποπροσάρτηση
+Name[eo]=Malkroĉo
+Name[es]=Desmontar
+Name[et]=Lahuta
+Name[eu]=Desmontatu
+Name[fa]=پیاده کردن
+Name[fi]=Irroita
+Name[fr]=Démonter (enlever de l'arborescence Linux)
+Name[he]=נתק
+Name[hr]=Demontiraj
+Name[hu]=Leválasztás (unmount)
+Name[it]=Smonta
+Name[ja]=マウント解除
+Name[lo]=ຫັງກາລີ
+Name[lt]=Išmontuoti
+Name[mn]=Салгах
+Name[mt]=Żmonta
+Name[nb]=Avmonter
+Name[nl]=Afkoppelen (unmount)
+Name[nn]=Avmonter
+Name[nso]=Theosa
+Name[pl]=Odmontuj
+Name[pt]=Desmontar
+Name[pt_BR]=Desmontar
+Name[ro]=Demontează
+Name[ru]=Отмонтировать
+Name[se]=Gálgga
+Name[sk]=Odpojiť
+Name[sl]=Odklopi
+Name[sr]=Демонтирај
+Name[sv]=Avmontera
+Name[ta]=þÈì¸×õ
+Name[th]=ยกเลิกเม้าทน์
+Name[tr]=Ayır
+Name[uk]=Демонтувати
+Name[uz]=Узиш
+Name[ven]=Usa gonya
+Name[wa]=Dismonter
+Name[wen]=Wotmontować
+Name[xh]=Sukuyilayisha
+Name[xx]=xxUnmountxx
+Name[zh_CN]=卸载
+Name[zh_TW]=未掛載
+Name[zu]=Yehlisa
+Exec=kio_devices_mounthelper -u %u
Index: kioslave/devices/mimetypes/hotplug_unmounted.desktop
===================================================================
RCS file: kioslave/devices/mimetypes/hotplug_unmounted.desktop
diff -N kioslave/devices/mimetypes/hotplug_unmounted.desktop
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ kioslave/devices/mimetypes/hotplug_unmounted.desktop	13 May 2004 12:02:44 -0000
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Icon=nfs_unmount
+Type=MimeType
+MimeType=kdedevice/hotplug_unmounted
+Comment=Unmounted Hot-Pluggable Device
+Patterns=
+
+X-KDE-AutoEmbed=true
Index: kioslave/devices/mimetypes/hotplug_unmounted_konqy.desktop
===================================================================
RCS file: kioslave/devices/mimetypes/hotplug_unmounted_konqy.desktop
diff -N kioslave/devices/mimetypes/hotplug_unmounted_konqy.desktop
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ kioslave/devices/mimetypes/hotplug_unmounted_konqy.desktop	13 May 2004 12:02:44 -0000
@@ -0,0 +1,58 @@
+[Desktop Entry]
+ServiceTypes=kdedevice/hotplug_unmounted
+Actions=hotplug_mount
+
+[Desktop Action hotplug_mount]
+Name=Mount
+Name[bg]=Монтиране
+Name[bs]=Montiraj
+Name[ca]=Munta
+Name[cs]=Připojit
+Name[cy]=Gosod
+Name[da]=Montér
+Name[de]=Laufwerk einbinden
+Name[el]=Προσάρτηση
+Name[eo]=Kroĉo
+Name[es]=Montar
+Name[et]=Ühenda
+Name[eu]=Montatu
+Name[fa]=سوارکردن
+Name[fi]=Liitä
+Name[fr]=Monter
+Name[he]=חבר
+Name[hr]=Montiraj
+Name[hu]=Csatlakoztatás (mount)
+Name[it]=Monta
+Name[ja]=マウント
+Name[lo]=ຈໍພາບ
+Name[lt]=Montuoti
+Name[mn]=Залгах
+Name[mt]=Immonta
+Name[nb]=Monter
+Name[nl]=Aankoppelen (mount)
+Name[nn]=Monter
+Name[nso]=Nameletsa
+Name[pl]=Zamontuj
+Name[pt]=Montar
+Name[pt_BR]=Montar
+Name[ro]=Montează
+Name[ru]=Монтировать
+Name[se]=Čana
+Name[sk]=Pripojiť
+Name[sl]=Priklopi
+Name[sr]=Монтирај
+Name[sv]=Montera
+Name[ta]=²üÚ
+Name[th]=เม้าทน์
+Name[tr]=Bağla
+Name[uk]=Змонтувати
+Name[uz]=Улаш
+Name[ven]=Gonya
+Name[wa]=Monter
+Name[wen]=montować
+Name[xh]=Layisha
+Name[xx]=xxMountxx
+Name[zh_CN]=装载
+Name[zh_TW]=掛載
+Name[zu]=Yenyusa
+Exec=kio_devices_mounthelper -m %u
