forked from qt-creator/qt-creator
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:
@@ -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()
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
|||||||
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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user