Merge remote-tracking branch 'tdesktop/dev' into dev

This commit is contained in:
Eric Kotato 2020-05-05 17:27:04 +03:00
commit 7de3002c8c
60 changed files with 399 additions and 319 deletions

View file

@ -5,6 +5,7 @@ on:
paths-ignore:
- 'docs/**'
- '**.md'
- '!docs/building-cmake.md'
- 'kotatogram_changes.txt'
- 'changelog.txt'
- 'LEGAL'
@ -25,6 +26,7 @@ on:
paths-ignore:
- 'docs/**'
- '**.md'
- '!docs/building-cmake.md'
- 'kotatogram_changes.txt'
- 'changelog.txt'
- 'LEGAL'
@ -133,14 +135,6 @@ jobs:
cd Libraries
echo ::set-env name=LibrariesPath::`pwd`
- name: Range-v3.
run: |
echo "Find necessary branch from doc."
cloneRange=$(grep -A 1 "range-v3" $REPO_NAME/$DOC_PATH | sed -n 1p)
cd $LibrariesPath
echo $cloneRange
eval $cloneRange
- name: Patches.
run: |
echo "Find necessary commit from doc."
@ -440,11 +434,7 @@ jobs:
git submodule update qtbase qtwayland qtimageformats qtsvg
cd qtbase
git apply ../../patches/qtbase_${QT}.diff
cd src/plugins/platforminputcontexts
git clone $GIT/desktop-app/fcitx.git
git clone $GIT/desktop-app/hime.git
git clone $GIT/desktop-app/nimf.git
cd ../../../..
cd ../
./configure -prefix "$QT_PREFIX" \
-release \
@ -473,18 +463,6 @@ jobs:
cd $LibrariesPath
sudo cp -R qt-cache/. /
- name: Material Decoration.
run: |
cd $LibrariesPath
git clone --depth=1 $GIT/desktop-app/materialdecoration.git
cd materialdecoration
$QT_PREFIX/bin/qmake CONFIG+=static
make -j$(nproc)
sudo make install
cd ..
rm -rf materialdecoration
- name: Breakpad cache.
id: cache-breakpad
uses: actions/cache@v1

View file

@ -5,6 +5,7 @@ on:
paths-ignore:
- 'docs/**'
- '**.md'
- '!docs/building-xcode.md'
- 'kotatogram_changes.txt'
- 'changelog.txt'
- 'LEGAL'
@ -24,6 +25,7 @@ on:
paths-ignore:
- 'docs/**'
- '**.md'
- '!docs/building-xcode.md'
- 'kotatogram_changes.txt'
- 'changelog.txt'
- 'LEGAL'
@ -100,14 +102,6 @@ jobs:
cd Libraries/macos
echo ::set-env name=LibrariesPath::`pwd`
- name: Range-v3.
run: |
echo "Find necessary branch from doc."
cloneRange=$(grep -A 1 "range-v3" $REPO_NAME/$DOC_PATH | sed -n 1p)
cd $LibrariesPath
echo $cloneRange
eval $cloneRange
- name: Patches.
run: |
echo "Find necessary commit from doc."

View file

@ -5,6 +5,7 @@ on:
paths-ignore:
- 'docs/**'
- '**.md'
- '!docs/building-msvc.md'
- 'kotatogram_changes.txt'
- 'changelog.txt'
- 'LEGAL'
@ -26,6 +27,7 @@ on:
paths-ignore:
- 'docs/**'
- '**.md'
- '!docs/building-msvc.md'
- 'kotatogram_changes.txt'
- 'changelog.txt'
- 'LEGAL'
@ -111,15 +113,6 @@ jobs:
run: |
choco install --no-progress -y nasm yasm jom ninja
- name: Range-v3.
shell: bash
run: |
echo "Find necessary branch from doc."
cloneRange=$(grep -A 1 "range-v3" $REPO_NAME/$DOC_PATH | sed -n 1p)
cd $LibrariesPath
echo $cloneRange
eval $cloneRange
- name: Patches.
shell: bash
run: |

24
.gitmodules vendored
View file

@ -67,3 +67,27 @@
[submodule "Telegram/ThirdParty/hunspell"]
path = Telegram/ThirdParty/hunspell
url = https://github.com/hunspell/hunspell
[submodule "Telegram/ThirdParty/materialdecoration"]
path = Telegram/ThirdParty/materialdecoration
url = https://github.com/desktop-app/materialdecoration.git
[submodule "Telegram/ThirdParty/range-v3"]
path = Telegram/ThirdParty/range-v3
url = https://github.com/ericniebler/range-v3.git
[submodule "Telegram/ThirdParty/fcitx-qt5"]
path = Telegram/ThirdParty/fcitx-qt5
url = https://github.com/fcitx/fcitx-qt5.git
[submodule "Telegram/ThirdParty/nimf"]
path = Telegram/ThirdParty/nimf
url = https://github.com/hamonikr/nimf.git
[submodule "Telegram/ThirdParty/hime"]
path = Telegram/ThirdParty/hime
url = https://github.com/hime-ime/hime.git
[submodule "Telegram/ThirdParty/qt5ct"]
path = Telegram/ThirdParty/qt5ct
url = https://github.com/desktop-app/qt5ct.git
[submodule "Telegram/ThirdParty/lxqt-qtplugin"]
path = Telegram/ThirdParty/lxqt-qtplugin
url = https://github.com/lxqt/lxqt-qtplugin.git
[submodule "Telegram/ThirdParty/libqtxdg"]
path = Telegram/ThirdParty/libqtxdg
url = https://github.com/lxqt/libqtxdg.git

View file

