fix button popup (#2603)

This commit is contained in:
Le Tan 2025-04-16 22:29:56 +08:00 committed by GitHub
parent 3ec78f4c36
commit 8494a714cd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 21 additions and 69 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
*.pro.user.* *.pro.user.*
.ccls .ccls
compile_commands.json compile_commands.json
compile_commands.json.*
compile_flags.txt compile_flags.txt
.cache .cache
.tasks .tasks

View File

@ -29,8 +29,7 @@
using namespace vnotex; using namespace vnotex;
AttachmentPopup::AttachmentPopup(QToolButton *p_btn, QWidget *p_parent) AttachmentPopup::AttachmentPopup(QToolButton *p_btn, QWidget *p_parent)
: QMenu(p_parent), : ButtonPopup(p_btn, p_parent)
m_button(p_btn)
{ {
setupUI(); setupUI();
@ -68,7 +67,7 @@ void AttachmentPopup::setupUI()
const auto destFolderPath = getDestFolderPath(); const auto destFolderPath = getDestFolderPath();
auto &sessionConfig = ConfigMgr::getInst().getSessionConfig(); auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();
auto files = QFileDialog::getOpenFileNames(this, auto files = QFileDialog::getOpenFileNames(nullptr,
tr("Select Files As Attachments"), tr("Select Files As Attachments"),
sessionConfig.getExternalMediaDefaultPath()); sessionConfig.getExternalMediaDefaultPath());
if (files.isEmpty()) { if (files.isEmpty()) {
@ -206,12 +205,7 @@ void AttachmentPopup::setupUI()
widget->setMinimumSize(320, 384); widget->setMinimumSize(320, 384);
addWidget(widget);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(widget);
addAction(act);
} }
QToolButton *AttachmentPopup::createButton() QToolButton *AttachmentPopup::createButton()

View File

@ -1,16 +1,14 @@
#ifndef ATTACHMENTPOPUP_H #ifndef ATTACHMENTPOPUP_H
#define ATTACHMENTPOPUP_H #define ATTACHMENTPOPUP_H
#include <QMenu> #include "buttonpopup.h"
class QToolButton;
namespace vnotex namespace vnotex
{ {
class FileSystemViewer; class FileSystemViewer;
class Buffer; class Buffer;
class AttachmentPopup : public QMenu class AttachmentPopup : public ButtonPopup
{ {
Q_OBJECT Q_OBJECT
public: public:
@ -43,9 +41,6 @@ namespace vnotex
FileSystemViewer *m_viewer = nullptr; FileSystemViewer *m_viewer = nullptr;
bool m_needUpdateAttachmentFolder = true; bool m_needUpdateAttachmentFolder = true;
// Button for this menu.
QToolButton *m_button = nullptr;
}; };
} }

View File

@ -1,6 +1,6 @@
#include "buttonpopup.h" #include "buttonpopup.h"
#include <QVBoxLayout> #include <QWidgetAction>
#include <utils/widgetutils.h> #include <utils/widgetutils.h>
@ -10,8 +10,6 @@ ButtonPopup::ButtonPopup(QToolButton *p_btn, QWidget *p_parent)
: QMenu(p_parent), : QMenu(p_parent),
m_button(p_btn) m_button(p_btn)
{ {
setupUI();
#if defined(Q_OS_MACOS) || defined(Q_OS_MAC) #if defined(Q_OS_MACOS) || defined(Q_OS_MAC)
// Qt::Popup on macOS does not work well with input method. // Qt::Popup on macOS does not work well with input method.
setWindowFlags(Qt::Tool | Qt::NoDropShadowWindowHint); setWindowFlags(Qt::Tool | Qt::NoDropShadowWindowHint);
@ -19,16 +17,10 @@ ButtonPopup::ButtonPopup(QToolButton *p_btn, QWidget *p_parent)
#endif #endif
} }
void ButtonPopup::setupUI() void ButtonPopup::addWidget(QWidget *p_widget)
{ {
auto mainLayout = new QVBoxLayout(this); auto act = new QWidgetAction(this);
WidgetUtils::setContentsMargins(mainLayout); // @act will own @p_widget.
} act->setDefaultWidget(p_widget);
addAction(act);
void ButtonPopup::setCentralWidget(QWidget *p_widget)
{
Q_ASSERT(p_widget);
auto mainLayout = layout();
Q_ASSERT(mainLayout->count() == 0);
mainLayout->addWidget(p_widget);
} }

View File

@ -15,10 +15,7 @@ namespace vnotex
ButtonPopup(QToolButton *p_btn, QWidget *p_parent = nullptr); ButtonPopup(QToolButton *p_btn, QWidget *p_parent = nullptr);
protected: protected:
void setCentralWidget(QWidget *p_widget); void addWidget(QWidget *p_widget);
private:
void setupUI();
// Button for this menu. // Button for this menu.
QToolButton *m_button = nullptr; QToolButton *m_button = nullptr;

View File

@ -1,8 +1,6 @@
#include "outlinepopup.h" #include "outlinepopup.h"
#include <QVBoxLayout>
#include <QToolButton> #include <QToolButton>
#include <QWidgetAction>
#include <core/global.h> #include <core/global.h>
#include <utils/widgetutils.h> #include <utils/widgetutils.h>
@ -11,8 +9,7 @@
using namespace vnotex; using namespace vnotex;
OutlinePopup::OutlinePopup(QToolButton *p_btn, QWidget *p_parent) OutlinePopup::OutlinePopup(QToolButton *p_btn, QWidget *p_parent)
: QMenu(p_parent), : ButtonPopup(p_btn, p_parent)
m_button(p_btn)
{ {
setupUI(); setupUI();
@ -26,13 +23,7 @@ void OutlinePopup::setupUI()
{ {
m_viewer = new OutlineViewer(tr("Outline"), this); m_viewer = new OutlineViewer(tr("Outline"), this);
m_viewer->setMinimumSize(320, 384); m_viewer->setMinimumSize(320, 384);
addWidget(m_viewer);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(m_viewer);
addAction(act);
} }
void OutlinePopup::setOutlineProvider(const QSharedPointer<OutlineProvider> &p_provider) void OutlinePopup::setOutlineProvider(const QSharedPointer<OutlineProvider> &p_provider)
@ -42,7 +33,7 @@ void OutlinePopup::setOutlineProvider(const QSharedPointer<OutlineProvider> &p_p
void OutlinePopup::showEvent(QShowEvent* p_event) void OutlinePopup::showEvent(QShowEvent* p_event)
{ {
QMenu::showEvent(p_event); ButtonPopup::showEvent(p_event);
// Move it to be right-aligned. // Move it to be right-aligned.
if (m_button->isVisible()) { if (m_button->isVisible()) {

View File

@ -1,7 +1,8 @@
#ifndef OUTLINEPOPUP_H #ifndef OUTLINEPOPUP_H
#define OUTLINEPOPUP_H #define OUTLINEPOPUP_H
#include <QMenu> #include "buttonpopup.h"
#include <QSharedPointer> #include <QSharedPointer>
class QToolButton; class QToolButton;
@ -11,7 +12,7 @@ namespace vnotex
class OutlineProvider; class OutlineProvider;
class OutlineViewer; class OutlineViewer;
class OutlinePopup : public QMenu class OutlinePopup : public ButtonPopup
{ {
Q_OBJECT Q_OBJECT
public: public:
@ -27,9 +28,6 @@ namespace vnotex
// Managed by QObject. // Managed by QObject.
OutlineViewer *m_viewer = nullptr; OutlineViewer *m_viewer = nullptr;
// Button with this menu.
QToolButton *m_button = nullptr;
}; };
} }

View File

@ -1,9 +1,5 @@
#include "tagpopup.h" #include "tagpopup.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QWidgetAction>
#include <utils/widgetutils.h> #include <utils/widgetutils.h>
#include <buffer/buffer.h> #include <buffer/buffer.h>
@ -31,14 +27,8 @@ TagPopup::TagPopup(QToolButton *p_btn, QWidget *p_parent)
void TagPopup::setupUI() void TagPopup::setupUI()
{ {
m_tagViewer = new TagViewer(true, this); m_tagViewer = new TagViewer(true, this);
//setCentralWidget(m_tagViewer);
m_tagViewer->setMinimumSize(256, 320); m_tagViewer->setMinimumSize(256, 320);
addWidget(m_tagViewer);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(m_tagViewer);
addAction(act);
} }
void TagPopup::setBuffer(Buffer *p_buffer) void TagPopup::setBuffer(Buffer *p_buffer)

View File

@ -4,7 +4,6 @@
#include <QLabel> #include <QLabel>
#include <QGroupBox> #include <QGroupBox>
#include <QPointer> #include <QPointer>
#include <QWidgetAction>
#include <utils/widgetutils.h> #include <utils/widgetutils.h>
@ -72,10 +71,5 @@ void WordCountPopup::updateCount(const ViewWindow::WordCountInfo &p_info)
void WordCountPopup::setupUI() void WordCountPopup::setupUI()
{ {
m_panel = new WordCountPanel(this); m_panel = new WordCountPanel(this);
addWidget(m_panel);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(m_panel);
addAction(act);
} }