コード例 #1
0
ファイル: window.cpp プロジェクト: AarashFarahani/tdesktop
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);
}
コード例 #2
0
ファイル: main.cpp プロジェクト: 4ker/tdesktop
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;
}
コード例 #3
0
ファイル: window.cpp プロジェクト: MatthewBeardmore/tdesktop
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);
}