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

List:       kde-commits
Subject:    KDE/kdemultimedia/juk
From:       Giorgos Kylafas <gekylafas () gmail ! com>
Date:       2011-06-19 11:29:37
Message-ID: 20110619112937.DF286AC7CA () svn ! kde ! org
[Download RAW message or body]

SVN commit 1237516 by kylafas:

juk: fix crash when adding items to toolbars with RMB.

When adding an item to a toolbar using right-click, the KXMLGUIClient
object of the global action collection is accessed.
(see KMenuMenuHandler::slotAddToToolBar() )
The way the action collection was created meant the object was NULL,
which resulted in crashes.
So, create the action collection with KXMLGUIClient::actionCollection(),
which properly sets the object.

CCBUG: 258641

 M  +11 -2     actioncollection.cpp  
 M  +0 -5      juk.cpp  
 M  +0 -1      juk.h  


--- trunk/KDE/kdemultimedia/juk/actioncollection.cpp #1237515:1237516
@@ -14,6 +14,7 @@
  ***************************************************************************/
 
 #include "actioncollection.h"
+#include "juk.h"
 
 #include <kactioncollection.h>
 #include <kdebug.h>
@@ -22,8 +23,16 @@
 {
     KActionCollection *actions()
     {
-        static KActionCollection *a =
-            new KActionCollection(static_cast<QObject *>(0));
+        // Use KXMLGUIClient::actionCollection() (class JuK derives from
+        // KXMLGUIClient) to construct the KActionCollection.
+        // This makes sure that KActionCollection::parentGUIClient() is not
+        // NULL and prevents the application from crashing when adding an
+        // item to a toolbar using RMB (see bug #258641).
+        // XXX This should not just be:
+        //      return JuK::JuKInstance()->actionCollection();
+        // as actions() may be called while within JuK's dtor, in which case
+        // JuKInstance()->... would result to a crash.
+        static KActionCollection *a = JuK::JuKInstance()->actionCollection();
         // The widget of the action collection is set in Juk::setupActions().
         return a;
     }
--- trunk/KDE/kdemultimedia/juk/juk.cpp #1237515:1237516
@@ -135,11 +135,6 @@
 {
 }
 
-KActionCollection *JuK::actionCollection() const
-{
-    return ActionCollection::actions();
-}
-
 JuK* JuK::JuKInstance()
 {
     return m_instance;
--- trunk/KDE/kdemultimedia/juk/juk.h #1237515:1237516
@@ -38,7 +38,6 @@
 public:
     JuK(QWidget* parent = 0);
     virtual ~JuK();
-    virtual KActionCollection *actionCollection() const;
 
     static JuK* JuKInstance();
 
[prev in list] [next in list] [prev in thread] [next in thread] 

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