@ -67,12 +67,33 @@ generate_numbers(Telegram ${res_loc}/numbers.txt)
set_target_properties(Telegram PROPERTIES AUTOMOC ON AUTORCC ON)
if (LINUX AND NOT DESKTOP_APP_DISABLE_DBUS_INTEGRATION)
if (LINUX)
target_link_libraries(Telegram
PRIVATE
desktop-app::external_statusnotifieritem
desktop-app::external_dbusmenu_qt
desktop-app::external_materialdecoration
desktop-app::external_nimf_qt5
desktop-app::external_qt5ct
desktop-app::external_qt5ct_style
desktop-app::external_qt5ct_qtplugin
)
if (NOT DESKTOP_APP_DISABLE_DBUS_INTEGRATION)
# conflicts with Qt static link
if (DESKTOP_APP_USE_PACKAGED_LAZY_PLATFORMTHEMES)
target_link_libraries(Telegram
PRIVATE
desktop-app::external_lxqt_qtplugin
)
endif()
target_link_libraries(Telegram
PRIVATE
desktop-app::external_statusnotifieritem
desktop-app::external_dbusmenu_qt
desktop-app::external_fcitx_qt5
desktop-app::external_hime_qt
)
endif()
endif()
if (add_hunspell_library)
@ -105,10 +126,6 @@ PRIVATE
desktop-app::external_openal
)
if (NOT DESKTOP_APP_USE_PACKAGED)
target_link_libraries(Telegram PRIVATE desktop-app::external_opus)
endif()
# Telegram uses long atomic types, so on some architectures libatomic is needed.
check_cxx_source_compiles("
#include <atomic>
@ -125,7 +142,6 @@ if (DESKTOP_APP_USE_PACKAGED)
target_link_libraries(Telegram
PRIVATE
${CMAKE_DL_LIBS}
Threads::Threads
)
endif()
@ -1025,14 +1041,13 @@ PRIVATE
mainwindow.h
observer_peer.cpp
observer_peer.h
qt_static_plugins.cpp
settings.cpp
settings.h
)
if (DESKTOP_APP_USE_PACKAGED)
nice_target_sources(Telegram ${src_loc} PRIVATE qt_functions.cpp)
else()
nice_target_sources(Telegram ${src_loc} PRIVATE qt_static_plugins.cpp)
endif()
nice_target_sources(Telegram ${res_loc}
@ -1178,21 +1193,12 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/Telegram PREFIX Resources FILES ${
target_include_directories(Telegram PRIVATE ${src_loc})
if (NOT DESKTOP_APP_USE_PACKAGED)
target_include_directories(Telegram PRIVATE ${third_party_loc}/minizip)
endif()
target_compile_definitions(Telegram
PRIVATE
TDESKTOP_API_ID=${TDESKTOP_API_ID}
TDESKTOP_API_HASH=${TDESKTOP_API_HASH}
AL_ALEXT_PROTOTYPES
)
if (NOT DESKTOP_APP_USE_PACKAGED)
target_compile_definitions(Telegram PRIVATE AL_LIBTYPE_STATIC)
endif()
if (${CMAKE_GENERATOR} MATCHES "(Visual Studio|Xcode)")
set(output_folder ${CMAKE_BINARY_DIR})
elseif (DESKTOP_APP_SPECIAL_TARGET STREQUAL "")

View file

@ -1860,6 +1860,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_admin_log_no_results_search_text" = "No recent actions that contain '{query}' have been found.";
"lng_admin_log_no_events_title" = "No actions yet";
"lng_admin_log_no_events_text" = "There were no service actions\ntaken by the group's members\nand admins in the last 48 hours.";
"lng_admin_log_no_events_text_channel" = "There were no service actions\ntaken by the channels's admins\nin the last 48 hours.";
"lng_admin_log_empty_text" = "Empty";
"lng_admin_log_changed_title_group" = "{from} changed group name to «{title}»";

View file

@ -9,7 +9,7 @@
<Identity Name="TelegramMessengerLLP.TelegramDesktop"
ProcessorArchitecture="ARCHITECTURE"
Publisher="CN=536BC709-8EE1-4478-AF22-F0F0F26FF64A"
Version="2.1.1.0" />
Version="2.1.2.0" />
<Properties>
<DisplayName>Telegram Desktop</DisplayName>
<PublisherDisplayName>Telegram FZ-LLC</PublisherDisplayName>

View file

@ -33,8 +33,8 @@ IDI_ICON1 ICON "..\\art\\icon256.ico"
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,1,1,0
PRODUCTVERSION 2,1,1,0
FILEVERSION 2,1,2,0
PRODUCTVERSION 2,1,2,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -51,10 +51,10 @@ BEGIN
BEGIN
VALUE "CompanyName", "Telegram FZ-LLC"
VALUE "FileDescription", "Telegram Desktop"
VALUE "FileVersion", "2.1.1.0"
VALUE "FileVersion", "2.1.2.0"
VALUE "LegalCopyright", "Copyright (C) 2014-2020"
VALUE "ProductName", "Telegram Desktop"
VALUE "ProductVersion", "2.1.1.0"
VALUE "ProductVersion", "2.1.2.0"
END
END
BLOCK "VarFileInfo"

View file

@ -24,8 +24,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,1,1,0
PRODUCTVERSION 2,1,1,0
FILEVERSION 2,1,2,0
PRODUCTVERSION 2,1,2,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -42,10 +42,10 @@ BEGIN
BEGIN
VALUE "CompanyName", "Telegram FZ-LLC"
VALUE "FileDescription", "Telegram Desktop Updater"
VALUE "FileVersion", "2.1.1.0"
VALUE "FileVersion", "2.1.2.0"
VALUE "LegalCopyright", "Copyright (C) 2014-2020"
VALUE "ProductName", "Telegram Desktop"
VALUE "ProductVersion", "2.1.1.0"
VALUE "ProductVersion", "2.1.2.0"
END
END
BLOCK "VarFileInfo"

View file

@ -23,7 +23,7 @@ constexpr auto AppId = "{C4A4AE8F-B9F7-4CC7-8A6C-BF7EEE87ACA5}"_cs;
constexpr auto AppNameOld = "Telegram Win (Unofficial)"_cs;
constexpr auto AppName = "Kotatogram Desktop"_cs;
constexpr auto AppFile = "Kotatogram"_cs;
constexpr auto AppVersion = 2001001;
constexpr auto AppVersionStr = "2.1.1";
constexpr auto AppVersion = 2001002;
constexpr auto AppVersionStr = "2.1.2";
constexpr auto AppBetaVersion = false;
constexpr auto AppAlphaVersion = TDESKTOP_ALPHA_VERSION;

View file

@ -403,11 +403,11 @@ bool ChatFilters::applyChange(ChatFilter &filter, ChatFilter &&updated) {
});
}
}
filter = std::move(updated);
if (pinnedChanged) {
const auto filterList = _owner->chatsFilters().chatsList(id);
filterList->pinned()->applyList(updated.pinned());
filterList->pinned()->applyList(filter.pinned());
}
filter = std::move(updated);
return true;
}

View file

