[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.6/kdelibs/kfile
From:       Luboš Luňák <l.lunak () kde ! org>
Date:       2011-01-26 16:20:53
Message-ID: 20110126162053.6C203AC8BA () svn ! kde ! org
[Download RAW message or body]

SVN commit 1217310 by lunakl:

Backport r1216758.
Make KFileDialog automatically choose file type from typed extension
also when file types are specified manually and not as mimetypes.
(http://svn.reviewboard.kde.org/r/6325)



 M  +5 -0      kfilefiltercombo.cpp  
 M  +6 -0      kfilefiltercombo.h  
 M  +13 -1     kfilewidget.cpp  


--- branches/KDE/4.6/kdelibs/kfile/kfilefiltercombo.cpp #1217309:1217310
@@ -214,4 +214,9 @@
     return d->defaultFilter;
 }
 
+bool KFileFilterCombo::isMimeFilter() const
+{
+    return d->isMimeFilter;
+}
+
 #include "kfilefiltercombo.moc"
--- branches/KDE/4.6/kdelibs/kfile/kfilefiltercombo.h #1217309:1217310
@@ -94,6 +94,12 @@
      */
     QStringList filters() const;
 
+    /**
+     * Returns true if the filter has been set using setMimeFilter().
+     * @since 4.6.1
+     */
+    bool isMimeFilter() const;
+
 protected:
     virtual bool eventFilter( QObject*, QEvent* );
 
--- branches/KDE/4.6/kdelibs/kfile/kfilewidget.cpp #1217309:1217310
@@ -54,6 +54,7 @@
 #include <krecentdirs.h>
 #include <kdebug.h>
 #include <kio/kfileitemdelegate.h>
+#include <kde_file.h>
 
 #include <QtGui/QCheckBox>
 #include <QtGui/QDockWidget>
@@ -2294,18 +2295,29 @@
 //     kDebug(kfile_area);
 
     if ((operationMode == KFileWidget::Saving) && (ops->mode() & KFile::File) ) {
-        const QString urlStr = locationEditCurrentText();
+        QString urlStr = locationEditCurrentText();
         if (urlStr.isEmpty())
             return;
 
+        if( filterWidget->isMimeFilter()) {
         KMimeType::Ptr mime = KMimeType::findByPath(urlStr, 0, true);
         if (mime && mime->name() != KMimeType::defaultMimeType()) {
             if (filterWidget->currentFilter() != mime->name() &&
                 filterWidget->filters().indexOf(mime->name()) != -1)
                 filterWidget->setCurrentFilter(mime->name());
         }
+        } else {
+            QString filename = urlStr.mid( urlStr.lastIndexOf( KDIR_SEPARATOR ) + 1 ); // only filename
+            foreach( const QString& filter, filterWidget->filters()) {
+                QString f = filter.left( filter.indexOf( '|' )); // '*.foo|Foo type' -> '*.foo'
+                if( KMimeType::matchFileName( filename, f )) {
+                    filterWidget->setCurrentFilter( filter );
+                    break;
     }
 }
+        }
+    }
+}
 
 // applies only to a file that doesn't already exist
 void KFileWidgetPrivate::appendExtension (KUrl &url)
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic