SVN commit 930394 by dfaure: Allow users to change mimetype icons if they use shared-mime-info >= 0.40 BUG: 158895 M +1 -0 konqueror/settings/filetypes/CMakeLists.txt M +23 -22 konqueror/settings/filetypes/filetypedetails.cpp M +3 -6 konqueror/settings/filetypes/filetypedetails.h D konqueror/settings/filetypes/filetypes-config.h M +7 -8 konqueror/settings/filetypes/mimetypedata.cpp M +0 -1 konqueror/settings/filetypes/mimetypedata.h M +7 -10 konqueror/settings/filetypes/mimetypewriter.cpp A konqueror/settings/filetypes/sharedmimeinfoversion.cpp [License: GPL (v2/3+eV)] A konqueror/settings/filetypes/sharedmimeinfoversion.h [License: GPL (v2/3+eV)] M +6 -1 konqueror/settings/filetypes/tests/CMakeLists.txt M +1 -1 nsplugins/CMakeLists.txt M +1 -1 nsplugins/pluginscan.cpp --- trunk/KDE/kdebase/apps/konqueror/settings/filetypes/CMakeLists.txt #930393:930394 @@ -10,6 +10,7 @@ mimetypewriter.cpp newtypedlg.cpp kserviceselectdlg.cpp + sharedmimeinfoversion.cpp ) ########### next target ############### --- trunk/KDE/kdebase/apps/konqueror/settings/filetypes/filetypedetails.cpp #930393:930394 @@ -19,6 +19,7 @@ // Own #include "filetypedetails.h" +#include "sharedmimeinfoversion.h" // Qt #include @@ -65,19 +66,24 @@ hBox->setSpacing(KDialog::spacingHint()); firstLayout->addLayout(hBox); -#if ENABLE_CHANGING_ICON - iconButton = new KIconButton(firstWidget); - iconButton->setIconType(KIconLoader::Desktop, KIconLoader::MimeType); - connect(iconButton, SIGNAL(iconChanged(QString)), SLOT(updateIcon(QString))); - iconButton->setWhatsThis( i18n("This button displays the icon associated" - " with the selected file type. Click on it to choose a different icon.") ); -#else - iconButton = new QLabel(firstWidget); -#endif + if (SharedMimeInfoVersion::supportsIcon()) { + iconButton = new KIconButton(firstWidget); + iconButton->setIconType(KIconLoader::Desktop, KIconLoader::MimeType); + connect(iconButton, SIGNAL(iconChanged(QString)), SLOT(updateIcon(QString))); + iconButton->setWhatsThis( i18n("This button displays the icon associated" + " with the selected file type. Click on it to choose a different icon.") ); + iconButton->setFixedSize(70, 70); + iconLabel = 0; + hBox->addWidget(iconButton); + } else { + iconButton = 0; + iconLabel = new QLabel(firstWidget); + iconLabel->setWhatsThis( i18n("This is the icon associated with the selected file type. " + "Choosing a different icon requires shared-mime-info to be at least version 0.40.") ); + iconLabel->setFixedSize(70, 70); + hBox->addWidget(iconLabel); + } - iconButton->setFixedSize(70, 70); - hBox->addWidget(iconButton); - QGroupBox *gb = new QGroupBox(i18n("Filename Patterns"), firstWidget); hBox->addWidget(gb); @@ -120,7 +126,7 @@ vbox->addStretch(1); gb->setFixedHeight(gb->minimumSizeHint().height()); - + description = new KLineEdit(firstWidget); description->setClearButtonShown(true); connect(description, SIGNAL(textChanged(const QString &)), @@ -193,7 +199,6 @@ void FileTypeDetails::updateIcon(const QString &icon) { -#if ENABLE_CHANGING_ICON if (!m_mimeTypeData) return; @@ -203,9 +208,6 @@ m_item->setIcon(icon); emit changed(true); -#else - Q_UNUSED(icon) -#endif } void FileTypeDetails::updateDescription(const QString &desc) @@ -338,11 +340,10 @@ m_item = item; // can be 0 Q_ASSERT(mimeTypeData); m_mimeTypeLabel->setText(i18n("File type %1", mimeTypeData->name())); -#if ENABLE_CHANGING_ICON - iconButton->setIcon(mimeTypeData->icon()); -#else - iconButton->setPixmap(DesktopIcon(mimeTypeData->icon())); -#endif + if (iconButton) + iconButton->setIcon(mimeTypeData->icon()); + else + iconLabel->setPixmap(DesktopIcon(mimeTypeData->icon())); description->setText(mimeTypeData->comment()); m_rbGroupSettings->setText( i18n("Use settings for '%1' group", mimeTypeData->majorType() ) ); extensionLB->clear(); --- trunk/KDE/kdebase/apps/konqueror/settings/filetypes/filetypedetails.h #930393:930394 @@ -21,7 +21,6 @@ #define FILETYPEDETAILS_H #include -#include "filetypes-config.h" class KIconButton; class MimeTypeData; @@ -84,12 +83,10 @@ QTabWidget* m_tabWidget; - // First tab - General -#if ENABLE_CHANGING_ICON + // First tab - General KIconButton* iconButton; -#else - QLabel *iconButton; -#endif + QLabel* iconLabel; // if icon cannot be changed + QListWidget *extensionLB; KPushButton *addExtButton, *removeExtButton; KLineEdit *description; --- trunk/KDE/kdebase/apps/konqueror/settings/filetypes/mimetypedata.cpp #930393:930394 @@ -19,6 +19,7 @@ */ #include "mimetypedata.h" +#include "sharedmimeinfoversion.h" #include #include "mimetypewriter.h" #include @@ -82,9 +83,7 @@ void MimeTypeData::initFromKMimeType() { m_comment = m_mimetype->comment(); -#if ENABLE_CHANGING_ICON m_userSpecifiedIcon = m_mimetype->userSpecifiedIconName(); -#endif setPatterns(m_mimetype->patterns()); m_autoEmbed = readAutoEmbed(); } @@ -211,12 +210,10 @@ kDebug() << "Mimetype Comment Dirty: old=" << m_mimetype->comment() << "m_comment=" << m_comment; return true; } -#if ENABLE_CHANGING_ICON if (m_mimetype->userSpecifiedIconName() != m_userSpecifiedIcon) { kDebug() << "Mimetype Icon Dirty: old=" << m_mimetype->iconName() << "m_userSpecifiedIcon=" << m_userSpecifiedIcon; return true; } -#endif QStringList storedPatterns = m_mimetype->patterns(); storedPatterns.sort(); // see ctor @@ -286,11 +283,13 @@ if (isMimeTypeDirty()) { MimeTypeWriter mimeTypeWriter(name()); mimeTypeWriter.setComment(m_comment); -#if ENABLE_CHANGING_ICON - if (!m_userSpecifiedIcon.isEmpty()) { - mimeTypeWriter.setIconName(m_userSpecifiedIcon); + if (SharedMimeInfoVersion::supportsIcon()) { + // Very important: don't write if shared-mime-info doesn't support it, + // it would abort on it! + if (!m_userSpecifiedIcon.isEmpty()) { + mimeTypeWriter.setIconName(m_userSpecifiedIcon); + } } -#endif mimeTypeWriter.setPatterns(m_patterns); if (!mimeTypeWriter.write()) return false; --- trunk/KDE/kdebase/apps/konqueror/settings/filetypes/mimetypedata.h #930393:930394 @@ -22,7 +22,6 @@ #define MIMETYPEDATA_H #include -#include "filetypes-config.h" /** * This is a non-gui (data) class, that represents a mimetype. --- trunk/KDE/kdebase/apps/konqueror/settings/filetypes/mimetypewriter.cpp #930393:930394 @@ -19,7 +19,7 @@ */ #include "mimetypewriter.h" -#include "filetypes-config.h" +#include "sharedmimeinfoversion.h" #include #include @@ -100,15 +100,12 @@ } if (!d->m_iconName.isEmpty()) { - // User-specified icon name; requires update-mime-database >= 0.24 at least - // Otherwise update-mime-database fails with an error about an unknown attribute! -#if ENABLE_CHANGING_ICON - // TODO re-enable once update-mime-database is fixed - // and either we require a version with the fix or we have a check on the version number - writer.writeStartElement(nsUri, "icon"); - writer.writeAttribute("name", d->m_iconName); - writer.writeEndElement(); // icon -#endif + // User-specified icon name + if (SharedMimeInfoVersion::supportsIcon()) { + writer.writeStartElement(nsUri, "icon"); + writer.writeAttribute("name", d->m_iconName); + writer.writeEndElement(); // icon + } } foreach(const QString& pattern, d->m_patterns) { --- trunk/KDE/kdebase/apps/konqueror/settings/filetypes/tests/CMakeLists.txt #930393:930394 @@ -3,6 +3,11 @@ ########### filetypestest ############### -kde4_add_unit_test(filetypestest TEST filetypestest.cpp ../mimetypedata.cpp ../mimetypewriter.cpp) +kde4_add_unit_test(filetypestest TEST + filetypestest.cpp + ../mimetypedata.cpp + ../mimetypewriter.cpp + ../sharedmimeinfoversion.cpp +) target_link_libraries(filetypestest ${KDE4_KDECORE_LIBS} ${KDE4_KIO_LIBRARY} ${KDE4_KDEUI_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY}) --- trunk/KDE/kdebase/apps/nsplugins/CMakeLists.txt #930393:930394 @@ -52,7 +52,7 @@ ########### nspluginscan ############### - set(nspluginscan_SRCS pluginscan.cpp plugin_paths.cpp ../konqueror/settings/filetypes/mimetypewriter.cpp) + set(nspluginscan_SRCS pluginscan.cpp plugin_paths.cpp ../konqueror/settings/filetypes/mimetypewriter.cpp ../konqueror/settings/filetypes/sharedmimeinfoversion.cpp) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../konqueror/settings/filetypes/) --- trunk/KDE/kdebase/apps/nsplugins/pluginscan.cpp #930393:930394 @@ -575,7 +575,7 @@ } // read in the plugins mime information - kDebug(1433) << "Scanning directories"; + kDebug(1433) << "Scanning directories" << searchPaths; int count = searchPaths.count(); int i = 0; for ( QStringList::const_iterator it = searchPaths.constBegin();