Skip to content
Snippets Groups Projects
Commit eec53984 authored by con's avatar con
Browse files

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

This happens for example when removing a split editor.
parent 51f20d40
No related branches found
No related tags found
No related merge requests found
...@@ -40,7 +40,7 @@ using namespace Core; ...@@ -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) ...@@ -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()
......
...@@ -31,6 +31,8 @@ ...@@ -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 ...@@ -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;
}; };
......
...@@ -107,6 +107,7 @@ void FindPlugin::extensionsInitialized() ...@@ -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();
......
...@@ -264,14 +264,6 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event) ...@@ -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 ...@@ -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() ...@@ -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();
......
...@@ -84,7 +84,7 @@ private slots: ...@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment