--- kdebase/ksmserver/shutdowndlg.h.rhel4	2012-09-08 05:43:47.950945974 -0400
+++ kdebase/ksmserver/shutdowndlg.h	2012-09-08 05:45:55.807337959 -0400
@@ -32,6 +32,9 @@
 
 #include <config.h>
 
+// RHEL 4 dirty hack to remove HAL support in ksmshutdown
+#undef COMPILE_HALBACKEND
+
 #ifndef NO_QT3_DBUS_SUPPORT
 /* We acknowledge the the dbus API is unstable */
 #define DBUS_API_SUBJECT_TO_CHANGE
--- kdebase/kioslave/media/mediamanager/halbackend.cpp.hal04	2012-09-08 14:15:10.324373357 -0400
+++ kdebase/kioslave/media/mediamanager/halbackend.cpp	2012-09-08 14:26:12.422302958 -0400
@@ -41,12 +41,10 @@
 #include <kprocess.h>
 
 #define MOUNT_SUFFIX    (                                                                       \
-    (medium->isMounted() ? TQString("_mounted") : TQString("_unmounted")) +   \
-    (medium->isEncrypted() ? (halClearVolume ? "_decrypted" : "_encrypted") : "" )          \
+    (medium->isMounted() ? TQString("_mounted") : TQString("_unmounted"))   \
     )
 #define MOUNT_ICON_SUFFIX   (                                                              \
-    (medium->isMounted() ? TQString("_mount") : TQString("_unmount")) +   \
-    (medium->isEncrypted() ? (halClearVolume ? "_decrypt" : "_encrypt") : "" )      \
+    (medium->isMounted() ? TQString("_mount") : TQString("_unmount"))   \
     )
 
 /* Static instance of this class, for static HAL callbacks */
@@ -57,10 +55,10 @@
 {
     char*   _ppt_string;
     TQString _ppt_QString;
-    _ppt_string = libhal_device_get_property_string(ctx, udi, key, NULL);
+    _ppt_string = hal_device_get_property_string(ctx, udi, key);
     if ( _ppt_string )
         _ppt_QString = _ppt_string;
-    libhal_free_string(_ppt_string);
+    hal_free_string(_ppt_string);
     return _ppt_QString;
 }
 
@@ -92,7 +90,7 @@
 
         /* Remove all the registered media first */
         int numDevices;
-        char** halDeviceList = libhal_get_all_devices( m_halContext, &numDevices, NULL );
+        char** halDeviceList = hal_get_all_devices( m_halContext, &numDevices );
 
         if ( halDeviceList )
         {
@@ -102,70 +100,39 @@
             }
         }
 
-        libhal_free_string_array( halDeviceList );
+        hal_free_string_array( halDeviceList );
 
-        DBusError error;
-        dbus_error_init(&error);
-        libhal_ctx_shutdown(m_halContext, &error);
-        libhal_ctx_free(m_halContext);
+        hal_shutdown(m_halContext);
     }
 
     if (m_halStoragePolicy)
-        libhal_storage_policy_free(m_halStoragePolicy);
+        hal_storage_policy_free(m_halStoragePolicy);
 }
 
 /* Connect to the HAL */
 bool HALBackend::InitHal()
 {
     kdDebug(1219) << "Context new" << endl;
-    m_halContext = libhal_ctx_new();
+
+    /* libhal initialization */
+    m_halFunctions.main_loop_integration	= HALBackend::hal_main_loop_integration;
+    m_halFunctions.device_added		= HALBackend::hal_device_added;
+    m_halFunctions.device_removed		= HALBackend::hal_device_removed;
+    m_halFunctions.device_new_capability	= NULL;
+    m_halFunctions.device_lost_capability	= NULL;
+    m_halFunctions.device_property_modified	= HALBackend::hal_device_property_modified;
+    m_halFunctions.device_condition		= HALBackend::hal_device_condition;
+
+    m_halContext = hal_initialize(&m_halFunctions, false);
     if (!m_halContext)
     {
         kdDebug(1219) << "Failed to initialize HAL!" << endl;
         return false;
     }
 
-    // Main loop integration
-    kdDebug(1219) << "Main loop integration" << endl;
-    DBusError error;
-    dbus_error_init(&error);
-    dbus_connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error);
-
-    if (!dbus_connection || dbus_error_is_set(&error)) {
-        dbus_error_free(&error);
-        libhal_ctx_free(m_halContext);
-        m_halContext = NULL;
-        return false;
-    }
-
-    dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
-
-    MainLoopIntegration(dbus_connection);
-    libhal_ctx_set_dbus_connection(m_halContext, dbus_connection);
-
-    // HAL callback functions
-    kdDebug(1219) << "Callback functions" << endl;
-    libhal_ctx_set_device_added(m_halContext, HALBackend::hal_device_added);
-    libhal_ctx_set_device_removed(m_halContext, HALBackend::hal_device_removed);
-    libhal_ctx_set_device_new_capability (m_halContext, NULL);
-    libhal_ctx_set_device_lost_capability (m_halContext, NULL);
-    libhal_ctx_set_device_property_modified (m_halContext, HALBackend::hal_device_property_modified);
-    libhal_ctx_set_device_condition(m_halContext, HALBackend::hal_device_condition);
-
-    kdDebug(1219) << "Context Init" << endl;
-    if (!libhal_ctx_init(m_halContext, &error))
-    {
-        if (dbus_error_is_set(&error))
-            dbus_error_free(&error);
-        libhal_ctx_free(m_halContext);
-        m_halContext = NULL;
-        kdDebug(1219) << "Failed to init HAL context!" << endl;
-        return false;
-    }
-
     /** @todo customize watch policy */
     kdDebug(1219) << "Watch properties" << endl;
