This commit is contained in:
John Preston 2016-09-20 16:24:51 +03:00
commit 2ea4c87d78
11 changed files with 167 additions and 68 deletions

View file

@ -126,6 +126,13 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) {
} }
} }
bool Application::event(QEvent *e) {
if (e->type() == QEvent::Close) {
App::quit();
}
return QApplication::event(e);
}
void Application::socketConnected() { void Application::socketConnected() {
LOG(("Socket connected, this is not the first application instance, sending show command...")); LOG(("Socket connected, this is not the first application instance, sending show command..."));
_secondInstance = true; _secondInstance = true;

View file

@ -28,12 +28,12 @@ class Application : public QApplication {
Q_OBJECT Q_OBJECT
public: public:
Application(int &argc, char **argv); Application(int &argc, char **argv);
bool event(QEvent *e) override;
// Single instance application // Single instance application
public slots: public slots:
void socketConnected(); void socketConnected();
void socketError(QLocalSocket::LocalSocketError e); void socketError(QLocalSocket::LocalSocketError e);
void socketDisconnected(); void socketDisconnected();
@ -48,7 +48,6 @@ public slots:
void closeApplication(); // will be done in aboutToQuit() void closeApplication(); // will be done in aboutToQuit()
private: private:
typedef QPair<QLocalSocket*, QByteArray> LocalClient; typedef QPair<QLocalSocket*, QByteArray> LocalClient;
typedef QList<LocalClient> LocalClients; typedef QList<LocalClient> LocalClients;
@ -64,7 +63,6 @@ private:
// Autoupdating // Autoupdating
public: public:
void startUpdateCheck(bool forceWait); void startUpdateCheck(bool forceWait);
void stopUpdate(); void stopUpdate();
@ -78,7 +76,6 @@ public:
int32 updatingReady(); int32 updatingReady();
signals: signals:
void updateChecking(); void updateChecking();
void updateLatest(); void updateLatest();
void updateProgress(qint64 ready, qint64 total); void updateProgress(qint64 ready, qint64 total);
@ -86,7 +83,6 @@ signals:
void updateFailed(); void updateFailed();
public slots: public slots:
void updateCheck(); void updateCheck();
void updateGotCurrent(); void updateGotCurrent();
@ -96,7 +92,6 @@ public slots:
void onUpdateFailed(); void onUpdateFailed();
private: private:
SingleTimer _updateCheckTimer; SingleTimer _updateCheckTimer;
QNetworkReply *_updateReply = nullptr; QNetworkReply *_updateReply = nullptr;
QNetworkAccessManager _updateManager; QNetworkAccessManager _updateManager;

View file

@ -5896,7 +5896,9 @@ void LocationManager::init() {
App::setProxySettings(*manager); App::setProxySettings(*manager);
connect(manager, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), this, SLOT(onFailed(QNetworkReply*))); connect(manager, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), this, SLOT(onFailed(QNetworkReply*)));
#ifndef OS_MAC_OLD
connect(manager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), this, SLOT(onFailed(QNetworkReply*))); connect(manager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), this, SLOT(onFailed(QNetworkReply*)));
#endif // OS_MAC_OLD
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*))); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)));
if (black) { if (black) {

View file

@ -581,6 +581,7 @@ namespace {
FileKey _backgroundKey = 0; FileKey _backgroundKey = 0;
bool _backgroundWasRead = false; bool _backgroundWasRead = false;
bool _readingUserSettings = false;
FileKey _userSettingsKey = 0; FileKey _userSettingsKey = 0;
FileKey _recentHashtagsAndBotsKey = 0; FileKey _recentHashtagsAndBotsKey = 0;
bool _recentHashtagsAndBotsWereRead = false; bool _recentHashtagsAndBotsWereRead = false;
@ -1548,6 +1549,12 @@ namespace {
} }
void _writeUserSettings() { void _writeUserSettings() {
if (_readingUserSettings) {
LOG(("App Error: attempt to write settings while reading them!"));
return;
}
LOG(("App Info: writing encrypted user settings..."));
if (!_userSettingsKey) { if (!_userSettingsKey) {
_userSettingsKey = genKey(); _userSettingsKey = genKey();
_mapChanged = true; _mapChanged = true;
@ -1622,22 +1629,28 @@ namespace {
void _readUserSettings() { void _readUserSettings() {
FileReadDescriptor userSettings; FileReadDescriptor userSettings;
if (!readEncryptedFile(userSettings, _userSettingsKey)) { if (!readEncryptedFile(userSettings, _userSettingsKey)) {
LOG(("App Info: could not read encrypted user settings..."));
_readOldUserSettings(); _readOldUserSettings();
return _writeUserSettings(); return _writeUserSettings();
} }
LOG(("App Info: reading encrypted user settings...")); LOG(("App Info: reading encrypted user settings..."));
_readingUserSettings = true;
while (!userSettings.stream.atEnd()) { while (!userSettings.stream.atEnd()) {
quint32 blockId; quint32 blockId;
userSettings.stream >> blockId; userSettings.stream >> blockId;
if (!_checkStreamStatus(userSettings.stream)) { if (!_checkStreamStatus(userSettings.stream)) {
_readingUserSettings = false;
return _writeUserSettings(); return _writeUserSettings();
} }
if (!_readSetting(blockId, userSettings.stream, userSettings.version)) { if (!_readSetting(blockId, userSettings.stream, userSettings.version)) {
_readingUserSettings = false;
return _writeUserSettings(); return _writeUserSettings();
} }
} }
_readingUserSettings = false;
LOG(("App Info: encrypted user settings read."));
} }
void _writeMtpData() { void _writeMtpData() {

View file

@ -520,6 +520,74 @@ void MediaView::step_radial(uint64 ms, bool timer) {
} }
} }
void MediaView::zoomIn() {
int32 newZoom = _zoom;
if (newZoom == ZoomToScreenLevel) {
if (qCeil(_zoomToScreen) <= MaxZoomLevel) {
newZoom = qCeil(_zoomToScreen);
}
} else {
if (newZoom < _zoomToScreen && (newZoom + 1 > _zoomToScreen || (_zoomToScreen > MaxZoomLevel && newZoom == MaxZoomLevel))) {
newZoom = ZoomToScreenLevel;
} else if (newZoom < MaxZoomLevel) {
++newZoom;
}
}
zoomUpdate(newZoom);
}
void MediaView::zoomOut() {
int32 newZoom = _zoom;
if (newZoom == ZoomToScreenLevel) {
if (qFloor(_zoomToScreen) >= -MaxZoomLevel) {
newZoom = qFloor(_zoomToScreen);
}
} else {
if (newZoom > _zoomToScreen && (newZoom - 1 < _zoomToScreen || (_zoomToScreen < -MaxZoomLevel && newZoom == -MaxZoomLevel))) {
newZoom = ZoomToScreenLevel;
} else if (newZoom > -MaxZoomLevel) {
--newZoom;
}
}
zoomUpdate(newZoom);
}
void MediaView::zoomReset() {
int32 newZoom = _zoom;
if (_zoom == 0) {
if (qFloor(_zoomToScreen) == qCeil(_zoomToScreen) && qRound(_zoomToScreen) >= -MaxZoomLevel && qRound(_zoomToScreen) <= MaxZoomLevel) {
newZoom = qRound(_zoomToScreen);
} else {
newZoom = ZoomToScreenLevel;
}
} else {
newZoom = 0;
}
_x = -_width / 2;
_y = -((gifShown() ? _gif->height() : (_current.height() / cIntRetinaFactor())) / 2);
float64 z = (_zoom == ZoomToScreenLevel) ? _zoomToScreen : _zoom;
if (z >= 0) {
_x = qRound(_x * (z + 1));
_y = qRound(_y * (z + 1));
} else {
_x = qRound(_x / (-z + 1));
_y = qRound(_y / (-z + 1));
}
_x += width() / 2;
_y += height() / 2;
update();
zoomUpdate(newZoom);
}
void MediaView::zoomUpdate(int32 &newZoom) {
if (newZoom != ZoomToScreenLevel) {
while ((newZoom < 0 && (-newZoom + 1) > _w) || (-newZoom + 1) > _h) {
++newZoom;
}
}
setZoomLevel(newZoom);
}
void MediaView::clearData() { void MediaView::clearData() {
if (!isHidden()) { if (!isHidden()) {
hide(); hide();
@ -1811,61 +1879,48 @@ void MediaView::keyPressEvent(QKeyEvent *e) {
} else if (e->key() == Qt::Key_Right) { } else if (e->key() == Qt::Key_Right) {
moveToNext(1); moveToNext(1);
} else if (e->modifiers().testFlag(Qt::ControlModifier) && (e->key() == Qt::Key_Plus || e->key() == Qt::Key_Equal || e->key() == ']' || e->key() == Qt::Key_Asterisk || e->key() == Qt::Key_Minus || e->key() == Qt::Key_Underscore || e->key() == Qt::Key_0)) { } else if (e->modifiers().testFlag(Qt::ControlModifier) && (e->key() == Qt::Key_Plus || e->key() == Qt::Key_Equal || e->key() == ']' || e->key() == Qt::Key_Asterisk || e->key() == Qt::Key_Minus || e->key() == Qt::Key_Underscore || e->key() == Qt::Key_0)) {
int32 newZoom = _zoom;
if (e->key() == Qt::Key_Plus || e->key() == Qt::Key_Equal || e->key() == Qt::Key_Asterisk || e->key() == ']') { if (e->key() == Qt::Key_Plus || e->key() == Qt::Key_Equal || e->key() == Qt::Key_Asterisk || e->key() == ']') {
if (newZoom == ZoomToScreenLevel) { zoomIn();
if (qCeil(_zoomToScreen) <= MaxZoomLevel) {
newZoom = qCeil(_zoomToScreen);
}
} else {
if (newZoom < _zoomToScreen && (newZoom + 1 > _zoomToScreen || (_zoomToScreen > MaxZoomLevel && newZoom == MaxZoomLevel))) {
newZoom = ZoomToScreenLevel;
} else if (newZoom < MaxZoomLevel) {
++newZoom;
}
}
} else if (e->key() == Qt::Key_Minus || e->key() == Qt::Key_Underscore) { } else if (e->key() == Qt::Key_Minus || e->key() == Qt::Key_Underscore) {
if (newZoom == ZoomToScreenLevel) { zoomOut();
if (qFloor(_zoomToScreen) >= -MaxZoomLevel) { } else {
newZoom = qFloor(_zoomToScreen); zoomReset();
}
}
}
void MediaView::wheelEvent(QWheelEvent *e) {
#ifdef OS_MAC_OLD
constexpr auto step = 120;
#else // OS_MAC_OLD
constexpr auto step = static_cast<int>(QWheelEvent::DefaultDeltasPerStep);
#endif // OS_MAC_OLD
_verticalWheelDelta += e->angleDelta().y();
while (qAbs(_verticalWheelDelta) >= step) {
if (_verticalWheelDelta < 0) {
_verticalWheelDelta += step;
if (e->modifiers().testFlag(Qt::ControlModifier)) {
zoomOut();
} else {
#ifndef OS_MAC_OLD
if (e->source() == Qt::MouseEventNotSynthesized) {
moveToNext(1);
}
#endif // OS_MAC_OLD
} }
} else { } else {
if (newZoom > _zoomToScreen && (newZoom - 1 < _zoomToScreen || (_zoomToScreen < -MaxZoomLevel && newZoom == -MaxZoomLevel))) { _verticalWheelDelta -= step;
newZoom = ZoomToScreenLevel; if (e->modifiers().testFlag(Qt::ControlModifier)) {
} else if (newZoom > -MaxZoomLevel) { zoomIn();
--newZoom;
}
}
} else { } else {
if (_zoom == 0) { #ifndef OS_MAC_OLD
if (qFloor(_zoomToScreen) == qCeil(_zoomToScreen) && qRound(_zoomToScreen) >= -MaxZoomLevel && qRound(_zoomToScreen) <= MaxZoomLevel) { if (e->source() == Qt::MouseEventNotSynthesized) {
newZoom = qRound(_zoomToScreen); moveToNext(-1);
} else {
newZoom = ZoomToScreenLevel;
} }
} else { #endif // OS_MAC_OLD
newZoom = 0;
}
_x = -_width / 2;
_y = -((gifShown() ? _gif->height() : (_current.height() / cIntRetinaFactor())) / 2);
float64 z = (_zoom == ZoomToScreenLevel) ? _zoomToScreen : _zoom;
if (z >= 0) {
_x = qRound(_x * (z + 1));
_y = qRound(_y * (z + 1));
} else {
_x = qRound(_x / (-z + 1));
_y = qRound(_y / (-z + 1));
}
_x += width() / 2;
_y += height() / 2;
update();
}
if (newZoom != ZoomToScreenLevel) {
while ((newZoom < 0 && (-newZoom + 1) > _w) || (-newZoom + 1) > _h) {
++newZoom;
} }
} }
setZoomLevel(newZoom);
} }
} }
@ -2114,6 +2169,8 @@ void MediaView::mousePressEvent(QMouseEvent *e) {
_yStart = _y; _yStart = _y;
} }
} }
} else if (e->button() == Qt::MiddleButton) {
zoomReset();
} }
activateControls(); activateControls();
} }

