From f6af535f8fbe95d475552092eda8a3b21281ea10 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 24 Jun 2016 19:43:46 +0300 Subject: [PATCH] Fixed dead keys in photo / file caption input field #1418 Another attempt to fix dead keys input problem after main window looses focus to popup menu or photo viewer #2007 #1074 --- Telegram/SourceFiles/mainwindow.cpp | 19 ++++++++++++++++--- Telegram/SourceFiles/mainwindow.h | 2 ++ Telegram/SourceFiles/ui/flatinput.cpp | 8 ++++---- Telegram/SourceFiles/ui/flatinput.h | 6 ++++++ Telegram/SourceFiles/ui/popupmenu.cpp | 5 +++-- 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index 8f7652aca..b8301929d 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -926,13 +926,26 @@ void MainWindow::layerHidden() { setInnerFocus(); } +void MainWindow::onReActivate() { + if (auto w = App::wnd()) { + if (auto f = QApplication::focusWidget()) { + f->clearFocus(); + } + w->windowHandle()->requestActivate(); + w->activate(); + if (auto f = QApplication::focusWidget()) { + f->clearFocus(); + } + w->setInnerFocus(); + } +} + void MainWindow::hideMediaview() { if (_mediaView && !_mediaView->isHidden()) { _mediaView->hide(); #if defined Q_OS_LINUX32 || defined Q_OS_LINUX64 - if (App::wnd()) { - App::wnd()->activateWindow(); - } + onReActivate(); + QTimer::singleShot(200, this, SLOT(onReActivate())); #endif } } diff --git a/Telegram/SourceFiles/mainwindow.h b/Telegram/SourceFiles/mainwindow.h index 5a7826c61..32926621b 100644 --- a/Telegram/SourceFiles/mainwindow.h +++ b/Telegram/SourceFiles/mainwindow.h @@ -282,6 +282,8 @@ public slots: void onLogoutSure(); void updateGlobalMenu(); // for OS X top menu + void onReActivate(); + void notifyUpdateAllPhotos(); void app_activateClickHandler(ClickHandlerPtr handler, Qt::MouseButton button); diff --git a/Telegram/SourceFiles/ui/flatinput.cpp b/Telegram/SourceFiles/ui/flatinput.cpp index dbb8f3006..2ff1ba92f 100644 --- a/Telegram/SourceFiles/ui/flatinput.cpp +++ b/Telegram/SourceFiles/ui/flatinput.cpp @@ -765,11 +765,11 @@ void InputArea::startBorderAnimation() { } void InputArea::focusInEvent(QFocusEvent *e) { - _inner.setFocus(); + QTimer::singleShot(0, &_inner, SLOT(setFocus())); } void InputArea::mousePressEvent(QMouseEvent *e) { - _inner.setFocus(); + QTimer::singleShot(0, &_inner, SLOT(setFocus())); } void InputArea::contextMenuEvent(QContextMenuEvent *e) { @@ -1457,11 +1457,11 @@ void InputField::startBorderAnimation() { } void InputField::focusInEvent(QFocusEvent *e) { - _inner.setFocus(); + QTimer::singleShot(0, &_inner, SLOT(setFocus())); } void InputField::mousePressEvent(QMouseEvent *e) { - _inner.setFocus(); + QTimer::singleShot(0, &_inner, SLOT(setFocus())); } void InputField::contextMenuEvent(QContextMenuEvent *e) { diff --git a/Telegram/SourceFiles/ui/flatinput.h b/Telegram/SourceFiles/ui/flatinput.h index e121b0434..b200b76b2 100644 --- a/Telegram/SourceFiles/ui/flatinput.h +++ b/Telegram/SourceFiles/ui/flatinput.h @@ -235,6 +235,12 @@ public: bool hasFocus() const { return _inner.hasFocus(); } + void setFocus() { + _inner.setFocus(); + } + void clearFocus() { + _inner.clearFocus(); + } public slots: diff --git a/Telegram/SourceFiles/ui/popupmenu.cpp b/Telegram/SourceFiles/ui/popupmenu.cpp index d78746c87..2bbf65890 100644 --- a/Telegram/SourceFiles/ui/popupmenu.cpp +++ b/Telegram/SourceFiles/ui/popupmenu.cpp @@ -521,8 +521,9 @@ PopupMenu::~PopupMenu() { clearActions(true); delete _menu; #if defined Q_OS_LINUX32 || defined Q_OS_LINUX64 - if (App::wnd()) { - App::wnd()->activateWindow(); + if (auto w = App::wnd()) { + w->onReActivate(); + QTimer::singleShot(200, w, SLOT(onReActivate())); } #endif }