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

List:       kde-core-devel
Subject:    PATCH: kdelibs/kdeui/ktoolbarbutton.cpp
From:       Martin Pley <kde-core-devel () pley ! org>
Date:       2003-11-08 18:18:41
[Download RAW message or body]

Patch below fixes a crash when using KToolBarButton with parent != KToolBar

If it's okay as it is, I'll commit.

Ciao,
Martin


["ktoolbarbutton-2003-11-08.diff" (text/x-diff)]

Index: ktoolbarbutton.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdeui/ktoolbarbutton.cpp,v
retrieving revision 1.75
diff -u -r1.75 ktoolbarbutton.cpp
--- ktoolbarbutton.cpp	28 Aug 2003 08:37:22 -0000	1.75
+++ ktoolbarbutton.cpp	8 Nov 2003 15:36:17 -0000
@@ -64,8 +64,9 @@
 
     m_iconName    = QString::null;
     m_iconText    = KToolBar::IconOnly;
-    m_iconSize    = 0;
+    m_iconSize    = IconSize( KIcon::Toolbar );
 
+    m_parent   = 0;
     m_instance = KGlobal::instance();
   }
   ~KToolBarButtonPrivate()
@@ -111,16 +112,18 @@
   d = new KToolBarButtonPrivate;
 
   d->m_id     = _id;
-  d->m_parent = (KToolBar*)_parent;
   QToolButton::setTextLabel(_txt);
   d->m_instance = _instance;
 
+  if (_parent && _parent->inherits("KToolBar") ) {
+    d->m_parent = dynamic_cast<KToolBar*>(_parent);
+    connect(d->m_parent, SIGNAL( modechange() ),
+            this,         SLOT( modeChange() ));
+  }
+
   setFocusPolicy( NoFocus );
 
   // connect all of our slots and start trapping events
-  connect(d->m_parent, SIGNAL( modechange() ),
-          this,         SLOT( modeChange() ));
-
   connect(this, SIGNAL( clicked() ),
           this, SLOT( slotClicked() ) );
   connect(this, SIGNAL( pressed() ),
@@ -143,15 +146,17 @@
   d = new KToolBarButtonPrivate;
 
   d->m_id       = _id;
-  d->m_parent   = (KToolBar *) _parent;
   QToolButton::setTextLabel(txt);
 
+  if (_parent && _parent->inherits("KToolBar") ) {
+    d->m_parent = dynamic_cast<KToolBar*>(_parent);
+    connect(d->m_parent, SIGNAL( modechange() ),
+            this,         SLOT( modeChange() ));
+  }
+
   setFocusPolicy( NoFocus );
 
   // connect all of our slots and start trapping events
-  connect(d->m_parent, SIGNAL( modechange()),
-          this,        SLOT(modeChange()));
-
   connect(this, SIGNAL( clicked() ),
           this, SLOT( slotClicked() ));
   connect(this, SIGNAL( pressed() ),
@@ -175,17 +180,19 @@
   QSize mysize;
 
   // grab a few global variables for use in this function and others
-  d->m_highlight = d->m_parent->highlight();
-  d->m_iconText  = d->m_parent->iconText();
+  if (d->m_parent) {
+    d->m_highlight = d->m_parent->highlight();
+    d->m_iconText  = d->m_parent->iconText();
 
-  d->m_iconSize = d->m_parent->iconSize();
+    d->m_iconSize = d->m_parent->iconSize();
+  }
   if (!d->m_iconName.isNull())
     setIcon(d->m_iconName);
 
   // we'll start with the size of our pixmap
   int pix_width  = d->m_iconSize;
   if ( d->m_iconSize == 0 ) {
-      if (!strcmp(d->m_parent->name(), "mainToolBar"))
+      if (d->m_parent && !strcmp(d->m_parent->name(), "mainToolBar"))
           pix_width = IconSize( KIcon::MainToolbar );
       else
           pix_width = IconSize( KIcon::Toolbar );
@@ -269,9 +276,10 @@
 void KToolBarButton::setIcon( const QString &icon )
 {
   d->m_iconName = icon;
-  d->m_iconSize = d->m_parent->iconSize();
+  if (d->m_parent)
+    d->m_iconSize = d->m_parent->iconSize();
   // QObject::name() return "const char *" instead of QString.
-  if (!strcmp(d->m_parent->name(), "mainToolBar"))
+  if (d->m_parent && !strcmp(d->m_parent->name(), "mainToolBar"))
     QToolButton::setIconSet( d->m_instance->iconLoader()->loadIconSet(
         d->m_iconName, KIcon::MainToolbar, d->m_iconSize ));
   else
@@ -315,7 +323,7 @@
 {
   QIconSet set = iconSet();
   QPixmap pm;
-  if (!strcmp(d->m_parent->name(), "mainToolBar"))
+  if (d->m_parent && !strcmp(d->m_parent->name(), "mainToolBar"))
     pm = d->m_instance->iconLoader()->loadIcon( icon, KIcon::MainToolbar,
         d->m_iconSize );
   else
@@ -329,7 +337,7 @@
 {
   QIconSet set = iconSet();
   QPixmap pm;
-  if (!strcmp(d->m_parent->name(), "mainToolBar"))
+  if (d->m_parent && !strcmp(d->m_parent->name(), "mainToolBar"))
     pm = d->m_instance->iconLoader()->loadIcon( icon, KIcon::MainToolbar,
         d->m_iconSize );
   else


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

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