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

List:       kde-commits
Subject:    [dragon] src/app: fix crash with invalid toolbar pointers
From:       Harald Sitter <sitter () kde ! org>
Date:       2012-06-01 0:41:13
Message-ID: 20120601004113.6CD5DA60A9 () git ! kde ! org
[Download RAW message or body]

Git commit a845e22beb0cbf683fcb74026efa25b53b1ac461 by Harald Sitter.
Committed on 01/06/2012 at 02:41.
Pushed by sitter into branch 'master'.

fix crash with invalid toolbar pointers

turns out kxmlgui likes to reload its bars on the fly, essentially
rendering our stored toolbar pointer invalid leading to obscure
fullscreen crashes.

instead always call through the mainwindow, that way we are on the save
side

BUG: 294637
FIXED-IN: 4.9.0

M  +7    -7    src/app/fullScreenToolBarHandler.cpp
M  +1    -1    src/app/fullScreenToolBarHandler.h

http://commits.kde.org/dragon/a845e22beb0cbf683fcb74026efa25b53b1ac461

diff --git a/src/app/fullScreenToolBarHandler.cpp b/src/app/fullScreenToolBarHandler.cpp
index 7ee9a9e..c165e28 100644
--- a/src/app/fullScreenToolBarHandler.cpp
+++ b/src/app/fullScreenToolBarHandler.cpp
@@ -34,8 +34,8 @@
 
 Dragon::FullScreenToolBarHandler::FullScreenToolBarHandler( KMainWindow *parent )
         : QObject( parent )
-        , m_toolbar( parent->toolBar() )
         , m_timer_id( 0 )
+        , m_parent(parent)
 {
     parent->installEventFilter( this );
 
@@ -53,15 +53,15 @@ Dragon::FullScreenToolBarHandler::eventFilter( QObject */*o*/, QEvent *e )
         }
 
         QMouseEvent const * const me = (QMouseEvent*)e;
-        
-        if (m_toolbar->geometry().contains(me->pos()) ||
+
+        if (m_parent->toolBar()->geometry().contains(me->pos()) ||
             static_cast<Dragon::MainWindow*>( Dragon::mainWindow() )->volumeContains(me->pos())) {
             // no discussion here, mouse is in toolbar or volume slider area
             kDebug() << "mouse in toolbar area, show toolbar";
-            m_toolbar->show();
+            m_parent->toolBar()->show();
             static_cast<Dragon::MainWindow*>( Dragon::mainWindow() )->showVolume( true );
         }
-        else if( m_toolbar->isHidden() ) {
+        else if( m_parent->toolBar()->isHidden() ) {
             kDebug() << "mouse moved while toolbar is hidden";
             if( m_home.isNull() )
             {
@@ -72,7 +72,7 @@ Dragon::FullScreenToolBarHandler::eventFilter( QObject */*o*/, QEvent *e )
             {
                 // then cursor has moved far enough to trigger show toolbar
                 kDebug() << "show toolbar";
-                m_toolbar->show();
+                m_parent->toolBar()->show();
                 static_cast<Dragon::MainWindow*>( Dragon::mainWindow() )->showVolume( true );
                 m_home = QPoint();
             }
@@ -108,7 +108,7 @@ Dragon::FullScreenToolBarHandler::timerEvent( QTimerEvent*e )
 
     kDebug() << "hide timer triggered";
     static_cast<Dragon::MainWindow*>( Dragon::mainWindow() )->showVolume( false );
-    m_toolbar->hide();
+    m_parent->toolBar()->hide();
 }
 
 #include "fullScreenToolBarHandler.moc"
diff --git a/src/app/fullScreenToolBarHandler.h b/src/app/fullScreenToolBarHandler.h
index 5a716e2..c51c8aa 100644
--- a/src/app/fullScreenToolBarHandler.h
+++ b/src/app/fullScreenToolBarHandler.h
@@ -39,9 +39,9 @@ namespace Dragon
             bool eventFilter( QObject *o, QEvent *e );
             void timerEvent( QTimerEvent* );
         private:
-            KToolBar *m_toolbar;
             int m_timer_id; // 0 when timer is not running
             QPoint m_home;
+            KMainWindow *m_parent;
     };
 }
 #endif
[prev in list] [next in list] [prev in thread] [next in thread] 

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