| 369 | } |
| 370 | |
| 371 | void ChatSwitchProcess::remove(not_null<Data::Thread*> thread) { |
| 372 | _list.erase(ranges::remove(_list, thread), end(_list)); |
| 373 | |
| 374 | const auto i = ranges::find(_entries, thread, &Entry::thread); |
| 375 | if (i != end(_entries)) { |
| 376 | const auto selected = _selected; |
| 377 | const auto index = int(i - begin(_entries)); |
| 378 | if (_selected > index) { |
| 379 | --_selected; |
| 380 | } else if (_selected == index) { |
| 381 | _selected = -1; |
| 382 | } |
| 383 | |
| 384 | _entries.erase(i); |
| 385 | const auto weak = base::make_weak(_widget.get()); |
| 386 | layout(_widget->size()); |
| 387 | if (weak && _selected < 0 && selected > 0) { |
| 388 | if (_entries.empty()) { |
| 389 | _closeRequests.fire({}); |
| 390 | } else { |
| 391 | setSelected(std::min(selected - 1, _shownCount - 1)); |
| 392 | } |
| 393 | } |
| 394 | } |
| 395 | } |
| 396 | |
| 397 | void ChatSwitchProcess::setupView() { |
| 398 | _widget->sizeValue() | rpl::on_next([=](QSize size) { |
no test coverage detected