Prevent deletion of find tool bar when place holder is deleted.

This happens for example when removing a split editor.
This commit is contained in:
con
2009-07-21 17:48:24 +02:00
parent 51f20d400c
commit eec53984fa
5 changed files with 31 additions and 18 deletions

View File

@@ -40,7 +40,7 @@ using namespace Core;
FindToolBarPlaceHolder *FindToolBarPlaceHolder::m_current = 0; FindToolBarPlaceHolder *FindToolBarPlaceHolder::m_current = 0;
FindToolBarPlaceHolder::FindToolBarPlaceHolder(QWidget *owner, QWidget *parent) FindToolBarPlaceHolder::FindToolBarPlaceHolder(QWidget *owner, QWidget *parent)
: QWidget(parent), m_widget(owner) : QWidget(parent), m_owner(owner), m_subWidget(0)
{ {
setLayout(new QVBoxLayout); setLayout(new QVBoxLayout);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
@@ -51,11 +51,28 @@ FindToolBarPlaceHolder::FindToolBarPlaceHolder(QWidget *owner, QWidget *parent)
FindToolBarPlaceHolder::~FindToolBarPlaceHolder() FindToolBarPlaceHolder::~FindToolBarPlaceHolder()
{ {
ExtensionSystem::PluginManager::instance()->removeObject(this); ExtensionSystem::PluginManager::instance()->removeObject(this);
if (m_subWidget) {
m_subWidget->setVisible(false);
m_subWidget->setParent(0);
}
if (m_current == this)
m_current = 0;
} }
QWidget *FindToolBarPlaceHolder::widget() const QWidget *FindToolBarPlaceHolder::owner() const
{ {
return m_widget; return m_owner;
}
void FindToolBarPlaceHolder::setWidget(QWidget *widget)
{
if (m_subWidget) {
m_subWidget->setVisible(false);
m_subWidget->setParent(0);
}
m_subWidget = widget;
if (m_subWidget)
layout()->addWidget(m_subWidget);
} }
FindToolBarPlaceHolder *FindToolBarPlaceHolder::getCurrent() FindToolBarPlaceHolder *FindToolBarPlaceHolder::getCurrent()

View File

@@ -31,6 +31,8 @@
#define FINDPLACEHOLDER_H #define FINDPLACEHOLDER_H
#include "core_global.h" #include "core_global.h"
#include <QtCore/QPointer>
#include <QtGui/QWidget> #include <QtGui/QWidget>
namespace Core { namespace Core {
@@ -43,13 +45,15 @@ class CORE_EXPORT FindToolBarPlaceHolder : public QWidget
public: public:
FindToolBarPlaceHolder(QWidget *owner, QWidget *parent = 0); FindToolBarPlaceHolder(QWidget *owner, QWidget *parent = 0);
~FindToolBarPlaceHolder(); ~FindToolBarPlaceHolder();
QWidget *widget() const; QWidget *owner() const;
void setWidget(QWidget *widget);
static FindToolBarPlaceHolder *getCurrent(); static FindToolBarPlaceHolder *getCurrent();
static void setCurrent(FindToolBarPlaceHolder *placeHolder); static void setCurrent(FindToolBarPlaceHolder *placeHolder);
private: private:
QWidget *m_widget; QWidget *m_owner;
QPointer<QWidget> m_subWidget;
static FindToolBarPlaceHolder *m_current; static FindToolBarPlaceHolder *m_current;
}; };

View File

@@ -107,6 +107,7 @@ void FindPlugin::extensionsInitialized()
void FindPlugin::shutdown() void FindPlugin::shutdown()
{ {
m_findToolBar->setVisible(false);
m_findToolBar->setParent(0); m_findToolBar->setParent(0);
m_currentDocumentFind->removeConnections(); m_currentDocumentFind->removeConnections();
writeSettings(); writeSettings();

View File

@@ -264,14 +264,6 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
return Core::Utils::StyledBar::eventFilter(obj, event); return Core::Utils::StyledBar::eventFilter(obj, event);
} }
void FindToolBar::removeFromParent()
{
setVisible(false);
setParent(0);
Core::FindToolBarPlaceHolder::setCurrent(0);
}
void FindToolBar::adaptToCandidate() void FindToolBar::adaptToCandidate()
{ {
updateFindAction(); updateFindAction();
@@ -534,7 +526,7 @@ Core::FindToolBarPlaceHolder *FindToolBar::findToolBarPlaceHolder() const
QWidget *candidate = QApplication::focusWidget(); QWidget *candidate = QApplication::focusWidget();
while (candidate) { while (candidate) {
foreach (Core::FindToolBarPlaceHolder *ph, placeholders) { foreach (Core::FindToolBarPlaceHolder *ph, placeholders) {
if (ph->widget() == candidate) if (ph->owner() == candidate)
return ph; return ph;
} }
candidate = candidate->parentWidget(); candidate = candidate->parentWidget();
@@ -551,11 +543,10 @@ void FindToolBar::openFind()
return; return;
Core::FindToolBarPlaceHolder *previousHolder = Core::FindToolBarPlaceHolder::getCurrent(); Core::FindToolBarPlaceHolder *previousHolder = Core::FindToolBarPlaceHolder::getCurrent();
if (previousHolder) if (previousHolder)
disconnect(previousHolder, SIGNAL(destroyed(QObject*)), this, SLOT(removeFromParent())); previousHolder->setWidget(0);
Core::FindToolBarPlaceHolder::setCurrent(holder); Core::FindToolBarPlaceHolder::setCurrent(holder);
connect(holder, SIGNAL(destroyed(QObject*)), this, SLOT(removeFromParent()));
m_currentDocumentFind->acceptCandidate(); m_currentDocumentFind->acceptCandidate();
holder->layout()->addWidget(this); holder->setWidget(this);
holder->setVisible(true); holder->setVisible(true);
setVisible(true); setVisible(true);
setFocus(); setFocus();

View File

@@ -84,7 +84,7 @@ private slots:
void setRegularExpressions(bool regexp); void setRegularExpressions(bool regexp);
void adaptToCandidate(); void adaptToCandidate();
void removeFromParent();
protected: protected:
bool focusNextPrevChild(bool next); bool focusNextPrevChild(bool next);