[PATCH] KToolBarMenuAction fix for single toolbar

Nadeem Hasan nhasan at nadmm.com
Wed May 29 04:21:14 BST 2002


Hi,
The following patch fixes a problem with toolbar show/hide menu generation
with KToolBarMenuAction when the KMainWindow has only one toolbar (e.g.
konsole).
The "Show..." item was always stuck at its initial state as the
KToggleAction::plug() was not called for the menu as can be seen below.
Thanks a lot to David Faure for giving me a hand initially.
OK to commit?
Cheers,
--
Nadeem Hasan
nhasan at nadmm.com
http://www.nadmm.com/
Index: kaction.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kaction.cpp,v
retrieving revision 1.268
diff -u -r1.268 kaction.cpp
--- kaction.cpp 2002/05/26 17:07:07     1.268
+++ kaction.cpp 2002/05/29 03:01:35
@@ -2732,8 +2732,7 @@
        public:
        KMainWindow *window;
        QMap<KToolBar*, KToggleToolBarAction*> toolbarActionMap;
-        KPopupMenu *popup;
-
+       KPopupMenu *popup;
 };
 KToolBarMenuAction::KToolBarMenuAction( KMainWindow* parent,
@@ -2741,7 +2740,7 @@
 {
        d=new KToolBarMenuActionPrivate;
        d->window=parent;
-        d->popup = new
 KPopupMenu(parent,"KToolBarMenuAction::KToolBarMenuAction"); +      
 d->popup = new KPopupMenu(parent,"KToolBarMenuAction::KToolBarMenuAction");
 }
 KToolBarMenuAction::~KToolBarMenuAction()
@@ -2762,14 +2761,13 @@
 void KToolBarMenuAction::addToolbar(KToolBar *bar)
 {
-       bool oldcount=d->toolbarActionMap.count();
+       uint oldcount=d->toolbarActionMap.count();
        KToggleToolBarAction *act;
        d->toolbarActionMap.insert(bar,act=new KToggleToolBarAction(
                 bar->name(), i18n("Show %1").arg(bar->label()),
                 0, 0));
        if (oldcount==0)
        {
-               setText(i18n("Show
 %1").arg(d->toolbarActionMap.begin().key()->label())); act->plug(d->popup);
                for (int i=0;i<containerCount();i++)
                {
@@ -2828,14 +2826,16 @@
   {
     QPopupMenu* menu = static_cast<QPopupMenu*>( widget );
     int id;
-      if (d->toolbarActionMap.count()>1)
-             id = menu->insertItem( text(), d->popup, -1, index );
+
+    if (d->toolbarActionMap.count()>1)
+      id = menu->insertItem( text(), d->popup, -1, index );
        else
        if (d->toolbarActionMap.count()==1)
        {
-               id=menu->insertItem(text(),-1,index);
-              
 menu->setItemChecked(id,d->toolbarActionMap.begin().data()->isChecked()); - 
             
 menu->connectItem(id,d->toolbarActionMap.begin().data(),SLOT(slotActivated()
)); +        KToggleToolBarAction *action =
 d->toolbarActionMap.begin().data(); +        action->unplug( d->popup );
+        int i = action->plug( menu );
+        id = action->itemId( i );
        }
        else
        {
Index: ktoolbar.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdeui/ktoolbar.cpp,v
retrieving revision 1.316
diff -u -r1.316 ktoolbar.cpp
--- ktoolbar.cpp        2002/05/28 03:00:01     1.316
+++ ktoolbar.cpp        2002/05/29 03:01:37
@@ -1840,7 +1840,7 @@
     return context;
   // construct our context popup menu
-  context = new KPopupMenu( 0, "context" );
+  context = new KPopupMenu( this, "context" );
   context->insertTitle(i18n("Toolbar Menu"));
   KPopupMenu *orient = new KPopupMenu( context, "orient" );

-------------------------------------------------------

-- 
Nadeem Hasan
nhasan at nadmm.com
http://www.nadmm.com/




More information about the kde-core-devel mailing list