@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_document_good_thumbnail.h"
#include "lang/lang_keys.h"
#include "inline_bots/inline_bot_layout_item.h"
#include "main/main_session.h"
#include "mainwidget.h"
#include "core/file_utilities.h"
#include "core/media_active_cache.h"
@ -296,6 +297,14 @@ QString documentSaveFilename(const DocumentData *data, bool forceSavingAs = fals
return FileNameForSave(caption, filter, prefix, name, forceSavingAs, dir);
}
DocumentClickHandler::DocumentClickHandler(
not_null<DocumentData*> document,
FullMsgId context)
: FileClickHandler(context)
, _session(&document->session())
, _document(document) {
}
void DocumentOpenClickHandler::Open(
Data::FileOrigin origin,
not_null<DocumentData*> data,
@ -345,7 +354,9 @@ void DocumentOpenClickHandler::Open(
}
void DocumentOpenClickHandler::onClickImpl() const {
Open(context(), document(), getActionItem());
if (valid()) {
Open(context(), document(), getActionItem());
}
}
void DocumentSaveClickHandler::Save(
@ -385,14 +396,20 @@ void DocumentSaveClickHandler::Save(
}
void DocumentSaveClickHandler::onClickImpl() const {
Save(context(), document());
if (valid()) {
Save(context(), document());
}
}
void DocumentCancelClickHandler::onClickImpl() const {
const auto data = document();
if (!data->date) return;
if (!valid()) {
return;
}
if (data->uploading()) {
const auto data = document();
if (!data->date) {
return;
} else if (data->uploading()) {
if (const auto item = data->owner().message(context())) {
App::main()->cancelUploadLayer(item);
}
@ -423,7 +440,9 @@ void DocumentOpenWithClickHandler::Open(
}
void DocumentOpenWithClickHandler::onClickImpl() const {
Open(context(), document());
if (valid()) {
Open(context(), document());
}
}
Data::FileOrigin StickerData::setOrigin() const {

View file

@ -315,16 +315,19 @@ class DocumentClickHandler : public FileClickHandler {
public:
DocumentClickHandler(
not_null<DocumentData*> document,
FullMsgId context = FullMsgId())
: FileClickHandler(context)
, _document(document) {
FullMsgId context = FullMsgId());
[[nodiscard]] bool valid() const {
return !_session.empty();
}
not_null<DocumentData*> document() const {
[[nodiscard]] not_null<DocumentData*> document() const {
return _document;
}
private:
not_null<DocumentData*> _document;
const base::weak_ptr<Main::Session> _session;
const not_null<DocumentData*> _document;
};

View file

@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_file_origin.h"
#include "ui/image/image.h"
#include "ui/image/image_source.h"
#include "main/main_session.h"
#include "mainwidget.h"
#include "core/application.h"
#include "facades.h"
@ -250,22 +251,42 @@ int PhotoData::height() const {
return _large->height();
}
PhotoClickHandler::PhotoClickHandler(
not_null<PhotoData*> photo,
FullMsgId context,
PeerData *peer)
: FileClickHandler(context)
, _session(&photo->session())
, _photo(photo)
, _peer(peer) {
}
void PhotoOpenClickHandler::onClickImpl() const {
Core::App().showPhoto(this);
if (valid()) {
Core::App().showPhoto(this);
}
}
void PhotoSaveClickHandler::onClickImpl() const {
auto data = photo();
if (!data->date) return;
data->download(context());
if (!valid()) {
return;
}
const auto data = photo();
if (!data->date) {
return;
} else {
data->download(context());
}
}
void PhotoCancelClickHandler::onClickImpl() const {
auto data = photo();
if (!data->date) return;
if (data->uploading()) {
if (!valid()) {
return;
}
const auto data = photo();
if (!data->date) {
return;
} else if (data->uploading()) {
if (const auto item = data->owner().message(context())) {
App::main()->cancelUploadLayer(item);
}

View file

@ -108,21 +108,23 @@ public:
PhotoClickHandler(
not_null<PhotoData*> photo,
FullMsgId context = FullMsgId(),
PeerData *peer = nullptr)
: FileClickHandler(context)
, _photo(photo)
, _peer(peer) {
PeerData *peer = nullptr);
[[nodiscard]] bool valid() const {
return !_session.empty();
}
not_null<PhotoData*> photo() const {
[[nodiscard]] not_null<PhotoData*> photo() const {
return _photo;
}
PeerData *peer() const {
[[nodiscard]] PeerData *peer() const {
return _peer;
}
private:
not_null<PhotoData*> _photo;
PeerData *_peer = nullptr;
const base::weak_ptr<Main::Session> _session;
const not_null<PhotoData*> _photo;
PeerData * const _peer = nullptr;
};

View file

@ -483,7 +483,7 @@ public:
_context = context;
}
FullMsgId context() const {
[[nodiscard]] FullMsgId context() const {
return _context;
}

View file

@ -49,7 +49,7 @@ int PinnedList::addPinnedGetPosition(const Key &key) {
}
void PinnedList::setPinned(const Key &key, bool pinned) {
Expects(key.entry()->folderKnown());
Expects(key.entry()->folderKnown() || _filterId != 0);
if (pinned) {
const int position = addPinnedGetPosition(key);
@ -100,7 +100,8 @@ void PinnedList::applyList(
void PinnedList::applyList(const std::vector<not_null<History*>> &list) {
Expects(_filterId != 0);
clear();
const auto old = base::take(_data);
const auto count = int(list.size());
_data.reserve(count);
for (auto i = 0; i != count; ++i) {
@ -108,6 +109,13 @@ void PinnedList::applyList(const std::vector<not_null<History*>> &list) {
_data.emplace_back(history);
history->cachePinnedIndex(_filterId, i + 1);
}
for (const auto &key : old) {
const auto history = key.history();
if (!history || !ranges::contains(_data, history, &Key::history)) {
key.entry()->cachePinnedIndex(_filterId, 0);
}
}
}
void PinnedList::reorder(const Key &key1, const Key &key2) {

View file

@ -489,7 +489,9 @@ void InnerWidget::updateEmptyText() {
TextUtilities::Clean(_searchQuery))
: hasFilter
? tr::lng_admin_log_no_results_text(tr::now)
: tr::lng_admin_log_no_events_text(tr::now);
: _channel->isMegagroup()
? tr::lng_admin_log_no_events_text(tr::now)
: tr::lng_admin_log_no_events_text_channel(tr::now);
text.text.append(qstr("\n\n") + description);
_emptyText.setMarkedText(st::defaultTextStyle, text, options);
}

View file

@ -71,6 +71,7 @@ MTPMessage PrepareLogMessage(
| MTPDmessage::Flag::f_reply_to_msg_id
| MTPDmessage::Flag::f_edit_date
| MTPDmessage::Flag::f_grouped_id
| MTPDmessage::Flag::f_views
//| MTPDmessage::Flag::f_reactions
| MTPDmessage::Flag::f_restriction_reason;
const auto flags = message.vflags().v & ~removeFlags;

View file

@ -12,7 +12,7 @@ using "ui/widgets/widgets.style";
minPhotoSize: 100px;
minVideoSize: 160px;
maxMediaSize: 430px;
maxStickerSize: 256px;
maxStickerSize: 228px;
maxGifSize: 320px;
maxVideoMessageSize: 240px;
maxSignatureSize: 144px;
@ -387,6 +387,7 @@ historyDateFadeDuration: 200;
historyDiceToast: Toast(defaultToast) {
minWidth: msgMinWidth;
maxWidth: 640px;
durationFadeOut: 200;
}
historyErrorToast: Toast(defaultToast) {
minWidth: msgMinWidth;

View file

@ -2483,8 +2483,9 @@ void HistoryInner::elementStartStickerLoop(
}
void HistoryInner::elementShowPollResults(
not_null<PollData*> poll,
FullMsgId context) {
not_null<PollData*> poll,
FullMsgId context) {
_controller->showPollResults(poll, context);
}
void HistoryInner::elementShowTooltip(

View file

@ -53,7 +53,7 @@ namespace {
constexpr auto kPinnedMessageTextLimit = 16;
MTPDmessage::Flags NewForwardedFlags(
[[nodiscard]] MTPDmessage::Flags NewForwardedFlags(
not_null<PeerData*> peer,
UserId from,
not_null<HistoryMessage*> fwd) {
@ -82,11 +82,11 @@ MTPDmessage::Flags NewForwardedFlags(
return result;
}
MTPDmessage_ClientFlags NewForwardedClientFlags() {
[[nodiscard]] MTPDmessage_ClientFlags NewForwardedClientFlags() {
return NewMessageClientFlags();
}
bool CopyMarkupToForward(not_null<const HistoryItem*> item) {
[[nodiscard]] bool CopyMarkupToForward(not_null<const HistoryItem*> item) {
auto mediaOriginal = item->media();
if (mediaOriginal && mediaOriginal->game()) {
// Copy inline keyboard when forwarding messages with a game.
@ -111,7 +111,7 @@ bool CopyMarkupToForward(not_null<const HistoryItem*> item) {
return true;
}
bool HasInlineItems(const HistoryItemsList &items) {
[[nodiscard]] bool HasInlineItems(const HistoryItemsList &items) {
for (const auto item : items) {
if (item->viaBot()) {
return true;
@ -120,6 +120,14 @@ bool HasInlineItems(const HistoryItemsList &items) {
return false;
}
[[nodiscard]] TextWithEntities EnsureNonEmpty(
const TextWithEntities &text = TextWithEntities()) {
if (!text.text.isEmpty()) {
return text;
}
return { QString::fromUtf8(":-("), EntitiesInText() };
}
} // namespace
QString GetErrorTextForSending(
@ -448,10 +456,11 @@ HistoryMessage::HistoryMessage(
if (const auto media = data.vmedia()) {
setMedia(*media);
}
setText({
const auto textWithEntities = TextWithEntities{
TextUtilities::Clean(qs(data.vmessage())),
Api::EntitiesFromMTP(data.ventities().value_or_empty())
});
};
setText(_media ? textWithEntities : EnsureNonEmpty(textWithEntities));
if (const auto groupedId = data.vgrouped_id()) {
setGroupId(
MessageGroupId::FromRaw(history->peer->id, groupedId->v));
@ -477,17 +486,12 @@ HistoryMessage::HistoryMessage(
createComponents(config);
switch (data.vaction().type()) {
case mtpc_messageActionPhoneCall: {
_media = std::make_unique<Data::MediaCall>(
this,
data.vaction().c_messageActionPhoneCall());
} break;
default: Unexpected("Service message action type in HistoryMessage.");
}
setText(TextWithEntities {});
data.vaction().match([&](const MTPDmessageActionPhoneCall &data) {
_media = std::make_unique<Data::MediaCall>(this, data);
setEmptyText();
}, [](const auto &) {
Unexpected("Service message action type in HistoryMessage.");
});
}
HistoryMessage::HistoryMessage(
@ -676,7 +680,7 @@ HistoryMessage::HistoryMessage(
createComponentsHelper(flags, replyTo, viaBotId, postAuthor, markup);
_media = std::make_unique<Data::MediaGame>(this, game);
setText(TextWithEntities());
setEmptyText();
}
void HistoryMessage::createComponentsHelper(
@ -1075,7 +1079,7 @@ void HistoryMessage::applyEdition(const MTPDmessage &message) {
refreshMedia(message.vmedia());
}
setViewsCount(message.vviews().value_or(-1));
setText(textWithEntities);
setText(_media ? textWithEntities : EnsureNonEmpty(textWithEntities));
finishEdition(keyboardTop);
}
@ -1220,7 +1224,7 @@ void HistoryMessage::setText(const TextWithEntities &textWithEntities) {
// just replace it with something so that UI won't look buggy.
_text.setMarkedText(
st::messageTextStyle,
{ QString::fromUtf8(":-("), EntitiesInText() },
EnsureNonEmpty(),
Ui::ItemTextOptions(this));
} else if (!_media) {
checkIsolatedEmoji();

View file

@ -4140,20 +4140,22 @@ void HistoryWidget::onModerateKeyActivate(int index, bool *outHandled) {
*outHandled = _keyboard->isHidden() ? false : _keyboard->moderateKeyActivate(index);
}
void HistoryWidget::pushTabbedSelectorToThirdSection(
bool HistoryWidget::pushTabbedSelectorToThirdSection(
not_null<PeerData*> peer,
const Window::SectionShow &params) {
if (!_history || !_tabbedPanel) {
return;
} else if (!_canSendMessages) {
if (!_tabbedPanel) {
return true;
} else if (!peer->canWrite()) {
session().settings().setTabbedReplacedWithInfo(true);
controller()->showPeerInfo(_peer, params.withThirdColumn());
return;
controller()->showPeerInfo(peer, params.withThirdColumn());
return false;
}
session().settings().setTabbedReplacedWithInfo(false);
controller()->resizeForThirdSection();
controller()->showSection(
ChatHelpers::TabbedMemento(),
params.withThirdColumn());
return true;
}
bool HistoryWidget::returnTabbedSelector() {
@ -4183,11 +4185,15 @@ void HistoryWidget::setTabbedPanel(std::unique_ptr<TabbedPanel> panel) {
}
void HistoryWidget::toggleTabbedSelectorMode() {
if (!_peer) {
return;
}
if (_tabbedPanel) {
if (controller()->canShowThirdSection() && !Adaptive::OneColumn()) {
session().settings().setTabbedSelectorSectionEnabled(true);
session().saveSettingsDelayed();
pushTabbedSelectorToThirdSection(
_peer,
Window::SectionShow::Way::ClearStack);
} else {
_tabbedPanel->toggleAnimated();
@ -4546,6 +4552,8 @@ bool HistoryWidget::confirmSendingFiles(
bool HistoryWidget::canSendFiles(not_null<const QMimeData*> data) const {
if (!canWriteMessage()) {
return false;
} else if (data->hasImage()) {
return true;
} else if (const auto urls = data->urls(); !urls.empty()) {
if (ranges::find_if(
urls,
@ -4553,8 +4561,6 @@ bool HistoryWidget::canSendFiles(not_null<const QMimeData*> data) const {
) == urls.end()) {
return true;
}
} else if (data->hasImage()) {
return true;
}
return false;
}

View file

@ -254,7 +254,8 @@ public:
void hideInfoTooltip(anim::type animated);
// Tabbed selector management.
void pushTabbedSelectorToThirdSection(
bool pushTabbedSelectorToThirdSection(
not_null<PeerData*> peer,
const Window::SectionShow &params) override;
bool returnTabbedSelector() override;

View file

@ -337,10 +337,11 @@ void ComposeControls::escape() {
_cancelRequests.fire({});
}
void ComposeControls::pushTabbedSelectorToThirdSection(
bool ComposeControls::pushTabbedSelectorToThirdSection(
not_null<PeerData*> peer,
const Window::SectionShow &params) {
if (!_tabbedPanel) {
return;
return true;
//} else if (!_canSendMessages) {
// session().settings().setTabbedReplacedWithInfo(true);
// _window->showPeerInfo(_peer, params.withThirdColumn());
@ -355,6 +356,7 @@ void ComposeControls::pushTabbedSelectorToThirdSection(
_window->showSection(
ChatHelpers::TabbedMemento(),
params.withThirdColumn());
return true;
}
bool ComposeControls::returnTabbedSelector() {
@ -385,11 +387,15 @@ void ComposeControls::setTabbedPanel(
}
void ComposeControls::toggleTabbedSelectorMode() {
if (!_history) {
return;
}
if (_tabbedPanel) {
if (_window->canShowThirdSection() && !Adaptive::OneColumn()) {
session().settings().setTabbedSelectorSectionEnabled(true);
session().saveSettingsDelayed();
pushTabbedSelectorToThirdSection(
_history->peer,
Window::SectionShow::Way::ClearStack);
} else {
_tabbedPanel->toggleAnimated();

View file

@ -76,7 +76,9 @@ public:
[[nodiscard]] auto inlineResultChosen() const
-> rpl::producer<ChatHelpers::TabbedSelector::InlineChosen>;
void pushTabbedSelectorToThirdSection(const Window::SectionShow &params);
bool pushTabbedSelectorToThirdSection(
not_null<PeerData*> peer,
const Window::SectionShow &params);
bool returnTabbedSelector();
void showForGrab();

View file

@ -706,9 +706,10 @@ void ScheduledWidget::setInternalState(
restoreState(memento);
}
void ScheduledWidget::pushTabbedSelectorToThirdSection(
bool ScheduledWidget::pushTabbedSelectorToThirdSection(
not_null<PeerData*> peer,
const Window::SectionShow &params) {
_composeControls->pushTabbedSelectorToThirdSection(params);
return _composeControls->pushTabbedSelectorToThirdSection(peer, params);
}
bool ScheduledWidget::returnTabbedSelector() {

View file

@ -82,7 +82,8 @@ public:
not_null<ScheduledMemento*> memento);
// Tabbed selector management.
void pushTabbedSelectorToThirdSection(
bool pushTabbedSelectorToThirdSection(
not_null<PeerData*> peer,
const Window::SectionShow &params) override;
bool returnTabbedSelector() override;

View file

@ -35,6 +35,13 @@ namespace {
[[nodiscard]] ClickHandlerPtr MakeDiceHandler(
not_null<History*> history,
const QString &emoji) {
static auto ShownToast = base::weak_ptr<Ui::Toast::Instance>();
static const auto HideExisting = [] {
if (const auto toast = ShownToast.get()) {
toast->hideAnimated();
ShownToast = nullptr;
}
};
return std::make_shared<LambdaClickHandler>([=] {
auto config = Ui::Toast::Config{
.text = { tr::lng_about_random(tr::now, lt_emoji, emoji) },
@ -51,16 +58,20 @@ namespace {
config.filter = crl::guard(&history->session(), [=](
const ClickHandlerPtr &handler,
Qt::MouseButton button) {
if (button == Qt::LeftButton) {
if (button == Qt::LeftButton && !ShownToast.empty()) {
auto message = Api::MessageToSend(history);
message.action.clearDraft = false;
message.textWithTags.text = emoji;
Api::SendDice(message);
HideExisting();
}
return false;
});
}
Ui::Toast::Show(config);
HideExisting();
ShownToast = Ui::Toast::Show(config);
});
}

View file

@ -78,6 +78,12 @@ public:
return _attach.get();
}
void unloadHeavyPart() override {
if (_attach) {
_attach->unloadHeavyPart();
}
}
void parentTextUpdated() override;
~Game();

View file

@ -66,6 +66,12 @@ public:
return false;
}
void unloadHeavyPart() override {
if (_attach) {
_attach->unloadHeavyPart();
}
}
Media *attach() const {
return _attach.get();
}

View file

@ -81,6 +81,12 @@ public:
}
bool enforceBubbleWidth() const override;
void unloadHeavyPart() override {
if (_attach) {
_attach->unloadHeavyPart();
}
}
Media *attach() const {
return _attach.get();
}

View file

@ -124,10 +124,10 @@ void InnerWidget::createTypeButtons() {
addMediaButton(Type::File, st::infoIconMediaFile);
addMediaButton(Type::MusicFile, st::infoIconMediaAudio);
addMediaButton(Type::Link, st::infoIconMediaLink);
addMediaButton(Type::RoundVoiceFile, st::infoIconMediaVoice);
if (auto user = _controller->key().peer()->asUser()) {
// addCommonGroupsButton(user, st::infoIconMediaGroup);
}
addMediaButton(Type::RoundVoiceFile, st::infoIconMediaVoice);
content->add(object_ptr<Ui::FixedHeightWidget>(
content,

View file

@ -169,10 +169,10 @@ object_ptr<Ui::RpWidget> InnerWidget::setupSharedMedia(
addMediaButton(MediaType::File, st::infoIconMediaFile);
addMediaButton(MediaType::MusicFile, st::infoIconMediaAudio);
addMediaButton(MediaType::Link, st::infoIconMediaLink);
addMediaButton(MediaType::RoundVoiceFile, st::infoIconMediaVoice);
if (auto user = _peer->asUser()) {
addCommonGroupsButton(user, st::infoIconMediaGroup);
}
addMediaButton(MediaType::RoundVoiceFile, st::infoIconMediaVoice);
auto result = object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
parent,

View file

@ -2388,11 +2388,11 @@ void MainWidget::updateControlsGeometry() {
Window::SectionShow::Way::ClearStack,
anim::type::instant,
anim::activation::background);
if (session().settings().tabbedSelectorSectionEnabled()) {
_history->pushTabbedSelectorToThirdSection(params);
} else if (session().settings().thirdSectionInfoEnabled()) {
const auto active = _controller->activeChatCurrent();
if (const auto peer = active.peer()) {
const auto active = _controller->activeChatCurrent();
if (const auto peer = active.peer()) {
if (session().settings().tabbedSelectorSectionEnabled()) {
_history->pushTabbedSelectorToThirdSection(peer, params);
} else if (session().settings().thirdSectionInfoEnabled()) {
_controller->showSection(
Info::Memento::Default(peer),
params.withThirdColumn());
@ -2641,9 +2641,9 @@ void MainWidget::updateThirdColumnToCurrentChat(
std::move(*thirdSectionForCurrentMainSection(key)),
params.withThirdColumn());
};
auto switchTabbedFast = [&] {
auto switchTabbedFast = [&](not_null<PeerData*> peer) {
saveOldThirdSection();
_history->pushTabbedSelectorToThirdSection(params);
return _history->pushTabbedSelectorToThirdSection(peer, params);
};
if (Adaptive::ThreeColumn()
&& session().settings().tabbedSelectorSectionEnabled()
@ -2652,9 +2652,10 @@ void MainWidget::updateThirdColumnToCurrentChat(
switchInfoFast();
session().settings().setTabbedSelectorSectionEnabled(true);
session().settings().setTabbedReplacedWithInfo(true);
} else if (session().settings().tabbedReplacedWithInfo()) {
} else if (session().settings().tabbedReplacedWithInfo()
&& key.history()
&& switchTabbedFast(key.history()->peer)) {
session().settings().setTabbedReplacedWithInfo(false);
switchTabbedFast();
}
} else {
session().settings().setTabbedReplacedWithInfo(false);

View file

@ -69,6 +69,7 @@ QIcon TrayIcon;
QString TrayIconThemeName, TrayIconName;
bool SNIAvailable = false;
bool AppMenuSupported = false;
QString GetPanelIconName(int counter, bool muted) {
const auto useTelegramIcon = qEnvironmentVariableIsSet(
@ -364,18 +365,14 @@ quint32 djbStringHash(QString string) {
}
#ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
bool AppMenuSupported() {
static const auto Available = []() -> bool {
const auto interface = QDBusConnection::sessionBus().interface();
bool IsAppMenuSupported() {
const auto interface = QDBusConnection::sessionBus().interface();
if (!interface) {
return false;
}
if (!interface) {
return false;
}
return interface->isServiceRegistered(kAppMenuService.utf16());
}();
return Available;
return interface->isServiceRegistered(kAppMenuService.utf16());
}
void RegisterAppMenu(uint winId, const QDBusObjectPath &menuPath) {
@ -461,13 +458,27 @@ void MainWindow::initHook() {
this,
&MainWindow::onSNIOwnerChanged);
AppMenuSupported = IsAppMenuSupported();
auto appMenuWatcher = new QDBusServiceWatcher(
kAppMenuService.utf16(),
QDBusConnection::sessionBus(),
QDBusServiceWatcher::WatchForOwnerChange,
this);
connect(
appMenuWatcher,
&QDBusServiceWatcher::serviceOwnerChanged,
this,
&MainWindow::onAppMenuOwnerChanged);
connect(
windowHandle(),
&QWindow::visibleChanged,
this,
&MainWindow::onVisibleChanged);
if (AppMenuSupported()) {
if (AppMenuSupported) {
LOG(("Using D-Bus global menu."));
} else {
LOG(("Not using D-Bus global menu."));
@ -480,6 +491,8 @@ void MainWindow::initHook() {
}
#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
updateWaylandDecorationColors();
style::PaletteChanged(
) | rpl::start_with_next([=] {
updateWaylandDecorationColors();
@ -601,6 +614,25 @@ void MainWindow::onSNIOwnerChanged(
LOG(("System tray is not available."));
}
}
void MainWindow::onAppMenuOwnerChanged(
const QString &service,
const QString &oldOwner,
const QString &newOwner) {
if (oldOwner.isEmpty() && !newOwner.isEmpty()) {
AppMenuSupported = true;
LOG(("Using D-Bus global menu."));
} else if (!oldOwner.isEmpty() && newOwner.isEmpty()) {
AppMenuSupported = false;
LOG(("Not using D-Bus global menu."));
}
if (AppMenuSupported && !_mainMenuPath.path().isEmpty()) {
RegisterAppMenu(winId(), _mainMenuPath);
} else {
UnregisterAppMenu(winId());
}
}
#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
void MainWindow::psSetupTrayIcon() {
@ -709,6 +741,9 @@ void MainWindow::updateWaylandDecorationColors() {
windowHandle()->setProperty("__material_decoration_foregroundColor", st::titleFgActive->c);
windowHandle()->setProperty("__material_decoration_backgroundInactiveColor", st::titleBg->c);
windowHandle()->setProperty("__material_decoration_foregroundInactiveColor", st::titleFg->c);
// Trigger a QtWayland client-side decoration update
windowHandle()->resize(windowHandle()->size());
}
void MainWindow::LibsLoaded() {
@ -735,8 +770,6 @@ void MainWindow::updateGlobalMenuHook() {
#else // TDESKTOP_DISABLE_DBUS_INTEGRATION
void MainWindow::createGlobalMenu() {
if (!AppMenuSupported()) return;
psMainMenu = new QMenu(this);
auto file = psMainMenu->addMenu(tr::lng_mac_menu_file(tr::now));
@ -915,7 +948,9 @@ void MainWindow::createGlobalMenu() {
_mainMenuPath.path(),
psMainMenu);
RegisterAppMenu(winId(), _mainMenuPath);
if (AppMenuSupported) {
RegisterAppMenu(winId(), _mainMenuPath);
}
updateGlobalMenu();
}
@ -973,7 +1008,7 @@ void MainWindow::psLinuxClearFormat() {
}
void MainWindow::updateGlobalMenuHook() {
if (!AppMenuSupported() || !App::wnd() || !positionInited()) return;
if (!App::wnd() || !positionInited()) return;
const auto focused = QApplication::focusWidget();
auto canUndo = false;
@ -1035,7 +1070,7 @@ void MainWindow::updateGlobalMenuHook() {
}
void MainWindow::onVisibleChanged(bool visible) {
if (AppMenuSupported() && !_mainMenuPath.path().isEmpty()) {
if (AppMenuSupported && !_mainMenuPath.path().isEmpty()) {
if (visible) {
RegisterAppMenu(winId(), _mainMenuPath);
} else {
@ -1050,11 +1085,12 @@ MainWindow::~MainWindow() {
#ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
delete _sniTrayIcon;
if (AppMenuSupported()) {
if (AppMenuSupported) {
UnregisterAppMenu(winId());
delete _mainMenuExporter;
delete psMainMenu;
}
delete _mainMenuExporter;
delete psMainMenu;
#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
delete _trayIconMenuXEmbed;

View file

@ -46,6 +46,11 @@ public slots:
const QString &oldOwner,
const QString &newOwner);
void onAppMenuOwnerChanged(
const QString &service,
const QString &oldOwner,
const QString &newOwner);
void psLinuxUndo();
void psLinuxRedo();
void psLinuxCut();

View file

@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include <QtCore/QtPlugin>
#ifndef DESKTOP_APP_USE_PACKAGED
Q_IMPORT_PLUGIN(QWebpPlugin)
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
@ -30,20 +31,41 @@ Q_IMPORT_PLUGIN(QWaylandXdgShellV5IntegrationPlugin)
Q_IMPORT_PLUGIN(QWaylandXdgShellV6IntegrationPlugin)
Q_IMPORT_PLUGIN(QWaylandXdgShellIntegrationPlugin)
Q_IMPORT_PLUGIN(QWaylandBradientDecorationPlugin)
Q_IMPORT_PLUGIN(QWaylandMaterialDecorationPlugin)
Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)
Q_IMPORT_PLUGIN(QWaylandIntegrationPlugin)
Q_IMPORT_PLUGIN(QWaylandEglPlatformIntegrationPlugin)
Q_IMPORT_PLUGIN(QGenericEnginePlugin)
Q_IMPORT_PLUGIN(QComposePlatformInputContextPlugin)
Q_IMPORT_PLUGIN(QSvgPlugin)
Q_IMPORT_PLUGIN(QSvgIconPlugin)
#ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
Q_IMPORT_PLUGIN(QConnmanEnginePlugin)
Q_IMPORT_PLUGIN(QNetworkManagerEnginePlugin)
Q_IMPORT_PLUGIN(QIbusPlatformInputContextPlugin)
Q_IMPORT_PLUGIN(QFcitxPlatformInputContextPlugin)
Q_IMPORT_PLUGIN(QHimePlatformInputContextPlugin)
Q_IMPORT_PLUGIN(NimfInputContextPlugin)
Q_IMPORT_PLUGIN(QXdgDesktopPortalThemePlugin)
#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
#endif // Q_OS_WIN | Q_OS_MAC | Q_OS_LINUX
#endif // !DESKTOP_APP_USE_PACKAGED
#ifdef Q_OS_LINUX
#if !defined DESKTOP_APP_USE_PACKAGED || defined DESKTOP_APP_USE_PACKAGED_LAZY
Q_IMPORT_PLUGIN(QWaylandMaterialDecorationPlugin)
Q_IMPORT_PLUGIN(NimfInputContextPlugin)
#ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
Q_IMPORT_PLUGIN(QFcitxPlatformInputContextPlugin)
Q_IMPORT_PLUGIN(QHimePlatformInputContextPlugin)
#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
#endif // !DESKTOP_APP_USE_PACKAGED || DESKTOP_APP_USE_PACKAGED_LAZY
#if !defined DESKTOP_APP_USE_PACKAGED || defined DESKTOP_APP_USE_PACKAGED_LAZY_PLATFORMTHEMES
Q_IMPORT_PLUGIN(Qt5CTPlatformThemePlugin)
Q_IMPORT_PLUGIN(Qt5CTStylePlugin)
#endif // !DESKTOP_APP_USE_PACKAGED || DESKTOP_APP_USE_PACKAGED_LAZY_PLATFORMTHEMES
// conflicts with Qt static link
#ifdef DESKTOP_APP_USE_PACKAGED_LAZY_PLATFORMTHEMES
#ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
Q_IMPORT_PLUGIN(LXQtPlatformThemePlugin)
#endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
#endif // DESKTOP_APP_USE_PACKAGED_LAZY_PLATFORMTHEMES
#endif // Q_OS_LINUX

View file

@ -46,8 +46,10 @@ public:
[[nodiscard]] Main::Session &session() const;
// Tabbed selector management.
virtual void pushTabbedSelectorToThirdSection(
const Window::SectionShow &params) {
virtual bool pushTabbedSelectorToThirdSection(
not_null<PeerData*> peer,
const Window::SectionShow &params) {
return false;
}
virtual bool returnTabbedSelector() {
return false;

1
Telegram/ThirdParty/fcitx-qt5 vendored Submodule

@ -0,0 +1 @@
Subproject commit 4abe66549e13b33fd4baa84858d932e0178ce8c0

1
Telegram/ThirdParty/hime vendored Submodule

@ -0,0 +1 @@
Subproject commit 7525645598649afeab5bfe7fda612c2ad744e7a3

1
Telegram/ThirdParty/libqtxdg vendored Submodule

@ -0,0 +1 @@
Subproject commit ae412d30c695f3d4ce9b79feabc937eefde5537b

1
Telegram/ThirdParty/lxqt-qtplugin vendored Submodule

@ -0,0 +1 @@
Subproject commit 418162b36eff24fe70fd9195c60fae7276afa286

@ -0,0 +1 @@
Subproject commit e58c870f2365178b0553664d762a7a2aeae99bd4

1
Telegram/ThirdParty/nimf vendored Submodule

@ -0,0 +1 @@
Subproject commit 7234ac6724f4b7870aebed4dae95a4b9edbccd70

1
Telegram/ThirdParty/qt5ct vendored Submodule

@ -0,0 +1 @@
Subproject commit a959a35dfe3b9547a9f6bc8c102a71941cf0fc0a

1
Telegram/ThirdParty/range-v3 vendored Submodule

@ -0,0 +1 @@
Subproject commit 4d6a463bca51bc316f9b565edd94e82388206093

View file

@ -300,9 +300,9 @@ if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "osx" ] || [ "$BuildTarget
if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "osx" ]; then
codesign --force --deep --timestamp --options runtime --sign "Developer ID Application: John Preston" "$ReleasePath/$BinaryName.app" --entitlements "$HomePath/Telegram/Telegram.entitlements"
elif [ "$BuildTarget" == "macstore" ]; then
codesign --force --deep --sign "3rd Party Mac Developer Application: TELEGRAM MESSENGER LLP (6N38VWS5BX)" "$ReleasePath/$BinaryName.app" --entitlements "$HomePath/Telegram/Telegram Lite.entitlements"
codesign --force --deep --sign "3rd Party Mac Developer Application: Telegram FZ-LLC (C67CF9S4VU)" "$ReleasePath/$BinaryName.app" --entitlements "$HomePath/Telegram/Telegram Lite.entitlements"
echo "Making an installer.."
productbuild --sign "3rd Party Mac Developer Installer: TELEGRAM MESSENGER LLP (6N38VWS5BX)" --component "$ReleasePath/$BinaryName.app" /Applications "$ReleasePath/$BinaryName.pkg"
productbuild --sign "3rd Party Mac Developer Installer: Telegram FZ-LLC (C67CF9S4VU)" --component "$ReleasePath/$BinaryName.app" /Applications "$ReleasePath/$BinaryName.pkg"
fi
echo "Done!"

View file

@ -1,7 +1,7 @@
AppVersion 2001001
AppVersion 2001002
AppVersionStrMajor 2.1
AppVersionStrSmall 2.1.1
AppVersionStr 2.1.1
AppVersionStrSmall 2.1.2
AppVersionStr 2.1.2
BetaChannel 0
AlphaVersion 0
AppVersionOriginal 2.1.1
AppVersionOriginal 2.1.2

View file

@ -4,7 +4,7 @@
# For license and copyright information please follow this link:
# https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
if (TDESKTOP_USE_PACKAGED_TGVOIP)
if (TDESKTOP_USE_PACKAGED_TGVOIP AND NOT DESKTOP_APP_USE_PACKAGED_LAZY)
add_library(lib_tgvoip INTERFACE IMPORTED GLOBAL)
add_library(tdesktop::lib_tgvoip ALIAS lib_tgvoip)
@ -790,4 +790,12 @@ else()
desktop-app::external_openssl
desktop-app::external_opus
)
if (LINUX)
target_link_libraries(lib_tgvoip
PRIVATE
${CMAKE_DL_LIBS}
pthread
)
endif()
endif()

@ -1 +1 @@
Subproject commit d27c3e363254b169f8886934df8580fdc76d424e
Subproject commit 9e01ede6661e2a74697283c7836d4fae433f50ce

@ -1 +1 @@
Subproject commit 6f9dbaa7b29ead994a1f0738e82023af7892d106
Subproject commit 019bb19f0923af2e8c7e0cd1abc2b8d9264afb7c

@ -1 +1 @@
Subproject commit d60753154173ad6777b0e6b293bfaa50ea17f6b7
Subproject commit a76cb8e35ee7e892a9a25a53051b3e89021e1f45

View file

@ -1,3 +1,10 @@
2.1.2 (05.05.20)
- Fix polls and quizes results viewing.
- Fix memory leak in web page previews with autoplayed videos.
- Fix running on OS X 10.10.
- Other minor bug fixes and improvements.
2.1.1 (01.05.20)
- Improve quiz explanation tooltip layout.

2
cmake

@ -1 +1 @@
Subproject commit 834a8a00e43c12b634ba35176c7250a9b6140bbe
Subproject commit 81a0fc7970a62e8c1b194bd8eb85890528366ca7

View file

@ -54,9 +54,8 @@ Go to ***BuildPath*** and run
git clone https://github.com/desktop-app/patches.git
cd patches
git checkout 10aeaf6
git checkout e036126
cd ../
git clone --branch 0.10.0 https://github.com/ericniebler/range-v3
git clone https://github.com/xiph/opus
cd opus
@ -246,10 +245,7 @@ Go to ***BuildPath*** and run
cd qtbase
git apply ../../patches/qtbase_5_12_8.diff
cd src/plugins/platforminputcontexts
git clone https://github.com/desktop-app/fcitx.git
git clone https://github.com/desktop-app/hime.git
git clone https://github.com/desktop-app/nimf.git
cd ../../../..
cd ..
OPENSSL_DIR=/usr/local/desktop-app/openssl-1.1.1
./configure -prefix "/usr/local/desktop-app/Qt-5.12.8" \
@ -275,13 +271,6 @@ Go to ***BuildPath*** and run
sudo make install
cd ..
git clone --depth=1 https://github.com/desktop-app/materialdecoration.git
cd materialdecoration
/usr/local/desktop-app/Qt-5.12.8/bin/qmake CONFIG+=static
make $MAKE_THREADS_CNT
sudo make install
cd ..
git clone https://chromium.googlesource.com/external/gyp
cd gyp
git checkout 9f2a7bb1

View file

@ -32,7 +32,7 @@ Open **x86 Native Tools Command Prompt for VS 2019.bat**, go to ***BuildPath***
cd ThirdParty
git clone https://github.com/desktop-app/patches.git
cd patches
git checkout 10aeaf6
git checkout e036126
cd ../
git clone https://chromium.googlesource.com/external/gyp
cd gyp
@ -64,9 +64,8 @@ Open **x86 Native Tools Command Prompt for VS 2019.bat**, go to ***BuildPath***
git clone https://github.com/desktop-app/patches.git
cd patches
git checkout 10aeaf6
git checkout e036126
cd ..
git clone --branch 0.10.0 https://github.com/ericniebler/range-v3 range-v3
git clone https://github.com/desktop-app/lzma.git
cd lzma\C\Util\LzmaLib

View file

@ -54,7 +54,6 @@ Go to ***BuildPath*** and run
cd patches
git checkout 395b620
cd ../
git clone --branch 0.10.0 https://github.com/ericniebler/range-v3
cd xz-5.0.5
CFLAGS="-mmacosx-version-min=10.10" LDFLAGS="-mmacosx-version-min=10.10" ./configure

View file

@ -29,7 +29,7 @@ Go to ***BuildPath*** and run
git clone https://github.com/desktop-app/patches.git
cd patches
git checkout 10aeaf6
git checkout e036126
cd ../
git clone https://chromium.googlesource.com/external/gyp
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
@ -47,9 +47,8 @@ Go to ***BuildPath*** and run
git clone https://github.com/desktop-app/patches.git
cd patches
git checkout 10aeaf6
git checkout e036126
cd ..
git clone --branch 0.10.0 https://github.com/ericniebler/range-v3
xz_ver=5.2.4
wget https://tukaani.org/xz/xz-$xz_ver.tar.gz

View file

@ -68,44 +68,35 @@ parts:
source: .
source-type: git
parse-info: [share/metainfo/kotatogramdesktop.appdata.xml]
build-environment:
- CFLAGS: "$CFLAGS -I$SNAPCRAFT_STAGE/usr/include/$SNAPCRAFT_ARCH_TRIPLET/qt5/QtWaylandClient/5.12.3"
- CXXFLAGS: "$CXXFLAGS -I$SNAPCRAFT_STAGE/usr/include/$SNAPCRAFT_ARCH_TRIPLET/qt5/QtWaylandClient/5.12.3"
build-snaps:
- kde-frameworks-5-core18-sdk
- kde-frameworks-5-core18
build-packages:
- gcc-8
- g++-8
- libmapbox-variant-dev
- libasound2-dev
- libglib2.0-dev
- libglvnd-dev
- libhunspell-dev
- liblz4-dev
- libgtk-3-dev
- liblzma-dev
- libminizip-dev
- libopus-dev
- libpulse-dev
- libssl-dev
- zlib1g-dev
stage-packages:
- libasound2
- libhunspell-1.6-0
- liblz4-1
- liblzma5
- libminizip1
- libopus0
- libpulse0
- libssl1.1
- zlib1g
configflags:
- -DCMAKE_C_COMPILER=gcc-8
- -DCMAKE_CXX_COMPILER=g++-8
- -DCMAKE_AUTOMOC_MOC_OPTIONS=-I$SNAPCRAFT_STAGE/usr/include/$SNAPCRAFT_ARCH_TRIPLET/qt5/QtWaylandClient/5.12.3
- -DCMAKE_BUILD_TYPE=Release
- -DTDESKTOP_API_ID=611335
- -DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c
- -DDESKTOP_APP_USE_PACKAGED_LAZY=ON
- -DDESKTOP_APP_USE_PACKAGED_FONTS=OFF
- -DDESKTOP_APP_USE_PACKAGED_GSL=OFF
- -DDESKTOP_APP_USE_PACKAGED_EXPECTED=OFF
- -DDESKTOP_APP_USE_PACKAGED_RLOTTIE=OFF
- -DTDESKTOP_USE_PACKAGED_TGVOIP=OFF
- -DTDESKTOP_USE_FONTCONFIG_FALLBACK=ON
override-pull: |
snapcraftctl pull
@ -117,10 +108,7 @@ parts:
after:
- cmake
- ffmpeg
- libdbusmenu-qt
- openal
- range-v3
- xxhash
kotatogram-launcher:
plugin: dump
@ -223,20 +211,6 @@ parts:
after:
- nasm
fcitx-qt5:
source: https://github.com/fcitx/fcitx-qt5.git
source-depth: 1
source-tag: 1.2.4
plugin: cmake
build-snaps:
- kde-frameworks-5-core18-sdk
- kde-frameworks-5-core18
build-packages:
- libglvnd-dev
configflags:
- -DCMAKE_BUILD_TYPE=Release
- -DENABLE_LIBRARY=OFF
ffmpeg:
source: https://github.com/FFmpeg/FFmpeg.git
source-depth: 1
@ -247,12 +221,6 @@ parts:
- libopus-dev
- libva-dev
- libvdpau-dev
stage-packages:
- libasound2
- libopus0
- libva2
- libva-drm2
- libvdpau1
configflags:
- --prefix=/usr
- --disable-static
@ -368,46 +336,6 @@ parts:
- nasm
- dav1d
libdbusmenu-qt:
source: https://github.com/unity8-team/libdbusmenu-qt.git
source-depth: 1
source-tag: 0.9.3+16.04.20160218-0ubuntu1
plugin: cmake
build-snaps:
- kde-frameworks-5-core18-sdk
- kde-frameworks-5-core18
build-packages:
- libglvnd-dev
configflags:
- -DCMAKE_BUILD_TYPE=Release
- -DWITH_DOC=OFF
prime:
- -./include
- -./lib/cmake
- -./lib/pkgconfig
materialdecoration:
source: https://github.com/desktop-app/materialdecoration.git
source-depth: 1
plugin: dump
build-snaps:
- kde-frameworks-5-core18-sdk
- kde-frameworks-5-core18
build-packages:
- libglvnd-dev
override-build: |
KF5_DIR=/snap/kde-frameworks-5-core18-sdk/current
$KF5_DIR/usr/lib/qt5/bin/qmake -qtconf "$SNAPCRAFT_STAGE/qt.conf"
make -j$(nproc)
make INSTALL_ROOT="$SNAPCRAFT_PART_INSTALL/tmp" install
cp -a "$SNAPCRAFT_PART_INSTALL/tmp/$KF5_DIR/." "$SNAPCRAFT_PART_INSTALL"
rm -r "$SNAPCRAFT_PART_INSTALL/tmp"
after:
- qtconf
- qtwayland
openal:
source: https://github.com/kcat/openal-soft.git
source-depth: 1
@ -418,11 +346,6 @@ parts:
- libpulse-dev
- libsndio-dev
- portaudio19-dev
stage-packages:
- libasound2
- libpulse0
- libportaudio2
- libsndio6.1
configflags:
- -DCMAKE_BUILD_TYPE=Release
- -DALSOFT_EXAMPLES=OFF
@ -434,17 +357,6 @@ parts:
- -./lib/cmake
- -./lib/pkgconfig
range-v3:
source: https://github.com/ericniebler/range-v3.git
source-depth: 1
source-tag: 0.10.0
plugin: cmake
configflags:
- -DRANGE_V3_TESTS=OFF
- -DRANGE_V3_EXAMPLES=OFF
- -DRANGE_V3_DOCS=OFF
prime: [-./*]
qgnomeplatform:
source: https://github.com/FedoraQt/QGnomePlatform.git
source-depth: 1
@ -517,14 +429,3 @@ parts:
after:
- qtconf
prime: [-./*]
xxhash:
source: https://github.com/Cyan4973/xxHash.git
source-depth: 1
source-tag: v0.7.2
plugin: make
make-parameters: [PREFIX=]
prime:
- -./bin
- -./include
- -./share