bool Window::eventFilter(QObject *obj, QEvent *evt) { QEvent::Type t = evt->type(); if (t == QEvent::MouseButtonPress || t == QEvent::KeyPress || t == QEvent::TouchBegin) { psUserActionDone(); } else if (t == QEvent::MouseMove) { if (main && main->isIdle()) { psUserActionDone(); main->checkIdleFinish(); } } if (obj == App::app()) { if (t == QEvent::ApplicationActivate) { psUserActionDone(); QTimer::singleShot(1, this, SLOT(checkHistoryActivation())); } else if (t == QEvent::FileOpen) { QString url = static_cast<QFileOpenEvent*>(evt)->url().toEncoded(); if (!url.trimmed().midRef(0, 5).compare(qsl("tg://"), Qt::CaseInsensitive)) { cSetStartUrl(url); if (!cStartUrl().isEmpty() && App::main() && App::self()) { App::main()->openLocalUrl(cStartUrl()); cSetStartUrl(QString()); } } activate(); } } else if (obj == this) { if (t == QEvent::WindowStateChange) { Qt::WindowState state = (windowState() & Qt::WindowMinimized) ? Qt::WindowMinimized : ((windowState() & Qt::WindowMaximized) ? Qt::WindowMaximized : ((windowState() & Qt::WindowFullScreen) ? Qt::WindowFullScreen : Qt::WindowNoState)); stateChanged(state); } else if (t == QEvent::Move || t == QEvent::Resize) { psUpdatedPosition(); } } return PsMainWindow::eventFilter(obj, evt); }
int main(int argc, char *argv[]) { settingsParseArgs(argc, argv); if (cLaunchMode() == LaunchModeFixPrevious) { return psFixPrevious(); } else if (cLaunchMode() == LaunchModeCleanup) { return psCleanup(); #ifndef TDESKTOP_DISABLE_CRASH_REPORTS } else if (cLaunchMode() == LaunchModeShowCrash) { return showCrashReportWindow(QFileInfo(cStartUrl()).absoluteFilePath()); #endif // !TDESKTOP_DISABLE_CRASH_REPORTS } // both are finished in Application::closeApplication Logs::start(); // must be started before PlatformSpecific is started PlatformSpecific::start(); // must be started before QApplication is created // prepare fake args to disable QT_STYLE_OVERRIDE env variable // currently this is required in some desktop environments, including Xubuntu 15.10 // when we don't default style to "none" Qt dynamically loads GTK somehow internally and // our own GTK dynamic load and usage leads GTK errors and freeze of the current main thread // we can't disable our own GTK loading because it is required by libappindicator, which // provides the tray icon for this system, because Qt tray icon is broken there // see https://github.com/telegramdesktop/tdesktop/issues/1774 QByteArray args[] = { "-style=0" }; static const int a_cnt = sizeof(args) / sizeof(args[0]); int a_argc = a_cnt + 1; char *a_argv[a_cnt + 1] = { argv[0], args[0].data() }; int result = 0; { Application app(a_argc, a_argv); result = app.exec(); } DEBUG_LOG(("Telegram finished, result: %1").arg(result)); #ifndef TDESKTOP_DISABLE_AUTOUPDATE if (cRestartingUpdate()) { DEBUG_LOG(("Application Info: executing updater to install update...")); psExecUpdater(); } else #endif if (cRestarting()) { DEBUG_LOG(("Application Info: executing Telegram, because of restart...")); psExecTelegram(); } SignalHandlers::finish(); PlatformSpecific::finish(); Logs::finish(); return result; }
bool Window::eventFilter(QObject *obj, QEvent *evt) { if (obj == App::app() && (evt->type() == QEvent::ApplicationActivate)) { QTimer::singleShot(1, this, SLOT(checkHistoryActivation())); } else if (obj == App::app() && (evt->type() == QEvent::FileOpen)) { QString url = static_cast<QFileOpenEvent*>(evt)->url().toEncoded(); if (!url.trimmed().midRef(0, 5).compare(qsl("tg://"), Qt::CaseInsensitive)) { cSetStartUrl(url); if (!cStartUrl().isEmpty() && App::main() && App::self()) { App::main()->openLocalUrl(cStartUrl()); cSetStartUrl(QString()); } } activate(); } else if (obj == this && evt->type() == QEvent::WindowStateChange) { Qt::WindowState state = (windowState() & Qt::WindowMinimized) ? Qt::WindowMinimized : ((windowState() & Qt::WindowMaximized) ? Qt::WindowMaximized : ((windowState() & Qt::WindowFullScreen) ? Qt::WindowFullScreen : Qt::WindowNoState)); psStateChanged(state); if (App::main()) { App::main()->mainStateChanged(state); } } else if (obj == this && (evt->type() == QEvent::Move || evt->type() == QEvent::Resize)) { psUpdatedPosition(); } return PsMainWindow::eventFilter(obj, evt); }