Bug 95645 - Hard disk names show incorrect values in the file properties dialog
Summary: Hard disk names show incorrect values in the file properties dialog
Status: RESOLVED FIXED
Alias: None
Product: kio
Classification: Frameworks and Libraries
Component: kfile (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Carsten Pfeiffer
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-12-22 13:19 UTC by Thomas McGuire
Modified: 2006-09-23 19:08 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas McGuire 2004-12-22 13:19:58 UTC
Version:            (using KDE Devel)
Installed from:    Compiled sources
OS:                Linux

If the name of a hard disk is changed in the file properties dialog, e.g. from hda3 to Test, it correctly shows up as "Test" in media:/.
However, after going to the file properties dialog again, the value "hda3" is again shown there. It should of course be "Test".
And it would of course be even better if direct renaming would be allowed (right-click hard disk->rename).
Comment 1 David Faure 2006-09-23 19:07:59 UTC
SVN commit 587693 by dfaure:

More use of "mostLocalURL" to be able to edit icons and names with the properties dialog when using system:/ urls.
BUG: 118008, 95645


 M  +31 -27    kpropertiesdialog.cpp  


--- branches/KDE/3.5/kdelibs/kio/kfile/kpropertiesdialog.cpp #587692:587693
@@ -620,14 +620,16 @@
 bool KPropsDlgPlugin::isDesktopFile( KFileItem * _item )
 {
   // only local files
-  if ( !_item->isLocalFile() )
+  bool isLocal;
+  KURL url = _item->mostLocalURL( isLocal );
+  if ( !isLocal )
     return false;
 
   // only regular files
   if ( !S_ISREG( _item->mode() ) )
     return false;
 
-  QString t( _item->url().path() );
+  QString t( url.path() );
 
   // only if readable
   FILE *f = fopen( QFile::encodeName(t), "r" );
@@ -701,13 +703,16 @@
 
   // We set this data from the first item, and we'll
   // check that the other items match against it, resetting when not.
-  bool isLocal = properties->kurl().isLocalFile();
+  bool isLocal;
   KFileItem * item = properties->item();
+  KURL url = item->mostLocalURL( isLocal );
+  bool isReallyLocal = item->url().isLocalFile();
   bool bDesktopFile = isDesktopFile(item);
+  kdDebug() << "url=" << url << " bDesktopFile=" << bDesktopFile << " isLocal=" << isLocal << " isReallyLocal=" << isReallyLocal << endl;
   mode_t mode = item->mode();
   bool hasDirs = item->isDir() && !item->isLink();
-  bool hasRoot = properties->kurl().path() == QString::fromLatin1("/");
-  QString iconStr = KMimeType::iconForURL(properties->kurl(), mode);
+  bool hasRoot = url.path() == QString::fromLatin1("/");
+  QString iconStr = KMimeType::iconForURL(url, mode);
   QString directory = properties->kurl().directory();
   QString protocol = properties->kurl().protocol();
   QString mimeComment = item->mimeComment();
@@ -716,7 +721,7 @@
   KIO::filesize_t totalSize = item->size(hasTotalSize);
   QString magicMimeComment;
   if ( isLocal ) {
-      KMimeType::Ptr magicMimeType = KMimeType::findByFileContent( properties->kurl().path() );
+      KMimeType::Ptr magicMimeType = KMimeType::findByFileContent( url.path() );
       if ( magicMimeType->name() != KMimeType::defaultMimeType() )
           magicMimeComment = magicMimeType->comment();
   }
@@ -751,7 +756,7 @@
       if ( properties->kurl().protocol().find("device", 0, false)==0)
             isDevice = true;
       // Extract the full name, but without file: for local files
-      if ( isLocal )
+      if ( isReallyLocal )
         path = properties->kurl().path();
       else
         path = properties->kurl().prettyURL();
@@ -769,10 +774,7 @@
     // Extract the file name only
     filename = properties->defaultName();
     if ( filename.isEmpty() ) { // no template
-        if ( isTrash || isDevice || hasRoot ) // the cases where the filename won't be renameable
-            filename = item->name(); // this gives support for UDS_NAME, e.g. for kio_trash
-        else
-            filename = properties->kurl().fileName();
+      filename = item->name(); // this gives support for UDS_NAME, e.g. for kio_trash or kio_system
     } else {
       m_bFromTemplate = true;
       setDirty(); // to enforce that the copy happens
@@ -783,7 +785,7 @@
     filename = nameFromFileName( filename );
 
     if ( d->bKDesktopMode && d->bDesktopFile ) {
-        KDesktopFile config( properties->kurl().path(), true /* readonly */ );
+        KDesktopFile config( url.path(), true /* readonly */ );
         if ( config.hasKey( "Name" ) ) {
             filename = config.readName();
         }
@@ -839,7 +841,7 @@
     }
   }
 
-  if (!isLocal && !protocol.isEmpty())
+  if (!isReallyLocal && !protocol.isEmpty())
   {
     directory += ' ';
     directory += '(';
@@ -856,12 +858,10 @@
     iconButton->setStrictIconSize(false);
     // This works for everything except Device icons on unmounted devices
     // So we have to really open .desktop files
-    QString iconStr = KMimeType::findByURL( properties->kurl(),
-                                            mode )->icon( properties->kurl(),
-                                                          isLocal );
+    QString iconStr = KMimeType::findByURL( url, mode )->icon( url, isLocal );
     if ( bDesktopFile && isLocal )
     {
-      KDesktopFile config( properties->kurl().path(), true );
+      KDesktopFile config( url.path(), true );
       config.setDesktopGroup();
       iconStr = config.readEntry( "Icon" );
       if ( config.hasDeviceType() )
@@ -987,7 +987,7 @@
     if(hasTotalSize) {
       m_sizeLabel->setText(KIO::convertSizeWithBytes(totalSize));
     }
-    
+
     m_sizeDetermineButton = 0L;
     m_sizeStopButton = 0L;
   }
@@ -1067,7 +1067,7 @@
     grid->addMultiCellWidget(sep, curRow, curRow, 0, 2);
     ++curRow;
 
-    QString mountPoint = KIO::findPathMountPoint( properties->item()->url().path() );
+    QString mountPoint = KIO::findPathMountPoint( url.path() );
 
     if (mountPoint != "/")
     {
@@ -1404,23 +1404,27 @@
 
 void KFilePropsPlugin::applyIconChanges()
 {
-  // handle icon changes - only local files for now
+  KIconButton *iconButton = ::qt_cast<KIconButton *>( iconArea );
+  if ( !iconButton )
+    return;
+  // handle icon changes - only local files (or pseudo-local) for now
   // TODO: Use KTempFile and KIO::file_copy with overwrite = true
-  if (iconArea->isA("KIconButton") && properties->kurl().isLocalFile()) {
-    KIconButton *iconButton = (KIconButton *) iconArea;
+  KURL url = properties->kurl();
+  url = KIO::NetAccess::mostLocalURL( url, properties );
+  if (url.isLocalFile()) {
     QString path;
 
     if (S_ISDIR(properties->item()->mode()))
     {
-      path = properties->kurl().path(1) + QString::fromLatin1(".directory");
+      path = url.path(1) + QString::fromLatin1(".directory");
       // don't call updateUrl because the other tabs (i.e. permissions)
       // apply to the directory, not the .directory file.
     }
     else
-      path = properties->kurl().path();
+      path = url.path();
 
     // Get the default image
-    QString str = KMimeType::findByURL( properties->kurl(),
+    QString str = KMimeType::findByURL( url,
                                         properties->item()->mode(),
                                         true )->KServiceType::icon();
     // Is it another one than the default ?
@@ -2297,7 +2301,7 @@
     break;
   case PermissionsOnlyDirs:
     enableAccessControls(d->canChangePermissions && !d->isIrregular && !d->hasExtendedACL);
-    // if this is a dir, and we can change permissions, don't dis-allow 
+    // if this is a dir, and we can change permissions, don't dis-allow
     // recursive, we can do that for ACL setting.
     if ( d->cbRecursive )
        d->cbRecursive->setEnabled( d->canChangePermissions && !d->isIrregular );
@@ -2468,7 +2472,7 @@
   const bool ACLChange = ( d->extendedACL !=  properties->item()->ACL() );
   const bool defaultACLChange = ( d->defaultACL != properties->item()->defaultACL() );
 
-  if ( owner.isEmpty() && group.isEmpty() && !recursive 
+  if ( owner.isEmpty() && group.isEmpty() && !recursive
       && !permissionChange && !ACLChange && !defaultACLChange )
     return;