Branch: master

2c1d4ad3 2014-11-28 13:17:42 Timothy Pearson
Hide udev hidden devices via the hidden file mechanism
This resolves Bug 2211
M tdeioslave/media/libmediacommon/medium.cpp
M tdeioslave/media/libmediacommon/medium.h
M tdeioslave/media/mediaimpl.cpp
M tdeioslave/media/mediamanager/tdehardwarebackend.cpp
diff --git a/tdeioslave/media/libmediacommon/medium.cpp b/tdeioslave/media/libmediacommon/medium.cpp
index ca526ea..77e32ba 100644
--- a/tdeioslave/media/libmediacommon/medium.cpp
+++ b/tdeioslave/media/libmediacommon/medium.cpp
@@ -42,6 +42,7 @@
 	m_properties+= "false"; /* ENCRYPTED */
 	m_properties+= TQString::null; /* CLEAR_DEVICE_UDI */
 	m_properties+= "false"; /* HIDDEN */
+	m_properties+= "false"; /* SOFT_HIDDEN */
 
 	loadUserLabel();
 
@@ -67,6 +68,7 @@
 	m_properties+= TQString::null; /* ENCRYPTED */
 	m_properties+= TQString::null; /* CLEAR_DEVICE_UDI */
 	m_properties+= "false";        /* HIDDEN */
+	m_properties+= "false";        /* SOFT_HIDDEN */
 	
 	m_halmounted = false;
 }
@@ -94,6 +96,7 @@
 		m.m_properties[ENCRYPTED] = properties[ENCRYPTED];
 		m.m_properties[CLEAR_DEVICE_UDI] = properties[CLEAR_DEVICE_UDI];
 		m.m_properties[HIDDEN] = properties[HIDDEN];
+		m.m_properties[SOFT_HIDDEN] = properties[SOFT_HIDDEN];
 	}
 
 	return m;
@@ -145,6 +148,11 @@
 	m_properties[HIDDEN] = ( state ? "true" : "false" );
 }
 
+void Medium::setSoftHidden(bool state)
+{
+	m_properties[SOFT_HIDDEN] = ( state ? "true" : "false" );
+}
+
 void Medium::setUserLabel(const TQString &label)
 {
 	TDEConfig cfg("mediamanagerrc");
diff --git a/tdeioslave/media/libmediacommon/medium.h b/tdeioslave/media/libmediacommon/medium.h
index e45dccb..bf465fd 100644
--- a/tdeioslave/media/libmediacommon/medium.h
+++ b/tdeioslave/media/libmediacommon/medium.h
@@ -45,7 +45,8 @@
 	static const uint ENCRYPTED = 		13;
 	static const uint CLEAR_DEVICE_UDI = 	14;
 	static const uint HIDDEN = 		15;
-	static const uint PROPERTIES_COUNT = 	16;
+	static const uint SOFT_HIDDEN = 	16;
+	static const uint PROPERTIES_COUNT = 	17;
 	static const TQString SEPARATOR;
 
 	Medium(const TQString id, TQString uuid, const TQString name);
@@ -67,29 +68,31 @@
 	TQString baseURL() const { return m_properties[BASE_URL]; }
 	TQString mimeType() const { return m_properties[MIME_TYPE]; }
 	TQString iconName() const { return m_properties[ICON_NAME]; }
- 	bool isEncrypted() const { return m_properties[ENCRYPTED]=="true"; };
- 	TQString clearDeviceUdi() const { return m_properties[CLEAR_DEVICE_UDI]; };
- 	bool hidden() const { return m_properties[HIDDEN]=="true"; };
+	bool isEncrypted() const { return m_properties[ENCRYPTED]=="true"; };
+	TQString clearDeviceUdi() const { return m_properties[CLEAR_DEVICE_UDI]; };
+	bool hidden() const { return m_properties[HIDDEN]=="true"; };
+	bool softHidden() const { return m_properties[SOFT_HIDDEN]=="true"; };
 
 	bool needMounting() const;
- 	bool needDecryption() const;
+	bool needDecryption() const;
 	KURL prettyBaseURL() const;
 	TQString prettyLabel() const;
 
 	void setName(const TQString &name);
 	void setLabel(const TQString &label);
 	void setUserLabel(const TQString &label);
- 	void setEncrypted(bool state);
- 	void setHidden(bool state);
+	void setEncrypted(bool state);
+	void setHidden(bool state);
+	void setSoftHidden(bool state);
 
 	bool mountableState(bool mounted);
 	void mountableState(const TQString &deviceNode,
 	                    const TQString &mountPoint,
 	                    const TQString &fsType, bool mounted);
- 	void mountableState(const TQString &deviceNode,
- 	                    const TQString &clearDeviceUdi,
- 	                    const TQString &mountPoint,
- 	                    const TQString &fsType, bool mounted);
+	void mountableState(const TQString &deviceNode,
+				const TQString &clearDeviceUdi,
+				const TQString &mountPoint,
+				const TQString &fsType, bool mounted);
 	void unmountableState(const TQString &baseURL = TQString::null);
 
 	void setMimeType(const TQString &mimeType);
diff --git a/tdeioslave/media/mediaimpl.cpp b/tdeioslave/media/mediaimpl.cpp
index e00cedc..7b22a5d 100644
--- a/tdeioslave/media/mediaimpl.cpp
+++ b/tdeioslave/media/mediaimpl.cpp
@@ -424,6 +424,10 @@
 	addAtom(entry, TDEIO::UDS_MIME_TYPE, 0, medium.mimeType());
 	addAtom(entry, TDEIO::UDS_GUESSED_MIME_TYPE, 0, "inode/directory");
 
+	if (medium.softHidden()) {
+		addAtom(entry, TDEIO::UDS_HIDDEN , true);
+	}
+
 	if (!medium.iconName().isEmpty())
 	{
 		addAtom(entry, TDEIO::UDS_ICON_NAME, 0, medium.iconName());
diff --git a/tdeioslave/media/mediamanager/tdehardwarebackend.cpp b/tdeioslave/media/mediamanager/tdehardwarebackend.cpp
index 56eab25..a7cbb22 100644
--- a/tdeioslave/media/mediamanager/tdehardwarebackend.cpp
+++ b/tdeioslave/media/mediamanager/tdehardwarebackend.cpp
@@ -161,7 +161,7 @@
 			//
 		}
 		/* We also don't display devices that underlie other devices;
-		/* e.g. the raw partition of a device mapper volume
+		*  e.g. the raw partition of a device mapper volume
 		*/
 		else if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::UsedByDevice)) {
 			//
@@ -181,6 +181,14 @@
 				}
 			}
 
+			// Hide udev hidden devices by default but allow the user to override if desired via Show Hidden Files
+			if (sdevice->checkDiskStatus(TDEDiskDeviceStatus::Hidden)) {
+				medium->setSoftHidden(true);
+			}
+			else {
+				medium->setSoftHidden(false);
+			}
+
 			// Insert medium into list
 			m_mediaList.addMedium(medium, allowNotification);