mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 02:42:48 +00:00
kdeui: new/delete size mismatch fix
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
a70b781c58
commit
936a4e3e84
2 changed files with 57 additions and 62 deletions
|
@ -78,45 +78,24 @@ static KStatusBar *internalStatusBar(KMainWindow *mw)
|
||||||
return KGlobal::findDirectChild<KStatusBar *>(mw);
|
return KGlobal::findDirectChild<KStatusBar *>(mw);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Listens to resize events from QDockWidgets. The KMainWindow
|
|
||||||
* settings are set as dirty, as soon as at least one resize
|
|
||||||
* event occurred. The listener is attached to the dock widgets
|
|
||||||
* by dock->installEventFilter(dockResizeListener) inside
|
|
||||||
* KMainWindow::event().
|
|
||||||
*/
|
|
||||||
class DockResizeListener : public QObject
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
DockResizeListener(KMainWindow *win);
|
|
||||||
virtual ~DockResizeListener();
|
|
||||||
virtual bool eventFilter(QObject *watched, QEvent *event);
|
|
||||||
|
|
||||||
private:
|
|
||||||
KMainWindow *m_win;
|
|
||||||
};
|
|
||||||
|
|
||||||
DockResizeListener::DockResizeListener(KMainWindow *win) :
|
DockResizeListener::DockResizeListener(KMainWindow *win) :
|
||||||
QObject(win),
|
QObject(win),
|
||||||
m_win(win)
|
m_win(win)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
DockResizeListener::~DockResizeListener()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DockResizeListener::eventFilter(QObject *watched, QEvent *event)
|
bool DockResizeListener::eventFilter(QObject *watched, QEvent *event)
|
||||||
{
|
{
|
||||||
switch( event->type() ) {
|
switch (event->type()) {
|
||||||
case QEvent::Resize:
|
case QEvent::Resize:
|
||||||
case QEvent::Move:
|
case QEvent::Move:
|
||||||
case QEvent::Hide:
|
case QEvent::Hide: {
|
||||||
m_win->k_ptr->setSettingsDirty(true);
|
m_win->k_ptr->setSettingsDirty(true);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default: {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return QObject::eventFilter(watched, event);
|
return QObject::eventFilter(watched, event);
|
||||||
|
@ -128,9 +107,7 @@ public:
|
||||||
KMWSessionManager()
|
KMWSessionManager()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
~KMWSessionManager()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
bool dummyInit() { return true; }
|
bool dummyInit() { return true; }
|
||||||
bool saveState( QSessionManager& )
|
bool saveState( QSessionManager& )
|
||||||
{
|
{
|
||||||
|
@ -448,7 +425,7 @@ void KMainWindow::parseGeometry(bool parsewidth)
|
||||||
KMainWindow::~KMainWindow()
|
KMainWindow::~KMainWindow()
|
||||||
{
|
{
|
||||||
sMemberList->removeAll( this );
|
sMemberList->removeAll( this );
|
||||||
delete static_cast<QObject *>(k_ptr->dockResizeListener); //so we don't get anymore events after k_ptr is destroyed
|
delete k_ptr->dockResizeListener.data(); // to not get events after k_ptr is destroyed
|
||||||
delete k_ptr;
|
delete k_ptr;
|
||||||
KGlobal::deref();
|
KGlobal::deref();
|
||||||
}
|
}
|
||||||
|
@ -924,24 +901,25 @@ void KMainWindow::saveAutoSaveSettings()
|
||||||
{
|
{
|
||||||
K_D(KMainWindow);
|
K_D(KMainWindow);
|
||||||
Q_ASSERT( d->autoSaveSettings );
|
Q_ASSERT( d->autoSaveSettings );
|
||||||
//kDebug(200) << "KMainWindow::saveAutoSaveSettings -> saving settings";
|
// kDebug(200) << "KMainWindow::saveAutoSaveSettings -> saving settings";
|
||||||
saveMainWindowSettings(d->autoSaveGroup);
|
saveMainWindowSettings(d->autoSaveGroup);
|
||||||
d->autoSaveGroup.sync();
|
d->autoSaveGroup.sync();
|
||||||
d->settingsDirty = false;
|
d->settingsDirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KMainWindow::event( QEvent* ev )
|
bool KMainWindow::event(QEvent *ev)
|
||||||
{
|
{
|
||||||
K_D(KMainWindow);
|
K_D(KMainWindow);
|
||||||
switch( ev->type() ) {
|
switch (ev->type()) {
|
||||||
case QEvent::Resize:
|
case QEvent::Resize: {
|
||||||
d->setSizeDirty();
|
d->setSizeDirty();
|
||||||
break;
|
break;
|
||||||
case QEvent::Polish:
|
}
|
||||||
d->polish(this);
|
case QEvent::Polish: {
|
||||||
break;
|
d->polish(this);
|
||||||
case QEvent::ChildPolished:
|
break;
|
||||||
{
|
}
|
||||||
|
case QEvent::ChildPolished: {
|
||||||
QChildEvent *event = static_cast<QChildEvent*>(ev);
|
QChildEvent *event = static_cast<QChildEvent*>(ev);
|
||||||
QDockWidget *dock = qobject_cast<QDockWidget*>(event->child());
|
QDockWidget *dock = qobject_cast<QDockWidget*>(event->child());
|
||||||
KToolBar *toolbar = qobject_cast<KToolBar*>(event->child());
|
KToolBar *toolbar = qobject_cast<KToolBar*>(event->child());
|
||||||
|
@ -966,10 +944,9 @@ bool KMainWindow::event( QEvent* ev )
|
||||||
// hence install an event filter instead
|
// hence install an event filter instead
|
||||||
menubar->installEventFilter(k_ptr->dockResizeListener);
|
menubar->installEventFilter(k_ptr->dockResizeListener);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
case QEvent::ChildRemoved: {
|
||||||
case QEvent::ChildRemoved:
|
|
||||||
{
|
|
||||||
QChildEvent *event = static_cast<QChildEvent*>(ev);
|
QChildEvent *event = static_cast<QChildEvent*>(ev);
|
||||||
QDockWidget *dock = qobject_cast<QDockWidget*>(event->child());
|
QDockWidget *dock = qobject_cast<QDockWidget*>(event->child());
|
||||||
KToolBar *toolbar = qobject_cast<KToolBar*>(event->child());
|
KToolBar *toolbar = qobject_cast<KToolBar*>(event->child());
|
||||||
|
@ -987,12 +964,13 @@ bool KMainWindow::event( QEvent* ev )
|
||||||
} else if (menubar) {
|
} else if (menubar) {
|
||||||
menubar->removeEventFilter(k_ptr->dockResizeListener);
|
menubar->removeEventFilter(k_ptr->dockResizeListener);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return QMainWindow::event( ev );
|
return QMainWindow::event(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool KMainWindow::hasMenuBar()
|
bool KMainWindow::hasMenuBar()
|
||||||
|
|
|
@ -30,29 +30,46 @@
|
||||||
#define KMAINWINDOW_P_H
|
#define KMAINWINDOW_P_H
|
||||||
|
|
||||||
#include <kconfiggroup.h>
|
#include <kconfiggroup.h>
|
||||||
#include <qpointer.h>
|
#include <QPointer>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#define K_D(Class) Class##Private * const d = k_func()
|
#define K_D(Class) Class##Private * const d = k_func()
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QTimer>
|
|
||||||
class KHelpMenu;
|
class KHelpMenu;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listens to resize events from QDockWidgets. The KMainWindow settings are set as dirty as soon as
|
||||||
|
* at least one resize event occurred. The listener is attached to the dock widgets installing
|
||||||
|
* event filter inside KMainWindow::event().
|
||||||
|
*/
|
||||||
|
class DockResizeListener : public QObject
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DockResizeListener(KMainWindow *win);
|
||||||
|
|
||||||
|
bool eventFilter(QObject *watched, QEvent *event) final;
|
||||||
|
|
||||||
|
private:
|
||||||
|
KMainWindow *m_win;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class KMainWindowPrivate
|
class KMainWindowPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool autoSaveSettings:1;
|
bool autoSaveSettings;
|
||||||
bool settingsDirty:1;
|
bool settingsDirty;
|
||||||
bool autoSaveWindowSize:1;
|
bool autoSaveWindowSize;
|
||||||
bool care_about_geometry:1;
|
bool care_about_geometry;
|
||||||
bool sizeApplied:1;
|
bool sizeApplied;
|
||||||
KConfigGroup autoSaveGroup;
|
KConfigGroup autoSaveGroup;
|
||||||
QTimer *settingsTimer;
|
QTimer *settingsTimer;
|
||||||
QTimer *sizeTimer;
|
QTimer *sizeTimer;
|
||||||
QRect defaultWindowSize;
|
QRect defaultWindowSize;
|
||||||
KHelpMenu *helpMenu;
|
KHelpMenu *helpMenu;
|
||||||
KMainWindow *q;
|
KMainWindow *q;
|
||||||
QPointer<QObject> dockResizeListener;
|
QPointer<DockResizeListener> dockResizeListener;
|
||||||
QString dbusName;
|
QString dbusName;
|
||||||
bool letDirtySettings;
|
bool letDirtySettings;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue