mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-04-01 23:00:58 +00:00
parent
d94ef82327
commit
ac99784bf7
@ -2951,7 +2951,7 @@ void DialogsWidget::updateDragInScroll(bool inScroll) {
|
||||
if (_dragInScroll != inScroll) {
|
||||
_dragInScroll = inScroll;
|
||||
if (_dragInScroll) {
|
||||
App::main()->forwardLayer(1);
|
||||
App::main()->showForwardLayer(SelectedItemSet());
|
||||
} else {
|
||||
App::main()->dialogsCancelled();
|
||||
}
|
||||
|
@ -167,11 +167,6 @@ void stickersBox(const QString &name) {
|
||||
if (MainWidget *m = main()) m->stickersBox(MTP_inputStickerSetShortName(MTP_string(name)));
|
||||
}
|
||||
|
||||
bool forward(const PeerId &peer, ForwardWhatMessages what) {
|
||||
if (MainWidget *m = main()) return m->onForward(peer, what);
|
||||
return false;
|
||||
}
|
||||
|
||||
void removeDialog(History *history) {
|
||||
if (MainWidget *m = main()) {
|
||||
m->removeDialog(history);
|
||||
|
@ -73,7 +73,6 @@ void searchByHashtag(const QString &tag, PeerData *inPeer);
|
||||
void openPeerByName(const QString &username, MsgId msgId = ShowAtUnreadMsgId, const QString &startToken = QString());
|
||||
void joinGroupByHash(const QString &hash);
|
||||
void stickersBox(const QString &name);
|
||||
bool forward(const PeerId &peer, ForwardWhatMessages what);
|
||||
void removeDialog(History *history);
|
||||
void showSettings();
|
||||
|
||||
|
@ -170,8 +170,8 @@ void ReportSpamPanel::setReported(bool reported, PeerData *onPeer) {
|
||||
update();
|
||||
}
|
||||
|
||||
HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : TWidget(parent)
|
||||
, _forwardSelected(forwardSelected)
|
||||
HistoryHider::HistoryHider(MainWidget *parent, const SelectedItemSet &items) : TWidget(parent)
|
||||
, _forwardItems(items)
|
||||
, _send(this, langFactory(lng_forward_send), st::defaultBoxButton)
|
||||
, _cancel(this, langFactory(lng_cancel), st::defaultBoxButton) {
|
||||
init();
|
||||
@ -318,7 +318,7 @@ void HistoryHider::forward() {
|
||||
} else if (!_botAndQuery.isEmpty()) {
|
||||
parent()->onInlineSwitchChosen(_offered->id, _botAndQuery);
|
||||
} else {
|
||||
parent()->onForward(_offered->id, _forwardSelected ? ForwardSelectedMessages : ForwardContextMessage);
|
||||
parent()->setForwardDraft(_offered->id, _forwardItems);
|
||||
}
|
||||
}
|
||||
emit forwarded();
|
||||
@ -401,7 +401,7 @@ bool HistoryHider::offerPeer(PeerId peer) {
|
||||
} else {
|
||||
auto toId = _offered->id;
|
||||
_offered = nullptr;
|
||||
if (parent()->onForward(toId, _forwardSelected ? ForwardSelectedMessages : ForwardContextMessage)) {
|
||||
if (parent()->setForwardDraft(toId, _forwardItems)) {
|
||||
startHide();
|
||||
}
|
||||
return false;
|
||||
@ -3320,14 +3320,14 @@ void HistoryWidget::mouseMoveEvent(QMouseEvent *e) {
|
||||
|
||||
void HistoryWidget::updateOverStates(QPoint pos) {
|
||||
auto inField = pos.y() >= (_scroll->y() + _scroll->height()) && pos.y() < height() && pos.x() >= 0 && pos.x() < width();
|
||||
auto inReplyEdit = QRect(st::historyReplySkip, _field->y() - st::historySendPadding - st::historyReplyHeight, width() - st::historyReplySkip - _fieldBarCancel->width(), st::historyReplyHeight).contains(pos) && (_editMsgId || replyToId());
|
||||
auto inReplyEditForward = QRect(st::historyReplySkip, _field->y() - st::historySendPadding - st::historyReplyHeight, width() - st::historyReplySkip - _fieldBarCancel->width(), st::historyReplyHeight).contains(pos) && (_editMsgId || replyToId() || readyToForward());
|
||||
auto inPinnedMsg = QRect(0, _topBar->bottomNoMargins(), width(), st::historyReplyHeight).contains(pos) && _pinnedBar;
|
||||
auto inClickable = inReplyEdit || inPinnedMsg;
|
||||
auto inClickable = inReplyEditForward || inPinnedMsg;
|
||||
if (inField != _inField && _recording) {
|
||||
_inField = inField;
|
||||
_send->setRecordActive(_inField);
|
||||
}
|
||||
_inReplyEdit = inReplyEdit;
|
||||
_inReplyEditForward = inReplyEditForward;
|
||||
_inPinnedMsg = inPinnedMsg;
|
||||
if (inClickable != _inClickable) {
|
||||
_inClickable = inClickable;
|
||||
@ -3886,7 +3886,9 @@ void HistoryWidget::forwardMessage() {
|
||||
auto item = App::contextItem();
|
||||
if (!item || item->id < 0 || item->serviceMsg()) return;
|
||||
|
||||
App::main()->forwardLayer();
|
||||
auto items = SelectedItemSet();
|
||||
items.insert(item->id, item);
|
||||
App::main()->showForwardLayer(items);
|
||||
}
|
||||
|
||||
void HistoryWidget::selectMessage() {
|
||||
@ -5270,8 +5272,14 @@ void HistoryWidget::mousePressEvent(QMouseEvent *e) {
|
||||
_replyForwardPressed = QRect(0, _field->y() - st::historySendPadding - st::historyReplyHeight, st::historyReplySkip, st::historyReplyHeight).contains(e->pos());
|
||||
if (_replyForwardPressed && !_fieldBarCancel->isHidden()) {
|
||||
updateField();
|
||||
} else if (_inReplyEdit) {
|
||||
Ui::showPeerHistory(_peer, _editMsgId ? _editMsgId : replyToId());
|
||||
} else if (_inReplyEditForward) {
|
||||
if (readyToForward()) {
|
||||
auto items = _toForward;
|
||||
App::main()->cancelForwarding(_history);
|
||||
App::main()->showForwardLayer(items);
|
||||
} else {
|
||||
Ui::showPeerHistory(_peer, _editMsgId ? _editMsgId : replyToId());
|
||||
}
|
||||
} else if (_inPinnedMsg) {
|
||||
t_assert(_pinnedBar != nullptr);
|
||||
Ui::showPeerHistory(_peer, _pinnedBar->msgId);
|
||||
@ -5650,7 +5658,9 @@ void HistoryWidget::onReplyToMessage() {
|
||||
auto item = App::contextItem();
|
||||
if (!item || item->id < 0 || item->serviceMsg()) return;
|
||||
|
||||
App::forward(_peer->id, ForwardContextMessage);
|
||||
auto items = SelectedItemSet();
|
||||
items.insert(item->id, item);
|
||||
App::main()->setForwardDraft(_peer->id, items);
|
||||
})));
|
||||
}
|
||||
}
|
||||
@ -6153,7 +6163,7 @@ void HistoryWidget::peerUpdated(PeerData *data) {
|
||||
|
||||
void HistoryWidget::onForwardSelected() {
|
||||
if (!_list) return;
|
||||
App::main()->forwardLayer(true);
|
||||
App::main()->showForwardLayer(getSelectedItems());
|
||||
}
|
||||
|
||||
void HistoryWidget::confirmDeleteContextItem() {
|
||||
|
@ -97,7 +97,7 @@ class HistoryHider : public TWidget, private base::Subscriber {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
HistoryHider(MainWidget *parent, bool forwardSelected); // forward messages
|
||||
HistoryHider(MainWidget *parent, const SelectedItemSet &items); // forward messages
|
||||
HistoryHider(MainWidget *parent, UserData *sharedContact); // share contact
|
||||
HistoryHider(MainWidget *parent); // send path from command line argument
|
||||
HistoryHider(MainWidget *parent, const QString &url, const QString &text); // share url
|
||||
@ -138,7 +138,7 @@ private:
|
||||
MainWidget *parent();
|
||||
|
||||
UserData *_sharedContact = nullptr;
|
||||
bool _forwardSelected = false;
|
||||
SelectedItemSet _forwardItems;
|
||||
bool _sendPath = false;
|
||||
|
||||
QString _shareUrl, _shareText;
|
||||
@ -804,7 +804,7 @@ private:
|
||||
object_ptr<MessageField> _field;
|
||||
bool _recording = false;
|
||||
bool _inField = false;
|
||||
bool _inReplyEdit = false;
|
||||
bool _inReplyEditForward = false;
|
||||
bool _inPinnedMsg = false;
|
||||
bool _inClickable = false;
|
||||
int _recordingSamples = 0;
|
||||
|
@ -563,24 +563,7 @@ void MainWidget::finishFloatPlayerDrag(gsl::not_null<Float*> instance, bool clos
|
||||
}
|
||||
}
|
||||
|
||||
bool MainWidget::onForward(const PeerId &peerId, ForwardWhatMessages what) {
|
||||
Expects(peerId != 0);
|
||||
auto peer = App::peer(peerId);
|
||||
auto finishWithError = [this, what](const QString &error) {
|
||||
Ui::show(Box<InformBox>(error));
|
||||
if (what == ForwardPressedMessage || what == ForwardPressedLinkMessage) {
|
||||
// We've already released the mouse button, so the forwarding is cancelled.
|
||||
if (_hider) {
|
||||
_hider->startHide();
|
||||
noHider(_hider);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
if (!peer->canWrite()) {
|
||||
return finishWithError(lang(lng_forward_cant));
|
||||
}
|
||||
|
||||
bool MainWidget::setForwardDraft(PeerId peerId, ForwardWhatMessages what) {
|
||||
auto toForward = SelectedItemSet();
|
||||
if (what == ForwardSelectedMessages) {
|
||||
toForward = _overview ? _overview->getSelectedItems() : _history->getSelectedItems();
|
||||
@ -597,22 +580,48 @@ bool MainWidget::onForward(const PeerId &peerId, ForwardWhatMessages what) {
|
||||
toForward.insert(item->id, item);
|
||||
}
|
||||
}
|
||||
auto result = setForwardDraft(peerId, toForward);
|
||||
if (!result) {
|
||||
if (what == ForwardPressedMessage || what == ForwardPressedLinkMessage) {
|
||||
// We've already released the mouse button, so the forwarding is cancelled.
|
||||
if (_hider) {
|
||||
_hider->startHide();
|
||||
noHider(_hider);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool MainWidget::setForwardDraft(PeerId peerId, const SelectedItemSet &items) {
|
||||
Expects(peerId != 0);
|
||||
auto peer = App::peer(peerId);
|
||||
auto finishWithError = [this](const QString &error) {
|
||||
Ui::show(Box<InformBox>(error));
|
||||
return false;
|
||||
};
|
||||
if (!peer->canWrite()) {
|
||||
return finishWithError(lang(lng_forward_cant));
|
||||
}
|
||||
|
||||
if (auto megagroup = peer->asMegagroup()) {
|
||||
if (megagroup->restrictedRights().is_send_media() && HasMediaItems(toForward)) {
|
||||
if (megagroup->restrictedRights().is_send_media() && HasMediaItems(items)) {
|
||||
return finishWithError(lang(lng_restricted_send_media));
|
||||
} else if (megagroup->restrictedRights().is_send_stickers() && HasStickerItems(toForward)) {
|
||||
} else if (megagroup->restrictedRights().is_send_stickers() && HasStickerItems(items)) {
|
||||
return finishWithError(lang(lng_restricted_send_stickers));
|
||||
} else if (megagroup->restrictedRights().is_send_gifs() && HasGifItems(toForward)) {
|
||||
} else if (megagroup->restrictedRights().is_send_gifs() && HasGifItems(items)) {
|
||||
return finishWithError(lang(lng_restricted_send_gifs));
|
||||
} else if (megagroup->restrictedRights().is_send_games() && HasGameItems(toForward)) {
|
||||
} else if (megagroup->restrictedRights().is_send_games() && HasGameItems(items)) {
|
||||
return finishWithError(lang(lng_restricted_send_inline));
|
||||
} else if (megagroup->restrictedRights().is_send_inline() && HasInlineItems(toForward)) {
|
||||
} else if (megagroup->restrictedRights().is_send_inline() && HasInlineItems(items)) {
|
||||
return finishWithError(lang(lng_restricted_send_inline));
|
||||
}
|
||||
}
|
||||
|
||||
App::history(peer)->setForwardDraft(toForward);
|
||||
_history->cancelReply();
|
||||
App::history(peer)->setForwardDraft(items);
|
||||
if (_history->peer() == peer) {
|
||||
_history->cancelReply();
|
||||
}
|
||||
Ui::showPeerHistory(peer, ShowAtUnreadMsgId);
|
||||
_history->onClearSelected();
|
||||
return true;
|
||||
@ -803,11 +812,11 @@ bool MainWidget::onSendPaths(const PeerId &peerId) {
|
||||
void MainWidget::onFilesOrForwardDrop(const PeerId &peerId, const QMimeData *data) {
|
||||
Expects(peerId != 0);
|
||||
if (data->hasFormat(qsl("application/x-td-forward-selected"))) {
|
||||
onForward(peerId, ForwardSelectedMessages);
|
||||
setForwardDraft(peerId, ForwardSelectedMessages);
|
||||
} else if (data->hasFormat(qsl("application/x-td-forward-pressed-link"))) {
|
||||
onForward(peerId, ForwardPressedLinkMessage);
|
||||
setForwardDraft(peerId, ForwardPressedLinkMessage);
|
||||
} else if (data->hasFormat(qsl("application/x-td-forward-pressed"))) {
|
||||
onForward(peerId, ForwardPressedMessage);
|
||||
setForwardDraft(peerId, ForwardPressedMessage);
|
||||
} else {
|
||||
auto peer = App::peer(peerId);
|
||||
if (!peer->canWrite()) {
|
||||
@ -983,8 +992,12 @@ void MainWidget::hiderLayer(object_ptr<HistoryHider> h) {
|
||||
checkFloatPlayerVisibility();
|
||||
}
|
||||
|
||||
void MainWidget::forwardLayer(int forwardSelected) {
|
||||
hiderLayer((forwardSelected < 0) ? object_ptr<HistoryHider>(this) : object_ptr<HistoryHider>(this, forwardSelected > 0));
|
||||
void MainWidget::showForwardLayer(const SelectedItemSet &items) {
|
||||
hiderLayer(object_ptr<HistoryHider>(this, items));
|
||||
}
|
||||
|
||||
void MainWidget::showSendPathsLayer() {
|
||||
hiderLayer(object_ptr<HistoryHider>(this));
|
||||
}
|
||||
|
||||
void MainWidget::deleteLayer(int selectedCount) {
|
||||
@ -4494,7 +4507,7 @@ void MainWidget::activate() {
|
||||
}
|
||||
} else if (App::wnd() && !Ui::isLayerShown()) {
|
||||
if (!cSendPaths().isEmpty()) {
|
||||
forwardLayer(-1);
|
||||
showSendPathsLayer();
|
||||
} else if (_history->peer()) {
|
||||
_history->activate();
|
||||
} else {
|
||||
|
@ -238,7 +238,8 @@ public:
|
||||
|
||||
int32 dlgsWidth() const;
|
||||
|
||||
void forwardLayer(int forwardSelected = 0); // -1 - send paths
|
||||
void showForwardLayer(const SelectedItemSet &items);
|
||||
void showSendPathsLayer();
|
||||
void deleteLayer(int selectedCount = 0); // 0 - context item
|
||||
void cancelUploadLayer();
|
||||
void shareContactLayer(UserData *contact);
|
||||
@ -246,7 +247,8 @@ public:
|
||||
void inlineSwitchLayer(const QString &botAndQuery);
|
||||
void hiderLayer(object_ptr<HistoryHider> h);
|
||||
void noHider(HistoryHider *destroyed);
|
||||
bool onForward(const PeerId &peer, ForwardWhatMessages what);
|
||||
bool setForwardDraft(PeerId peer, ForwardWhatMessages what);
|
||||
bool setForwardDraft(PeerId peer, const SelectedItemSet &items);
|
||||
bool onShareUrl(const PeerId &peer, const QString &url, const QString &text);
|
||||
bool onInlineSwitchChosen(const PeerId &peer, const QString &botAndQuery);
|
||||
void onShareContact(const PeerId &peer, UserData *contact);
|
||||
|
@ -951,13 +951,14 @@ void MediaView::onShowInFolder() {
|
||||
|
||||
void MediaView::onForward() {
|
||||
auto item = App::histItemById(_msgmigrated ? 0 : _channel, _msgid);
|
||||
if (!_msgid || !item) return;
|
||||
if (!_msgid || !item || item->id < 0 || item->serviceMsg()) return;
|
||||
|
||||
if (App::wnd()) {
|
||||
close();
|
||||
if (App::main()) {
|
||||
App::contextItem(item);
|
||||
App::main()->forwardLayer();
|
||||
if (auto main = App::main()) {
|
||||
auto items = SelectedItemSet();
|
||||
items.insert(item->id, item);
|
||||
main->showForwardLayer(items);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1417,9 +1417,11 @@ void OverviewInner::goToMessage() {
|
||||
|
||||
void OverviewInner::forwardMessage() {
|
||||
auto item = App::contextItem();
|
||||
if (!item || item->id < 0) return;
|
||||
if (!item || item->id < 0 || item->serviceMsg()) return;
|
||||
|
||||
App::main()->forwardLayer();
|
||||
auto items = SelectedItemSet();
|
||||
items.insert(item->id, item);
|
||||
App::main()->showForwardLayer(items);
|
||||
}
|
||||
|
||||
MsgId OverviewInner::complexMsgId(const HistoryItem *item) const {
|
||||
@ -2336,7 +2338,7 @@ bool OverviewWidget::touchScroll(const QPoint &delta) {
|
||||
}
|
||||
|
||||
void OverviewWidget::onForwardSelected() {
|
||||
App::main()->forwardLayer(true);
|
||||
App::main()->showForwardLayer(getSelectedItems());
|
||||
}
|
||||
|
||||
void OverviewWidget::confirmDeleteContextItem() {
|
||||
|
Loading…
Reference in New Issue
Block a user