@@ -40,50 +40,6 @@ DWIDGET_USE_NAMESPACE
4040
4141using 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-
8743IMSettingWindow::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