Avoid misplaced/clipped dialogs when default dialog size doesn't fit screen
https://github.com/Martchus/syncthingtray/issues/89
This commit is contained in:
parent
4903927de9
commit
8c4e2168bc
|
@ -98,7 +98,7 @@ find_package(c++utilities${CONFIGURATION_PACKAGE_SUFFIX} 5.6.0 REQUIRED)
|
||||||
use_cpp_utilities()
|
use_cpp_utilities()
|
||||||
|
|
||||||
# find qtutilities
|
# find qtutilities
|
||||||
find_package(qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.0.0 REQUIRED)
|
find_package(qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.4.0 REQUIRED)
|
||||||
use_qt_utilities()
|
use_qt_utilities()
|
||||||
|
|
||||||
# find backend libraries
|
# find backend libraries
|
||||||
|
|
|
@ -295,9 +295,9 @@ void TrayIcon::showNewDir(const QString &devId, const QString &dirId, const QStr
|
||||||
|
|
||||||
void TrayIcon::showInternalErrorsDialog()
|
void TrayIcon::showInternalErrorsDialog()
|
||||||
{
|
{
|
||||||
auto *const errorViewDlg = InternalErrorsDialog::instance();
|
if (!InternalErrorsDialog::hasInstance()) {
|
||||||
connect(errorViewDlg, &InternalErrorsDialog::errorsCleared, this, &TrayIcon::handleErrorsCleared);
|
connect(InternalErrorsDialog::instance(), &InternalErrorsDialog::errorsCleared, this, &TrayIcon::handleErrorsCleared);
|
||||||
centerWidget(errorViewDlg);
|
}
|
||||||
errorViewDlg->show();
|
trayMenu().widget().showInternalErrorsDialog();
|
||||||
}
|
}
|
||||||
} // namespace QtGui
|
} // namespace QtGui
|
||||||
|
|
|
@ -3,16 +3,13 @@
|
||||||
#include "./trayicon.h"
|
#include "./trayicon.h"
|
||||||
#include "./traymenu.h"
|
#include "./traymenu.h"
|
||||||
|
|
||||||
|
#include <syncthingwidgets/misc/internalerrorsdialog.h>
|
||||||
#include <syncthingwidgets/misc/otherdialogs.h>
|
#include <syncthingwidgets/misc/otherdialogs.h>
|
||||||
#include <syncthingwidgets/misc/syncthinglauncher.h>
|
#include <syncthingwidgets/misc/syncthinglauncher.h>
|
||||||
#include <syncthingwidgets/misc/textviewdialog.h>
|
#include <syncthingwidgets/misc/textviewdialog.h>
|
||||||
#include <syncthingwidgets/settings/settingsdialog.h>
|
#include <syncthingwidgets/settings/settingsdialog.h>
|
||||||
#include <syncthingwidgets/webview/webviewdialog.h>
|
#include <syncthingwidgets/webview/webviewdialog.h>
|
||||||
|
|
||||||
#ifdef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
|
|
||||||
#include <syncthingwidgets/misc/internalerrorsdialog.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <syncthingmodel/syncthingicons.h>
|
#include <syncthingmodel/syncthingicons.h>
|
||||||
|
|
||||||
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
|
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
|
||||||
|
@ -244,8 +241,9 @@ void TrayWidget::showSettingsDialog()
|
||||||
// by simply saving the settings immediately.
|
// by simply saving the settings immediately.
|
||||||
connect(s_settingsDlg, &SettingsDialog::applied, &Settings::save);
|
connect(s_settingsDlg, &SettingsDialog::applied, &Settings::save);
|
||||||
}
|
}
|
||||||
centerWidget(s_settingsDlg);
|
|
||||||
showDialog(s_settingsDlg);
|
// show settings dialog centered or maximized if the relatively big windows would overflow
|
||||||
|
showDialog(s_settingsDlg, centerWidgetAvoidingOverflow(s_settingsDlg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrayWidget::showAboutDialog()
|
void TrayWidget::showAboutDialog()
|
||||||
|
@ -292,24 +290,21 @@ void TrayWidget::showOwnDeviceId()
|
||||||
{
|
{
|
||||||
auto *const dlg = ownDeviceIdDialog(m_connection);
|
auto *const dlg = ownDeviceIdDialog(m_connection);
|
||||||
dlg->setAttribute(Qt::WA_DeleteOnClose, true);
|
dlg->setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
centerWidget(dlg);
|
showDialog(dlg, centerWidgetAvoidingOverflow(dlg));
|
||||||
showDialog(dlg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrayWidget::showLog()
|
void TrayWidget::showLog()
|
||||||
{
|
{
|
||||||
auto *const dlg = TextViewDialog::forLogEntries(m_connection);
|
auto *const dlg = TextViewDialog::forLogEntries(m_connection);
|
||||||
dlg->setAttribute(Qt::WA_DeleteOnClose, true);
|
dlg->setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
centerWidget(dlg);
|
showDialog(dlg, centerWidgetAvoidingOverflow(dlg));
|
||||||
showDialog(dlg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrayWidget::showNotifications()
|
void TrayWidget::showNotifications()
|
||||||
{
|
{
|
||||||
auto *const dlg = TextViewDialog::forLogEntries(m_notifications, tr("New notifications"));
|
auto *const dlg = TextViewDialog::forLogEntries(m_notifications, tr("New notifications"));
|
||||||
dlg->setAttribute(Qt::WA_DeleteOnClose, true);
|
dlg->setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
centerWidget(dlg);
|
showDialog(dlg, centerWidgetAvoidingOverflow(dlg));
|
||||||
showDialog(dlg);
|
|
||||||
m_notifications.clear();
|
m_notifications.clear();
|
||||||
dismissNotifications();
|
dismissNotifications();
|
||||||
}
|
}
|
||||||
|
@ -329,15 +324,16 @@ void TrayWidget::showInternalErrorsButton()
|
||||||
{
|
{
|
||||||
m_internalErrorsButton->setVisible(true);
|
m_internalErrorsButton->setVisible(true);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void TrayWidget::showInternalErrorsDialog()
|
void TrayWidget::showInternalErrorsDialog()
|
||||||
{
|
{
|
||||||
auto *const errorViewDlg = InternalErrorsDialog::instance();
|
auto *const errorViewDlg = InternalErrorsDialog::instance();
|
||||||
|
#ifdef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
|
||||||
connect(errorViewDlg, &InternalErrorsDialog::errorsCleared, this, &TrayWidget::handleErrorsCleared);
|
connect(errorViewDlg, &InternalErrorsDialog::errorsCleared, this, &TrayWidget::handleErrorsCleared);
|
||||||
centerWidget(errorViewDlg);
|
|
||||||
errorViewDlg->show();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
showDialog(errorViewDlg, centerWidgetAvoidingOverflow(errorViewDlg));
|
||||||
|
}
|
||||||
|
|
||||||
void TrayWidget::dismissNotifications()
|
void TrayWidget::dismissNotifications()
|
||||||
{
|
{
|
||||||
|
@ -816,12 +812,19 @@ void TrayWidget::handleConnectionSelected(QAction *connectionAction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrayWidget::showDialog(QWidget *dlg)
|
void TrayWidget::showDialog(QWidget *dlg, bool maximized)
|
||||||
{
|
{
|
||||||
if (m_menu) {
|
if (m_menu) {
|
||||||
m_menu->close();
|
m_menu->close();
|
||||||
}
|
}
|
||||||
dlg->show();
|
if (maximized) {
|
||||||
|
// assign the minimum size so when the window is "de-maximized" again it doesn't overflow again and is not misplaced
|
||||||
|
dlg->resize(dlg->minimumSize());
|
||||||
|
centerWidget(dlg);
|
||||||
|
dlg->showMaximized();
|
||||||
|
} else {
|
||||||
|
dlg->show();
|
||||||
|
}
|
||||||
dlg->activateWindow();
|
dlg->activateWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,8 @@ public Q_SLOTS:
|
||||||
void showUsingPositioningSettings();
|
void showUsingPositioningSettings();
|
||||||
#ifdef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
|
#ifdef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
|
||||||
void showInternalErrorsButton();
|
void showInternalErrorsButton();
|
||||||
void showInternalErrorsDialog();
|
|
||||||
#endif
|
#endif
|
||||||
|
void showInternalErrorsDialog();
|
||||||
void dismissNotifications();
|
void dismissNotifications();
|
||||||
void restartSyncthing();
|
void restartSyncthing();
|
||||||
void quitTray();
|
void quitTray();
|
||||||
|
@ -103,7 +103,7 @@ private Q_SLOTS:
|
||||||
#endif
|
#endif
|
||||||
void handleNewNotification(CppUtilities::DateTime when, const QString &msg);
|
void handleNewNotification(CppUtilities::DateTime when, const QString &msg);
|
||||||
void handleConnectionSelected(QAction *connectionAction);
|
void handleConnectionSelected(QAction *connectionAction);
|
||||||
void showDialog(QWidget *dlg);
|
void showDialog(QWidget *dlg, bool maximized = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TrayMenu *m_menu;
|
TrayMenu *m_menu;
|
||||||
|
|
|
@ -15,6 +15,7 @@ class SYNCTHINGWIDGETS_EXPORT InternalErrorsDialog : public TextViewDialog {
|
||||||
public:
|
public:
|
||||||
~InternalErrorsDialog() override;
|
~InternalErrorsDialog() override;
|
||||||
static InternalErrorsDialog *instance();
|
static InternalErrorsDialog *instance();
|
||||||
|
static bool hasInstance();
|
||||||
static void addError(InternalError &&newError);
|
static void addError(InternalError &&newError);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
@ -43,6 +44,11 @@ inline InternalErrorsDialog *InternalErrorsDialog::instance()
|
||||||
return s_instance ? s_instance : (s_instance = new InternalErrorsDialog);
|
return s_instance ? s_instance : (s_instance = new InternalErrorsDialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool InternalErrorsDialog::hasInstance()
|
||||||
|
{
|
||||||
|
return s_instance != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
inline void InternalErrorsDialog::showInstance()
|
inline void InternalErrorsDialog::showInstance()
|
||||||
{
|
{
|
||||||
instance()->show();
|
instance()->show();
|
||||||
|
|
Loading…
Reference in New Issue