File patch-r900427.diff of Package kdebase4
Subject: fix changing file associations causes systemsettings to crash
From: wstephenson@suse.de
Bug: kde#168934
Patch-upstream: 900427
--- apps/konqueror/settings/filetypes/kservicelistwidget.cpp (revision 900426)
+++ apps/konqueror/settings/filetypes/kservicelistwidget.cpp (revision 900427)
@@ -154,11 +154,6 @@ void KServiceListWidget::setMimeTypeData
servUpButton->setEnabled(false);
servDownButton->setEnabled(false);
- if ( servRemoveButton )
- servRemoveButton->setEnabled(false);
- if ( servEditButton )
- servEditButton->setEnabled(false);
-
servicesLB->clear();
servicesLB->setEnabled(false);
@@ -181,6 +176,11 @@ void KServiceListWidget::setMimeTypeData
servicesLB->setEnabled(true);
}
}
+
+ if (servRemoveButton)
+ servRemoveButton->setEnabled(servicesLB->currentRow() > -1);
+ if (servEditButton)
+ servEditButton->setEnabled(servicesLB->currentRow() > -1);
}
void KServiceListWidget::promoteService()
@@ -259,21 +259,26 @@ void KServiceListWidget::addService()
return;
}
- // if None is the only item, then there currently is no default
- if (servicesLB->count() >= 1 && servicesLB->item(0)->text() == i18n("None")) {
- delete servicesLB->takeItem(0);
+ // Did the list simply show "None"?
+ const bool hadDummyEntry = ( m_kind == SERVICELIST_APPLICATIONS )
+ ? m_mimeTypeData->appServices().isEmpty()
+ : m_mimeTypeData->embedServices().isEmpty();
+
+ if (hadDummyEntry) {
+ delete servicesLB->takeItem(0); // Remove the "None" item.
servicesLB->setEnabled(true);
- }
- else
- {
+ } else {
// check if it is a duplicate entry
- for (int index = 0; index < servicesLB->count(); index++)
+ for (int index = 0; index < servicesLB->count(); index++) {
if (static_cast<KServiceListItem*>( servicesLB->item(index) )->desktopPath
- == service->entryPath())
+ == service->entryPath()) {
+ // ##### shouldn't we make the existing entry the default one?
return;
+ }
+ }
}
- servicesLB->insertItem( 0 , new KServiceListItem(service, m_kind) );
+ servicesLB->insertItem(0, new KServiceListItem(service, m_kind));
servicesLB->setCurrentItem(0);
updatePreferredServices();
@@ -368,11 +373,8 @@ void KServiceListWidget::removeService()
}
}
- if ( servRemoveButton && servicesLB->currentRow() == -1 )
- servRemoveButton->setEnabled(false);
-
- if ( servEditButton && servicesLB->currentRow() == -1 )
- servEditButton->setEnabled(false);
+ // Update buttons and service list again (e.g. to re-add "None")
+ setMimeTypeData(m_mimeTypeData);
}
void KServiceListWidget::updatePreferredServices()
Index: apps/konqueror/settings/filetypes/kservicelistwidget.cpp
===================================================================