Skip to content

Commit 52dfb60

Browse files
committed
fix: 打开高级设置后切换页面控制中心崩溃
不使用 EventConsumer,在点击打开高级设置按钮后, 禁用高级设置按钮 Issues linuxdeepin/developer-center#6552
1 parent 854fdee commit 52dfb60

1 file changed

Lines changed: 12 additions & 51 deletions

File tree

src/window/imsettingwindow.cpp

Lines changed: 12 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -40,50 +40,6 @@ DWIDGET_USE_NAMESPACE
4040

4141
using namespace dcc_fcitx_configtool::widgets;
4242

43-
class EventConsumer : public QEventLoop
44-
{
45-
public:
46-
explicit EventConsumer(QObject *producer = qApp, QObject *parent = nullptr);
47-
~EventConsumer() override;
48-
bool eventFilter(QObject *watched, QEvent *event) override;
49-
50-
private:
51-
QObject *m_producer;
52-
};
53-
54-
EventConsumer::EventConsumer(QObject *producer, QObject *parent)
55-
: QEventLoop(parent)
56-
, m_producer(producer)
57-
{
58-
if (m_producer) {
59-
m_producer->installEventFilter(this);
60-
}
61-
}
62-
63-
EventConsumer::~EventConsumer()
64-
{
65-
if (m_producer) {
66-
m_producer->removeEventFilter(this);
67-
}
68-
}
69-
70-
bool EventConsumer::eventFilter(QObject *watched, QEvent *event)
71-
{
72-
Q_UNUSED(watched)
73-
switch (event->type())
74-
{
75-
case QEvent::MouseButtonPress:
76-
case QEvent::MouseButtonRelease:
77-
case QEvent::MouseButtonDblClick:
78-
case QEvent::MouseMove:
79-
case QEvent::KeyPress:
80-
case QEvent::KeyRelease:
81-
return true;
82-
default:
83-
return false;
84-
}
85-
}
86-
8743
IMSettingWindow::IMSettingWindow(DBusProvider *dbus, QWidget *parent)
8844
: QWidget(parent)
8945
, m_dbus(dbus)
@@ -274,18 +230,23 @@ void IMSettingWindow::initConnect()
274230
});
275231
});
276232

277-
connect(m_advSetKey, &QPushButton::clicked, this, [ = ]() {
278-
QProcess advancedSettingProcess(this);
279-
advancedSettingProcess.setProgram("fcitx5-config-qt");
280-
EventConsumer loop;
281-
advancedSettingProcess.start();
233+
connect(m_advSetKey, &QPushButton::clicked, this, [this]() {
234+
m_advSetKey->setEnabled(false);
235+
auto *advancedSettingProcess = new QProcess(this);
236+
advancedSettingProcess->setProgram("fcitx5-config-qt");
237+
advancedSettingProcess->start();
282238
#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
283239
auto finished = QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished);
284240
#else
285241
auto finished = QOverload<int>::of(&QProcess::finished);
286242
#endif
287-
connect(&advancedSettingProcess, finished, &loop, &EventConsumer::quit);
288-
loop.exec();
243+
auto conn = connect(advancedSettingProcess, finished, this, [this] () {
244+
m_advSetKey->setEnabled(true);
245+
});
246+
247+
connect(this, &QObject::destroyed, [conn]() {
248+
disconnect(conn);
249+
});
289250
});
290251
}
291252

0 commit comments

Comments
 (0)