View file

@ -107,6 +107,7 @@ protected:
void paintEvent(QPaintEvent *e) override; void paintEvent(QPaintEvent *e) override;
void keyPressEvent(QKeyEvent *e) override; void keyPressEvent(QKeyEvent *e) override;
void wheelEvent(QWheelEvent *e) override;
void mousePressEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override;
void mouseDoubleClickEvent(QMouseEvent *e) override; void mouseDoubleClickEvent(QMouseEvent *e) override;
void mouseMoveEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override;
@ -170,6 +171,11 @@ private:
void step_state(uint64 ms, bool timer); void step_state(uint64 ms, bool timer);
void step_radial(uint64 ms, bool timer); void step_radial(uint64 ms, bool timer);
void zoomIn();
void zoomOut();
void zoomReset();
void zoomUpdate(int32 &newZoom);
void paintDocRadialLoading(Painter &p, bool radial, float64 radialOpacity); void paintDocRadialLoading(Painter &p, bool radial, float64 radialOpacity);
QBrush _transparentBrush; QBrush _transparentBrush;
@ -316,6 +322,8 @@ private:
typedef QMap<OverState, anim::fvalue> ShowingOpacities; typedef QMap<OverState, anim::fvalue> ShowingOpacities;
ShowingOpacities _animOpacities; ShowingOpacities _animOpacities;
int _verticalWheelDelta = 0;
void updateOverRect(OverState state); void updateOverRect(OverState state);
bool updateOverState(OverState newState); bool updateOverState(OverState newState);
float64 overLevel(OverState control) const; float64 overLevel(OverState control) const;

