[PATCH] fix khotkey crashes
Andreas Pakulat
apaku at gmx.de
Tue Dec 4 15:14:19 GMT 2007
Hi,
Is this the right place for getting approval for khotkey patches? If not
I'd appreciate directions.
The attached patch fixes the crashes when trying to create a new action
or group or trying to store those settings.
May I commit this now or shall I wait until after the tagging was done
(i.e. tagging freeze is lifted)
Andreas
--
Do not sleep in a eucalyptus tree tonight.
-------------- next part --------------
Index: shared/settings.cpp
===================================================================
--- shared/settings.cpp (Revision 743820)
+++ shared/settings.cpp (Arbeitskopie)
@@ -153,18 +153,21 @@
int enabled_cnt = 0;
QString save_cfg_group = cfg_P.name();
int cnt = 0;
- for( Action_data_group::Iterator it = parent_P->first_child();
- it;
- ++it )
+ if( parent_P )
{
- ++cnt;
- if( enabled_P && (*it)->enabled( true ))
- ++enabled_cnt;
- KConfigGroup itConfig( cfg_P.config(), save_cfg_group + '_' + QString::number( cnt ));
- ( *it )->cfg_write( itConfig );
- Action_data_group* grp = dynamic_cast< Action_data_group* >( *it );
- if( grp != NULL )
- enabled_cnt += write_actions_recursively_v2( cfg_P, grp, enabled_P && (*it)->enabled( true ));
+ for( Action_data_group::ConstIterator it = parent_P->first_child();
+ it != parent_P->after_last_child();
+ ++it )
+ {
+ ++cnt;
+ if( enabled_P && (*it)->enabled( true ))
+ ++enabled_cnt;
+ KConfigGroup itConfig( cfg_P.config(), save_cfg_group + '_' + QString::number( cnt ));
+ ( *it )->cfg_write( itConfig );
+ Action_data_group* grp = dynamic_cast< Action_data_group* >( *it );
+ if( grp != NULL )
+ enabled_cnt += write_actions_recursively_v2( cfg_P, grp, enabled_P && (*it)->enabled( true ));
+ }
}
cfg_P.writeEntry( "DataCount", cnt );
return enabled_cnt;
@@ -202,8 +205,8 @@
KConfigGroup mainGroup( &cfg_P, "Main" );
int sections = mainGroup.readEntry( "Num_Sections", 0 );
Action_data_group* menuentries = NULL;
- for( Action_data_group::Iterator it( actions->first_child());
- *it;
+ for( Action_data_group::ConstIterator it = actions->first_child();
+ it != actions->after_last_child();
++it )
{
Action_data_group* tmp = dynamic_cast< Action_data_group* >( *it );
Index: shared/action_data.cpp
===================================================================
--- shared/action_data.cpp (Revision 743820)
+++ shared/action_data.cpp (Arbeitskopie)
@@ -72,8 +72,8 @@
{
if( cfg_P.readEntry( "AllowMerge", false ))
{
- for( Action_data_group::Iterator it = parent_P->first_child();
- it;
+ for( Action_data_group::ConstIterator it = parent_P->first_child();
+ it != parent_P->after_last_child();
++it )
{
if( Action_data_group* existing = dynamic_cast< Action_data_group* >( *it ))
@@ -151,8 +151,8 @@
void Action_data_group::update_triggers()
{
- for( Action_data_group::Iterator it = first_child();
- it;
+ for( Action_data_group::ConstIterator it = first_child();
+ it != after_last_child();
++it )
( *it )->update_triggers();
}
Index: shared/action_data.h
===================================================================
--- shared/action_data.h (Revision 743820)
+++ shared/action_data.h (Arbeitskopie)
@@ -13,7 +13,8 @@
#include <assert.h>
-#include <Qt3Support/Q3PtrList>
+#include <QtCore/QList>
+#include <QtCore/QListIterator>
#include <kdebug.h>
@@ -74,13 +75,15 @@
virtual ~Action_data_group();
virtual void update_triggers();
virtual void cfg_write( KConfigGroup& cfg_P ) const;
- typedef Q3PtrListIterator< Action_data_base > Iterator; // CHECKME neni const :(
- Iterator first_child() const;
+ typedef QList< Action_data_base* >::iterator Iterator; // CHECKME neni const :(
+ typedef QList< Action_data_base* >::const_iterator ConstIterator; // CHECKME neni const :(
+ ConstIterator first_child() const;
+ ConstIterator after_last_child() const;
bool is_system_group() const;
system_group_t system_group() const;
using Action_data_base::set_conditions; // make public
protected:
- Q3PtrList< Action_data_base > list;
+ QList< Action_data_base* > list;
system_group_t _system_group; // e.g. menuedit entries, can't be deleted or renamed
friend class Action_data_base; // CHECKME
void add_child( Action_data_base* child_P );
@@ -265,8 +268,11 @@
Action_data_group::~Action_data_group()
{
// kDebug( 1217 ) << "~Action_data_group() :" << list.count();
- while( list.first())
- delete list.first();
+ if( !list.isEmpty() )
+ {
+ while( list.first())
+ delete list.first();
+ }
}
inline
@@ -296,7 +302,7 @@
inline
void Action_data_group::remove_child( Action_data_base* child_P )
{
- list.removeRef( child_P ); // is not auto-delete
+ list.remove( child_P ); // is not auto-delete
}
// Action_data
Index: kcontrol/general_tab.cpp
===================================================================
--- kcontrol/general_tab.cpp (Revision 743820)
+++ kcontrol/general_tab.cpp (Arbeitskopie)
@@ -104,7 +104,7 @@
}
action_name_lineedit->setText( data_P->name());
disable_checkbox->setChecked( !data_P->enabled( true ));
- if( !data_P->parent()->enabled( false ))
+ if( data_P->parent() && !data_P->parent()->enabled( false ))
disable_checkbox->setText( i18n( "&Disable (group is disabled)" ));
else
disable_checkbox->setText( i18n( "&Disable" ));
Index: kcontrol/action_group_tab.cpp
===================================================================
--- kcontrol/action_group_tab.cpp (Revision 743820)
+++ kcontrol/action_group_tab.cpp (Arbeitskopie)
@@ -64,7 +64,8 @@
action_name_lineedit->setText( data_P->name());
action_name_lineedit->setReadOnly( data_P->is_system_group());
disable_checkbox->setChecked( !data_P->enabled( true ));
- if( !data_P->parent()->enabled( false ))
+
+ if( data_P->parent() && !data_P->parent()->enabled( false ))
disable_checkbox->setText( i18n( "&Disable (group is disabled)" ));
else
disable_checkbox->setText( i18n( "&Disable" ));
Index: kcontrol/actions_listview_widget.cpp
===================================================================
--- kcontrol/actions_listview_widget.cpp (Revision 743820)
+++ kcontrol/actions_listview_widget.cpp (Arbeitskopie)
@@ -140,8 +140,8 @@
Action_listview_item* item_parent_P )
{
Action_listview_item* prev = NULL;
- for( Action_data_group::Iterator it = parent_P->first_child();
- it;
+ for( Action_data_group::ConstIterator it = parent_P->first_child();
+ it != parent_P->after_last_child();
++it )
{
prev = create_item( item_parent_P, prev, ( *it ));
Index: kcontrol/menuedit.cpp
===================================================================
--- kcontrol/menuedit.cpp (Revision 743820)
+++ kcontrol/menuedit.cpp (Arbeitskopie)
@@ -55,8 +55,8 @@
{
if( !data_P->enabled( false ))
return NULL;
- for( Action_data_group::Iterator it = data_P->first_child();
- it;
+ for( Action_data_group::ConstIterator it = data_P->first_child();
+ it != data_P->after_last_child();
++it )
{
if( !(*it)->enabled( true ))
@@ -81,8 +81,8 @@
Action_data_group* khotkeys_get_menu_root( Action_data_group* data_P )
{
- for( Action_data_group::Iterator it = data_P->first_child();
- it;
+ for( Action_data_group::ConstIterator it = data_P->first_child();
+ it != data_P->after_last_child();
++it )
if( Action_data_group* group = dynamic_cast< Action_data_group* >( *it ))
{
@@ -111,8 +111,8 @@
{
if( !data_P->enabled( false ))
return;
- for( Action_data_group::Iterator it = data_P->first_child();
- it;
+ for( Action_data_group::ConstIterator it = data_P->first_child();
+ it != data_P->after_last_child();
++it )
{
if( !(*it)->enabled( true ))
@@ -147,8 +147,8 @@
{
if( !data_P->enabled( false ))
return KService::Ptr();
- for( Action_data_group::Iterator it = data_P->first_child();
- it;
+ for( Action_data_group::ConstIterator it = data_P->first_child();
+ it != data_P->after_last_child();
++it )
{
if( !(*it)->enabled( true ))
Index: kcontrol/tab_widget.cpp
===================================================================
--- kcontrol/tab_widget.cpp (Revision 743820)
+++ kcontrol/tab_widget.cpp (Arbeitskopie)
@@ -115,8 +115,8 @@
module->current_action_data()->parent(), NULL );
item->set_conditions( static_cast< Condition_list_tab* >( pages[ TAB_CONDITIONS ] )
->get_data( item ));
- for( Action_data_group::Iterator it = old->first_child();
- it;
+ for( Action_data_group::ConstIterator it = old->first_child();
+ it != old->after_last_child();
)
{
Action_data_base* tmp = ( *it );
More information about the kde-core-devel
mailing list