multi select in media overview done properly

This commit is contained in:
John Preston 2014-08-20 23:13:00 +04:00
parent dfb4d01015
commit db7fa9ba2f
10 changed files with 127 additions and 59 deletions

View File

@ -242,18 +242,7 @@ void AddParticipantInner::chooseParticipant() {
changeCheckState(row); changeCheckState(row);
PeerData *peer = row->history->peer; PeerData *peer = row->history->peer;
updateFilter(); emit selectAllQuery();
for (_sel = _contacts->list.begin; _sel != _contacts->list.end; _sel = _sel->next) {
if (_sel->history->peer == peer) {
break;
}
}
if (_sel == _contacts->list.end) {
_sel = 0;
} else {
emit mustScrollTo(_sel->pos * rh, (_sel->pos + 1) * rh);
}
} }
parentWidget()->update(); parentWidget()->update();
} }
@ -530,6 +519,7 @@ AddParticipantBox::AddParticipantBox(ChatData *chat) :
connect(&_filter, SIGNAL(changed()), this, SLOT(onFilterUpdate())); connect(&_filter, SIGNAL(changed()), this, SLOT(onFilterUpdate()));
connect(&_filter, SIGNAL(cancelled()), this, SIGNAL(onClose())); connect(&_filter, SIGNAL(cancelled()), this, SIGNAL(onClose()));
connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int))); connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int)));
connect(&_inner, SIGNAL(selectAllQuery()), &_filter, SLOT(selectAll()));
showAll(); showAll();
_cache = myGrab(this, rect()); _cache = myGrab(this, rect());

View File

@ -50,6 +50,7 @@ public:
signals: signals:
void mustScrollTo(int ymin, int ymax); void mustScrollTo(int ymin, int ymax);
void selectAllQuery();
public slots: public slots:

View File

@ -233,18 +233,7 @@ void NewGroupInner::chooseParticipant() {
changeCheckState(row); changeCheckState(row);
PeerData *peer = row->history->peer; PeerData *peer = row->history->peer;
updateFilter(); emit selectAllQuery();
for (_sel = _contacts->list.begin; _sel != _contacts->list.end; _sel = _sel->next) {
if (_sel->history->peer == peer) {
break;
}
}
if (_sel == _contacts->list.end) {
_sel = 0;
} else {
emit mustScrollTo(_sel->pos * rh, (_sel->pos + 1) * rh);
}
} }
parentWidget()->update(); parentWidget()->update();
@ -469,6 +458,7 @@ NewGroupBox::NewGroupBox() : _scroll(this, st::newGroupScroll), _inner(),
connect(&_filter, SIGNAL(changed()), this, SLOT(onFilterUpdate())); connect(&_filter, SIGNAL(changed()), this, SLOT(onFilterUpdate()));
connect(&_filter, SIGNAL(cancelled()), this, SIGNAL(onClose())); connect(&_filter, SIGNAL(cancelled()), this, SIGNAL(onClose()));
connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int))); connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int)));
connect(&_inner, SIGNAL(selectAllQuery()), &_filter, SLOT(selectAll()));
showAll(); showAll();
_cache = myGrab(this, rect()); _cache = myGrab(this, rect());

View File

@ -50,6 +50,7 @@ public:
signals: signals:
void mustScrollTo(int ymin, int ymax); void mustScrollTo(int ymin, int ymax);
void selectAllQuery();
public slots: public slots:

View File