-    if (!libhal_device_property_watch_all(m_halContext, &error))
+    if (hal_device_property_watch_all(m_halContext))
     {
         kdDebug(1219) << "Failed to watch HAL properties!" << endl;
         return false;
@@ -173,7 +140,7 @@
 
     /* libhal-storage initialization */
     kdDebug(1219) << "Storage Policy" << endl;
-    m_halStoragePolicy = libhal_storage_policy_new();
+    m_halStoragePolicy = hal_storage_policy_new();
     /** @todo define libhal-storage icon policy */
 
     /* List devices at startup */
@@ -186,16 +153,19 @@
     kdDebug(1219) << "ListDevices" << endl;
 
     int numDevices;
-    char** halDeviceList = libhal_get_all_devices(m_halContext, &numDevices, NULL);
+    char** halDeviceList = hal_get_all_devices(m_halContext, &numDevices);
 
     if (!halDeviceList)
         return false;
 
     kdDebug(1219) << "HALBackend::ListDevices : " << numDevices << " devices found" << endl;
-    for (int i = 0; i < numDevices; i++)
+    for (int i = 0; i < numDevices; i++) {
+		kdDebug(1219) << "HALBackend::ListDevices : adding device " << i << endl;
         AddDevice(halDeviceList[i], false);
+		kdDebug(1219) << "HALBackend::ListDevices : end adding device " << i << endl;
+    }
 
-    libhal_free_string_array( halDeviceList );
+    hal_free_string_array( halDeviceList );
 
     return true;
 }
@@ -206,63 +176,54 @@
 {
     /* We don't deal with devices that do not expose their capabilities.
        If we don't check this, we will get a lot of warning messages from libhal */
-    if (!libhal_device_property_exists(m_halContext, udi, "info.capabilities", NULL))
+    if (!hal_device_property_exists(m_halContext, udi, "info.capabilities")) {
+        kdDebug(1219) << "HALBackend::AddDevice : Device does not expose capability. Skipping." << endl;   
         return;
+    }
 
     /* If the device is already listed, do not process.
        This should not happen, but who knows... */
     /** @todo : refresh properties instead ? */
-    if (m_mediaList.findById(udi))
+    if (m_mediaList.findById(udi)) {
+        kdDebug(1219) << "HALBackend::AddDevice : Device is already listed. Skipping." << endl;   
         return;
+    }
 
-    if (libhal_device_get_property_bool(m_halContext, "/org/freedesktop/Hal/devices/computer", "storage.disable_volume_handling", NULL))
+    if (hal_device_get_property_bool(m_halContext, "/org/freedesktop/Hal/devices/computer", "storage.disable_volume_handling"))
         allowNotification=false;
 
     /* Add volume block devices */
-    if (libhal_device_query_capability(m_halContext, udi, "volume", NULL))
+    if (hal_device_query_capability(m_halContext, udi, "volume"))
     {
+		kdDebug(1219) << "HALBackend::AddDevice : Device is a volume." << endl;   
         /* We only list volumes that...
-         *  - are encrypted with LUKS or
          *  - have a filesystem or
          *  - have an audio track
          */
-        if ( ( libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") != "crypto" ||
-               libhal_device_get_property_QString(m_halContext, udi, "volume.fstype") != "crypto_LUKS"
-             ) &&
-             libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") != "filesystem" &&
-             !libhal_device_get_property_bool(m_halContext, udi, "volume.disc.has_audio", NULL) &&
-             !libhal_device_get_property_bool(m_halContext, udi, "volume.disc.is_blank", NULL) )
+        if ( (libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") != "filesystem") &&
+             (!hal_device_get_property_bool(m_halContext, udi, "volume.disc.has_audio")) &&
+             (!hal_device_get_property_bool(m_halContext, udi, "volume.disc.is_blank")) ) {
+            kdDebug(1219) << "HALBackend::AddDevice : no filesystem, no audio track on device. Skipping." << endl;   
             return;
+        }
 
         /* Query drive udi */
         TQString driveUdi = libhal_device_get_property_QString(m_halContext, udi, "block.storage_device");
-        if ( driveUdi.isNull() ) // no storage - no fun
+        if ( driveUdi.isNull() ) { // no storage - no fun
+            kdDebug(1219) << "HALBackend::AddDevice : UDI is null. Skipping." << endl;   
             return;
+        }
 
         // if the device is locked do not act upon it
-        if (libhal_device_get_property_bool(m_halContext, driveUdi.ascii(), "info.locked", NULL))
+        if (hal_device_get_property_bool(m_halContext, driveUdi.ascii(), "info.locked"))
             allowNotification=false;
 
         // if the device is locked do not act upon it
-        if (libhal_device_get_property_bool(m_halContext, driveUdi.ascii(), "storage.partition_table_changed", NULL))
+        if (hal_device_get_property_bool(m_halContext, driveUdi.ascii(), "storage.partition_table_changed"))
             allowNotification=false;
 
         /** @todo check exclusion list **/
 
-        /* Special handling for clear crypto volumes */
-        LibHalVolume* halVolume = libhal_volume_from_udi(m_halContext, udi);
-        if (!halVolume)
-            return;
-        const char* backingVolumeUdi = libhal_volume_crypto_get_backing_volume_udi(halVolume);
-        if ( backingVolumeUdi != NULL )
-        {
-            /* The crypto drive was unlocked and may now be mounted... */
-            kdDebug(1219) << "HALBackend::AddDevice : ClearVolume appeared for " << backingVolumeUdi << endl;
-            ResetProperties(backingVolumeUdi, allowNotification);
-            libhal_volume_free(halVolume);
-            return;
-        }
-        libhal_volume_free(halVolume);
 
         /* Create medium */
         Medium* medium = new Medium(udi, "");
@@ -272,18 +233,20 @@
         {
             // if it's not mountable by user and not by HAL, don't show it at all
             if ( ( libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") == "filesystem" &&
-                   !libhal_device_get_property_bool(m_halContext, udi, "volume.is_mounted", NULL ) ) &&
-                 ( libhal_device_get_property_bool(m_halContext, udi, "volume.ignore", NULL ) ) )
+                   !hal_device_get_property_bool(m_halContext, udi, "volume.is_mounted") ) &&
+                 ( hal_device_get_property_bool(m_halContext, udi, "volume.ignore") ) )
             {
+                kdDebug(1219) << "HALBackend::AddDevice : Device is not mountable. Skipping." << endl;   
                 delete medium;
                 return;
             }
         }
         
-	// instert medium into list
-	m_mediaList.addMedium(medium, allowNotification);
+	    // insert medium into list
+        kdDebug(1219) << "HALBackend::AddDevice : Adding medium into list." << endl;   
+	    m_mediaList.addMedium(medium, allowNotification);
 
-	// finally check for automount
+	    // finally check for automount
         TQMap<TQString,TQString> options = MediaManagerUtils::splitOptions(mountoptions(udi));
         kdDebug() << "automount " << options["automount"] << endl;
         if (options["automount"] == "true" && allowNotification ) {
@@ -294,14 +257,18 @@
 
         return;
     }
+    else
+    {
+		kdDebug(1219) << "HALBackend::AddDevice : Device is not a volume." << endl;   
+    }
 
     /* Floppy & zip drives */
-    if (libhal_device_query_capability(m_halContext, udi, "storage", NULL))
+    if (hal_device_query_capability(m_halContext, udi, "storage"))
         if ((libhal_device_get_property_QString(m_halContext, udi, "storage.drive_type") == "floppy") ||
             (libhal_device_get_property_QString(m_halContext, udi, "storage.drive_type") == "zip") ||
             (libhal_device_get_property_QString(m_halContext, udi, "storage.drive_type") == "jaz"))
         {
-            if (! libhal_device_get_property_bool(m_halContext, udi, "storage.removable.media_available", NULL) )
+            if (! hal_device_get_property_bool(m_halContext, udi, "storage.removable.media_available") )
                 allowNotification = false;
             /* Create medium */
             Medium* medium = new Medium(udi, "");
@@ -314,11 +281,9 @@
         }
 
     /* Camera handled by gphoto2*/
-    if (libhal_device_query_capability(m_halContext, udi, "camera", NULL) &&
-        ((libhal_device_get_property_QString(m_halContext, udi, "camera.access_method")=="ptp") ||
-
-         (libhal_device_property_exists(m_halContext, udi, "camera.libgphoto2.support", NULL) &&
-          libhal_device_get_property_bool(m_halContext, udi, "camera.libgphoto2.support", NULL)))
+    if (hal_device_query_capability(m_halContext, udi, "camera") &&
+         hal_device_property_exists(m_halContext, udi, "camera.libgphoto2.support") &&
+         hal_device_get_property_bool(m_halContext, udi, "camera.libgphoto3.support")
         )
     {
         /* Create medium */
@@ -327,6 +292,7 @@
         m_mediaList.addMedium(medium, allowNotification);
         return;
     }
+    kdDebug(1219) << "HALBackend::AddDevice : Device was intentionally not added. Skipping." << endl;   
 }
 
 void HALBackend::RemoveDevice(const char *udi)
@@ -348,7 +314,7 @@
         return;
     bool allowNotification = false;
     if (strcmp(key, "storage.removable.media_available") == 0)
-        allowNotification = libhal_device_get_property_bool(m_halContext, udi, key, NULL);
+        allowNotification = hal_device_get_property_bool(m_halContext, udi, key);
     ResetProperties(mediumUdi, allowNotification);
 }
 
