ZaStoGram_desktop/Telegram/SourceFiles/dialogs/dialogs_pinned_list.h
loop-uh 6159982454 Add Windows media clipboard and pinned reorder
Introduce a central MediaClipboardPayload API and Core::SetMediaClipboard to unify image/file clipboard operations. Implement a Windows backend using an IDataObject/OleSetClipboard (no OleFlushClipboard) that exports DIB/DIBV5, PNG/JPEG, and CF_HDROP; fall back to QMimeData on other platforms. Update mime_type to prefer encoded image formats and expose SetMediaClipboard, and replace direct QClipboard usage in photo, media view and QR code copy paths. Add unit tests for media clipboard. Also add pinned-list delta reordering: PinnedList::move, Session::movePinnedChat, adjust IndexedList/InnerWidget to batch moves and call with a delta. Update CMake to include new platform files.
2026-06-29 01:08:24 +03:00

64 lines
1.3 KiB
C++

/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
class History;
namespace Data {
class SavedMessages;
class Session;
class Forum;
} // namespace Data
namespace Dialogs {
class Key;
class PinnedList final {
public:
PinnedList(FilterId filterId, int limit);
void setLimit(int limit);
// Places on the last place in the list otherwise.
// Does nothing if already pinned.
void addPinned(Key key);
// if (pinned) places on the first place in the list.
void setPinned(Key key, bool pinned);
void move(Key key, int delta);
void clear();
void applyList(
not_null<Data::Session*> owner,
const QVector<MTPDialogPeer> &list);
void applyList(
not_null<Data::SavedMessages*> sublistsOwner,
const QVector<MTPDialogPeer> &list);
void applyList(
not_null<Data::Forum*> forum,
const QVector<MTPint> &list);
void applyList(const std::vector<not_null<History*>> &list);
void reorder(Key key1, Key key2);
const std::vector<Key> &order() const {
return _data;
}
private:
int addPinnedGetPosition(Key key);
void applyLimit(int limit);
FilterId _filterId = 0;
int _limit = 0;
std::vector<Key> _data;
};
} // namespace Dialogs