From 65980cfb22b769510f9ba4fde147e42fa1e9a88c Mon Sep 17 00:00:00 2001 From: Michael Carpenter Date: Thu, 2 May 2013 07:36:53 -0400 Subject: [PATCH] Fix for dock widget titlebars moving around when in advanced mode --- qgroundcontrol.pro | 6 ++++-- src/ui/MainWindow.cc | 24 ++++++++++++++---------- src/ui/QGCSettingsWidget.cc | 2 +- src/ui/QGCSettingsWidget.ui | 2 +- src/ui/dockwidgettitlebareventfilter.cpp | 15 +++++++++++++++ src/ui/dockwidgettitlebareventfilter.h | 19 +++++++++++++++++++ 6 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 src/ui/dockwidgettitlebareventfilter.cpp create mode 100644 src/ui/dockwidgettitlebareventfilter.h diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index d52beb03b..50f6486f5 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -372,7 +372,8 @@ HEADERS += src/MG.h \ src/ui/QGCHilXPlaneConfiguration.h \ src/ui/designer/QGCComboBox.h \ src/ui/designer/QGCTextLabel.h \ - src/ui/submainwindow.h + src/ui/submainwindow.h \ + src/ui/dockwidgettitlebareventfilter.h # Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h @@ -537,7 +538,8 @@ SOURCES += src/main.cc \ src/ui/QGCHilXPlaneConfiguration.cc \ src/ui/designer/QGCComboBox.cc \ src/ui/designer/QGCTextLabel.cc \ - src/ui/submainwindow.cpp + src/ui/submainwindow.cpp \ + src/ui/dockwidgettitlebareventfilter.cpp # Enable Google Earth only on Mac OS and Windows with Visual Studio compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index deca29714..9f44076f9 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -38,7 +38,7 @@ This file is part of the QGROUNDCONTROL project #include #include #include - +#include "dockwidgettitlebareventfilter.h" #include "QGC.h" #include "MAVLinkSimulationLink.h" #include "SerialLink.h" @@ -613,6 +613,7 @@ void MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,Q QLabel *label = new QLabel(this); label->setText(title); widget->setTitleBarWidget(label); + label->installEventFilter(new DockWidgetTitleBarEventFilter()); } else { @@ -625,6 +626,8 @@ void MainWindow::createDockWidget(QWidget *parent,QWidget *child,QString title,Q QLabel *label = new QLabel(this); label->setText(title); dockToTitleBarMap[widget] = label; + label->installEventFilter(new DockWidgetTitleBarEventFilter()); + label->hide(); } widget->setObjectName(objectname); widget->setWidget(child); @@ -1007,29 +1010,30 @@ void MainWindow::saveScreen() } void MainWindow::enableDockWidgetTitleBars(bool enabled) { + dockWidgetTitleBarEnabled = enabled; + QSettings settings; + settings.beginGroup("QGC_MAINWINDOW"); + settings.setValue("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled); + settings.endGroup(); + settings.sync(); if (!isAdvancedMode) { - dockWidgetTitleBarEnabled = enabled; - QSettings settings; - settings.beginGroup("QGC_MAINWINDOW"); - settings.setValue("DOCK_WIDGET_TITLEBARS",dockWidgetTitleBarEnabled); - settings.endGroup(); - settings.sync(); if (enabled) { for (QMap::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++) { QLabel *label = new QLabel(this); - label->setText(i.value()->windowTitle()); + label->setText(i.key()->windowTitle()); i.key()->setTitleBarWidget(label); - label->setEnabled(false); + //label->setEnabled(false); + label->installEventFilter(new DockWidgetTitleBarEventFilter()); } } else { for (QMap::const_iterator i=dockToTitleBarMap.constBegin();i!=dockToTitleBarMap.constEnd();i++) { - i.key()->setTitleBarWidget(0); + i.key()->setTitleBarWidget(new QWidget(this)); } } } diff --git a/src/ui/QGCSettingsWidget.cc b/src/ui/QGCSettingsWidget.cc index bb8387cda..f5fb0a6d0 100644 --- a/src/ui/QGCSettingsWidget.cc +++ b/src/ui/QGCSettingsWidget.cc @@ -44,7 +44,7 @@ QGCSettingsWidget::QGCSettingsWidget(QWidget *parent, Qt::WindowFlags flags) : //Dock widget title bars ui->titleBarCheckBox->setChecked(MainWindow::instance()->dockWidgetTitleBarsEnabled()); - ui->titleBarCheckBox,SIGNAL(clicked(bool)),MainWindow::instance(),SLOT(enableDockWidgetTitleBars(bool)); + connect(ui->titleBarCheckBox,SIGNAL(clicked(bool)),MainWindow::instance(),SLOT(enableDockWidgetTitleBars(bool))); // Style MainWindow::QGC_MAINWINDOW_STYLE style = (MainWindow::QGC_MAINWINDOW_STYLE)MainWindow::instance()->getStyle(); diff --git a/src/ui/QGCSettingsWidget.ui b/src/ui/QGCSettingsWidget.ui index 88053d631..a26ae5f7b 100644 --- a/src/ui/QGCSettingsWidget.ui +++ b/src/ui/QGCSettingsWidget.ui @@ -86,7 +86,7 @@ Show Docked Widget title bars when NOT in advanced Mode. - true + false diff --git a/src/ui/dockwidgettitlebareventfilter.cpp b/src/ui/dockwidgettitlebareventfilter.cpp new file mode 100644 index 000000000..ca5951d7d --- /dev/null +++ b/src/ui/dockwidgettitlebareventfilter.cpp @@ -0,0 +1,15 @@ +#include "dockwidgettitlebareventfilter.h" +#include +#include +DockWidgetTitleBarEventFilter::DockWidgetTitleBarEventFilter(QObject *parent) : QObject(parent) +{ +} +bool DockWidgetTitleBarEventFilter::eventFilter(QObject *object,QEvent *event) +{ + qDebug() << event->type(); + if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease) + { + return true; + } + return QObject::eventFilter(object,event); +} diff --git a/src/ui/dockwidgettitlebareventfilter.h b/src/ui/dockwidgettitlebareventfilter.h new file mode 100644 index 000000000..d57edef1f --- /dev/null +++ b/src/ui/dockwidgettitlebareventfilter.h @@ -0,0 +1,19 @@ +#ifndef DOCKWIDGETTITLEBAREVENTFILTER_H +#define DOCKWIDGETTITLEBAREVENTFILTER_H + +#include + +class DockWidgetTitleBarEventFilter : public QObject +{ + Q_OBJECT +public: + explicit DockWidgetTitleBarEventFilter(QObject *parent = 0); +protected: + bool eventFilter(QObject *object,QEvent *event); +signals: + +public slots: + +}; + +#endif // DOCKWIDGETTITLEBAREVENTFILTER_H -- 2.22.0