@ -467,7 +467,7 @@ void HistoryList::itemRemoved(HistoryItem *item) {
SelectedItems::iterator i = _selected.find(item); SelectedItems::iterator i = _selected.find(item);
if (i != _selected.cend()) { if (i != _selected.cend()) {
_selected.erase(i); _selected.erase(i);
update(); historyWidget->updateTopBarSelection();
} }
onUpdateSelected(); onUpdateSelected();
@ -475,8 +475,6 @@ void HistoryList::itemRemoved(HistoryItem *item) {
if (_dragSelFrom == item) _dragSelFrom = 0; if (_dragSelFrom == item) _dragSelFrom = 0;
if (_dragSelTo == item) _dragSelTo = 0; if (_dragSelTo == item) _dragSelTo = 0;
updateDragSelection(_dragSelFrom, _dragSelTo, _dragSelecting, true); updateDragSelection(_dragSelFrom, _dragSelTo, _dragSelecting, true);
parentWidget()->update();
} }
void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton button) { void HistoryList::dragActionFinish(const QPoint &screenPos, Qt::MouseButton button) {
@ -1154,8 +1152,8 @@ void HistoryList::applyDragSelection() {
HistoryBlock *block = (*hist)[fromblock]; HistoryBlock *block = (*hist)[fromblock];
for (int32 cnt = (fromblock < toblock) ? block->size() : (toitem + 1); fromitem < cnt; ++fromitem) { for (int32 cnt = (fromblock < toblock) ? block->size() : (toitem + 1); fromitem < cnt; ++fromitem) {
HistoryItem *item = (*block)[fromitem]; HistoryItem *item = (*block)[fromitem];
SelectedItems::iterator i = _selected.find(item);
if (item->id > 0 && !item->serviceMsg()) { if (item->id > 0 && !item->serviceMsg()) {
SelectedItems::iterator i = _selected.find(item);
if (i == _selected.cend()) { if (i == _selected.cend()) {
if (_selected.size() >= MaxSelectedItems) break; if (_selected.size() >= MaxSelectedItems) break;
_selected.insert(item, FullItemSel); _selected.insert(item, FullItemSel);
@ -1163,7 +1161,6 @@ void HistoryList::applyDragSelection() {
*i = FullItemSel; *i = FullItemSel;
} }
} else { } else {
SelectedItems::iterator i = _selected.find(item);
if (i != _selected.cend()) { if (i != _selected.cend()) {
_selected.erase(i); _selected.erase(i);
} }

View File

@ -642,6 +642,10 @@ void MainWidget::mediaOverviewUpdated(PeerData *peer) {
if (overview) overview->mediaOverviewUpdated(peer); if (overview) overview->mediaOverviewUpdated(peer);
} }
void MainWidget::changingMsgId(HistoryItem *row, MsgId newId) {
if (overview) overview->changingMsgId(row, newId);
}
bool MainWidget::overviewFailed(PeerData *peer, const RPCError &error, mtpRequestId req) { bool MainWidget::overviewFailed(PeerData *peer, const RPCError &error, mtpRequestId req) {
MediaOverviewType type = OverviewCount; MediaOverviewType type = OverviewCount;
for (int32 i = 0; i < OverviewCount; ++i) { for (int32 i = 0; i < OverviewCount; ++i) {

View File

@ -271,6 +271,7 @@ public:
void searchMessages(const QString &query); void searchMessages(const QString &query);
void preloadOverviews(PeerData *peer); void preloadOverviews(PeerData *peer);
void mediaOverviewUpdated(PeerData *peer); void mediaOverviewUpdated(PeerData *peer);
void changingMsgId(HistoryItem *row, MsgId newId);
void loadMediaBack(PeerData *peer, MediaOverviewType type, bool many = false); void loadMediaBack(PeerData *peer, MediaOverviewType type, bool many = false);

View File

@ -161,26 +161,20 @@ bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) con
if (index < 0) return false; if (index < 0) return false;
if (_type == OverviewPhotos) { if (_type == OverviewPhotos) {
int32 row = (_photosToAdd + index) / _photosInRow, col = (_photosToAdd + index) % _photosInRow, vsize = _vsize + st::overviewPhotoSkip; if (x >= 0 && x < _vsize && y >= 0 && y < _vsize) {
if (y >= _addToY + row * vsize + st::overviewPhotoSkip && y < _addToY + (row + 1) * vsize) { return true;
float64 w = (_width - st::overviewPhotoSkip) / float64(_photosInRow);
if (x >= int32(col * w + st::overviewPhotoSkip) && x < int32(col * w + vsize)) {
return true;
}
} }
} else { } else {
HistoryItem *item = App::histItemById(msgId); HistoryItem *item = App::histItemById(msgId);
HistoryMedia *media = item ? item->getMedia(true) : 0; HistoryMedia *media = item ? item->getMedia(true) : 0;
if (media) { if (media) {
int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); int32 w = _width - st::msgMargin.left() - st::msgMargin.right();
y -= _addToY + (_height - _items[index].y);
bool out = item->out(); bool out = item->out();
int32 mw = media->maxWidth(), left = (out ? st::msgMargin.right() : st::msgMargin.left()) + (out && mw < w ? (w - mw) : 0); int32 mw = media->maxWidth(), left = (out ? st::msgMargin.right() : st::msgMargin.left()) + (out && mw < w ? (w - mw) : 0);
if (!out && _hist->peer->chat) { if (!out && _hist->peer->chat) {
left += st::msgPhotoSkip; left += st::msgPhotoSkip;
} }
x -= left; return media->hasPoint(x - left, y - st::msgMargin.top(), w);
return media->hasPoint(x, y, w);
} }
} }
return false; return false;
@ -485,11 +479,17 @@ void OverviewInner::applyDragSelection() {
if (!msgid) continue; if (!msgid) continue;
SelectedItems::iterator j = _selected.find(msgid); SelectedItems::iterator j = _selected.find(msgid);
if (j == _selected.cend()) { if (msgid > 0) {
if (_selected.size() >= MaxSelectedItems) break; if (j == _selected.cend()) {
_selected.insert(msgid, FullItemSel); if (_selected.size() >= MaxSelectedItems) break;
} else if (j.value() != FullItemSel) { _selected.insert(msgid, FullItemSel);
*j = FullItemSel; } else if (j.value() != FullItemSel) {
*j = FullItemSel;
}
} else {
if (j != _selected.cend()) {
_selected.erase(j);
}
} }
} }
} else { } else {
@ -514,7 +514,7 @@ QPoint OverviewInner::mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex) {
if (_type == OverviewPhotos) { if (_type == OverviewPhotos) {
int32 row = (_photosToAdd + itemIndex) / _photosInRow, col = (_photosToAdd + itemIndex) % _photosInRow; int32 row = (_photosToAdd + itemIndex) / _photosInRow, col = (_photosToAdd + itemIndex) % _photosInRow;
float64 w = (_width - st::overviewPhotoSkip) / float64(_photosInRow); float64 w = (_width - st::overviewPhotoSkip) / float64(_photosInRow);
p.setX(p.x() - col * int32(w) - st::overviewPhotoSkip); p.setX(p.x() - int32(col * w) - st::overviewPhotoSkip);
p.setY(p.y() - _addToY - row * (_vsize + st::overviewPhotoSkip) - st::overviewPhotoSkip); p.setY(p.y() - _addToY - row * (_vsize + st::overviewPhotoSkip) - st::overviewPhotoSkip);
} else { } else {
p.setY(p.y() - _addToY - (_height - _items[itemIndex].y)); p.setY(p.y() - _addToY - (_height - _items[itemIndex].y));
@ -616,7 +616,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) {
} }
uint32 sel = 0; uint32 sel = 0;
if (count - index - 1 >= selfrom && count - index - 1 <= selto) { if (index >= selfrom && index <= selto) {
sel = (_dragSelecting && item->id > 0) ? FullItemSel : 0; sel = (_dragSelecting && item->id > 0) ? FullItemSel : 0;
} else if (hasSel) { } else if (hasSel) {
SelectedItems::const_iterator i = _selected.constFind(item->id); SelectedItems::const_iterator i = _selected.constFind(item->id);
@ -713,8 +713,8 @@ void OverviewInner::onUpdateSelected() {
int32 index = -1; int32 index = -1;
if (_type == OverviewPhotos) { if (_type == OverviewPhotos) {
float64 w = (float64(_width - st::overviewPhotoSkip) / _photosInRow); float64 w = (float64(_width - st::overviewPhotoSkip) / _photosInRow);
int32 inRow = int32(m.x() / w), vsize = (_vsize + st::overviewPhotoSkip); int32 inRow = int32((m.x() - (st::overviewPhotoSkip / 2)) / w), vsize = (_vsize + st::overviewPhotoSkip);
int32 row = int32((m.y() - _addToY) / vsize); int32 row = int32((m.y() - _addToY - (st::overviewPhotoSkip / 2)) / vsize);
if (inRow < 0) inRow = 0; if (inRow < 0) inRow = 0;
if (row < 0) row = 0; if (row < 0) row = 0;
bool upon = true; bool upon = true;
@ -761,9 +761,11 @@ void OverviewInner::onUpdateSelected() {
if (i > 0 && ((y + h / 2) < m.y() || i == _items.size() - 1)) { if (i > 0 && ((y + h / 2) < m.y() || i == _items.size() - 1)) {
--i; --i;
if (!_items[i].msgid) break; // wtf if (!_items[i].msgid) break; // wtf
y = _addToY + _height - _items[i].y;
} else if (i < _items.size() - 1 && ((y + h / 2) >= m.y() || !i)) { } else if (i < _items.size() - 1 && ((y + h / 2) >= m.y() || !i)) {
++i; ++i;
if (!_items[i].msgid) break; // wtf if (!_items[i].msgid) break; // wtf
y = _addToY + _height - _items[i].y;
} else { } else {
break; // wtf break; // wtf
} }
@ -816,7 +818,7 @@ void OverviewInner::onUpdateSelected() {
cur = style::cur_pointer; cur = style::cur_pointer;
} }
} else { } else {
if (_dragItemIndex < 0 || _mousedItem < 0) { if (_dragItemIndex < 0 || _mousedItemIndex < 0) {
_dragAction = NoDrag; _dragAction = NoDrag;
return; return;
} }
@ -829,28 +831,52 @@ void OverviewInner::onUpdateSelected() {
} }
cur = textlnkDown() ? style::cur_pointer : style::cur_default; cur = textlnkDown() ? style::cur_pointer : style::cur_default;
if (_dragAction == Selecting) { if (_dragAction == Selecting) {
bool selectingDown = (_mousedItemIndex < _dragItemIndex) || (_mousedItemIndex == _dragItemIndex && _dragStartPos.y() < m.y()); bool selectingDown = (_type == OverviewPhotos ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y())));
MsgId dragSelFrom = _dragItem, dragSelTo = _mousedItem; MsgId dragSelFrom = _dragItem, dragSelTo = _mousedItem;
int32 dragSelFromIndex = _dragItemIndex, dragSelToIndex = _mousedItemIndex; int32 dragSelFromIndex = _dragItemIndex, dragSelToIndex = _mousedItemIndex;
if (!itemHasPoint(dragSelFrom, dragSelFromIndex, _dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom if (!itemHasPoint(dragSelFrom, dragSelFromIndex, _dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom
if (selectingDown) { if (selectingDown) {
if (_dragStartPos.y() >= ((_type == OverviewPhotos) ? _vsize : (itemHeight(dragSelFrom, dragSelFromIndex) - st::msgMargin.bottom())) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { if (_type == OverviewPhotos) {
moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); if (_dragStartPos.x() >= _vsize || ((_mousedItem == dragSelFrom) && (m.x() < _dragStartPos.x() + QApplication::startDragDistance()))) {
moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1);
}
} else {
if (_dragStartPos.y() >= (itemHeight(dragSelFrom, dragSelFromIndex) - st::msgMargin.bottom()) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) {
moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1);
}
} }
} else { } else {
if (_dragStartPos.y() < ((_type == OverviewPhotos ? 0 : st::msgMargin.top())) || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { if (_type == OverviewPhotos) {
moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); if (_dragStartPos.x() < 0 || ((_mousedItem == dragSelFrom) && (m.x() >= _dragStartPos.x() - QApplication::startDragDistance()))) {
moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1);
}
} else {
if (_dragStartPos.y() < st::msgMargin.top() || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) {
moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1);
}
} }
} }
} }
if (_dragItem != _mousedItem) { // maybe exclude dragSelTo if (_dragItem != _mousedItem) { // maybe exclude dragSelTo
if (selectingDown) { if (selectingDown) {
if (m.y() < ((_type == OverviewPhotos) ? 0 : st::msgMargin.top())) { if (_type == OverviewPhotos) {
moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); if (m.x() < 0) {
moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1);
}
} else {
if (m.y() < st::msgMargin.top()) {
moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1);
}
} }
} else { } else {
if (m.y() >= ((_type == OverviewPhotos) ? _vsize : (itemHeight(dragSelTo, dragSelToIndex) - st::msgMargin.bottom()))) { if (_type == OverviewPhotos) {
moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); if (m.x() >= _vsize) {
moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1);
}
} else {
if (m.y() >= itemHeight(dragSelTo, dragSelToIndex) - st::msgMargin.bottom()) {
moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1);
}
} }
} }
} }
@ -858,7 +884,7 @@ void OverviewInner::onUpdateSelected() {
MsgId dragFirstAffected = dragSelFrom; MsgId dragFirstAffected = dragSelFrom;
int32 dragFirstAffectedIndex = dragSelFromIndex; int32 dragFirstAffectedIndex = dragSelFromIndex;
while (dragFirstAffectedIndex >= 0 && dragFirstAffected <= 0) { while (dragFirstAffectedIndex >= 0 && dragFirstAffected <= 0) {
moveToNextItem(dragFirstAffected, dragFirstAffectedIndex, dragSelTo, selectingDown ? -1 : 1); moveToNextItem(dragFirstAffected, dragFirstAffectedIndex, dragSelTo, ((selectingDown && (_type == OverviewPhotos)) || (!selectingDown && (_type != OverviewPhotos))) ? -1 : 1);
} }
if (dragFirstAffectedIndex >= 0) { if (dragFirstAffectedIndex >= 0) {
SelectedItems::const_iterator i = _selected.constFind(dragFirstAffected); SelectedItems::const_iterator i = _selected.constFind(dragFirstAffected);
@ -1132,7 +1158,7 @@ void OverviewInner::fillSelectedItems(SelectedItemSet &sel, bool forDelete) {
for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) { for (SelectedItems::const_iterator i = _selected.cbegin(), e = _selected.cend(); i != e; ++i) {
HistoryItem *item = App::histItemById(i.key()); HistoryItem *item = App::histItemById(i.key());
if (item && item->itemType() == HistoryItem::MsgType && ((item->id > 0 && !item->serviceMsg()) || forDelete)) { if (item && item->itemType() == HistoryItem::MsgType && ((item->id > 0 && !item->serviceMsg()) || forDelete)) {
sel.insert(item->y + item->block()->y, item); sel.insert(item->id, item);
} }
} }
} }
@ -1251,6 +1277,53 @@ void OverviewInner::mediaOverviewUpdated() {
} }
} }
void OverviewInner::changingMsgId(HistoryItem *row, MsgId newId) {
if (_dragSelFrom == row->id) _dragSelFrom = newId;
if (_dragSelTo == row->id) _dragSelTo = newId;
if (_mousedItem == row->id) _mousedItem = newId;
if (_dragItem == row->id) _dragItem = newId;
for (SelectedItems::iterator i = _selected.begin(), e = _selected.end(); i != e; ++i) {
if (i.key() == row->id) {
uint32 sel = i.value();
_selected.erase(i);
_selected.insert(newId, sel);
break;
}
}
for (CachedItems::iterator i = _items.begin(), e = _items.end(); i != e; ++i) {
if (i->msgid == row->id) {
i->msgid = newId;
break;
}
}
}
void OverviewInner::itemRemoved(HistoryItem *item) {
if (_dragItem == item->id) {
dragActionCancel();
}
SelectedItems::iterator i = _selected.find(item->id);
if (i != _selected.cend()) {
_selected.erase(i);
_overview->updateTopBarSelection();
}
onUpdateSelected();
if (_dragSelFrom == item->id) {
_dragSelFrom = 0;
_dragSelFromIndex = -1;
}
if (_dragSelTo == item->id) {
_dragSelTo = 0;
_dragSelToIndex = -1;
}
updateDragSelection(_dragSelFrom, _dragSelFromIndex, _dragSelTo, _dragSelToIndex, _dragSelecting);
parentWidget()->update();
}
void OverviewInner::msgUpdated(HistoryItem *msg) { void OverviewInner::msgUpdated(HistoryItem *msg) {
if (!msg || _hist != msg->history()) return; if (!msg || _hist != msg->history()) return;
MsgId msgid = msg->id; MsgId msgid = msg->id;
@ -1507,6 +1580,12 @@ void OverviewWidget::mediaOverviewUpdated(PeerData *p) {
} }
} }
void OverviewWidget::changingMsgId(HistoryItem *row, MsgId newId) {
if (peer() == row->history()->peer) {
_inner.changingMsgId(row, newId);
}
}
void OverviewWidget::msgUpdated(PeerId p, HistoryItem *msg) { void OverviewWidget::msgUpdated(PeerId p, HistoryItem *msg) {
if (peer()->id == p) { if (peer()->id == p) {
_inner.msgUpdated(msg); _inner.msgUpdated(msg);

View File

@ -56,6 +56,7 @@ public:
void switchType(MediaOverviewType type); void switchType(MediaOverviewType type);
void mediaOverviewUpdated(); void mediaOverviewUpdated();
void changingMsgId(HistoryItem *row, MsgId newId);
void msgUpdated(HistoryItem *msg); void msgUpdated(HistoryItem *msg);
void getSelectionState(int32 &selectedForForward, int32 &selectedForDelete) const; void getSelectionState(int32 &selectedForForward, int32 &selectedForDelete) const;
@ -82,6 +83,8 @@ public slots:
void onTouchSelect(); void onTouchSelect();
void onTouchScrollTimer(); void onTouchScrollTimer();
void itemRemoved(HistoryItem *item);
private: private:
void fixItemIndex(int32 &current, MsgId msgId) const; void fixItemIndex(int32 &current, MsgId msgId) const;
@ -208,6 +211,7 @@ public:
bool animStep(float64 ms); bool animStep(float64 ms);
void mediaOverviewUpdated(PeerData *peer); void mediaOverviewUpdated(PeerData *peer);
void changingMsgId(HistoryItem *row, MsgId newId);
void msgUpdated(PeerId peer, HistoryItem *msg); void msgUpdated(PeerId peer, HistoryItem *msg);
QPoint clampMousePosition(QPoint point); QPoint clampMousePosition(QPoint point);

View File

@ -1214,6 +1214,7 @@ void Window::mediaOverviewUpdated(PeerData *peer) {
} }
void Window::changingMsgId(HistoryItem *row, MsgId newId) { void Window::changingMsgId(HistoryItem *row, MsgId newId) {
if (main) main->changingMsgId(row, newId);
if (!_mediaView || _mediaView->isHidden()) return; if (!_mediaView || _mediaView->isHidden()) return;
_mediaView->changingMsgId(row, newId); _mediaView->changingMsgId(row, newId);
} }