View file

@ -818,7 +818,9 @@ WebLoadManager::WebLoadManager(QThread *thread) {
connect(this, SIGNAL(error(webFileLoader*)), _webLoadMainManager, SLOT(error(webFileLoader*))); connect(this, SIGNAL(error(webFileLoader*)), _webLoadMainManager, SLOT(error(webFileLoader*)));
connect(&_manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(onFailed(QNetworkReply*))); connect(&_manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(onFailed(QNetworkReply*)));
#ifndef OS_MAC_OLD
connect(&_manager, SIGNAL(sslErrors(QNetworkReply*,const QList<QSslError>&)), this, SLOT(onFailed(QNetworkReply*))); connect(&_manager, SIGNAL(sslErrors(QNetworkReply*,const QList<QSslError>&)), this, SLOT(onFailed(QNetworkReply*)));
#endif // OS_MAC_OLD
} }
void WebLoadManager::append(webFileLoader *loader, const QString &url) { void WebLoadManager::append(webFileLoader *loader, const QString &url) {

View file

@ -189,7 +189,6 @@
'<(qt_loc)/plugins/bearer', '<(qt_loc)/plugins/bearer',
'<(qt_loc)/plugins/platforms', '<(qt_loc)/plugins/platforms',
'<(qt_loc)/plugins/imageformats', '<(qt_loc)/plugins/imageformats',
'<(qt_loc)/plugins/platforminputcontexts',
], ],
'defines': [ 'defines': [
'QT_WIDGETS_LIB', 'QT_WIDGETS_LIB',
@ -199,6 +198,9 @@
], ],
'conditions': [ 'conditions': [
[ 'build_linux', { [ 'build_linux', {
'library_dirs': [
'<(qt_loc)/plugins/platforminputcontexts',
],
'libraries': [ 'libraries': [
'/usr/local/lib/libxkbcommon.a', '/usr/local/lib/libxkbcommon.a',
'<@(qt_libs_release)', '<@(qt_libs_release)',

View file

@ -19,7 +19,7 @@ else
#gyp --depth=. --generator-output=../.. -Goutput_dir=out Telegram.gyp --format=xcode-ninja #gyp --depth=. --generator-output=../.. -Goutput_dir=out Telegram.gyp --format=xcode-ninja
#gyp --depth=. --generator-output=../.. -Goutput_dir=out Telegram.gyp --format=xcode #gyp --depth=. --generator-output=../.. -Goutput_dir=out Telegram.gyp --format=xcode
# use patched gyp with Xcode project generator # use patched gyp with Xcode project generator
../../../Libraries/gyp/gyp --depth=. --generator-output=../.. -Goutput_dir=out Telegram.gyp --format=xcode ../../../Libraries/gyp/gyp --depth=. --generator-output=../.. -Goutput_dir=out Telegram.gyp -Gxcode_upgrade_check_project_version=800 --format=xcode
fi fi
cd ../.. cd ../..

View file

@ -91,6 +91,12 @@
'lzma', 'lzma',
], ],
}], }],
[ 'build_mac', {
'include_dirs': [
'<(libs_loc)/openssl-xcode/include'
],
'library_dirs': [
'<(libs_loc)/openssl-xcode',
], ],
'xcode_settings': { 'xcode_settings': {
'OTHER_LDFLAGS': [ 'OTHER_LDFLAGS': [
@ -99,6 +105,8 @@
'-llzma', '-llzma',
], ],
}, },
}],
],
'include_dirs': [ 'include_dirs': [
'<(src_loc)', '<(src_loc)',
'<(libs_loc)/lzma/C', '<(libs_loc)/lzma/C',

View file

@ -205,6 +205,11 @@ If you didn't install Windows SDKs before, you need to install them now. To inst
If you already have Windows SDKs then find the library folder and correct it at configure's command below (like **C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86**). If you already have Windows SDKs then find the library folder and correct it at configure's command below (like **C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86**).
#### Building library #### Building library
go to Libraries directory
D:
cd /tbuild/libraries/qt5_6_0/qtbase
and run
configure -debug-and-release -force-debug-info -opensource -confirm-license -static -I "D:\TBuild\Libraries\openssl\Release\include" -L "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" -l Gdi32 -no-opengl -openssl-linked OPENSSL_LIBS_DEBUG="D:\TBuild\Libraries\openssl_debug\Debug\lib\ssleay32.lib D:\TBuild\Libraries\openssl_debug\Debug\lib\libeay32.lib" OPENSSL_LIBS_RELEASE="D:\TBuild\Libraries\openssl\Release\lib\ssleay32.lib D:\TBuild\Libraries\openssl\Release\lib\libeay32.lib" -mp -nomake examples -nomake tests -platform win32-msvc2015 configure -debug-and-release -force-debug-info -opensource -confirm-license -static -I "D:\TBuild\Libraries\openssl\Release\include" -L "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" -l Gdi32 -no-opengl -openssl-linked OPENSSL_LIBS_DEBUG="D:\TBuild\Libraries\openssl_debug\Debug\lib\ssleay32.lib D:\TBuild\Libraries\openssl_debug\Debug\lib\libeay32.lib" OPENSSL_LIBS_RELEASE="D:\TBuild\Libraries\openssl\Release\lib\ssleay32.lib D:\TBuild\Libraries\openssl\Release\lib\libeay32.lib" -mp -nomake examples -nomake tests -platform win32-msvc2015
nmake nmake
@ -247,8 +252,8 @@ and run
#### Build #### Build
* Open in VS2015 **D:\TBuild\Libraries\breakpad\src\client\windows\breakpad_client.sln** * Open in VS2015 **D:\TBuild\Libraries\breakpad\src\client\windows\breakpad_client.sln**
* Change "Treat WChar_t As Built in Type" to "No" in all projects & configurations * Change "Treat WChar_t As Built in Type" to "No" in all projects & configurations (should be in project>>properties>>C/C++>>Language)
* Change "Treat Warnings As Errors" to "No" in all projects & configurations * Change "Treat Warnings As Errors" to "No" in all projects & configurations (should be in project>>properties>>C/C++>>General)
* Build Debug configuration * Build Debug configuration
* Build Release configuration * Build Release configuration