Activate mediaview instead of main window.

If the mediaview is currently shown and we receive an activation
event for the main window we should activate and focus mediaview.
This commit is contained in:
John Preston 2017-05-19 17:02:55 +03:00
parent 5915f3f928
commit 1e6d4d6b41
11 changed files with 51 additions and 53 deletions

View File

@ -148,33 +148,11 @@ void MainWindow::onInactiveTimer() {
inactivePress(false);
}
void MainWindow::onStateChanged(Qt::WindowState state) {
stateChangedHook(state);
psUserActionDone();
updateIsActive((state == Qt::WindowMinimized) ? Global::OfflineBlurTimeout() : Global::OnlineFocusTimeout());
psUpdateSysMenu(state);
if (state == Qt::WindowMinimized && Global::WorkMode().value() == dbiwmTrayOnly) {
App::wnd()->minimizeToTray();
}
savePosition(state);
}
void MainWindow::initHook() {
Platform::MainWindow::initHook();
QCoreApplication::instance()->installEventFilter(this);
connect(windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(onStateChanged(Qt::WindowState)));
connect(windowHandle(), SIGNAL(activeChanged()), this, SLOT(onWindowActiveChanged()), Qt::QueuedConnection);
}
void MainWindow::onWindowActiveChanged() {
checkHistoryActivation();
QTimer::singleShot(1, base::lambda_slot_once(this, [this] {
updateTrayMenu();
}), SLOT(action()));
connect(windowHandle(), &QWindow::activeChanged, this, [this] { checkHistoryActivation(); }, Qt::QueuedConnection);
}
void MainWindow::firstShow() {
@ -333,7 +311,6 @@ void MainWindow::setupMain(const MTPUser *self) {
t_assert(AuthSession::Exists());
_main.create(bodyWidget(), controller());
_main->show();
updateControlsGeometry();
@ -589,7 +566,7 @@ void MainWindow::setInnerFocus() {
}
}
bool MainWindow::eventFilter(QObject *obj, QEvent *e) {
bool MainWindow::eventFilter(QObject *object, QEvent *e) {
switch (e->type()) {
case QEvent::MouseButtonPress:
case QEvent::KeyPress:
@ -620,14 +597,16 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *e) {
break;
case QEvent::ApplicationActivate:
if (obj == QCoreApplication::instance()) {
if (object == QCoreApplication::instance()) {
psUserActionDone();
QTimer::singleShot(1, this, SLOT(onWindowActiveChanged()));
App::CallDelayed(1, this, [this] {
handleActiveChanged();
});
}
break;
case QEvent::FileOpen:
if (obj == QCoreApplication::instance()) {
if (object == QCoreApplication::instance()) {
QString url = static_cast<QFileOpenEvent*>(e)->url().toEncoded().trimmed();
if (url.startsWith(qstr("tg://"), Qt::CaseInsensitive)) {
cSetStartUrl(url.mid(0, 8192));
@ -640,21 +619,23 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *e) {
break;
case QEvent::WindowStateChange:
if (obj == this) {
Qt::WindowState state = (windowState() & Qt::WindowMinimized) ? Qt::WindowMinimized : ((windowState() & Qt::WindowMaximized) ? Qt::WindowMaximized : ((windowState() & Qt::WindowFullScreen) ? Qt::WindowFullScreen : Qt::WindowNoState));
onStateChanged(state);
if (object == this) {
auto state = (windowState() & Qt::WindowMinimized) ? Qt::WindowMinimized :
((windowState() & Qt::WindowMaximized) ? Qt::WindowMaximized :
((windowState() & Qt::WindowFullScreen) ? Qt::WindowFullScreen : Qt::WindowNoState));
handleStateChanged(state);
}
break;
case QEvent::Move:
case QEvent::Resize:
if (obj == this) {
if (object == this) {
positionUpdated();
}
break;
}
return Platform::MainWindow::eventFilter(obj, e);
return Platform::MainWindow::eventFilter(object, e);
}
void MainWindow::updateTrayMenu(bool force) {
@ -774,10 +755,10 @@ void MainWindow::fixOrder() {
void MainWindow::showFromTray(QSystemTrayIcon::ActivationReason reason) {
if (reason != QSystemTrayIcon::Context) {
QTimer::singleShot(1, base::lambda_slot_once(this, [this] {
App::CallDelayed(1, this, [this] {
updateTrayMenu();
updateGlobalMenu();
}), SLOT(action()));
});
activate();
Notify::unreadCounterUpdated();
}

View File

@ -24,7 +24,6 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
#include "platform/platform_main_window.h"
#include "core/single_timer.h"
class MediaView;
class PasscodeWidget;
class MainWidget;
class LayerStackWidget;
@ -188,11 +187,6 @@ signals:
void tempDirClearFailed(int task);
void checkNewAuthorization();
private slots:
void onStateChanged(Qt::WindowState state);
void onWindowActiveChanged();
private:
void checkAuthSession();
void showConnecting(const QString &text, const QString &reconnect = QString());

View File

@ -567,9 +567,6 @@ void MainWindow::psFirstShow() {
void MainWindow::psInitSysMenu() {
}
void MainWindow::psUpdateSysMenu(Qt::WindowState state) {
}
void MainWindow::psUpdateMargins() {
}

View File

@ -32,7 +32,6 @@ public:
void psFirstShow();
void psInitSysMenu();
void psUpdateSysMenu(Qt::WindowState state);
void psUpdateMargins();
void psRefreshTaskbarIcon() {

View File

@ -34,7 +34,6 @@ public:
void psFirstShow();
void psInitSysMenu();
void psUpdateSysMenu(Qt::WindowState state);
void psUpdateMargins();
void psRefreshTaskbarIcon() {

View File

@ -496,9 +496,6 @@ void MainWindow::psMacSelectAll() {
void MainWindow::psInitSysMenu() {
}
void MainWindow::psUpdateSysMenu(Qt::WindowState state) {
}
void MainWindow::psUpdateMargins() {
}

View File

@ -829,13 +829,17 @@ void MainWindow::psFirstShow() {
}
}
void MainWindow::stateChangedHook(Qt::WindowState state) {
updateSystemMenu(state);
}
void MainWindow::psInitSysMenu() {
Qt::WindowStates states = windowState();
ps_menu = GetSystemMenu(ps_hWnd, FALSE);
psUpdateSysMenu(windowHandle()->windowState());
updateSystemMenu(windowHandle()->windowState());
}
void MainWindow::psUpdateSysMenu(Qt::WindowState state) {
void MainWindow::updateSystemMenu(Qt::WindowState state) {
if (!ps_menu) return;
int menuToDisable = SC_RESTORE;

View File

@ -40,7 +40,7 @@ public:
void psFirstShow();
void psInitSysMenu();
void psUpdateSysMenu(Qt::WindowState state);
void updateSystemMenu(Qt::WindowState state);
void psUpdateMargins();
void psRefreshTaskbarIcon();
@ -86,6 +86,8 @@ protected:
int32 screenNameChecksum(const QString &name) const override;
void unreadCounterChangedHook() override;
void stateChangedHook(Qt::WindowState state) override;
bool hasTrayIcon() const override {
return trayIcon;
}

View File

@ -208,7 +208,7 @@ bool EventFilter::mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPa
case WM_SYSCOMMAND: {
if (wParam == SC_MOUSEMENU) {
POINTS p = MAKEPOINTS(lParam);
App::wnd()->psUpdateSysMenu(App::wnd()->windowHandle()->windowState());
App::wnd()->updateSystemMenu(App::wnd()->windowHandle()->windowState());
TrackPopupMenu(App::wnd()->psMenu(), TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, p.x, p.y, 0, hWnd, 0);
}
} return false;

View File

@ -190,6 +190,9 @@ void MainWindow::init() {
initHook();
updateWindowIcon();
connect(windowHandle(), &QWindow::activeChanged, this, [this] { handleActiveChanged(); }, Qt::QueuedConnection);
connect(windowHandle(), &QWindow::windowStateChanged, this, [this](Qt::WindowState state) { handleStateChanged(state); });
_positionUpdatedTimer->setSingleShot(true);
connect(_positionUpdatedTimer, SIGNAL(timeout()), this, SLOT(savePositionByTimer()));
@ -203,6 +206,26 @@ void MainWindow::init() {
updateUnreadCounter();
}
void MainWindow::handleStateChanged(Qt::WindowState state) {
stateChangedHook(state);
updateIsActive((state == Qt::WindowMinimized) ? Global::OfflineBlurTimeout() : Global::OnlineFocusTimeout());
psUserActionDone();
if (state == Qt::WindowMinimized && Global::WorkMode().value() == dbiwmTrayOnly) {
minimizeToTray();
}
savePosition(state);
}
void MainWindow::handleActiveChanged() {
if (isActiveWindow() && _mediaView && !_mediaView->isHidden()) {
_mediaView->activateWindow();
_mediaView->setFocus();
}
App::CallDelayed(1, this, [this] {
updateTrayMenu();
});
}
void MainWindow::updatePalette() {
auto p = palette();
p.setColor(QPalette::Window, st::windowBg->c);

View File

@ -100,6 +100,8 @@ protected:
void resizeEvent(QResizeEvent *e) override;
void savePosition(Qt::WindowState state = Qt::WindowActive);
void handleStateChanged(Qt::WindowState state);
void handleActiveChanged();
virtual void initHook() {
}