@@ -421,19 +387,13 @@
         return medium->id().ascii();
 
     /* Hard part : this is a volume whose drive is registered */
-    if (libhal_device_property_exists(m_halContext, udi, "info.capabilities", NULL))
-        if (libhal_device_query_capability(m_halContext, udi, "volume", NULL))
+    if (hal_device_property_exists(m_halContext, udi, "info.capabilities"))
+        if (hal_device_query_capability(m_halContext, udi, "volume"))
         {
             /* check if this belongs to an encrypted volume */
-            LibHalVolume* halVolume = libhal_volume_from_udi(m_halContext, udi);
+            HalVolume* halVolume = hal_volume_from_udi(m_halContext, udi);
             if (!halVolume) return NULL;
-            const char* backingUdi = libhal_volume_crypto_get_backing_volume_udi(halVolume);
-            if (backingUdi != NULL) {
-                const char* result = findMediumUdiFromUdi(backingUdi);
-                libhal_volume_free(halVolume);
-                return result;
-            }
-            libhal_volume_free(halVolume);
+            hal_volume_free(halVolume);
 
             /* this is a volume whose drive is registered */
             TQString driveUdi = libhal_device_get_property_QString(m_halContext, udi, "block.storage_device");
@@ -462,11 +422,11 @@
 
     Medium* m = new Medium(mediumUdi, "");
 
-    if (libhal_device_query_capability(m_halContext, mediumUdi, "volume", NULL))
+    if (hal_device_query_capability(m_halContext, mediumUdi, "volume"))
         setVolumeProperties(m);
-    if (libhal_device_query_capability(m_halContext, mediumUdi, "storage", NULL))
+    if (hal_device_query_capability(m_halContext, mediumUdi, "storage"))
         setFloppyProperties(m);
-    if (libhal_device_query_capability(m_halContext, mediumUdi, "camera", NULL))
+    if (hal_device_query_capability(m_halContext, mediumUdi, "camera"))
         setCameraProperties(m);
 
     m_mediaList.changeMediumState(*m, allowNotification);
@@ -480,84 +440,50 @@
 
     const char* udi = medium->id().ascii();
     /* Check if the device still exists */
-    if (!libhal_device_exists(m_halContext, udi, NULL))
+    if (!hal_device_exists(m_halContext, udi))
         return;
 
     /* Get device information from libhal-storage */
-    LibHalVolume* halVolume = libhal_volume_from_udi(m_halContext, udi);
+    HalVolume* halVolume = hal_volume_from_udi(m_halContext, udi);
     if (!halVolume)
         return;
-    TQString driveUdi = libhal_volume_get_storage_device_udi(halVolume);
-    LibHalDrive*  halDrive  = 0;
+    TQString driveUdi = hal_volume_get_storage_device_udi(halVolume);
+    HalDrive*  halDrive  = 0;
     if ( !driveUdi.isNull() )
-        halDrive = libhal_drive_from_udi(m_halContext, driveUdi.ascii());
+        halDrive = hal_drive_from_udi(m_halContext, driveUdi.ascii());
     if (!halDrive) {
         // at times HAL sends an UnmountForced event before the device is removed
-        libhal_volume_free(halVolume);
+        hal_volume_free(halVolume);
         return;
     }
 
     medium->setName(
-        generateName(libhal_volume_get_device_file(halVolume)) );
-
-    LibHalVolume* halClearVolume = NULL;
-    if ( libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") == "crypto" )
-    {
-        kdDebug(1219) << "HALBackend::setVolumeProperties : crypto volume" << endl;
+        generateName(hal_volume_get_device_file(halVolume)) );
 
-        medium->setEncrypted(true);
-        char* clearUdi = libhal_volume_crypto_get_clear_volume_udi(m_halContext, halVolume);
-	TQString clearUdiString;
-        if (clearUdi != NULL) {
-            kdDebug(1219) << "HALBackend::setVolumeProperties : crypto clear volume avail - " << clearUdi << endl;
-            halClearVolume = libhal_volume_from_udi(m_halContext, clearUdi);
-            // ignore if halClearVolume is NULL -> just not decrypted in this case
-	    clearUdiString = clearUdi;
-	    libhal_free_string(clearUdi);
-        }
-
-        if (halClearVolume)
-            medium->mountableState(
-                libhal_volume_get_device_file(halVolume),		/* Device node */
-                clearUdiString,
-                libhal_volume_get_mount_point(halClearVolume),		/* Mount point */
-                libhal_volume_get_fstype(halClearVolume),		/* Filesystem type */
-                libhal_volume_is_mounted(halClearVolume) );		/* Mounted ? */
-        else
-            medium->mountableState(
-                libhal_volume_get_device_file(halVolume),		/* Device node */
-                TQString::null,
-                TQString::null,		/* Mount point */
-                TQString::null,		/* Filesystem type */
-                false );		/* Mounted ? */
-    }
-    else
-    {
-        kdDebug(1219) << "HALBackend::setVolumeProperties : normal volume" << endl;
-        medium->mountableState(
-            libhal_volume_get_device_file(halVolume),		/* Device node */
-            libhal_volume_get_mount_point(halVolume),		/* Mount point */
-            libhal_volume_get_fstype(halVolume),		/* Filesystem type */
-            libhal_volume_is_mounted(halVolume) );		/* Mounted ? */
-    }
+    kdDebug(1219) << "HALBackend::setVolumeProperties : normal volume" << endl;
+    medium->mountableState(
+        hal_volume_get_device_file(halVolume),		/* Device node */
+        hal_volume_get_mount_point(halVolume),		/* Mount point */
+        hal_volume_get_fstype(halVolume),		/* Filesystem type */
+        hal_volume_is_mounted(halVolume) );		/* Mounted ? */
 
 
-    char* name = libhal_volume_policy_compute_display_name(halDrive, halVolume, m_halStoragePolicy);
+    char* name = hal_volume_policy_compute_display_name(halDrive, halVolume, m_halStoragePolicy);
     TQString volume_name = TQString::fromUtf8(name);
     TQString media_name = volume_name;
     medium->setLabel(media_name);
     free(name);
 
     TQString mimeType;
-    if (libhal_volume_is_disc(halVolume))
+    if (hal_volume_is_disc(halVolume))
     {
         mimeType = "media/cdrom" + MOUNT_SUFFIX;
 
-        LibHalVolumeDiscType discType = libhal_volume_get_disc_type(halVolume);
-        if ((discType == LIBHAL_VOLUME_DISC_TYPE_CDROM) ||
-            (discType == LIBHAL_VOLUME_DISC_TYPE_CDR) ||
-            (discType == LIBHAL_VOLUME_DISC_TYPE_CDRW))
-            if (libhal_volume_disc_is_blank(halVolume))
+        HalVolumeDiscType discType = hal_volume_get_disc_type(halVolume);
+        if ((discType == HAL_VOLUME_DISC_TYPE_CDROM) ||
+            (discType == HAL_VOLUME_DISC_TYPE_CDR) ||
+            (discType == HAL_VOLUME_DISC_TYPE_CDRW))
+            if (hal_volume_disc_is_blank(halVolume))
             {
                 mimeType = "media/blankcd";
                 medium->unmountableState("");
@@ -565,10 +491,10 @@
             else
                 mimeType = "media/cdwriter" + MOUNT_SUFFIX;
 
-        if ((discType == LIBHAL_VOLUME_DISC_TYPE_DVDROM) || (discType == LIBHAL_VOLUME_DISC_TYPE_DVDRAM) ||
-            (discType == LIBHAL_VOLUME_DISC_TYPE_DVDR) || (discType == LIBHAL_VOLUME_DISC_TYPE_DVDRW) ||
-            (discType == LIBHAL_VOLUME_DISC_TYPE_DVDPLUSR) || (discType == LIBHAL_VOLUME_DISC_TYPE_DVDPLUSRW) )
-            if (libhal_volume_disc_is_blank(halVolume))
+        if ((discType == HAL_VOLUME_DISC_TYPE_DVDROM) || (discType == HAL_VOLUME_DISC_TYPE_DVDRAM) ||
+            (discType == HAL_VOLUME_DISC_TYPE_DVDR) || (discType == HAL_VOLUME_DISC_TYPE_DVDRW) ||
+            (discType == HAL_VOLUME_DISC_TYPE_DVDPLUSR) || (discType == HAL_VOLUME_DISC_TYPE_DVDPLUSRW) )
+            if (hal_volume_disc_is_blank(halVolume))
             {
                 mimeType = "media/blankdvd";
                 medium->unmountableState("");
@@ -576,16 +502,16 @@
             else
                 mimeType = "media/dvd" + MOUNT_SUFFIX;
 
-        if (libhal_volume_disc_has_audio(halVolume) && !libhal_volume_disc_has_data(halVolume))
+        if (hal_volume_disc_has_audio(halVolume) && !hal_volume_disc_has_data(halVolume))
         {
             mimeType = "media/audiocd";
-            medium->unmountableState( "audiocd:/?device=" + TQString(libhal_volume_get_device_file(halVolume)) );
+            medium->unmountableState( "audiocd:/?device=" + TQString(hal_volume_get_device_file(halVolume)) );
         }
 
         medium->setIconName(TQString::null);
 
         /* check if the disc id a vcd or a video dvd */
-        DiscType type = LinuxCDPolling::identifyDiscType(libhal_volume_get_device_file(halVolume));
+        DiscType type = LinuxCDPolling::identifyDiscType(hal_volume_get_device_file(halVolume));
         switch (type)
         {
         case DiscType::VCD:
@@ -603,24 +529,24 @@
     {
         mimeType = "media/hdd" + MOUNT_SUFFIX;
         medium->setIconName(TQString::null); // reset icon
-        if (libhal_drive_is_hotpluggable(halDrive))
+        if (hal_drive_is_hotpluggable(halDrive))
         {
             mimeType = "media/removable" + MOUNT_SUFFIX;
             medium->needMounting();
-            switch (libhal_drive_get_type(halDrive)) {
-            case LIBHAL_DRIVE_TYPE_COMPACT_FLASH:
+            switch (hal_drive_get_type(halDrive)) {
+            case HAL_DRIVE_TYPE_COMPACT_FLASH:
                 medium->setIconName("compact_flash" + MOUNT_ICON_SUFFIX);
                 break;
-            case LIBHAL_DRIVE_TYPE_MEMORY_STICK:
+            case HAL_DRIVE_TYPE_MEMORY_STICK:
                 medium->setIconName("memory_stick" + MOUNT_ICON_SUFFIX);
                 break;
-            case LIBHAL_DRIVE_TYPE_SMART_MEDIA:
+            case HAL_DRIVE_TYPE_SMART_MEDIA:
                 medium->setIconName("smart_media" + MOUNT_ICON_SUFFIX);
                 break;
-            case LIBHAL_DRIVE_TYPE_SD_MMC:
+            case HAL_DRIVE_TYPE_SD_MMC:
                 medium->setIconName("sd_mmc" + MOUNT_ICON_SUFFIX);
                 break;
-            case LIBHAL_DRIVE_TYPE_PORTABLE_AUDIO_PLAYER:
+            case HAL_DRIVE_TYPE_PORTABLE_AUDIO_PLAYER:
             {
                 medium->setIconName("ipod" + MOUNT_ICON_SUFFIX);
 
@@ -628,25 +554,25 @@
 		         KProtocolInfo::isKnownProtocol( TQString("ipod") ) )
                 {
                     medium->unmountableState( "ipod:/" );
-                    medium->mountableState(  libhal_volume_is_mounted(halVolume) );
+                    medium->mountableState(  hal_volume_is_mounted(halVolume) );
                 }
                 break;
             }
-            case LIBHAL_DRIVE_TYPE_CAMERA:
+            case HAL_DRIVE_TYPE_CAMERA:
             {
                 mimeType = "media/camera" + MOUNT_SUFFIX;
-                const char *physdev = libhal_drive_get_physical_device_udi(halDrive);
+                const char *physdev = hal_drive_get_physical_device_udi(halDrive);
                 // get model from camera
-                if (physdev && libhal_device_query_capability(m_halContext, physdev, "camera", NULL))
+                if (physdev && hal_device_query_capability(m_halContext, physdev, "camera"))
                 {
-                    if (libhal_device_property_exists(m_halContext, physdev, "usb_device.product", NULL))
+                    if (hal_device_property_exists(m_halContext, physdev, "usb_device.product"))
                         medium->setLabel(libhal_device_get_property_QString(m_halContext, physdev, "usb_device.product"));
-                    else if (libhal_device_property_exists(m_halContext, physdev, "usb.product", NULL))
+                    else if (hal_device_property_exists(m_halContext, physdev, "usb.product"))
                         medium->setLabel(libhal_device_get_property_QString(m_halContext, physdev, "usb.product"));
                 }
                 break;
             }
-            case LIBHAL_DRIVE_TYPE_TAPE:
+            case HAL_DRIVE_TYPE_TAPE:
                 medium->setIconName(TQString::null); //FIXME need icon
                 break;
             default:
@@ -661,8 +587,8 @@
     }
     medium->setMimeType(mimeType);
 
-    libhal_drive_free(halDrive);
-    libhal_volume_free(halVolume);
+    hal_drive_free(halDrive);
+    hal_volume_free(halVolume);
 }
 
 bool HALBackend::setFstabProperties( Medium *medium )
@@ -713,10 +639,10 @@
 
     const char* udi = medium->id().ascii();
     /* Check if the device still exists */
-    if (!libhal_device_exists(m_halContext, udi, NULL))
+    if (!hal_device_exists(m_halContext, udi))
         return false;
 
-    LibHalDrive*  halDrive  = libhal_drive_from_udi(m_halContext, udi);
+    HalDrive*  halDrive  = hal_drive_from_udi(m_halContext, udi);
     if (!halDrive)
         return false;
 
@@ -724,21 +650,21 @@
 
     if (drive_type == "zip") {
         int numVolumes;
-        char** volumes = libhal_drive_find_all_volumes(m_halContext, halDrive, &numVolumes);
-        libhal_free_string_array(volumes);
+        char** volumes = hal_drive_find_all_volumes(m_halContext, halDrive, &numVolumes);
+        hal_free_string_array(volumes);
         kdDebug(1219) << " found " << numVolumes << " volumes" << endl;
         if (numVolumes)
         {
-            libhal_drive_free(halDrive);
+            hal_drive_free(halDrive);
             return false;
         }
     }
 
-    medium->setName( generateName(libhal_drive_get_device_file(halDrive)) );
+    medium->setName( generateName(hal_drive_get_device_file(halDrive)) );
     medium->setLabel(i18n("Unknown Drive"));
 
     // HAL hates floppies - so we have to do it twice ;(
-    medium->mountableState(libhal_drive_get_device_file(halDrive), TQString::null, TQString::null, false);
+    medium->mountableState(hal_drive_get_device_file(halDrive), TQString::null, TQString::null, false);
     setFloppyMountState(medium);
 
     if (drive_type == "floppy")
@@ -762,7 +688,7 @@
 
     medium->setIconName(TQString::null);
 
-    libhal_drive_free(halDrive);
+    hal_drive_free(halDrive);
 
     return true;
 }
@@ -796,7 +722,7 @@
 
     const char* udi = medium->id().ascii();
     /* Check if the device still exists */
-    if (!libhal_device_exists(m_halContext, udi, NULL))
+    if (!hal_device_exists(m_halContext, udi))
         return;
 
     /** @todo find name */
@@ -804,25 +730,25 @@
 
     TQString device = "camera:/";
 
-    char *cam = libhal_device_get_property_string(m_halContext, udi, "camera.libgphoto2.name", NULL);
+    char *cam = hal_device_get_property_string(m_halContext, udi, "camera.libgphoto2.name");
     DBusError error;
     dbus_error_init(&error);
     if (cam &&
-        libhal_device_property_exists(m_halContext, udi, "usb.linux.device_number", NULL) &&
-        libhal_device_property_exists(m_halContext, udi, "usb.bus_number", NULL))
+        hal_device_property_exists(m_halContext, udi, "usb.linux.device_number") &&
+        hal_device_property_exists(m_halContext, udi, "usb.bus_number"))
         device.sprintf("camera://%s@[usb:%03d,%03d]/", cam,
-                       libhal_device_get_property_int(m_halContext, udi, "usb.bus_number", &error),
-                       libhal_device_get_property_int(m_halContext, udi, "usb.linux.device_number", &error));
+                       hal_device_get_property_int(m_halContext, udi, "usb.bus_number"),
+                       hal_device_get_property_int(m_halContext, udi, "usb.linux.device_number"));
 
-    libhal_free_string(cam);
+    hal_free_string(cam);
 
     /** @todo find the rest of this URL */
     medium->unmountableState(device);
     medium->setMimeType("media/gphoto2camera");
     medium->setIconName(TQString::null);
-    if (libhal_device_property_exists(m_halContext, udi, "usb_device.product", NULL))
+    if (hal_device_property_exists(m_halContext, udi, "usb_device.product"))
         medium->setLabel(libhal_device_get_property_QString(m_halContext, udi, "usb_device.product"));
-    else if (libhal_device_property_exists(m_halContext, udi, "usb.product", NULL))
+    else if (hal_device_property_exists(m_halContext, udi, "usb.product"))
         medium->setLabel(libhal_device_get_property_QString(m_halContext, udi, "usb.product"));
     else
         medium->setLabel(i18n("Camera"));
@@ -837,6 +763,14 @@
  ** HAL CALL-BACKS                        **
  ******************************************/
 
+void HALBackend::hal_main_loop_integration(LibHalContext *ctx,
+                                         DBusConnection *dbus_connection)
+{
+    kdDebug(1219) << "HALBackend::hal_main_loop_integration" << endl;
+    Q_UNUSED(ctx);
+    s_HALBackend->MainLoopIntegration(dbus_connection);
+}
+
 void HALBackend::hal_device_added(LibHalContext *ctx, const char *udi)
 {
     kdDebug(1219) << "HALBackend::hal_device_added " << udi <<  endl;
@@ -863,7 +797,7 @@
 
 void HALBackend::hal_device_condition(LibHalContext *ctx, const char *udi,
                                       const char *condition_name,
-                                      const char* message
+                                      DBusMessage* message
     )
 {
     kdDebug(1219) << "HALBackend::hal_device_condition " << udi << " -- " << condition_name << endl;
@@ -875,24 +809,24 @@
 TQStringList HALBackend::getHALmountoptions(TQString udi)
 {
     const char*   _ppt_string;
-    LibHalVolume* volume;
-    LibHalDrive* drive;
+    HalVolume* volume;
+    HalDrive* drive;
 
     TQString _ppt_TQString;
 
-    volume = libhal_volume_from_udi( m_halContext, udi.latin1() );
+    volume = hal_volume_from_udi( m_halContext, udi.latin1() );
     if( volume )
-        drive = libhal_drive_from_udi( m_halContext, libhal_volume_get_storage_device_udi( volume ) );
+        drive = hal_drive_from_udi( m_halContext, hal_volume_get_storage_device_udi( volume ) );
     else
-        drive = libhal_drive_from_udi( m_halContext, udi.latin1() );
+        drive = hal_drive_from_udi( m_halContext, udi.latin1() );
 
     if( !drive )
            return TQString::null;
 
     if( volume )
-       _ppt_string = libhal_volume_policy_get_mount_options ( drive, volume, NULL );
+       _ppt_string = hal_volume_policy_get_mount_options ( drive, volume, NULL );
     else
-       _ppt_string = libhal_drive_policy_get_mount_options ( drive, NULL );
+       _ppt_string = hal_drive_policy_get_mount_options ( drive, NULL );
 
     _ppt_TQString = TQString(_ppt_string ? _ppt_string : "");
 
@@ -908,24 +842,6 @@
         return TQStringList(); // not handled by HAL - fstab entry
 
     TQString volume_udi = name;
-    if (medium->isEncrypted()) {
-        // see if we have a clear volume
-        LibHalVolume* halVolume = libhal_volume_from_udi(m_halContext, medium->id().latin1());
-        if (halVolume) {
-            char* clearUdi = libhal_volume_crypto_get_clear_volume_udi(m_halContext, halVolume);
-            if (clearUdi != NULL) {
-	        volume_udi = clearUdi;
-		libhal_free_string(clearUdi);
-	    } else {
-	        // if not decrypted yet then no mountoptions
-		return TQStringList();
-	    }
-            libhal_volume_free(halVolume);
-        } else {
-	    // strange...
-	    return TQStringList();
-	}
-    }
 
     KConfig config("mediamanagerrc");
     
@@ -939,17 +855,7 @@
     if (use_defaults)
 	config.setGroup("DefaultOptions");    
 
-    char ** array = libhal_device_get_property_strlist(m_halContext, volume_udi.latin1(), "volume.mount.valid_options", NULL);
     TQMap<TQString,bool> valids;
-
-    for (int index = 0; array && array[index]; ++index) {
-        TQString t = array[index];
-        if (t.endsWith("="))
-            t = t.left(t.length() - 1);
-        valids[t] = true;
-        kdDebug() << "valid " << t << endl;
-    }
-    libhal_free_string_array(array);
     TQStringList result;
     TQString tmp;
     
@@ -963,8 +869,8 @@
 
     bool removable = false;
     if ( !drive_udi.isNull() )
-        removable = libhal_device_get_property_bool(m_halContext, drive_udi.latin1(), "storage.removable", NULL)
-                     || libhal_device_get_property_bool(m_halContext, drive_udi.latin1(), "storage.hotpluggable", NULL);
+        removable = hal_device_get_property_bool(m_halContext, drive_udi.latin1(), "storage.removable")
+                     || hal_device_get_property_bool(m_halContext, drive_udi.latin1(), "storage.hotpluggable");
 
     bool value;
     if (use_defaults)
@@ -979,11 +885,11 @@
 	config.setGroup(current_group);
     }
 
-    if (libhal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.is_blank", NULL)
-        || libhal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.is_vcd", NULL)
-        || libhal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.is_svcd", NULL)
-        || libhal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.is_videodvd", NULL)
-        || libhal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.has_audio", NULL))
+    if (hal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.is_blank")
+        || hal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.is_vcd")
+        || hal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.is_svcd")
+        || hal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.is_videodvd")
+        || hal_device_get_property_bool(m_halContext, volume_udi.latin1(), "volume.disc.has_audio"))
         value = false;
 
     result << TQString("automount=%1").arg(value ? "true" : "false");
@@ -1540,29 +1446,6 @@
     }
     options[noptions] = NULL;
 
-    TQString qerror = i18n("Cannot mount encrypted drives!");
-
-    if (!medium->isEncrypted()) {
-        // normal volume
-    	qerror = mount_priv(medium->id().latin1(), mount_point.utf8(), options, noptions, dbus_connection);
-    } else {
-        // see if we have a clear volume
-        LibHalVolume* halVolume = libhal_volume_from_udi(m_halContext, medium->id().latin1());
-        if (halVolume) {
-            char* clearUdi = libhal_volume_crypto_get_clear_volume_udi(m_halContext, halVolume);
-            if (clearUdi != NULL) {
-                qerror = mount_priv(clearUdi, mount_point.utf8(), options, noptions, dbus_connection);
-                libhal_free_string(clearUdi);
-            }
-            libhal_volume_free(halVolume);
-        }
-    }
-
-    if (!qerror.isEmpty()) {
-        kdError() << "mounting " << medium->id() << " returned " << qerror << endl;
-        return qerror;
-    }
-
     medium->setHalMounted(true);
     ResetProperties(medium->id().latin1());
 
@@ -1584,11 +1467,11 @@
     if (!medium)
     {   // now we get fancy: if the udi is no volume, it _might_ be a device with only one
         // volume on it (think CDs) - so we're so nice to the caller to unmount that volume
-        LibHalDrive*  halDrive  = libhal_drive_from_udi(m_halContext, _udi.latin1());
+        HalDrive*  halDrive  = hal_drive_from_udi(m_halContext, _udi.latin1());
         if (halDrive)
         {
             int numVolumes;
-            char** volumes = libhal_drive_find_all_volumes(m_halContext, halDrive, &numVolumes);
+            char** volumes = hal_drive_find_all_volumes(m_halContext, halDrive, &numVolumes);
             if (numVolumes == 1)
                 medium = m_mediaList.findById( volumes[0] );
         }
@@ -1626,19 +1509,8 @@
     const char *options[2];
     TQString udi = TQString::null;
 
-    if (!medium->isEncrypted()) {
-        // normal volume
-        udi = medium->id();
-    } else {
-        // see if we have a clear volume
-        LibHalVolume* halVolume = libhal_volume_from_udi(m_halContext, medium->id().latin1());
-        if (halVolume) {
-            char *clearUdi = libhal_volume_crypto_get_clear_volume_udi(m_halContext, halVolume);
-	    udi = clearUdi;
-	    libhal_free_string(clearUdi);
-            libhal_volume_free(halVolume);
-        }
-    }
+    udi = medium->id();
+    
     if (udi.isNull()) {
         kdDebug() << "unmount failed: no udi" << endl;
         return i18n("Internal Error");
@@ -1748,111 +1620,4 @@
     return TQString();
 }
 
-TQString HALBackend::decrypt(const TQString &_udi, const TQString &password)
-{
-    const Medium* medium = m_mediaList.findById(_udi);
-    if (!medium)
-        return i18n("No such medium: %1").arg(_udi);
-
-    if (!medium->isEncrypted() || !medium->clearDeviceUdi().isNull())
-        return TQString();
-
-    const char *udi = medium->id().latin1();
-    DBusMessage *msg = NULL;
-    DBusMessage *reply = NULL;
-    DBusError error;
-
-    kdDebug() << "Setting up " << udi << " for crypto\n" <<endl;
-	
-    msg = dbus_message_new_method_call ("org.freedesktop.Hal", udi,
-                                        "org.freedesktop.Hal.Device.Volume.Crypto",
-                                        "Setup");
-    if (msg == NULL) {
-        kdDebug() << "decrypt failed for " << udi << ": could not create dbus message\n";
-        return i18n("Internal Error");
-    }
-
-    TQCString pwdUtf8 = password.utf8();
-    const char *pwd_utf8 = pwdUtf8;
-    if (!dbus_message_append_args (msg, DBUS_TYPE_STRING, &pwd_utf8, DBUS_TYPE_INVALID)) {
-        kdDebug() << "decrypt failed for " << udi << ": could not append args to dbus message\n";
-        dbus_message_unref (msg);
-        return i18n("Internal Error");
-    }
-
-    dbus_error_init (&error);
-    if (!(reply = dbus_connection_send_with_reply_and_block (dbus_connection, msg, -1, &error)) || 
-        dbus_error_is_set (&error))
-    {
-        TQString qerror = i18n("Internal Error");
-        kdDebug() << "decrypt failed for " << udi << ": " << error.name << " " << error.message << endl;
-        if (strcmp (error.name, "org.freedesktop.Hal.Device.Volume.Crypto.SetupPasswordError") == 0) {
-            qerror = i18n("Wrong password");
-        }
-        dbus_error_free (&error);
-        dbus_message_unref (msg);
-        while (dbus_connection_dispatch(dbus_connection) == DBUS_DISPATCH_DATA_REMAINS) ;
-        return qerror;
-    }
-
-    dbus_message_unref (msg);
-    dbus_message_unref (reply);
-
-    while (dbus_connection_dispatch(dbus_connection) == DBUS_DISPATCH_DATA_REMAINS) ;
-
-    return TQString();
-}
-
-TQString HALBackend::undecrypt(const TQString &_udi)
-{
-    const Medium* medium = m_mediaList.findById(_udi);
-    if (!medium)
-        return i18n("No such medium: %1").arg(_udi);
-
-    if (!medium->isEncrypted() || medium->clearDeviceUdi().isNull())
-        return TQString();
-
-    const char *udi = medium->id().latin1();
-    DBusMessage *msg = NULL;
-    DBusMessage *reply = NULL;
-    DBusError error;
-
-    kdDebug() << "Tear down " << udi << "\n" <<endl;
-	
-    msg = dbus_message_new_method_call ("org.freedesktop.Hal", udi,
-                                        "org.freedesktop.Hal.Device.Volume.Crypto",
-                                        "Teardown");
-    if (msg == NULL) {
-        kdDebug() << "teardown failed for " << udi << ": could not create dbus message\n";
-        return i18n("Internal Error");
-    }
-
-    if (!dbus_message_append_args (msg, DBUS_TYPE_INVALID)) {
-        kdDebug() << "teardown failed for " << udi << ": could not append args to dbus message\n";
-        dbus_message_unref (msg);
-        return i18n("Internal Error");
-    }
-
-    dbus_error_init (&error);
-    if (!(reply = dbus_connection_send_with_reply_and_block (dbus_connection, msg, -1, &error)) || 
-        dbus_error_is_set (&error))
-    {
-        TQString qerror = i18n("Internal Error");
-        kdDebug() << "teardown failed for " << udi << ": " << error.name << " " << error.message << endl;
-        dbus_error_free (&error);
-        dbus_message_unref (msg);
-        while (dbus_connection_dispatch(dbus_connection) == DBUS_DISPATCH_DATA_REMAINS) ;
-        return qerror;
-    }
-
-    dbus_message_unref (msg);
-    dbus_message_unref (reply);
-
-    ResetProperties(udi);
-
-    while (dbus_connection_dispatch(dbus_connection) == DBUS_DISPATCH_DATA_REMAINS) ;
-
-    return TQString();
-}
-
 #include "halbackend.moc"
--- kdebase/kioslave/media/mediamanager/halbackend.h.hal04	2012-09-08 14:15:10.324373357 -0400
+++ kdebase/kioslave/media/mediamanager/halbackend.h	2012-09-08 14:27:34.564678553 -0400
@@ -85,8 +85,6 @@
 	TQString mount(const TQString &id);
 	TQString mount(const Medium *medium);
 	TQString unmount(const TQString &id);
-	TQString decrypt(const TQString &id, const TQString &password);
-	TQString undecrypt(const TQString &id);
 
 private:
 	/**
@@ -152,6 +150,13 @@
 
 /* Hal call-backs -- from gvm*/
 public:
+	/** Invoked by libhal for integration with our mainloop.
+	*
+	*  @param  ctx                 LibHal context
+	*  @param  dbus_connection     D-BUS connection to integrate
+	*/
+	static void hal_main_loop_integration(LibHalContext *ctx, DBusConnection *dbus_connection);
+
 	/** Invoked when a device is added to the Global Device List.
 	*
 	*  @param  ctx                 LibHal context
@@ -184,7 +189,7 @@
 	*/
 	static void hal_device_condition(LibHalContext *ctx, const char *udi,
 				const char *condition_name,
-				const char* message
+				DBusMessage* message
 				);
 
 	TQStringList getHALmountoptions(TQString udi);
@@ -196,9 +201,14 @@
 	LibHalContext*		m_halContext;
 
 	/**
+	* Structure defining the hal callback function for devices events
+	*/
+	LibHalFunctions 	m_halFunctions;
+
+	/**
 	* libhal-storage HAL policy, e.g. for icon names
 	*/
-	LibHalStoragePolicy*	m_halStoragePolicy;
+	HalStoragePolicy*	m_halStoragePolicy;
 
 	/**
 	* The DBus-Qt bindings connection for mainloop integration