First Kotatogram version

This commit is contained in:
Eric Kotato 2019-09-21 19:10:46 +03:00
parent 04b9d4bdb5
commit 37c7b0af13
57 changed files with 149 additions and 143 deletions

View file

@ -1,63 +1,26 @@
# [Telegram Desktop][telegram_desktop] – Official Messenger # Kotatogram – experimental [Telegram Desktop][telegram_desktop] fork.
This is the complete source code and the build instructions for the alpha version of the official desktop client for the [Telegram][telegram] messenger, based on the [Telegram API][telegram_api] and the [MTProto][telegram_proto] secure protocol. Original README with build instructions and licenses could be found in [Telegram Desktop repository][telegram_desktop_readme].
[![Version](https://badge.fury.io/gh/telegramdesktop%2Ftdesktop.svg)](https://github.com/telegramdesktop/tdesktop/releases) There will be builds of Kotatogram for Windows, and possibly Linux. No autoupdates for now.
[![Build Status](https://travis-ci.org/telegramdesktop/tdesktop.svg?branch=dev)](https://travis-ci.org/telegramdesktop/tdesktop)
[![Build status](https://ci.appveyor.com/api/projects/status/uiw2y768iy4i5bu8/branch/dev?svg=true)](https://ci.appveyor.com/project/telegramdesktop/tdesktop)
[![Preview of Telegram Desktop][preview_image]][preview_image_url] Expect a lot of breaking changes.
The source code is published under GPLv3 with OpenSSL exception, the license is available [here][license]. ## Changes
## Supported systems * Mention user by name, even if username was set (right mouse click on mention suggestion).
* Clickable links in user bios.
* Windows XP - Windows 10 (**not** RT) * Custom font start options:
* Mac OS X 10.8 - Mac OS X 10.11 * `-mainfont` to set main font family (e.g. `-mainfont "Open Sans"`).
* Mac OS X 10.6 - Mac OS X 10.7 (separate build) * `-semiboldfont` to set semibold font family (`-semiboldfont "Open Sans Semibold"`).
* Ubuntu 12.04 - Ubuntu 19.04 * `-semiboldisbold` - if you want set semibold font to be bold. If you pass `Open Sans Bold` to `-semiboldfont`, that won't work. You should use family name (e.g. `-semiboldfont "Open Sans" -semiboldisbold`)
* Fedora 22 - Fedora 30 * `-monospacefont` to set monospaced font (e.g. `-monospacefont "Consolas"`)
* [Snappy](https://snapcraft.io/telegram-desktop) * You can set "Nobody" in profile photo privacy.
* [Flathub](https://flathub.org/apps/details/org.telegram.desktop) * Minimum photo size in chat has been increased to 200px, so captions should be more readable.
* Maximum sticker size in chat has been decreased to 128px.
## Third-party * Maximum caption field height has been increased to 150px (should fit about 5 lines).
* Allow interface scales `75-99` to be saved after restarting without start option.
* Qt 5.3.2 and 5.6.2, slightly patched ([LGPL](http://doc.qt.io/qt-5/lgpl.html))
* OpenSSL 1.0.1g ([OpenSSL License](https://www.openssl.org/source/license.html))
* zlib 1.2.8 ([zlib License](http://www.zlib.net/zlib_license.html))
* libexif 0.6.20 ([LGPL](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html))
* LZMA SDK 9.20 ([public domain](http://www.7-zip.org/sdk.html))
* liblzma ([public domain](http://tukaani.org/xz/))
* Google Breakpad ([License](https://chromium.googlesource.com/breakpad/breakpad/+/master/LICENSE))
* Google Crashpad ([Apache License 2.0](https://chromium.googlesource.com/crashpad/crashpad/+/master/LICENSE))
* GYP ([BSD License](https://github.com/bnoordhuis/gyp/blob/master/LICENSE))
* Ninja ([Apache License 2.0](https://github.com/ninja-build/ninja/blob/master/COPYING))
* OpenAL Soft ([LGPL](https://github.com/kcat/openal-soft/blob/master/COPYING))
* Opus codec ([BSD License](http://www.opus-codec.org/license/))
* FFmpeg ([LGPL](https://www.ffmpeg.org/legal.html))
* Guideline Support Library ([MIT License](https://github.com/Microsoft/GSL/blob/master/LICENSE))
* Mapbox Variant ([BSD License](https://github.com/mapbox/variant/blob/master/LICENSE))
* Range-v3 ([Boost License](https://github.com/ericniebler/range-v3/blob/master/LICENSE.txt))
* Open Sans font ([Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html))
* Emoji alpha codes ([MIT License](https://github.com/emojione/emojione/blob/master/extras/alpha-codes/LICENSE.md))
* Catch test framework ([Boost License](https://github.com/philsquared/Catch/blob/master/LICENSE.txt))
* xxHash ([BSD License](https://github.com/Cyan4973/xxHash/blob/dev/LICENSE))
## Build instructions
* [Visual Studio 2019][msvc]
* [Xcode 10][xcode]
* [GYP/CMake on GNU/Linux][cmake]
[//]: # (LINKS) [//]: # (LINKS)
[telegram]: https://telegram.org
[telegram_desktop]: https://desktop.telegram.org [telegram_desktop]: https://desktop.telegram.org
[telegram_api]: https://core.telegram.org [telegram_desktop_readme]: https://github.com/telegramdesktop/tdesktop/blob/dev/README.md
[telegram_proto]: https://core.telegram.org/mtproto
[license]: LICENSE
[msvc]: docs/building-msvc.md
[xcode]: docs/building-xcode.md
[xcode_old]: docs/building-xcode-old.md
[cmake]: docs/building-cmake.md
[preview_image]: https://github.com/telegramdesktop/tdesktop/blob/dev/docs/assets/preview.png "Preview of Telegram Desktop"
[preview_image_url]: https://raw.githubusercontent.com/telegramdesktop/tdesktop/dev/docs/assets/preview.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 826 B

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -223,6 +223,9 @@ namespace App {
void initMedia() { void initMedia() {
if (!::monofont) { if (!::monofont) {
QString family; QString family;
if (!cMonospaceFont().isEmpty()) {
tryFontFamily(family, cMonospaceFont());
}
tryFontFamily(family, qsl("Consolas")); tryFontFamily(family, qsl("Consolas"));
tryFontFamily(family, qsl("Liberation Mono")); tryFontFamily(family, qsl("Liberation Mono"));
tryFontFamily(family, qsl("Menlo")); tryFontFamily(family, qsl("Menlo"));

View file

@ -27,11 +27,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace { namespace {
rpl::producer<TextWithEntities> Text1() { rpl::producer<TextWithEntities> Text1() {
return tr::lng_about_text1( return rpl::single(
lt_api_link, qsl("Unofficial experimental fork of ") +
tr::lng_about_text1_api( Ui::Text::Link(
) | Ui::Text::ToLink("https://core.telegram.org/api"), "Telegram Desktop",
Ui::Text::WithEntities); "https://github.com/telegramdesktop/tdesktop") +
qsl("."));
} }
rpl::producer<TextWithEntities> Text2() { rpl::producer<TextWithEntities> Text2() {
@ -39,19 +40,25 @@ rpl::producer<TextWithEntities> Text2() {
lt_gpl_link, lt_gpl_link,
rpl::single(Ui::Text::Link( rpl::single(Ui::Text::Link(
"GNU GPL", "GNU GPL",
"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE")), "https://github.com/kotatogram/kotatogram-desktop/blob/master/LICENSE")),
lt_github_link, lt_github_link,
rpl::single(Ui::Text::Link( rpl::single(Ui::Text::Link(
"GitHub", "GitHub",
"https://github.com/telegramdesktop/tdesktop")), "https://github.com/kotatogram/kotatogram-desktop")),
Ui::Text::WithEntities); Ui::Text::WithEntities);
} }
rpl::producer<TextWithEntities> Text3() { rpl::producer<TextWithEntities> Text3() {
return tr::lng_about_text3( return rpl::single(
lt_faq_link, qsl("Visit ") +
tr::lng_about_text3_faq() | Ui::Text::ToLink(telegramFaqLink()), Ui::Text::Link(
Ui::Text::WithEntities); "Telegram FAQ",
telegramFaqLink()) +
qsl(" or ") +
Ui::Text::Link(
"Kotatogram channel",
telegramFaqLink()) +
qsl(" for more info."));
} }
} // namespace } // namespace
@ -64,7 +71,7 @@ AboutBox::AboutBox(QWidget *parent)
} }
void AboutBox::prepare() { void AboutBox::prepare() {
setTitle(rpl::single(qsl("Telegram Desktop"))); setTitle(rpl::single(qsl("Kotatogram Desktop")));
addButton(tr::lng_close(), [this] { closeBox(); }); addButton(tr::lng_close(), [this] { closeBox(); });

View file

@ -563,7 +563,7 @@ autoDownloadLimitPadding: margins(22px, 8px, 22px, 8px);
confirmCaptionArea: InputField(defaultInputField) { confirmCaptionArea: InputField(defaultInputField) {
textMargins: margins(1px, 26px, 31px, 4px); textMargins: margins(1px, 26px, 31px, 4px);
heightMax: 78px; heightMax: 150px;
} }
confirmBg: windowBgOver; confirmBg: windowBgOver;
confirmMaxHeight: 245px; confirmMaxHeight: 245px;

View file

@ -879,7 +879,7 @@ void FieldAutocompleteInner::setRecentInlineBotsInRows(int32 bots) {
void FieldAutocompleteInner::mousePressEvent(QMouseEvent *e) { void FieldAutocompleteInner::mousePressEvent(QMouseEvent *e) {
selectByMouse(e->globalPos()); selectByMouse(e->globalPos());
if (e->button() == Qt::LeftButton) { if (e->button() == Qt::LeftButton || e->button() == Qt::RightButton) {
if (_overDelete && _sel >= 0 && _sel < (_mrows->isEmpty() ? _hrows->size() : _recentInlineBotsInRows)) { if (_overDelete && _sel >= 0 && _sel < (_mrows->isEmpty() ? _hrows->size() : _recentInlineBotsInRows)) {
bool removed = false; bool removed = false;
if (_mrows->isEmpty()) { if (_mrows->isEmpty()) {
@ -909,7 +909,11 @@ void FieldAutocompleteInner::mousePressEvent(QMouseEvent *e) {
selectByMouse(e->globalPos()); selectByMouse(e->globalPos());
} else if (_srows->empty()) { } else if (_srows->empty()) {
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick); if (e->button() == Qt::LeftButton) {
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick);
} else if (e->button() == Qt::RightButton) {
chooseSelected(FieldAutocomplete::ChooseMethod::ByRightClick);
}
} else { } else {
_down = _sel; _down = _sel;
_previewTimer.callOnce(QApplication::startDragTime()); _previewTimer.callOnce(QApplication::startDragTime());
@ -932,7 +936,11 @@ void FieldAutocompleteInner::mouseReleaseEvent(QMouseEvent *e) {
if (_sel < 0 || _sel != pressed || _srows->empty()) return; if (_sel < 0 || _sel != pressed || _srows->empty()) return;
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick); if (e->button() == Qt::LeftButton) {
chooseSelected(FieldAutocomplete::ChooseMethod::ByClick);
} else if (e->button() == Qt::RightButton) {
chooseSelected(FieldAutocomplete::ChooseMethod::ByRightClick);
}
} }
void FieldAutocompleteInner::enterEventHook(QEvent *e) { void FieldAutocompleteInner::enterEventHook(QEvent *e) {

View file

@ -70,6 +70,7 @@ public:
ByEnter, ByEnter,
ByTab, ByTab,
ByClick, ByClick,
ByRightClick,
}; };
bool chooseSelected(ChooseMethod method) const; bool chooseSelected(ChooseMethod method) const;

View file

@ -11,7 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "settings.h" #include "settings.h"
constexpr str_const AppNameOld = "Telegram Win (Unofficial)"; constexpr str_const AppNameOld = "Telegram Win (Unofficial)";
constexpr str_const AppName = "Telegram Desktop"; constexpr str_const AppName = "Kotatogram Desktop";
constexpr str_const AppId = "{53F49750-6209-4FBF-9CA8-7A333C87D1ED}"; // used in updater.cpp and Setup.iss for Windows constexpr str_const AppId = "{53F49750-6209-4FBF-9CA8-7A333C87D1ED}"; // used in updater.cpp and Setup.iss for Windows
constexpr str_const AppFile = "Telegram"; constexpr str_const AppFile = "Telegram";

View file

@ -167,7 +167,7 @@ NotStartedWindow::NotStartedWindow()
: _label(this) : _label(this)
, _log(this) , _log(this)
, _close(this) { , _close(this) {
_label.setText(qsl("Could not start Telegram Desktop!\nYou can see complete log below:")); _label.setText(qsl("Could not start Kotatogram Desktop!\nYou can see complete log below:"));
_log.setPlainText(Logs::full()); _log.setPlainText(Logs::full());
@ -303,9 +303,9 @@ LastCrashedWindow::LastCrashedWindow(
connect(&_networkSettings, SIGNAL(clicked()), this, SLOT(onNetworkSettings())); connect(&_networkSettings, SIGNAL(clicked()), this, SLOT(onNetworkSettings()));
if (_sendingState == SendingNoReport) { if (_sendingState == SendingNoReport) {
_label.setText(qsl("Last time Telegram Desktop was not closed properly.")); _label.setText(qsl("Last time Kotatogram Desktop was not closed properly."));
} else { } else {
_label.setText(qsl("Last time Telegram Desktop crashed :(")); _label.setText(qsl("Last time Kotatogram Desktop crashed :("));
} }
if (_updaterData) { if (_updaterData) {
@ -364,7 +364,7 @@ LastCrashedWindow::LastCrashedWindow(
connect(&_showReport, SIGNAL(clicked()), this, SLOT(onViewReport())); connect(&_showReport, SIGNAL(clicked()), this, SLOT(onViewReport()));
_saveReport.setText(qsl("SAVE TO FILE")); _saveReport.setText(qsl("SAVE TO FILE"));
connect(&_saveReport, SIGNAL(clicked()), this, SLOT(onSaveReport())); connect(&_saveReport, SIGNAL(clicked()), this, SLOT(onSaveReport()));
_getApp.setText(qsl("GET THE LATEST OFFICIAL VERSION OF TELEGRAM DESKTOP")); _getApp.setText(qsl("GET THE LATEST VERSION OF KOTATOGRAM DESKTOP"));
connect(&_getApp, SIGNAL(clicked()), this, SLOT(onGetApp())); connect(&_getApp, SIGNAL(clicked()), this, SLOT(onGetApp()));
_send.setText(qsl("SEND CRASH REPORT")); _send.setText(qsl("SEND CRASH REPORT"));
@ -496,12 +496,12 @@ void LastCrashedWindow::onCheckingFinished() {
LOG(("Crash report check for sending done, result: %1").arg(QString::fromUtf8(result))); LOG(("Crash report check for sending done, result: %1").arg(QString::fromUtf8(result)));
if (result == "Old") { if (result == "Old") {
_pleaseSendReport.setText(qsl("This report is about some old version of Telegram Desktop.")); _pleaseSendReport.setText(qsl("This report is about some old version of Kotatogram Desktop."));
_sendingState = SendingTooOld; _sendingState = SendingTooOld;
updateControls(); updateControls();
return; return;
} else if (result == "Unofficial") { } else if (result == "Unofficial") {
_pleaseSendReport.setText(qsl("You use some custom version of Telegram Desktop.")); _pleaseSendReport.setText(qsl("You use some custom version of Kotatogram Desktop."));
_sendingState = SendingUnofficial; _sendingState = SendingUnofficial;
updateControls(); updateControls();
return; return;
@ -781,7 +781,7 @@ void LastCrashedWindow::updateControls() {
} }
QRect scr(QApplication::primaryScreen()->availableGeometry()); QRect scr(QApplication::primaryScreen()->availableGeometry());
QSize s(2 * padding + QFontMetrics(_label.font()).width(qsl("Last time Telegram Desktop was not closed properly.")) + padding + _networkSettings.width(), h); QSize s(2 * padding + QFontMetrics(_label.font()).width(qsl("Last time Kotatogram Desktop was not closed properly.")) + padding + _networkSettings.width(), h);
if (s == size()) { if (s == size()) {
resizeEvent(0); resizeEvent(0);
} else { } else {

View file

@ -435,7 +435,7 @@ StartResult Start() {
fclose(f); fclose(f);
LOG(("Opened '%1' for reading, the previous " LOG(("Opened '%1' for reading, the previous "
"Telegram Desktop launch was not finished properly :( " "Kotatogram Desktop launch was not finished properly :( "
"Crash log size: %2").arg(ReportPath).arg(lastdump.size())); "Crash log size: %2").arg(ReportPath).arg(lastdump.size()));
return lastdump; return lastdump;

View file

@ -391,6 +391,10 @@ void Launcher::processArguments() {
{ "-workdir" , KeyFormat::OneValue }, { "-workdir" , KeyFormat::OneValue },
{ "--" , KeyFormat::OneValue }, { "--" , KeyFormat::OneValue },
{ "-scale" , KeyFormat::OneValue }, { "-scale" , KeyFormat::OneValue },
{ "-mainfont" , KeyFormat::OneValue },
{ "-semiboldfont" , KeyFormat::OneValue },
{ "-semiboldisbold" , KeyFormat::NoValues },
{ "-monospacefont" , KeyFormat::OneValue },
}; };
auto parseResult = QMap<QByteArray, QStringList>(); auto parseResult = QMap<QByteArray, QStringList>();
auto parsingKey = QByteArray(); auto parsingKey = QByteArray();
@ -448,6 +452,11 @@ void Launcher::processArguments() {
? kInterfaceScaleAuto ? kInterfaceScaleAuto
: value; : value;
} }
gMainFont = parseResult.value("-mainfont", {}).join(QString());
gSemiboldFont = parseResult.value("-semiboldfont", {}).join(QString());
gSemiboldFontIsBold = parseResult.contains("-semiboldisbold");
gMonospaceFont = parseResult.value("-monospacefont", {}).join(QString());
} }
int Launcher::executeApplication() { int Launcher::executeApplication() {

View file

@ -338,7 +338,7 @@ void Manager::writeDefaultFile() {
return; return;
} }
const char *defaultHeader = R"HEADER( const char *defaultHeader = R"HEADER(
// This is a list of default shortcuts for Telegram Desktop // This is a list of default shortcuts for Kotatogram Desktop
// Please don't modify it, its content is not used in any way // Please don't modify it, its content is not used in any way
// You can place your own shortcuts in the 'shortcuts-custom.json' file // You can place your own shortcuts in the 'shortcuts-custom.json' file

View file

@ -16,6 +16,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#endif // TDESKTOP_OFFICIAL_TARGET #endif // TDESKTOP_OFFICIAL_TARGET
constexpr auto AppVersion = 1008008; constexpr auto AppVersion = 1008008;
constexpr auto AppVersionStr = "1.8.8"; constexpr auto AppVersionStr = "1.8.8-KTG1";
constexpr auto AppBetaVersion = false; constexpr auto AppBetaVersion = false;
constexpr auto AppAlphaVersion = TDESKTOP_ALPHA_VERSION; constexpr auto AppAlphaVersion = TDESKTOP_ALPHA_VERSION;

View file

@ -169,8 +169,8 @@ Stats AbstractWriter::produceTestExample(
auto sessions = Data::SessionsList(); auto sessions = Data::SessionsList();
auto session = Data::Session(); auto session = Data::Session();
session.applicationName = "Telegram Desktop"; session.applicationName = "Kotatogram Desktop";
session.applicationVersion = "1.3.8"; session.applicationVersion = "1.8.8";
session.country = "GB"; session.country = "GB";
session.created = date(); session.created = date();
session.deviceModel = "PC"; session.deviceModel = "PC";

View file

@ -977,7 +977,7 @@ auto HtmlWriter::Wrap::pushMessage(
dialog, dialog,
basePath, basePath,
"This message is not supported by this version " "This message is not supported by this version "
"of Telegram Desktop. Please update the application.") }; "of Kotatogram Desktop. Please update the application.") };
} }
const auto wrapReplyToLink = [&](const QByteArray &text) { const auto wrapReplyToLink = [&](const QByteArray &text) {

View file

@ -104,7 +104,7 @@ QByteArray SerializeMessage(
if (message.media.content.is<UnsupportedMedia>()) { if (message.media.content.is<UnsupportedMedia>()) {
return "Error! This message is not supported " return "Error! This message is not supported "
"by this version of Telegram Desktop. " "by this version of Kotatogram Desktop. "
"Please update the application."; "Please update the application.";
} }

View file

@ -256,7 +256,7 @@ void SettingsWidget::addLocationLabel(
}) | rpl::distinct_until_changed( }) | rpl::distinct_until_changed(
) | rpl::map([](const QString &path) { ) | rpl::map([](const QString &path) {
const auto text = IsDefaultPath(path) const auto text = IsDefaultPath(path)
? QString("Downloads/Telegram Desktop") ? QString("Downloads/Kotatogram Desktop")
: path; : path;
return Ui::Text::Link( return Ui::Text::Link(
QDir::toNativeSeparators(text), QDir::toNativeSeparators(text),

View file

@ -9,10 +9,10 @@ using "basic.style";
using "dialogs/dialogs.style"; using "dialogs/dialogs.style";
using "ui/widgets/widgets.style"; using "ui/widgets/widgets.style";
minPhotoSize: 100px; minPhotoSize: 200px;
minVideoSize: 160px; minVideoSize: 160px;
maxMediaSize: 430px; maxMediaSize: 430px;
maxStickerSize: 256px; maxStickerSize: 128px;
maxGifSize: 320px; maxGifSize: 320px;
maxVideoMessageSize: 240px; maxVideoMessageSize: 240px;
maxSignatureSize: 144px; maxSignatureSize: 144px;

View file

@ -376,7 +376,7 @@ HistoryWidget::HistoryWidget(
InitMessageField(controller, _field); InitMessageField(controller, _field);
_fieldAutocomplete->hide(); _fieldAutocomplete->hide();
connect(_fieldAutocomplete, SIGNAL(mentionChosen(UserData*,FieldAutocomplete::ChooseMethod)), this, SLOT(onMentionInsert(UserData*))); connect(_fieldAutocomplete, SIGNAL(mentionChosen(UserData*,FieldAutocomplete::ChooseMethod)), this, SLOT(onMentionInsert(UserData*,FieldAutocomplete::ChooseMethod)));
connect(_fieldAutocomplete, SIGNAL(hashtagChosen(QString,FieldAutocomplete::ChooseMethod)), this, SLOT(onHashtagOrBotCommandInsert(QString,FieldAutocomplete::ChooseMethod))); connect(_fieldAutocomplete, SIGNAL(hashtagChosen(QString,FieldAutocomplete::ChooseMethod)), this, SLOT(onHashtagOrBotCommandInsert(QString,FieldAutocomplete::ChooseMethod)));
connect(_fieldAutocomplete, SIGNAL(botCommandChosen(QString,FieldAutocomplete::ChooseMethod)), this, SLOT(onHashtagOrBotCommandInsert(QString,FieldAutocomplete::ChooseMethod))); connect(_fieldAutocomplete, SIGNAL(botCommandChosen(QString,FieldAutocomplete::ChooseMethod)), this, SLOT(onHashtagOrBotCommandInsert(QString,FieldAutocomplete::ChooseMethod)));
connect(_fieldAutocomplete, &FieldAutocomplete::stickerChosen, this, [=](not_null<DocumentData*> document) { connect(_fieldAutocomplete, &FieldAutocomplete::stickerChosen, this, [=](not_null<DocumentData*> document) {
@ -992,9 +992,9 @@ void HistoryWidget::start() {
}); });
} }
void HistoryWidget::onMentionInsert(UserData *user) { void HistoryWidget::onMentionInsert(UserData *user, FieldAutocomplete::ChooseMethod method) {
QString replacement, entityTag; QString replacement, entityTag;
if (user->username.isEmpty()) { if (method == FieldAutocomplete::ChooseMethod::ByRightClick || user->username.isEmpty()) {
replacement = user->firstName; replacement = user->firstName;
if (replacement.isEmpty()) { if (replacement.isEmpty()) {
replacement = App::peerName(user); replacement = App::peerName(user);

View file

@ -267,7 +267,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
if (user->isBot()) { if (user->isBot()) {
addInfoLine(tr::lng_info_about_label(), AboutValue(user)); addInfoLine(tr::lng_info_about_label(), AboutValue(user));
} else { } else {
addInfoLine(tr::lng_info_bio_label(), BioValue(user)); addInfoLine(tr::lng_info_bio_label(), AboutValue(user));
} }
addInfoOneLine( addInfoOneLine(
tr::lng_info_username_label(), tr::lng_info_username_label(),

View file

@ -97,11 +97,11 @@ rpl::producer<TextWithEntities> UsernameValue(not_null<UserData*> user) {
} }
rpl::producer<QString> PlainAboutValue(not_null<PeerData*> peer) { rpl::producer<QString> PlainAboutValue(not_null<PeerData*> peer) {
if (const auto user = peer->asUser()) { /*if (const auto user = peer->asUser()) {
if (!user->isBot()) { if (!user->isBot()) {
return rpl::single(QString()); return rpl::single(QString());
} }
} }*/
return Notify::PeerUpdateValue( return Notify::PeerUpdateValue(
peer, peer,
Notify::PeerUpdate::Flag::AboutChanged Notify::PeerUpdate::Flag::AboutChanged

View file

@ -20,7 +20,7 @@ StartWidget::StartWidget(
not_null<Widget::Data*> data) not_null<Widget::Data*> data)
: Step(parent, account, data, true) { : Step(parent, account, data, true) {
setMouseTracking(true); setMouseTracking(true);
setTitleText(rpl::single(qsl("Telegram Desktop"))); setTitleText(rpl::single(qsl("Kotatogram Desktop")));
setDescriptionText(tr::lng_intro_about()); setDescriptionText(tr::lng_intro_about());
show(); show();
} }

View file

@ -2983,7 +2983,7 @@ void MainWidget::gotDifference(const MTPupdates_Difference &difference) {
} break; } break;
case mtpc_updates_differenceTooLong: { case mtpc_updates_differenceTooLong: {
auto &d = difference.c_updates_differenceTooLong(); auto &d = difference.c_updates_differenceTooLong();
LOG(("API Error: updates.differenceTooLong is not supported by Telegram Desktop!")); LOG(("API Error: updates.differenceTooLong is not supported by Kotatogram Desktop!"));
} break; } break;
}; };
} }

View file

@ -272,7 +272,7 @@ SpecialConfigRequest::SpecialConfigRequest(
_manager.setProxy(QNetworkProxy::NoProxy); _manager.setProxy(QNetworkProxy::NoProxy);
_attempts = { _attempts = {
//{ Type::App, qsl("software-download.microsoft.com") }, { Type::App, qsl("software-download.microsoft.com") },
}; };
for (const auto &domain : DnsDomains()) { for (const auto &domain : DnsDomains()) {
_attempts.push_back({ Type::Dns, domain }); _attempts.push_back({ Type::Dns, domain });
@ -316,12 +316,12 @@ void SpecialConfigRequest::performRequest(const Attempt &attempt) {
url.setHost(attempt.domain); url.setHost(attempt.domain);
auto request = QNetworkRequest(); auto request = QNetworkRequest();
switch (type) { switch (type) {
//case Type::App: { case Type::App: {
// url.setPath(cTestMode() url.setPath(cTestMode()
// ? qsl("/testv2/config.txt") ? qsl("/testv2/config.txt")
// : qsl("/prodv2/config.txt")); : qsl("/prodv2/config.txt"));
// request.setRawHeader("Host", "tcdnb.azureedge.net"); request.setRawHeader("Host", "tcdnb.azureedge.net");
//} break; } break;
case Type::Dns: { case Type::Dns: {
url.setPath(qsl("/resolve")); url.setPath(qsl("/resolve"));
url.setQuery(qsl("name=%1&type=ANY&random_padding=%2" url.setQuery(qsl("name=%1&type=ANY&random_padding=%2"
@ -379,7 +379,7 @@ void SpecialConfigRequest::requestFinished(
} }
switch (type) { switch (type) {
//case Type::App: handleResponse(result); break; case Type::App: handleResponse(result); break;
case Type::Dns: { case Type::Dns: {
constexpr auto kTypeRestriction = 16; // TXT constexpr auto kTypeRestriction = 16; // TXT
handleResponse(ConcatenateDnsTxtFields( handleResponse(ConcatenateDnsTxtFields(

View file

@ -39,7 +39,7 @@ public:
private: private:
enum class Type { enum class Type {
//App, App,
Dns, Dns,
}; };
struct Attempt { struct Attempt {

View file

@ -474,7 +474,7 @@ void MainWindow::psCreateTrayIcon() {
QFileInfo iconFile(_trayIconImageFile()); QFileInfo iconFile(_trayIconImageFile());
if (iconFile.exists()) { if (iconFile.exists()) {
QByteArray path = QFile::encodeName(iconFile.absoluteFilePath()); QByteArray path = QFile::encodeName(iconFile.absoluteFilePath());
_trayIndicator = Libs::app_indicator_new("Telegram Desktop", path.constData(), APP_INDICATOR_CATEGORY_APPLICATION_STATUS); _trayIndicator = Libs::app_indicator_new("Kotatogram Desktop", path.constData(), APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
if (_trayIndicator) { if (_trayIndicator) {
LOG(("Tray Icon: Using appindicator tray icon.")); LOG(("Tray Icon: Using appindicator tray icon."));
} else { } else {
@ -515,8 +515,8 @@ void MainWindow::psCreateTrayIcon() {
Libs::g_signal_connect_helper(_trayIcon, "activate", GCallback(_trayIconActivate), _trayMenu); Libs::g_signal_connect_helper(_trayIcon, "activate", GCallback(_trayIconActivate), _trayMenu);
Libs::g_signal_connect_helper(_trayIcon, "size-changed", GCallback(_trayIconResized), _trayMenu); Libs::g_signal_connect_helper(_trayIcon, "size-changed", GCallback(_trayIconResized), _trayMenu);
Libs::gtk_status_icon_set_title(_trayIcon, "Telegram Desktop"); Libs::gtk_status_icon_set_title(_trayIcon, "Kotatogram Desktop");
Libs::gtk_status_icon_set_tooltip_text(_trayIcon, "Telegram Desktop"); Libs::gtk_status_icon_set_tooltip_text(_trayIcon, "Kotatogram Desktop");
Libs::gtk_status_icon_set_visible(_trayIcon, true); Libs::gtk_status_icon_set_visible(_trayIcon, true);
} else { } else {
useStatusIcon = false; useStatusIcon = false;

View file

@ -231,7 +231,7 @@ QString GetServerName() {
if (!LibNotifyLoaded()) { if (!LibNotifyLoaded()) {
return QString(); return QString();
} }
if (!Libs::notify_is_initted() && !Libs::notify_init("Telegram Desktop")) { if (!Libs::notify_is_initted() && !Libs::notify_init("Kotatogram Desktop")) {
LOG(("LibNotify Error: failed to init!")); LOG(("LibNotify Error: failed to init!"));
return QString(); return QString();
} }

View file

@ -281,7 +281,7 @@ void RegisterCustomScheme() {
if (!QDir(apps).exists()) QDir().mkpath(apps); if (!QDir(apps).exists()) QDir().mkpath(apps);
if (!QDir(icons).exists()) QDir().mkpath(icons); if (!QDir(icons).exists()) QDir().mkpath(icons);
QString path = cWorkingDir() + qsl("tdata/"), file = path + qsl("telegramdesktop.desktop"); QString path = cWorkingDir() + qsl("tdata/"), file = path + qsl("kotatogramdesktop.desktop");
QDir().mkpath(path); QDir().mkpath(path);
QFile f(file); QFile f(file);
if (f.open(QIODevice::WriteOnly)) { if (f.open(QIODevice::WriteOnly)) {
@ -303,17 +303,17 @@ void RegisterCustomScheme() {
s.setCodec("UTF-8"); s.setCodec("UTF-8");
s << "[Desktop Entry]\n"; s << "[Desktop Entry]\n";
s << "Version=1.0\n"; s << "Version=1.0\n";
s << "Name=Telegram Desktop\n"; s << "Name=Kotatogram Desktop\n";
s << "Comment=Official desktop application for the Telegram messaging service\n"; s << "Comment=Experimental Telegram Desktop fork\n";
s << "TryExec=" << EscapeShell(QFile::encodeName(cExeDir() + cExeName())) << "\n"; s << "TryExec=" << EscapeShell(QFile::encodeName(cExeDir() + cExeName())) << "\n";
s << "Exec=" << EscapeShell(QFile::encodeName(cExeDir() + cExeName())) << " -- %u\n"; s << "Exec=" << EscapeShell(QFile::encodeName(cExeDir() + cExeName())) << " -- %u\n";
s << "Icon=telegram\n"; s << "Icon=telegram\n";
s << "Terminal=false\n"; s << "Terminal=false\n";
s << "StartupWMClass=TelegramDesktop\n"; s << "StartupWMClass=KotatogramDesktop\n";
s << "Type=Application\n"; s << "Type=Application\n";
s << "Categories=Network;InstantMessaging;Qt;\n"; s << "Categories=Network;InstantMessaging;Qt;\n";
s << "MimeType=x-scheme-handler/tg;\n"; s << "MimeType=x-scheme-handler/tg;\n";
s << "Keywords=tg;chat;im;messaging;messenger;sms;tdesktop;\n"; s << "Keywords=tg;chat;im;messaging;messenger;sms;tdesktop;kotatogram;\n";
s << "X-GNOME-UsesNotifications=true\n"; s << "X-GNOME-UsesNotifications=true\n";
f.close(); f.close();
@ -322,7 +322,7 @@ void RegisterCustomScheme() {
QFile(qsl("%1.local/share/applications/telegram.desktop").arg(home)).remove(); QFile(qsl("%1.local/share/applications/telegram.desktop").arg(home)).remove();
RunShellCommand("update-desktop-database " + EscapeShell(QFile::encodeName(home + qsl(".local/share/applications")))); RunShellCommand("update-desktop-database " + EscapeShell(QFile::encodeName(home + qsl(".local/share/applications"))));
RunShellCommand("xdg-mime default telegramdesktop.desktop x-scheme-handler/tg"); RunShellCommand("xdg-mime default kotatogramdesktop.desktop x-scheme-handler/tg");
} }
} else { } else {
LOG(("App Error: Could not open '%1' for write").arg(file)); LOG(("App Error: Could not open '%1' for write").arg(file));

View file

@ -429,24 +429,24 @@ void RegisterCustomScheme() {
if (!_psSetKeyValue(rkey, 0, '"' + exe + qsl("\" -workdir \"") + cWorkingDir() + qsl("\" -- \"%1\""))) return; if (!_psSetKeyValue(rkey, 0, '"' + exe + qsl("\" -workdir \"") + cWorkingDir() + qsl("\" -- \"%1\""))) return;
// URI scheme registration as Default Program - Windows Vista and above // URI scheme registration as Default Program - Windows Vista and above
if (!_psOpenRegKey(L"Software\\Classes\\tdesktop.tg", &rkey)) return; if (!_psOpenRegKey(L"Software\\Classes\\ktgdesktop.tg", &rkey)) return;
if (!_psOpenRegKey(L"Software\\Classes\\tdesktop.tg\\DefaultIcon", &rkey)) return; if (!_psOpenRegKey(L"Software\\Classes\\ktgdesktop.tg\\DefaultIcon", &rkey)) return;
if (!_psSetKeyValue(rkey, 0, '"' + exe + qsl(",1\""))) return; if (!_psSetKeyValue(rkey, 0, '"' + exe + qsl(",1\""))) return;
if (!_psOpenRegKey(L"Software\\Classes\\tdesktop.tg\\shell", &rkey)) return; if (!_psOpenRegKey(L"Software\\Classes\\ktgdesktop.tg\\shell", &rkey)) return;
if (!_psOpenRegKey(L"Software\\Classes\\tdesktop.tg\\shell\\open", &rkey)) return; if (!_psOpenRegKey(L"Software\\Classes\\ktgdesktop.tg\\shell\\open", &rkey)) return;
if (!_psOpenRegKey(L"Software\\Classes\\tdesktop.tg\\shell\\open\\command", &rkey)) return; if (!_psOpenRegKey(L"Software\\Classes\\ktgdesktop.tg\\shell\\open\\command", &rkey)) return;
if (!_psSetKeyValue(rkey, 0, '"' + exe + qsl("\" -workdir \"") + cWorkingDir() + qsl("\" -- \"%1\""))) return; if (!_psSetKeyValue(rkey, 0, '"' + exe + qsl("\" -workdir \"") + cWorkingDir() + qsl("\" -- \"%1\""))) return;
if (!_psOpenRegKey(L"Software\\TelegramDesktop", &rkey)) return; if (!_psOpenRegKey(L"Software\\KotatogramDesktop", &rkey)) return;
if (!_psOpenRegKey(L"Software\\TelegramDesktop\\Capabilities", &rkey)) return; if (!_psOpenRegKey(L"Software\\KotatogramDesktop\\Capabilities", &rkey)) return;
if (!_psSetKeyValue(rkey, L"ApplicationName", qsl("Telegram Desktop"))) return; if (!_psSetKeyValue(rkey, L"ApplicationName", qsl("Kotatogram Desktop"))) return;
if (!_psSetKeyValue(rkey, L"ApplicationDescription", qsl("Telegram Desktop"))) return; if (!_psSetKeyValue(rkey, L"ApplicationDescription", qsl("Kotatogram Desktop"))) return;
if (!_psOpenRegKey(L"Software\\TelegramDesktop\\Capabilities\\UrlAssociations", &rkey)) return; if (!_psOpenRegKey(L"Software\\KotatogramDesktop\\Capabilities\\UrlAssociations", &rkey)) return;
if (!_psSetKeyValue(rkey, L"tg", qsl("tdesktop.tg"))) return; if (!_psSetKeyValue(rkey, L"tg", qsl("ktgdesktop.tg"))) return;
if (!_psOpenRegKey(L"Software\\RegisteredApplications", &rkey)) return; if (!_psOpenRegKey(L"Software\\RegisteredApplications", &rkey)) return;
if (!_psSetKeyValue(rkey, L"Telegram Desktop", qsl("SOFTWARE\\TelegramDesktop\\Capabilities"))) return; if (!_psSetKeyValue(rkey, L"Kotatogram Desktop", qsl("SOFTWARE\\KotatogramDesktop\\Capabilities"))) return;
#endif // !TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME #endif // !TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME
} }

View file

@ -256,10 +256,10 @@ bool validateShortcut() {
path += qsl("TelegramAlpha.lnk"); path += qsl("TelegramAlpha.lnk");
if (validateShortcutAt(path)) return true; if (validateShortcutAt(path)) return true;
} else { } else {
if (validateShortcutAt(path + qsl("Telegram Desktop/Telegram.lnk"))) return true; if (validateShortcutAt(path + qsl("Kotatogram Desktop/Telegram.lnk"))) return true;
if (validateShortcutAt(path + qsl("Telegram Win (Unofficial)/Telegram.lnk"))) return true; //if (validateShortcutAt(path + qsl("Telegram Win (Unofficial)/Telegram.lnk"))) return true;
path += qsl("Telegram.lnk"); path += qsl("Kotatogram.lnk");
if (validateShortcutAt(path)) return true; if (validateShortcutAt(path)) return true;
} }

View file

@ -72,3 +72,6 @@ int gOtherOnline = 0;
int32 gAutoDownloadPhoto = 0; // all auto download int32 gAutoDownloadPhoto = 0; // all auto download
int32 gAutoDownloadAudio = 0; int32 gAutoDownloadAudio = 0;
int32 gAutoDownloadGif = 0; int32 gAutoDownloadGif = 0;
QString gMainFont, gSemiboldFont, gMonospaceFont;
bool gSemiboldFontIsBold = false;

View file

@ -160,7 +160,7 @@ DeclareSetting(int32, IntRetinaFactor);
DeclareSetting(int, OtherOnline); DeclareSetting(int, OtherOnline);
constexpr auto kInterfaceScaleAuto = 0; constexpr auto kInterfaceScaleAuto = 0;
constexpr auto kInterfaceScaleMin = 100; constexpr auto kInterfaceScaleMin = 75;
constexpr auto kInterfaceScaleDefault = 100; constexpr auto kInterfaceScaleDefault = 100;
constexpr auto kInterfaceScaleMax = 300; constexpr auto kInterfaceScaleMax = 300;
@ -194,3 +194,8 @@ inline void SetScaleChecked(int scale) {
: snap(scale, kInterfaceScaleMin, kInterfaceScaleMax / cIntRetinaFactor()); : snap(scale, kInterfaceScaleMin, kInterfaceScaleMax / cIntRetinaFactor());
cSetConfigScale(checked); cSetConfigScale(checked);
} }
DeclareSetting(QString, MainFont);
DeclareSetting(QString, SemiboldFont);
DeclareSetting(bool, SemiboldFontIsBold);
DeclareSetting(QString, MonospaceFont);

View file

@ -289,7 +289,7 @@ void NotificationsCount::prepareNotificationSampleLarge() {
p.setPen(st::dialogsNameFg); p.setPen(st::dialogsNameFg);
p.setFont(st::msgNameFont); p.setFont(st::msgNameFont);
auto notifyTitle = st::msgNameFont->elided(qsl("Telegram Desktop"), rectForName.width()); auto notifyTitle = st::msgNameFont->elided(qsl("Kotatogram Desktop"), rectForName.width());
p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle); p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle);
st::notifyClose.icon.paint(p, w - st::notifyClosePos.x() - st::notifyClose.width + st::notifyClose.iconPosition.x(), st::notifyClosePos.y() + st::notifyClose.iconPosition.y(), w); st::notifyClose.icon.paint(p, w - st::notifyClosePos.x() - st::notifyClose.width + st::notifyClose.iconPosition.x(), st::notifyClosePos.y() + st::notifyClose.iconPosition.y(), w);

View file

@ -891,9 +891,9 @@ rpl::producer<QString> ProfilePhotoPrivacyController::title() {
return tr::lng_edit_privacy_profile_photo_title(); return tr::lng_edit_privacy_profile_photo_title();
} }
bool ProfilePhotoPrivacyController::hasOption(Option option) { /*bool ProfilePhotoPrivacyController::hasOption(Option option) {
return (option != Option::Nobody); return (option != Option::Nobody);
} }*/
rpl::producer<QString> ProfilePhotoPrivacyController::optionsTitleKey() { rpl::producer<QString> ProfilePhotoPrivacyController::optionsTitleKey() {
return tr::lng_edit_privacy_profile_photo_header(); return tr::lng_edit_privacy_profile_photo_header();

View file

@ -208,7 +208,7 @@ public:
MTPInputPrivacyKey apiKey() override; MTPInputPrivacyKey apiKey() override;
rpl::producer<QString> title() override; rpl::producer<QString> title() override;
bool hasOption(Option option) override; //bool hasOption(Option option) override;
rpl::producer<QString> optionsTitleKey() override; rpl::producer<QString> optionsTitleKey() override;
rpl::producer<QString> exceptionButtonTextKey( rpl::producer<QString> exceptionButtonTextKey(
Exception exception) override; Exception exception) override;

View file

@ -59,8 +59,8 @@ FontData::FontData(int size, uint32 flags, int family, Font *other)
f.setPixelSize(size); f.setPixelSize(size);
if (_flags & FontBold) { if (_flags & FontBold) {
f.setBold(true); f.setBold(true);
//} else if (fontFamilies[family] == "Open Sans Semibold") { } else if (fontFamilies[family] == "Open Sans Semibold" && cSemiboldFontIsBold()) {
// f.setWeight(QFont::DemiBold); f.setBold(true);
} }
f.setItalic(_flags & FontItalic); f.setItalic(_flags & FontItalic);
f.setUnderline(_flags & FontUnderline); f.setUnderline(_flags & FontUnderline);

View file

@ -109,6 +109,13 @@ void Start() {
QFont::insertSubstitutions(qsl("Open Sans"), list); QFont::insertSubstitutions(qsl("Open Sans"), list);
QFont::insertSubstitutions(qsl("Open Sans Semibold"), list); QFont::insertSubstitutions(qsl("Open Sans Semibold"), list);
#endif // Q_OS_WIN || Q_OS_MAC #endif // Q_OS_WIN || Q_OS_MAC
if (!cMainFont().isEmpty() && ValidateFont(cMainFont())) {
OpenSansOverride = cMainFont();
}
if (!cSemiboldFont().isEmpty() && ValidateFont(cSemiboldFont())) {
OpenSansSemiboldOverride = cSemiboldFont();
}
} }
QString GetOverride(const QString &familyName) { QString GetOverride(const QString &familyName) {

View file

@ -555,7 +555,7 @@ void NativeManager::doShowNotification(
&& (item->out() || peer->isSelf()) && (item->out() || peer->isSelf())
&& item->isFromScheduled(); && item->isFromScheduled();
const auto title = options.hideNameAndPhoto const auto title = options.hideNameAndPhoto
? qsl("Telegram Desktop") ? qsl("Kotatogram Desktop")
: (scheduled && peer->isSelf()) : (scheduled && peer->isSelf())
? tr::lng_notification_reminder(tr::now) ? tr::lng_notification_reminder(tr::now)
: App::peerName(peer); : App::peerName(peer);

View file

@ -764,7 +764,7 @@ void Notification::updateNotifyDisplay() {
p.setPen(st::dialogsNameFg); p.setPen(st::dialogsNameFg);
if (options.hideNameAndPhoto) { if (options.hideNameAndPhoto) {
p.setFont(st::msgNameFont); p.setFont(st::msgNameFont);
static QString notifyTitle = st::msgNameFont->elided(qsl("Telegram Desktop"), rectForName.width()); static QString notifyTitle = st::msgNameFont->elided(qsl("Kotatogram Desktop"), rectForName.width());
p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle); p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle);
} else if (reminder) { } else if (reminder) {
p.setFont(st::msgNameFont); p.setFont(st::msgNameFont);

View file

@ -202,11 +202,11 @@ MainMenu::MainMenu(
refreshBackground(); refreshBackground();
_telegram->setMarkedText(Ui::Text::Link( _telegram->setMarkedText(Ui::Text::Link(
qsl("Telegram Desktop"), qsl("kotatogram Desktop"),
qsl("https://desktop.telegram.org"))); qsl("https://t.me/kotatogram")));
_telegram->setLinksTrusted(); _telegram->setLinksTrusted();
_version->setRichText(textcmdLink(1, tr::lng_settings_current_version(tr::now, lt_version, currentVersionText())) + QChar(' ') + QChar(8211) + QChar(' ') + textcmdLink(2, tr::lng_menu_about(tr::now))); _version->setRichText(textcmdLink(1, tr::lng_settings_current_version(tr::now, lt_version, currentVersionText())) + QChar(' ') + QChar(8211) + QChar(' ') + textcmdLink(2, tr::lng_menu_about(tr::now)));
_version->setLink(1, std::make_shared<UrlClickHandler>(qsl("https://desktop.telegram.org/changelog"))); _version->setLink(1, std::make_shared<UrlClickHandler>(qsl("https://github.com/kotatogram/kotatogram-desktop")));
_version->setLink(2, std::make_shared<LambdaClickHandler>([] { Ui::show(Box<AboutBox>()); })); _version->setLink(2, std::make_shared<LambdaClickHandler>([] { Ui::show(Box<AboutBox>()); }));
subscribe(_controller->session().downloaderTaskFinished(), [=] { update(); }); subscribe(_controller->session().downloaderTaskFinished(), [=] { update(); });