--- kdebase-3.5.4_orig/kdesktop/Makefile.am	2006-05-22 20:12:51.000000000 +0200
+++ kdebase-3.5.4/kdesktop/Makefile.am	2006-09-11 00:28:39.000000000 +0200
@@ -1,8 +1,8 @@
 ## Makefile.am of kdebase/kdesktop
 
-INCLUDES = -I$(top_srcdir)/kcontrol/background -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib $(all_includes)
+INCLUDES = -I$(top_srcdir)/kcontrol/background -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib -I$(top_srcdir)/kioslave/media/libmediacommon $(all_includes)
 kdesktop_la_LDFLAGS  = $(all_libraries) -module $(KDE_PLUGIN)
-kdesktop_la_LIBADD   = libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kcontrol/background/libbgnd.la $(top_builddir)/kdmlib/libdmctl.la $(LIB_XSS) $(LIB_KUTILS) $(LIB_XCURSOR)
+kdesktop_la_LIBADD   = $(top_builddir)/kioslave/media/libmediacommon/libmediacommon.la libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kcontrol/background/libbgnd.la $(top_builddir)/kdmlib/libdmctl.la $(LIB_XSS) $(LIB_KUTILS) $(LIB_XCURSOR)
 
 SUBDIRS = . lock pics patterns programs init kwebdesktop
 
@@ -18,7 +18,7 @@
 libkdesktopsettings_la_SOURCES = kdesktopsettings.kcfgc klaunchsettings.kcfgc 
 
 kdesktop_la_SOURCES = main.cc krootwm.cc xautolock.cc kdiconview.cc desktop.cc \
-	lockeng.cc KDesktopIface.skel \
+	lockeng.cc KDesktopIface.skel kdiconview.skel \
 	bgmanager.cc init.cc KScreensaverIface.skel \
 	minicli.cpp KBackgroundIface.skel pixmapserver.cc kcustommenu.cc \
 	startupid.cpp minicli_ui.ui xautolock_diy.c xautolock_engine.c \
