From 7945b229623f7d10bb55c4f318f0b0816e30332d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 1 Sep 2009 13:59:36 +0000 Subject: [PATCH] * Quick fix to send notifications on mount/unmount/initialize. * This closes #2081. +alphabranch git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32891 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/disk_device_manager/KPartition.cpp | 41 +++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/system/kernel/disk_device_manager/KPartition.cpp b/src/system/kernel/disk_device_manager/KPartition.cpp index 8e1dc6dfe3..f56115e037 100644 --- a/src/system/kernel/disk_device_manager/KPartition.cpp +++ b/src/system/kernel/disk_device_manager/KPartition.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -692,14 +693,28 @@ KPartition::GetPath(KPath* path) const void KPartition::SetVolumeID(dev_t volumeID) { - if (fPartitionData.volume != volumeID) { - fPartitionData.volume = volumeID; - FireVolumeIDChanged(volumeID); - if (VolumeID() >= 0) - AddFlags(B_PARTITION_MOUNTED); - else - ClearFlags(B_PARTITION_MOUNTED); - } + if (fPartitionData.volume == volumeID) + return; + + fPartitionData.volume = volumeID; + FireVolumeIDChanged(volumeID); + if (VolumeID() >= 0) + AddFlags(B_PARTITION_MOUNTED); + else + ClearFlags(B_PARTITION_MOUNTED); + + KDiskDeviceManager* manager = KDiskDeviceManager::Default(); + + char messageBuffer[512]; + KMessage message; + message.SetTo(messageBuffer, sizeof(messageBuffer), B_DEVICE_UPDATE); + message.AddInt32("event", volumeID >= 0 + ? B_DEVICE_PARTITION_MOUNTED : B_DEVICE_PARTITION_UNMOUNTED); + message.AddInt32("id", ID()); + if (volumeID >= 0) + message.AddInt32("volume", volumeID); + + manager->Notify(message, B_DEVICE_REQUEST_MOUNTING); } @@ -996,6 +1011,16 @@ KPartition::SetDiskSystem(KDiskSystem* diskSystem, float priority) } // notify listeners FireDiskSystemChanged(fDiskSystem); + + KDiskDeviceManager* manager = KDiskDeviceManager::Default(); + + char messageBuffer[512]; + KMessage message; + message.SetTo(messageBuffer, sizeof(messageBuffer), B_DEVICE_UPDATE); + message.AddInt32("event", B_DEVICE_PARTITION_INITIALIZED); + message.AddInt32("id", ID()); + + manager->Notify(message, B_DEVICE_REQUEST_PARTITION); }