--- kdebase-3.5.4_orig/kdesktop/Makefile.in	2006-07-24 17:56:26.000000000 +0200
+++ kdebase-3.5.4/kdesktop/Makefile.in	2006-09-11 00:28:39.000000000 +0200
@@ -68,8 +68,8 @@
 LTLIBRARIES = $(kdeinit_LTLIBRARIES) $(lib_LTLIBRARIES) \
 	$(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-#>- kdesktop_la_DEPENDENCIES = libkdesktopsettings.la \
-#>- 	$(top_builddir)/libkonq/libkonq.la \
+#>- kdesktop_la_DEPENDENCIES = $(top_builddir)/kioslave/media/libmediacommon/libmediacommon.la \
+#>- 	libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la \
 #>- 	$(top_builddir)/kcontrol/background/libbgnd.la \
 #>- 	$(top_builddir)/kdmlib/libdmctl.la $(am__DEPENDENCIES_1) \
 #>- 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
@@ -224,6 +224,7 @@
 GLINC = @GLINC@
 GLLIB = @GLLIB@
 GMSGFMT = @GMSGFMT@
+GREP = @GREP@
 HALBACKEND = @HALBACKEND@
 HAL_CFLAGS = @HAL_CFLAGS@
 HAL_INCS = @HAL_INCS@
@@ -367,6 +368,9 @@
 LINUXCDPOLLING = @LINUXCDPOLLING@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
 MAKEKDEWIDGETS = @MAKEKDEWIDGETS@
 MCOPIDL = @MCOPIDL@
@@ -417,6 +421,7 @@
 VERSION = @VERSION@
 WOVERLOADED_VIRTUAL = @WOVERLOADED_VIRTUAL@
 XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
 XMLLINT = @XMLLINT@
 XTESTLIB = @XTESTLIB@
 X_EXTRA_LIBS = @X_EXTRA_LIBS@
@@ -424,12 +429,9 @@
 X_LDFLAGS = @X_LDFLAGS@
 X_PRE_LIBS = @X_PRE_LIBS@
 X_RPATH = @X_RPATH@
-ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
 ac_ct_F77 = @ac_ct_F77@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
 all_includes = @all_includes@
 all_libraries = @all_libraries@
 am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
@@ -450,10 +452,13 @@
 build_os = @build_os@
 build_vendor = @build_vendor@
 datadir = @datadir@
+datarootdir = @datarootdir@
 doc_SUBDIR_included_FALSE = @doc_SUBDIR_included_FALSE@
 doc_SUBDIR_included_TRUE = @doc_SUBDIR_included_TRUE@
+docdir = @docdir@
 drkonqi_SUBDIR_included_FALSE = @drkonqi_SUBDIR_included_FALSE@
 drkonqi_SUBDIR_included_TRUE = @drkonqi_SUBDIR_included_TRUE@
+dvidir = @dvidir@
 exec_prefix = @exec_prefix@
 have_xcursor_FALSE = @have_xcursor_FALSE@
 have_xcursor_TRUE = @have_xcursor_TRUE@
@@ -462,6 +467,7 @@
 host_cpu = @host_cpu@
 host_os = @host_os@
 host_vendor = @host_vendor@
+htmldir = @htmldir@
 include_ARTS_FALSE = @include_ARTS_FALSE@
 include_ARTS_TRUE = @include_ARTS_TRUE@
 include_BZIP2_FALSE = @include_BZIP2_FALSE@
@@ -623,6 +629,7 @@
 libexecdir = @libexecdir@
 libkonq_SUBDIR_included_FALSE = @libkonq_SUBDIR_included_FALSE@
 libkonq_SUBDIR_included_TRUE = @libkonq_SUBDIR_included_TRUE@
+localedir = @localedir@
 localstatedir = @localstatedir@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
@@ -630,10 +637,12 @@
 nsplugins_SUBDIR_included_FALSE = @nsplugins_SUBDIR_included_FALSE@
 nsplugins_SUBDIR_included_TRUE = @nsplugins_SUBDIR_included_TRUE@
 oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
 pics_SUBDIR_included_FALSE = @pics_SUBDIR_included_FALSE@
 pics_SUBDIR_included_TRUE = @pics_SUBDIR_included_TRUE@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
+psdir = @psdir@
 qt_includes = @qt_includes@
 qt_libraries = @qt_libraries@
 sbindir = @sbindir@
@@ -653,9 +662,9 @@
 xdg_appsdir = @xdg_appsdir@
 xdg_directorydir = @xdg_directorydir@
 xdg_menudir = @xdg_menudir@
-INCLUDES = -I$(top_srcdir)/kcontrol/background -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib $(all_includes)
+INCLUDES = -I$(top_srcdir)/kcontrol/background -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib -I$(top_srcdir)/kioslave/media/libmediacommon $(all_includes)
 kdesktop_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
-#>- kdesktop_la_LIBADD = libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kcontrol/background/libbgnd.la $(top_builddir)/kdmlib/libdmctl.la $(LIB_XSS) $(LIB_KUTILS) $(LIB_XCURSOR)
+#>- kdesktop_la_LIBADD = $(top_builddir)/kioslave/media/libmediacommon/libmediacommon.la libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kcontrol/background/libbgnd.la $(top_builddir)/kdmlib/libdmctl.la $(LIB_XSS) $(LIB_KUTILS) $(LIB_XCURSOR)
 #>+ 1
 kdesktop_la_LIBADD = libkdeinit_kdesktop.la
 SUBDIRS = . lock pics patterns programs init kwebdesktop
@@ -670,7 +679,7 @@
 #>+ 1
 libkdesktopsettings_la_SOURCES=   kdesktopsettings.cc klaunchsettings.cc
 #>- kdesktop_la_SOURCES = main.cc krootwm.cc xautolock.cc kdiconview.cc desktop.cc \
-#>- 	lockeng.cc KDesktopIface.skel \
+#>- 	lockeng.cc KDesktopIface.skel kdiconview.skel \
 #>- 	bgmanager.cc init.cc KScreensaverIface.skel \
 #>- 	minicli.cpp KBackgroundIface.skel pixmapserver.cc kcustommenu.cc \
 #>- 	startupid.cpp minicli_ui.ui xautolock_diy.c xautolock_engine.c \
@@ -679,12 +688,12 @@
 #>+ 8
 kdesktop_la_SOURCES = kdesktop_la_dummy.cc
 libkdeinit_kdesktop_la_SOURCES = main.cc krootwm.cc xautolock.cc kdiconview.cc desktop.cc \
-	lockeng.cc  \
+	lockeng.cc   \
 	bgmanager.cc init.cc  \
 	minicli.cpp  pixmapserver.cc kcustommenu.cc \
 	startupid.cpp  xautolock_diy.c xautolock_engine.c \
 	kshadowengine.cpp kshadowsettings.cpp \
-	kdesktopshadowsettings.cpp kfileividesktop.cpp KDesktopIface_skel.cc KScreensaverIface_skel.cc KBackgroundIface_skel.cc minicli_ui.cc
+	kdesktopshadowsettings.cpp kfileividesktop.cpp KDesktopIface_skel.cc kdiconview_skel.cc KScreensaverIface_skel.cc KBackgroundIface_skel.cc minicli_ui.cc
 
 include_HEADERS = KDesktopIface.h KScreensaverIface.h KBackgroundIface.h
 noinst_HEADERS = desktop.h bgmanager.h krootwm.h \
@@ -708,7 +717,7 @@
 
 .SUFFIXES:
 .SUFFIXES: .c .cc .cpp .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 #>- 	@for dep in $?; do \
 #>- 	  case '$(am__configure_deps)' in \
 #>- 	    *$$dep*) \
@@ -746,9 +755,9 @@
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 install-kdeinitLTLIBRARIES: $(kdeinit_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
@@ -1374,14 +1383,14 @@
 .NOEXPORT:
 
 #>+ 2
-libkdeinit_kdesktop_la_LIBADD = libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kcontrol/background/libbgnd.la $(top_builddir)/kdmlib/libdmctl.la $(LIB_XSS) $(LIB_KUTILS) $(LIB_XCURSOR)
+libkdeinit_kdesktop_la_LIBADD = $(top_builddir)/kioslave/media/libmediacommon/libmediacommon.la libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kcontrol/background/libbgnd.la $(top_builddir)/kdmlib/libdmctl.la $(LIB_XSS) $(LIB_KUTILS) $(LIB_XCURSOR)
 
 #>+ 2
 libkdeinit_kdesktop_la_LDFLAGS = -no-undefined -avoid-version $(all_libraries)
 
 #>+ 6
-libkdeinit_kdesktop_la_DEPENDENCIES = libkdesktopsettings.la \
-	$(top_builddir)/libkonq/libkonq.la \
+libkdeinit_kdesktop_la_DEPENDENCIES = $(top_builddir)/kioslave/media/libmediacommon/libmediacommon.la \
+	libkdesktopsettings.la $(top_builddir)/libkonq/libkonq.la \
 	$(top_builddir)/kcontrol/background/libbgnd.la \
 	$(top_builddir)/kdmlib/libdmctl.la $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
@@ -1407,11 +1416,15 @@
 kdesktop_LDADD = libkdeinit_kdesktop.la
 kdesktop_DEPENDENCIES = libkdeinit_kdesktop.la
 
-#>+ 13
+#>+ 17
 KDesktopIface.kidl: $(srcdir)/KDesktopIface.h $(DCOP_DEPENDENCIES)
 	$(DCOPIDL) $(srcdir)/KDesktopIface.h > KDesktopIface.kidl || ( rm -f KDesktopIface.kidl ; false )
 KDesktopIface_skel.cc: KDesktopIface.kidl
 	$(DCOPIDL2CPP) --c++-suffix cc --no-signals --no-stub KDesktopIface.kidl
+kdiconview.kidl: $(srcdir)/kdiconview.h $(DCOP_DEPENDENCIES)
+	$(DCOPIDL) $(srcdir)/kdiconview.h > kdiconview.kidl || ( rm -f kdiconview.kidl ; false )
+kdiconview_skel.cc: kdiconview.kidl
+	$(DCOPIDL2CPP) --c++-suffix cc --no-signals --no-stub kdiconview.kidl
 KScreensaverIface.kidl: $(srcdir)/KScreensaverIface.h $(DCOP_DEPENDENCIES)
 	$(DCOPIDL) $(srcdir)/KScreensaverIface.h > KScreensaverIface.kidl || ( rm -f KScreensaverIface.kidl ; false )
 KScreensaverIface_skel.cc: KScreensaverIface.kidl
@@ -1505,12 +1518,13 @@
 	-rm -f  minicli.moc krootwm.moc startupid.moc lockeng.moc desktop.moc kdiconview.moc kcustommenu.moc pixmapserver.moc xautolock.moc bgmanager.moc
 
 #>+ 2
-KDE_DIST=DESIGN Makefile.in kdesktop.kcfg kdesktop_custom_menu1 klaunchsettings.kcfgc kdesktopSetAsBackground.desktop minicli_ui.ui kshadowengine.h configure.in.in kfileividesktop.h kdesktopshadowsettings.h kdesktop_custom_menu2 kcustommenu.h kdesktopbindings.cpp kshadowsettings.h kdesktopsettings.kcfgc kdesktop.desktop klaunch.kcfg kdiconview.h Makefile.am 
+KDE_DIST=Makefile.in.backup DESIGN Makefile.in kdesktop.kcfg kdesktop_custom_menu1 klaunchsettings.kcfgc kdesktopSetAsBackground.desktop minicli_ui.ui kshadowengine.h configure.in.in kfileividesktop.h kdesktopshadowsettings.h kdesktop_custom_menu2 kcustommenu.h kdesktopbindings.cpp kshadowsettings.h kdesktopsettings.kcfgc kdesktop.desktop klaunch.kcfg kdiconview.h Makefile.am 
 
-#>+ 6
+#>+ 7
 clean-idl:
 	-rm -f \
 	KDesktopIface_skel.cc KDesktopIface_skel.h KDesktopIface.kidl \
+	kdiconview_skel.cc kdiconview_skel.h kdiconview.kidl \
 	KScreensaverIface_skel.cc KScreensaverIface_skel.h KScreensaverIface.kidl \
 	KBackgroundIface_skel.cc KBackgroundIface_skel.h KBackgroundIface.kidl 
 
@@ -1571,11 +1585,11 @@
 
 
 #>+ 11
-libkdeinit_kdesktop_la.all_cc.cc: $(srcdir)/Makefile.in $(srcdir)/main.cc  kdesktopsettings.h $(srcdir)/krootwm.cc  kdesktopsettings.h $(srcdir)/xautolock.cc $(srcdir)/kdiconview.cc  kdesktopsettings.h $(srcdir)/desktop.cc  klaunchsettings.h $(srcdir)/lockeng.cc  kdesktopsettings.h $(srcdir)/bgmanager.cc  kdesktopsettings.h $(srcdir)/init.cc  kdesktopsettings.h $(srcdir)/pixmapserver.cc $(srcdir)/kcustommenu.cc KDesktopIface_skel.cc KScreensaverIface_skel.cc KBackgroundIface_skel.cc minicli_ui.cc  krootwm.moc minicli.moc startupid.moc lockeng.moc desktop.moc pixmapserver.moc kdiconview.moc kcustommenu.moc bgmanager.moc xautolock.moc
+libkdeinit_kdesktop_la.all_cc.cc: $(srcdir)/Makefile.in $(srcdir)/main.cc  kdesktopsettings.h $(srcdir)/krootwm.cc  kdesktopsettings.h $(srcdir)/xautolock.cc $(srcdir)/kdiconview.cc  kdesktopsettings.h $(srcdir)/desktop.cc  klaunchsettings.h $(srcdir)/lockeng.cc  kdesktopsettings.h $(srcdir)/bgmanager.cc  kdesktopsettings.h $(srcdir)/init.cc  kdesktopsettings.h $(srcdir)/pixmapserver.cc $(srcdir)/kcustommenu.cc KDesktopIface_skel.cc kdiconview_skel.cc KScreensaverIface_skel.cc KBackgroundIface_skel.cc minicli_ui.cc  krootwm.moc minicli.moc startupid.moc lockeng.moc desktop.moc pixmapserver.moc kdiconview.moc kcustommenu.moc bgmanager.moc xautolock.moc
 	@echo 'creating libkdeinit_kdesktop_la.all_cc.cc ...'; \
 	rm -f libkdeinit_kdesktop_la.all_cc.files libkdeinit_kdesktop_la.all_cc.final; \
 	echo "#define KDE_USE_FINAL 1" >> libkdeinit_kdesktop_la.all_cc.final; \
-	for file in main.cc krootwm.cc xautolock.cc kdiconview.cc desktop.cc lockeng.cc bgmanager.cc init.cc pixmapserver.cc kcustommenu.cc KDesktopIface_skel.cc KScreensaverIface_skel.cc KBackgroundIface_skel.cc minicli_ui.cc ; do \
+	for file in main.cc krootwm.cc xautolock.cc kdiconview.cc desktop.cc lockeng.cc bgmanager.cc init.cc pixmapserver.cc kcustommenu.cc KDesktopIface_skel.cc kdiconview_skel.cc KScreensaverIface_skel.cc KBackgroundIface_skel.cc minicli_ui.cc ; do \
 	  echo "#include \"$$file\"" >> libkdeinit_kdesktop_la.all_cc.files; \
 	  test ! -f $(srcdir)/$$file || egrep '^#pragma +implementation' $(srcdir)/$$file >> libkdeinit_kdesktop_la.all_cc.final; \
 	done; \
@@ -1616,7 +1630,7 @@
 	desktop.lo lockeng.lo bgmanager.lo init.lo minicli.lo \
 	pixmapserver.lo kcustommenu.lo startupid.lo xautolock_diy.lo \
 	xautolock_engine.lo kshadowengine.lo kshadowsettings.lo \
-	kdesktopshadowsettings.lo kfileividesktop.lo KDesktopIface_skel.lo KScreensaverIface_skel.lo KBackgroundIface_skel.lo minicli_ui.lo
+	kdesktopshadowsettings.lo kfileividesktop.lo KDesktopIface_skel.lo kdiconview_skel.lo KScreensaverIface_skel.lo KBackgroundIface_skel.lo minicli_ui.lo
 @KDE_USE_FINAL_FALSE@libkdeinit_kdesktop_la_OBJECTS = $(libkdeinit_kdesktop_la_nofinal_OBJECTS)
 @KDE_USE_FINAL_TRUE@libkdeinit_kdesktop_la_OBJECTS = $(libkdeinit_kdesktop_la_final_OBJECTS)
 
--- kdebase-3.5.4_orig/kdesktop/kdiconview.h	2005-10-10 17:04:11.000000000 +0200
+++ kdebase-3.5.4/kdesktop/kdiconview.h	2006-09-14 08:30:49.000000000 +0200
@@ -20,10 +20,12 @@
 #ifndef kdiconview_h
 #define kdiconview_h
 
+#include <qmap.h>
 #include <konq_iconviewwidget.h>
 #include <kaction.h>
 #include <kfileitem.h>
 #include <kdirnotify.h>
+#include <dcopobject.h>
 
 class KDirLister;
 class KonqSettings;
@@ -43,6 +45,7 @@
 class KDIconView : public KonqIconViewWidget, public KDirNotify
 {
     Q_OBJECT
+	K_DCOP
 
 public:
     KDIconView( QWidget *parent, const char* name = 0L );
@@ -104,6 +107,10 @@
 
     void startDirLister();
 
+k_dcop:
+	void onMediumAdded( const QString &name, bool allowNotification);
+	void onMediumRemoved( const QString &name, bool allowNotification);
+
 protected slots:
     // slots connected to the icon view
     void slotReturnPressed( QIconViewItem *item );
@@ -135,6 +142,8 @@
 
     void slotNewMenuActivated();
 
+	void slotMediumStatResult( KIO::Job *job );
+
     // For communication with KDesktop
 signals:
     void colorDropEvent( QDropEvent *e );
@@ -151,6 +160,7 @@
     void slotPaste(); // for krootwm
     void slotClear();
 
+
 protected:
     void createActions();
     void setupSortKeys();
@@ -182,6 +192,9 @@
     static void saveIconPosition(KSimpleConfig *config, int x, int y);
     static void readIconPosition(KSimpleConfig *config, int &x, int &y);
 
+	
+	KURL resolveDevNode(const QString &devNodeName);
+
     /** Our action collection, parent of all our actions */
     KActionCollection m_actionCollection;
 
@@ -249,6 +262,11 @@
     // did we already get the correct desktopIconsArea (from kicker)
     // needed when we want to line up icons on a grid
     bool m_gotIconsArea;
+
+    bool m_mediaInit;
+
+	QMap<KIO::Job*,QString> mJobDevNodeMap;
+	QMap<QString,KFileItem *> mDevNodeFileItemMap;
 };
 
 #endif
--- kdebase-3.5.4_orig/kdesktop/kdiconview.cc	2006-01-19 18:02:00.000000000 +0100
+++ kdebase-3.5.4/kdesktop/kdiconview.cc	2006-09-15 22:40:03.000000000 +0200
@@ -58,6 +58,7 @@
 #include "kshadowengine.h"
 #include "kdesktopshadowsettings.h"
 #include "kfileividesktop.h"
+#include "medium.h"
 
 // for multihead
 extern int kdesktop_screen_number;
@@ -147,7 +148,8 @@
       m_eSortCriterion( NameCaseInsensitive ),
       m_bSortDirectoriesFirst( true ),
       m_itemsAlwaysFirst(),
-      m_gotIconsArea(false)
+      m_gotIconsArea(false),
+      m_mediaInit(false)
 {
     setResizeMode( Fixed );
     setIconArea( desktopRect() );  // the default is the whole desktop
@@ -199,6 +201,16 @@
     delete m_dotDirectory;
     delete m_dirLister;
     delete m_shadowEngine;
+
+    // Clean up our media KFileItem
+    QMap<QString,KFileItem *>::Iterator it;
+    it = mDevNodeFileItemMap.begin();
+    while(it != mDevNodeFileItemMap.end() )
+    {
+        delete it.data();
+        it = mDevNodeFileItemMap.begin();
+    }
+
 }
 
 void KDIconView::initDotDirectories()
@@ -268,7 +280,6 @@
 void KDIconView::initConfig( bool init )
 {
     //kdDebug() << "initConfig " << init << endl;
-
     if ( !init ) {
         KonqFMSettings::reparseConfiguration();
         KDesktopSettings::self()->readConfig();
@@ -378,36 +389,158 @@
 void KDIconView::configureMedia()
 {
     kdDebug(1204) << "***********KDIconView::configureMedia() " <<endl;
-    m_dirLister->setMimeExcludeFilter(m_excludedMedia);
-    m_dirLister->emitChanges();
     updateContents();
-    if (m_enableMedia)
+
+    // Connect up the DCOP signals.
+    if(!m_mediaInit)
     {
-    	for (KURL::List::Iterator it1=m_mergeDirs.begin();it1!=m_mergeDirs.end();++it1)
-	    {
-	    	if ((*it1).url()=="media:/") return;
-	    }
-    	m_mergeDirs.append(KURL("media:/"));
-    	m_dirLister->openURL(KURL("media:/"),true);
+        // Load in the current list of media
+
+        DCOPRef mediamanager("kded", "mediamanager");
+        DCOPReply reply = mediamanager.call( "fullList" );
+        if ( reply.isValid() )
+        {
+            Medium::List mediumList = Medium::createList(reply);
+            Medium::List::iterator it = mediumList.begin();
+            Medium::List::iterator end = mediumList.end();
+
+            Medium thisMedium(QString::null,QString::null);
+
+            for(; it!=end; ++it)
+            {
+                onMediumAdded( (*it).name(), false);
+            }
+        }
+
+        // Hook up the signals from the mediamanager.
+        connectDCOPSignal( "kded", "mediamanager", "mediumAdded(QString, bool)",
+            "onMediumAdded(QString, bool)", true );
+
+        connectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString, bool)",
+            "onMediumAdded(QString, bool)", true );
+
+        connectDCOPSignal( "kded", "mediamanager", "mediumRemoved(QString, bool)",
+            "onMediumRemoved(QString, bool)", true );
+
+        m_mediaInit = true;
+    }
+
+}
+
+void KDIconView::onMediumAdded( const QString &name, bool /* allowNotification */)
+{
+    // This method handles medium added and medium changed signals.
+
+    KURL realUrl = resolveDevNode(name);
+    if ( !realUrl.isValid() )
+    {
+        onMediumRemoved(name,false);
+        return;
+    }
+
+    KIO::SimpleJob *job = KIO::stat( realUrl, false );
+    job->setInteractive( false );
+
+    mJobDevNodeMap[job] = name;
+
+    connect( job, SIGNAL( result( KIO::Job * ) ),
+             this, SLOT( slotMediumStatResult( KIO::Job * ) ) );
+}
+
+KURL KDIconView::resolveDevNode(const QString &devNodeName)
+{
+    // We get the mount/media information from the KDE mediamanager, the
+    // same way as what the media:/ ioslave does.
+    DCOPRef mediamanager("kded", "mediamanager");
+    DCOPReply reply = mediamanager.call( "fullList" );
+    if ( !reply.isValid() )
+    {
+        return KURL();
+    }
+
+    Medium::List mediumList = Medium::createList(reply);
+    Medium::List::iterator it = mediumList.begin();
+    Medium::List::iterator end = mediumList.end();
+
+    Medium thisMedium(QString::null,QString::null);
+
+    for(; it!=end; ++it)
+    {
+        if( (*it).name()==devNodeName)
+        {
+            thisMedium = *it;
+            break;
+        }
+    }
+    if( it==end)
+    {
+        // Couldn't find the medium entry. Sorry.
+        return KURL();
+    }
+
+    KURL thisUrl;
+    if(thisMedium.mountPoint()!=QString::null)
+    {
+        thisUrl = KURL(thisMedium.mountPoint());
     }
     else
     {
-            for (KURL::List::Iterator it2=m_mergeDirs.begin();it2!=m_mergeDirs.end();++it2)
-	    {
-		if ((*it2).url()=="media:/")
-		{
-			  delete m_dirLister;
-			  m_dirLister=0;
-			  start();
-//			m_mergeDirs.remove(it2);
-//			m_dirLister->stop("media");
-			return;
-		}
+    thisUrl = KURL(thisMedium.baseURL());
+    }
+    return thisUrl;
+}
 
-	    }
-	    return;
+void KDIconView::slotMediumStatResult( KIO::Job *job )
+{
+    if ( job->error() != 0 ) return;
+
+    KIO::StatJob *stat_job = static_cast<KIO::StatJob *>( job );
+
+    KIO::UDSEntry entry = stat_job->statResult();
+    KURL url = stat_job->url();
+
+    QString devNodeName = mJobDevNodeMap[job];
+    mJobDevNodeMap.remove( job );
+
+    if ( mDevNodeFileItemMap.contains(devNodeName) )
+    {
+        // We already have this medium item. Just update it and send it on to the normal update code.
+        *(mDevNodeFileItemMap[devNodeName]) = KFileItem( entry, url ); 
+        KFileItemList itemList;
+        itemList.append( mDevNodeFileItemMap[devNodeName] );
+        slotRefreshItems(itemList);
+    }
+    else
+    {
+        // New medium
+        KFileItem *newEntry = new KFileItem( entry, url );
+        QString mimetype = newEntry->mimetype();
+
+        if( !m_excludedMedia.contains(mimetype) && !mimetype.endsWith("_unmounted"))
+        {
+            // Not banned. Show it.
+            KFileItemList itemList;
+            itemList.append(newEntry);
+            mDevNodeFileItemMap[devNodeName] = newEntry;		
+            slotNewItems(itemList);
+        }
+        else
+        {
+            // Forget this medium.
+            delete newEntry;
+        }
     }
+}
 
+void KDIconView::onMediumRemoved( const QString &name, bool /*allowNotification*/ )
+{
+    if ( mDevNodeFileItemMap.contains(name) )
+    {
+        KFileItem *item = mDevNodeFileItemMap[name];
+        slotDeleteItem(item);
+        mDevNodeFileItemMap.remove(name);
+        delete item;
+    }
 }
 
 void KDIconView::createActions()
@@ -875,6 +1008,11 @@
     QString desktopFile;
     if ( item->isDir() && item->isLocalFile() )
     {
+        if ( item->url().url()=="file:///" )	// The root volume.
+        {
+            fileIVI->setText( "/" );
+            return true;
+        } 
         KURL u( item->url() );
         u.addPath( ".directory" );
         // using KStandardDirs as this one checks for path being
@@ -952,12 +1090,15 @@
     if (!desktopPath.isEmpty() && url.isLocalFile() && !url.path().startsWith(desktopPath))
     {
       QString fileName = url.fileName();
-      if (QFile::exists(desktopPath + fileName))
+      if (!fileName.isNull() && QFile::exists(desktopPath + fileName))
+      {
          continue; // Don't duplicate entry
-
+      }
       QString mostLocal = locate("appdata", "Desktop/"+fileName);
       if (!mostLocal.isEmpty() && (mostLocal != url.path()))
-         continue; // Don't duplicate entry
+      {
+          continue; // Don't duplicate entry
+      }
     }
 
     // No delayed mimetype determination on the desktop
--- kdebase-3.5.4_orig/kcontrol/konq/desktopbehavior_impl.cpp	2006-01-19 18:00:48.000000000 +0100
+++ kdebase-3.5.4/kcontrol/konq/desktopbehavior_impl.cpp	2006-09-15 20:48:22.000000000 +0200
@@ -236,9 +236,9 @@
     QValueListIterator<KMimeType::Ptr> it2(mimetypes.begin());
     g_pConfig->setGroup( "Media" );
     enableMediaBox->setChecked(g_pConfig->readBoolEntry("enabled",false));
-    QString excludedMedia=g_pConfig->readEntry("exclude","media/hdd_mounted,media/hdd_unmounted,media/floppy_unmounted,media/cdrom_unmounted,media/floppy5_unmounted");
+    QString excludedMedia=g_pConfig->readEntry("exclude","media/hdd_mounted");
     for (; it2 != mimetypes.end(); ++it2) {
-       if ( ((*it2)->name().startsWith("media/")) )
+       if ( (*it2)->name().startsWith("media/") && !(*it2)->name().endsWith("_unmounted") )
 	{
     	    bool ok=excludedMedia.contains((*it2)->name())==0;
 		new DesktopBehaviorMediaItem (this, mediaListView, (*it2)->comment(), (*it2)->name(),ok);
