diff --git a/Telegram/Resources/icons/menu/add_account.png b/Telegram/Resources/icons/menu/add_account.png new file mode 100644 index 000000000..175540e13 Binary files /dev/null and b/Telegram/Resources/icons/menu/add_account.png differ diff --git a/Telegram/Resources/icons/menu/add_account@2x.png b/Telegram/Resources/icons/menu/add_account@2x.png new file mode 100644 index 000000000..81583e5c6 Binary files /dev/null and b/Telegram/Resources/icons/menu/add_account@2x.png differ diff --git a/Telegram/Resources/icons/menu/add_account@3x.png b/Telegram/Resources/icons/menu/add_account@3x.png new file mode 100644 index 000000000..d6597b787 Binary files /dev/null and b/Telegram/Resources/icons/menu/add_account@3x.png differ diff --git a/Telegram/Resources/icons/menu/admin.png b/Telegram/Resources/icons/menu/admin.png new file mode 100644 index 000000000..bb9ed4c87 Binary files /dev/null and b/Telegram/Resources/icons/menu/admin.png differ diff --git a/Telegram/Resources/icons/menu/admin@2x.png b/Telegram/Resources/icons/menu/admin@2x.png new file mode 100644 index 000000000..8baaecb1e Binary files /dev/null and b/Telegram/Resources/icons/menu/admin@2x.png differ diff --git a/Telegram/Resources/icons/menu/admin@3x.png b/Telegram/Resources/icons/menu/admin@3x.png new file mode 100644 index 000000000..ce868945d Binary files /dev/null and b/Telegram/Resources/icons/menu/admin@3x.png differ diff --git a/Telegram/Resources/icons/menu/admin_promote.png b/Telegram/Resources/icons/menu/admin_promote.png new file mode 100644 index 000000000..ce7a550e6 Binary files /dev/null and b/Telegram/Resources/icons/menu/admin_promote.png differ diff --git a/Telegram/Resources/icons/menu/admin_promote@2x.png b/Telegram/Resources/icons/menu/admin_promote@2x.png new file mode 100644 index 000000000..e91ce7890 Binary files /dev/null and b/Telegram/Resources/icons/menu/admin_promote@2x.png differ diff --git a/Telegram/Resources/icons/menu/admin_promote@3x.png b/Telegram/Resources/icons/menu/admin_promote@3x.png new file mode 100644 index 000000000..8f9317cbf Binary files /dev/null and b/Telegram/Resources/icons/menu/admin_promote@3x.png differ diff --git a/Telegram/Resources/icons/menu/all_media.png b/Telegram/Resources/icons/menu/all_media.png new file mode 100644 index 000000000..9febf576c Binary files /dev/null and b/Telegram/Resources/icons/menu/all_media.png differ diff --git a/Telegram/Resources/icons/menu/all_media@2x.png b/Telegram/Resources/icons/menu/all_media@2x.png new file mode 100644 index 000000000..b2b3b6ce1 Binary files /dev/null and b/Telegram/Resources/icons/menu/all_media@2x.png differ diff --git a/Telegram/Resources/icons/menu/all_media@3x.png b/Telegram/Resources/icons/menu/all_media@3x.png new file mode 100644 index 000000000..4fa10d48f Binary files /dev/null and b/Telegram/Resources/icons/menu/all_media@3x.png differ diff --git a/Telegram/Resources/icons/menu/archive.png b/Telegram/Resources/icons/menu/archive.png new file mode 100644 index 000000000..432bf2f7b Binary files /dev/null and b/Telegram/Resources/icons/menu/archive.png differ diff --git a/Telegram/Resources/icons/menu/archive@2x.png b/Telegram/Resources/icons/menu/archive@2x.png new file mode 100644 index 000000000..59914bb17 Binary files /dev/null and b/Telegram/Resources/icons/menu/archive@2x.png differ diff --git a/Telegram/Resources/icons/menu/archive@3x.png b/Telegram/Resources/icons/menu/archive@3x.png new file mode 100644 index 000000000..c449fce34 Binary files /dev/null and b/Telegram/Resources/icons/menu/archive@3x.png differ diff --git a/Telegram/Resources/icons/menu/block.png b/Telegram/Resources/icons/menu/block.png new file mode 100644 index 000000000..3f9efcd87 Binary files /dev/null and b/Telegram/Resources/icons/menu/block.png differ diff --git a/Telegram/Resources/icons/menu/block@2x.png b/Telegram/Resources/icons/menu/block@2x.png new file mode 100644 index 000000000..f6cad1fe4 Binary files /dev/null and b/Telegram/Resources/icons/menu/block@2x.png differ diff --git a/Telegram/Resources/icons/menu/block@3x.png b/Telegram/Resources/icons/menu/block@3x.png new file mode 100644 index 000000000..5e0ced5d5 Binary files /dev/null and b/Telegram/Resources/icons/menu/block@3x.png differ diff --git a/Telegram/Resources/icons/menu/calendar.png b/Telegram/Resources/icons/menu/calendar.png new file mode 100644 index 000000000..036bd32e4 Binary files /dev/null and b/Telegram/Resources/icons/menu/calendar.png differ diff --git a/Telegram/Resources/icons/menu/calendar@2x.png b/Telegram/Resources/icons/menu/calendar@2x.png new file mode 100644 index 000000000..c53106f9b Binary files /dev/null and b/Telegram/Resources/icons/menu/calendar@2x.png differ diff --git a/Telegram/Resources/icons/menu/calendar@3x.png b/Telegram/Resources/icons/menu/calendar@3x.png new file mode 100644 index 000000000..c85573873 Binary files /dev/null and b/Telegram/Resources/icons/menu/calendar@3x.png differ diff --git a/Telegram/Resources/icons/menu/cancel.png b/Telegram/Resources/icons/menu/cancel.png new file mode 100644 index 000000000..f88a31e39 Binary files /dev/null and b/Telegram/Resources/icons/menu/cancel.png differ diff --git a/Telegram/Resources/icons/menu/cancel@2x.png b/Telegram/Resources/icons/menu/cancel@2x.png new file mode 100644 index 000000000..ae05c193e Binary files /dev/null and b/Telegram/Resources/icons/menu/cancel@2x.png differ diff --git a/Telegram/Resources/icons/menu/cancel@3x.png b/Telegram/Resources/icons/menu/cancel@3x.png new file mode 100644 index 000000000..151fe55ff Binary files /dev/null and b/Telegram/Resources/icons/menu/cancel@3x.png differ diff --git a/Telegram/Resources/icons/menu/clear.png b/Telegram/Resources/icons/menu/clear.png new file mode 100644 index 000000000..3d1ac4ba1 Binary files /dev/null and b/Telegram/Resources/icons/menu/clear.png differ diff --git a/Telegram/Resources/icons/menu/clear@2x.png b/Telegram/Resources/icons/menu/clear@2x.png new file mode 100644 index 000000000..3a6664bc7 Binary files /dev/null and b/Telegram/Resources/icons/menu/clear@2x.png differ diff --git a/Telegram/Resources/icons/menu/clear@3x.png b/Telegram/Resources/icons/menu/clear@3x.png new file mode 100644 index 000000000..1271ec8ed Binary files /dev/null and b/Telegram/Resources/icons/menu/clear@3x.png differ diff --git a/Telegram/Resources/icons/menu/collapse.png b/Telegram/Resources/icons/menu/collapse.png new file mode 100644 index 000000000..330cedb20 Binary files /dev/null and b/Telegram/Resources/icons/menu/collapse.png differ diff --git a/Telegram/Resources/icons/menu/collapse@2x.png b/Telegram/Resources/icons/menu/collapse@2x.png new file mode 100644 index 000000000..be2b93bf5 Binary files /dev/null and b/Telegram/Resources/icons/menu/collapse@2x.png differ diff --git a/Telegram/Resources/icons/menu/collapse@3x.png b/Telegram/Resources/icons/menu/collapse@3x.png new file mode 100644 index 000000000..c9617e271 Binary files /dev/null and b/Telegram/Resources/icons/menu/collapse@3x.png differ diff --git a/Telegram/Resources/icons/menu/colors.png b/Telegram/Resources/icons/menu/colors.png new file mode 100644 index 000000000..e12e34a07 Binary files /dev/null and b/Telegram/Resources/icons/menu/colors.png differ diff --git a/Telegram/Resources/icons/menu/colors@2x.png b/Telegram/Resources/icons/menu/colors@2x.png new file mode 100644 index 000000000..675796b02 Binary files /dev/null and b/Telegram/Resources/icons/menu/colors@2x.png differ diff --git a/Telegram/Resources/icons/menu/colors@3x.png b/Telegram/Resources/icons/menu/colors@3x.png new file mode 100644 index 000000000..6329caf06 Binary files /dev/null and b/Telegram/Resources/icons/menu/colors@3x.png differ diff --git a/Telegram/Resources/icons/menu/copy.png b/Telegram/Resources/icons/menu/copy.png new file mode 100644 index 000000000..2a80ac009 Binary files /dev/null and b/Telegram/Resources/icons/menu/copy.png differ diff --git a/Telegram/Resources/icons/menu/copy@2x.png b/Telegram/Resources/icons/menu/copy@2x.png new file mode 100644 index 000000000..5a2828a65 Binary files /dev/null and b/Telegram/Resources/icons/menu/copy@2x.png differ diff --git a/Telegram/Resources/icons/menu/copy@3x.png b/Telegram/Resources/icons/menu/copy@3x.png new file mode 100644 index 000000000..611d391ad Binary files /dev/null and b/Telegram/Resources/icons/menu/copy@3x.png differ diff --git a/Telegram/Resources/icons/menu/create_poll.png b/Telegram/Resources/icons/menu/create_poll.png new file mode 100644 index 000000000..7918de74a Binary files /dev/null and b/Telegram/Resources/icons/menu/create_poll.png differ diff --git a/Telegram/Resources/icons/menu/create_poll@2x.png b/Telegram/Resources/icons/menu/create_poll@2x.png new file mode 100644 index 000000000..17e5a7d0f Binary files /dev/null and b/Telegram/Resources/icons/menu/create_poll@2x.png differ diff --git a/Telegram/Resources/icons/menu/create_poll@3x.png b/Telegram/Resources/icons/menu/create_poll@3x.png new file mode 100644 index 000000000..245b8978d Binary files /dev/null and b/Telegram/Resources/icons/menu/create_poll@3x.png differ diff --git a/Telegram/Resources/icons/menu/delete.png b/Telegram/Resources/icons/menu/delete.png new file mode 100644 index 000000000..9c17f4064 Binary files /dev/null and b/Telegram/Resources/icons/menu/delete.png differ diff --git a/Telegram/Resources/icons/menu/delete@2x.png b/Telegram/Resources/icons/menu/delete@2x.png new file mode 100644 index 000000000..0d9d8c9c2 Binary files /dev/null and b/Telegram/Resources/icons/menu/delete@2x.png differ diff --git a/Telegram/Resources/icons/menu/delete@3x.png b/Telegram/Resources/icons/menu/delete@3x.png new file mode 100644 index 000000000..daaf32b81 Binary files /dev/null and b/Telegram/Resources/icons/menu/delete@3x.png differ diff --git a/Telegram/Resources/icons/menu/discussion.png b/Telegram/Resources/icons/menu/discussion.png new file mode 100644 index 000000000..2fefee8b9 Binary files /dev/null and b/Telegram/Resources/icons/menu/discussion.png differ diff --git a/Telegram/Resources/icons/menu/discussion@2x.png b/Telegram/Resources/icons/menu/discussion@2x.png new file mode 100644 index 000000000..495257521 Binary files /dev/null and b/Telegram/Resources/icons/menu/discussion@2x.png differ diff --git a/Telegram/Resources/icons/menu/discussion@3x.png b/Telegram/Resources/icons/menu/discussion@3x.png new file mode 100644 index 000000000..3f6029d1e Binary files /dev/null and b/Telegram/Resources/icons/menu/discussion@3x.png differ diff --git a/Telegram/Resources/icons/menu/download.png b/Telegram/Resources/icons/menu/download.png new file mode 100644 index 000000000..449dffea5 Binary files /dev/null and b/Telegram/Resources/icons/menu/download.png differ diff --git a/Telegram/Resources/icons/menu/download@2x.png b/Telegram/Resources/icons/menu/download@2x.png new file mode 100644 index 000000000..6e489c216 Binary files /dev/null and b/Telegram/Resources/icons/menu/download@2x.png differ diff --git a/Telegram/Resources/icons/menu/download@3x.png b/Telegram/Resources/icons/menu/download@3x.png new file mode 100644 index 000000000..638c16248 Binary files /dev/null and b/Telegram/Resources/icons/menu/download@3x.png differ diff --git a/Telegram/Resources/icons/menu/edit.png b/Telegram/Resources/icons/menu/edit.png new file mode 100644 index 000000000..04e52a069 Binary files /dev/null and b/Telegram/Resources/icons/menu/edit.png differ diff --git a/Telegram/Resources/icons/menu/edit@2x.png b/Telegram/Resources/icons/menu/edit@2x.png new file mode 100644 index 000000000..2417cc52c Binary files /dev/null and b/Telegram/Resources/icons/menu/edit@2x.png differ diff --git a/Telegram/Resources/icons/menu/edit@3x.png b/Telegram/Resources/icons/menu/edit@3x.png new file mode 100644 index 000000000..ef846b493 Binary files /dev/null and b/Telegram/Resources/icons/menu/edit@3x.png differ diff --git a/Telegram/Resources/icons/menu/expand.png b/Telegram/Resources/icons/menu/expand.png new file mode 100644 index 000000000..e817187b6 Binary files /dev/null and b/Telegram/Resources/icons/menu/expand.png differ diff --git a/Telegram/Resources/icons/menu/expand@2x.png b/Telegram/Resources/icons/menu/expand@2x.png new file mode 100644 index 000000000..5197da5b5 Binary files /dev/null and b/Telegram/Resources/icons/menu/expand@2x.png differ diff --git a/Telegram/Resources/icons/menu/expand@3x.png b/Telegram/Resources/icons/menu/expand@3x.png new file mode 100644 index 000000000..596ac8c3c Binary files /dev/null and b/Telegram/Resources/icons/menu/expand@3x.png differ diff --git a/Telegram/Resources/icons/menu/export.png b/Telegram/Resources/icons/menu/export.png new file mode 100644 index 000000000..cc9fdee68 Binary files /dev/null and b/Telegram/Resources/icons/menu/export.png differ diff --git a/Telegram/Resources/icons/menu/export@2x.png b/Telegram/Resources/icons/menu/export@2x.png new file mode 100644 index 000000000..43b2cc328 Binary files /dev/null and b/Telegram/Resources/icons/menu/export@2x.png differ diff --git a/Telegram/Resources/icons/menu/export@3x.png b/Telegram/Resources/icons/menu/export@3x.png new file mode 100644 index 000000000..518e2d39f Binary files /dev/null and b/Telegram/Resources/icons/menu/export@3x.png differ diff --git a/Telegram/Resources/icons/menu/favorite.png b/Telegram/Resources/icons/menu/favorite.png new file mode 100644 index 000000000..0e2fb5463 Binary files /dev/null and b/Telegram/Resources/icons/menu/favorite.png differ diff --git a/Telegram/Resources/icons/menu/favorite@2x.png b/Telegram/Resources/icons/menu/favorite@2x.png new file mode 100644 index 000000000..0b2892cf5 Binary files /dev/null and b/Telegram/Resources/icons/menu/favorite@2x.png differ diff --git a/Telegram/Resources/icons/menu/favorite@3x.png b/Telegram/Resources/icons/menu/favorite@3x.png new file mode 100644 index 000000000..692c994e2 Binary files /dev/null and b/Telegram/Resources/icons/menu/favorite@3x.png differ diff --git a/Telegram/Resources/icons/menu/forward.png b/Telegram/Resources/icons/menu/forward.png new file mode 100644 index 000000000..d60f2dee7 Binary files /dev/null and b/Telegram/Resources/icons/menu/forward.png differ diff --git a/Telegram/Resources/icons/menu/forward@2x.png b/Telegram/Resources/icons/menu/forward@2x.png new file mode 100644 index 000000000..70ac7a0ca Binary files /dev/null and b/Telegram/Resources/icons/menu/forward@2x.png differ diff --git a/Telegram/Resources/icons/menu/forward@3x.png b/Telegram/Resources/icons/menu/forward@3x.png new file mode 100644 index 000000000..2ab9b7f4b Binary files /dev/null and b/Telegram/Resources/icons/menu/forward@3x.png differ diff --git a/Telegram/Resources/icons/menu/gif.png b/Telegram/Resources/icons/menu/gif.png new file mode 100644 index 000000000..bf2e6267c Binary files /dev/null and b/Telegram/Resources/icons/menu/gif.png differ diff --git a/Telegram/Resources/icons/menu/gif@2x.png b/Telegram/Resources/icons/menu/gif@2x.png new file mode 100644 index 000000000..b0dff731c Binary files /dev/null and b/Telegram/Resources/icons/menu/gif@2x.png differ diff --git a/Telegram/Resources/icons/menu/gif@3x.png b/Telegram/Resources/icons/menu/gif@3x.png new file mode 100644 index 000000000..7ac35154b Binary files /dev/null and b/Telegram/Resources/icons/menu/gif@3x.png differ diff --git a/Telegram/Resources/icons/menu/info.png b/Telegram/Resources/icons/menu/info.png new file mode 100644 index 000000000..6f8030d10 Binary files /dev/null and b/Telegram/Resources/icons/menu/info.png differ diff --git a/Telegram/Resources/icons/menu/info@2x.png b/Telegram/Resources/icons/menu/info@2x.png new file mode 100644 index 000000000..2f9b41516 Binary files /dev/null and b/Telegram/Resources/icons/menu/info@2x.png differ diff --git a/Telegram/Resources/icons/menu/info@3x.png b/Telegram/Resources/icons/menu/info@3x.png new file mode 100644 index 000000000..4ea4275a5 Binary files /dev/null and b/Telegram/Resources/icons/menu/info@3x.png differ diff --git a/Telegram/Resources/icons/menu/invite.png b/Telegram/Resources/icons/menu/invite.png new file mode 100644 index 000000000..2d7dd94d9 Binary files /dev/null and b/Telegram/Resources/icons/menu/invite.png differ diff --git a/Telegram/Resources/icons/menu/invite@2x.png b/Telegram/Resources/icons/menu/invite@2x.png new file mode 100644 index 000000000..17f87f9f0 Binary files /dev/null and b/Telegram/Resources/icons/menu/invite@2x.png differ diff --git a/Telegram/Resources/icons/menu/invite@3x.png b/Telegram/Resources/icons/menu/invite@3x.png new file mode 100644 index 000000000..9fc1e000a Binary files /dev/null and b/Telegram/Resources/icons/menu/invite@3x.png differ diff --git a/Telegram/Resources/icons/menu/leave.png b/Telegram/Resources/icons/menu/leave.png new file mode 100644 index 000000000..ad79e5458 Binary files /dev/null and b/Telegram/Resources/icons/menu/leave.png differ diff --git a/Telegram/Resources/icons/menu/leave@2x.png b/Telegram/Resources/icons/menu/leave@2x.png new file mode 100644 index 000000000..c9678f318 Binary files /dev/null and b/Telegram/Resources/icons/menu/leave@2x.png differ diff --git a/Telegram/Resources/icons/menu/leave@3x.png b/Telegram/Resources/icons/menu/leave@3x.png new file mode 100644 index 000000000..ec56270eb Binary files /dev/null and b/Telegram/Resources/icons/menu/leave@3x.png differ diff --git a/Telegram/Resources/icons/menu/link.png b/Telegram/Resources/icons/menu/link.png new file mode 100644 index 000000000..8d9679f74 Binary files /dev/null and b/Telegram/Resources/icons/menu/link.png differ diff --git a/Telegram/Resources/icons/menu/link@2x.png b/Telegram/Resources/icons/menu/link@2x.png new file mode 100644 index 000000000..84ac9670c Binary files /dev/null and b/Telegram/Resources/icons/menu/link@2x.png differ diff --git a/Telegram/Resources/icons/menu/link@3x.png b/Telegram/Resources/icons/menu/link@3x.png new file mode 100644 index 000000000..005ddaf8c Binary files /dev/null and b/Telegram/Resources/icons/menu/link@3x.png differ diff --git a/Telegram/Resources/icons/menu/manage.png b/Telegram/Resources/icons/menu/manage.png new file mode 100644 index 000000000..67d20772f Binary files /dev/null and b/Telegram/Resources/icons/menu/manage.png differ diff --git a/Telegram/Resources/icons/menu/manage@2x.png b/Telegram/Resources/icons/menu/manage@2x.png new file mode 100644 index 000000000..158a8c8a5 Binary files /dev/null and b/Telegram/Resources/icons/menu/manage@2x.png differ diff --git a/Telegram/Resources/icons/menu/manage@3x.png b/Telegram/Resources/icons/menu/manage@3x.png new file mode 100644 index 000000000..7a1f7cebb Binary files /dev/null and b/Telegram/Resources/icons/menu/manage@3x.png differ diff --git a/Telegram/Resources/icons/menu/move_from_menu.png b/Telegram/Resources/icons/menu/move_from_menu.png new file mode 100644 index 000000000..3a4b3a76c Binary files /dev/null and b/Telegram/Resources/icons/menu/move_from_menu.png differ diff --git a/Telegram/Resources/icons/menu/move_from_menu@2x.png b/Telegram/Resources/icons/menu/move_from_menu@2x.png new file mode 100644 index 000000000..13ff7f744 Binary files /dev/null and b/Telegram/Resources/icons/menu/move_from_menu@2x.png differ diff --git a/Telegram/Resources/icons/menu/move_from_menu@3x.png b/Telegram/Resources/icons/menu/move_from_menu@3x.png new file mode 100644 index 000000000..81a5af207 Binary files /dev/null and b/Telegram/Resources/icons/menu/move_from_menu@3x.png differ diff --git a/Telegram/Resources/icons/menu/move_to_menu.png b/Telegram/Resources/icons/menu/move_to_menu.png new file mode 100644 index 000000000..acd17770e Binary files /dev/null and b/Telegram/Resources/icons/menu/move_to_menu.png differ diff --git a/Telegram/Resources/icons/menu/move_to_menu@2x.png b/Telegram/Resources/icons/menu/move_to_menu@2x.png new file mode 100644 index 000000000..670343659 Binary files /dev/null and b/Telegram/Resources/icons/menu/move_to_menu@2x.png differ diff --git a/Telegram/Resources/icons/menu/move_to_menu@3x.png b/Telegram/Resources/icons/menu/move_to_menu@3x.png new file mode 100644 index 000000000..7136e1b2d Binary files /dev/null and b/Telegram/Resources/icons/menu/move_to_menu@3x.png differ diff --git a/Telegram/Resources/icons/menu/mute.png b/Telegram/Resources/icons/menu/mute.png new file mode 100644 index 000000000..6694f6969 Binary files /dev/null and b/Telegram/Resources/icons/menu/mute.png differ diff --git a/Telegram/Resources/icons/menu/mute@2x.png b/Telegram/Resources/icons/menu/mute@2x.png new file mode 100644 index 000000000..e3536c815 Binary files /dev/null and b/Telegram/Resources/icons/menu/mute@2x.png differ diff --git a/Telegram/Resources/icons/menu/mute@3x.png b/Telegram/Resources/icons/menu/mute@3x.png new file mode 100644 index 000000000..6be5c9a8c Binary files /dev/null and b/Telegram/Resources/icons/menu/mute@3x.png differ diff --git a/Telegram/Resources/icons/menu/permissions.png b/Telegram/Resources/icons/menu/permissions.png new file mode 100644 index 000000000..6c494262c Binary files /dev/null and b/Telegram/Resources/icons/menu/permissions.png differ diff --git a/Telegram/Resources/icons/menu/permissions@2x.png b/Telegram/Resources/icons/menu/permissions@2x.png new file mode 100644 index 000000000..b3f0f947e Binary files /dev/null and b/Telegram/Resources/icons/menu/permissions@2x.png differ diff --git a/Telegram/Resources/icons/menu/permissions@3x.png b/Telegram/Resources/icons/menu/permissions@3x.png new file mode 100644 index 000000000..4b2aab4c6 Binary files /dev/null and b/Telegram/Resources/icons/menu/permissions@3x.png differ diff --git a/Telegram/Resources/icons/menu/pin.png b/Telegram/Resources/icons/menu/pin.png new file mode 100644 index 000000000..5ee8aa6a0 Binary files /dev/null and b/Telegram/Resources/icons/menu/pin.png differ diff --git a/Telegram/Resources/icons/menu/pin@2x.png b/Telegram/Resources/icons/menu/pin@2x.png new file mode 100644 index 000000000..b80a0d8cd Binary files /dev/null and b/Telegram/Resources/icons/menu/pin@2x.png differ diff --git a/Telegram/Resources/icons/menu/pin@3x.png b/Telegram/Resources/icons/menu/pin@3x.png new file mode 100644 index 000000000..2f13abb0a Binary files /dev/null and b/Telegram/Resources/icons/menu/pin@3x.png differ diff --git a/Telegram/Resources/icons/menu/profile.png b/Telegram/Resources/icons/menu/profile.png new file mode 100644 index 000000000..57a0b4f80 Binary files /dev/null and b/Telegram/Resources/icons/menu/profile.png differ diff --git a/Telegram/Resources/icons/menu/profile@2x.png b/Telegram/Resources/icons/menu/profile@2x.png new file mode 100644 index 000000000..cf430bce2 Binary files /dev/null and b/Telegram/Resources/icons/menu/profile@2x.png differ diff --git a/Telegram/Resources/icons/menu/profile@3x.png b/Telegram/Resources/icons/menu/profile@3x.png new file mode 100644 index 000000000..5a6926774 Binary files /dev/null and b/Telegram/Resources/icons/menu/profile@3x.png differ diff --git a/Telegram/Resources/icons/menu/qr_code.png b/Telegram/Resources/icons/menu/qr_code.png new file mode 100644 index 000000000..6cc94fd80 Binary files /dev/null and b/Telegram/Resources/icons/menu/qr_code.png differ diff --git a/Telegram/Resources/icons/menu/qr_code@2x.png b/Telegram/Resources/icons/menu/qr_code@2x.png new file mode 100644 index 000000000..019f62ef0 Binary files /dev/null and b/Telegram/Resources/icons/menu/qr_code@2x.png differ diff --git a/Telegram/Resources/icons/menu/qr_code@3x.png b/Telegram/Resources/icons/menu/qr_code@3x.png new file mode 100644 index 000000000..889b689a9 Binary files /dev/null and b/Telegram/Resources/icons/menu/qr_code@3x.png differ diff --git a/Telegram/Resources/icons/menu/read.png b/Telegram/Resources/icons/menu/read.png new file mode 100644 index 000000000..13decacf3 Binary files /dev/null and b/Telegram/Resources/icons/menu/read.png differ diff --git a/Telegram/Resources/icons/menu/read@2x.png b/Telegram/Resources/icons/menu/read@2x.png new file mode 100644 index 000000000..8dcbaab00 Binary files /dev/null and b/Telegram/Resources/icons/menu/read@2x.png differ diff --git a/Telegram/Resources/icons/menu/read@3x.png b/Telegram/Resources/icons/menu/read@3x.png new file mode 100644 index 000000000..a5035f735 Binary files /dev/null and b/Telegram/Resources/icons/menu/read@3x.png differ diff --git a/Telegram/Resources/icons/menu/read_audio.png b/Telegram/Resources/icons/menu/read_audio.png new file mode 100644 index 000000000..cc19a5721 Binary files /dev/null and b/Telegram/Resources/icons/menu/read_audio.png differ diff --git a/Telegram/Resources/icons/menu/read_audio@2x.png b/Telegram/Resources/icons/menu/read_audio@2x.png new file mode 100644 index 000000000..5b3556a49 Binary files /dev/null and b/Telegram/Resources/icons/menu/read_audio@2x.png differ diff --git a/Telegram/Resources/icons/menu/read_audio@3x.png b/Telegram/Resources/icons/menu/read_audio@3x.png new file mode 100644 index 000000000..64ad08126 Binary files /dev/null and b/Telegram/Resources/icons/menu/read_audio@3x.png differ diff --git a/Telegram/Resources/icons/menu/read_reactions.png b/Telegram/Resources/icons/menu/read_reactions.png new file mode 100644 index 000000000..f3a379935 Binary files /dev/null and b/Telegram/Resources/icons/menu/read_reactions.png differ diff --git a/Telegram/Resources/icons/menu/read_reactions@2x.png b/Telegram/Resources/icons/menu/read_reactions@2x.png new file mode 100644 index 000000000..dad48eb49 Binary files /dev/null and b/Telegram/Resources/icons/menu/read_reactions@2x.png differ diff --git a/Telegram/Resources/icons/menu/read_reactions@3x.png b/Telegram/Resources/icons/menu/read_reactions@3x.png new file mode 100644 index 000000000..cf413852c Binary files /dev/null and b/Telegram/Resources/icons/menu/read_reactions@3x.png differ diff --git a/Telegram/Resources/icons/menu/read_ticks.png b/Telegram/Resources/icons/menu/read_ticks.png new file mode 100644 index 000000000..8eaab34cc Binary files /dev/null and b/Telegram/Resources/icons/menu/read_ticks.png differ diff --git a/Telegram/Resources/icons/menu/read_ticks@2x.png b/Telegram/Resources/icons/menu/read_ticks@2x.png new file mode 100644 index 000000000..8345e9009 Binary files /dev/null and b/Telegram/Resources/icons/menu/read_ticks@2x.png differ diff --git a/Telegram/Resources/icons/menu/read_ticks@3x.png b/Telegram/Resources/icons/menu/read_ticks@3x.png new file mode 100644 index 000000000..7f64c04a7 Binary files /dev/null and b/Telegram/Resources/icons/menu/read_ticks@3x.png differ diff --git a/Telegram/Resources/icons/menu/reply.png b/Telegram/Resources/icons/menu/reply.png new file mode 100644 index 000000000..d52ca37e9 Binary files /dev/null and b/Telegram/Resources/icons/menu/reply.png differ diff --git a/Telegram/Resources/icons/menu/reply@2x.png b/Telegram/Resources/icons/menu/reply@2x.png new file mode 100644 index 000000000..9b323de23 Binary files /dev/null and b/Telegram/Resources/icons/menu/reply@2x.png differ diff --git a/Telegram/Resources/icons/menu/reply@3x.png b/Telegram/Resources/icons/menu/reply@3x.png new file mode 100644 index 000000000..9f83501bd Binary files /dev/null and b/Telegram/Resources/icons/menu/reply@3x.png differ diff --git a/Telegram/Resources/icons/menu/report.png b/Telegram/Resources/icons/menu/report.png new file mode 100644 index 000000000..aed0311c7 Binary files /dev/null and b/Telegram/Resources/icons/menu/report.png differ diff --git a/Telegram/Resources/icons/menu/report@2x.png b/Telegram/Resources/icons/menu/report@2x.png new file mode 100644 index 000000000..e6e8a7fad Binary files /dev/null and b/Telegram/Resources/icons/menu/report@2x.png differ diff --git a/Telegram/Resources/icons/menu/report@3x.png b/Telegram/Resources/icons/menu/report@3x.png new file mode 100644 index 000000000..dcca89785 Binary files /dev/null and b/Telegram/Resources/icons/menu/report@3x.png differ diff --git a/Telegram/Resources/icons/menu/reschedule.png b/Telegram/Resources/icons/menu/reschedule.png new file mode 100644 index 000000000..0d0428738 Binary files /dev/null and b/Telegram/Resources/icons/menu/reschedule.png differ diff --git a/Telegram/Resources/icons/menu/reschedule@2x.png b/Telegram/Resources/icons/menu/reschedule@2x.png new file mode 100644 index 000000000..5984b3582 Binary files /dev/null and b/Telegram/Resources/icons/menu/reschedule@2x.png differ diff --git a/Telegram/Resources/icons/menu/reschedule@3x.png b/Telegram/Resources/icons/menu/reschedule@3x.png new file mode 100644 index 000000000..5129daade Binary files /dev/null and b/Telegram/Resources/icons/menu/reschedule@3x.png differ diff --git a/Telegram/Resources/icons/menu/restart_bot.png b/Telegram/Resources/icons/menu/restart_bot.png new file mode 100644 index 000000000..423e4c5c1 Binary files /dev/null and b/Telegram/Resources/icons/menu/restart_bot.png differ diff --git a/Telegram/Resources/icons/menu/restart_bot@2x.png b/Telegram/Resources/icons/menu/restart_bot@2x.png new file mode 100644 index 000000000..02e5f8f0f Binary files /dev/null and b/Telegram/Resources/icons/menu/restart_bot@2x.png differ diff --git a/Telegram/Resources/icons/menu/restart_bot@3x.png b/Telegram/Resources/icons/menu/restart_bot@3x.png new file mode 100644 index 000000000..dc2a0e425 Binary files /dev/null and b/Telegram/Resources/icons/menu/restart_bot@3x.png differ diff --git a/Telegram/Resources/icons/menu/retract_vote.png b/Telegram/Resources/icons/menu/retract_vote.png new file mode 100644 index 000000000..8093da38c Binary files /dev/null and b/Telegram/Resources/icons/menu/retract_vote.png differ diff --git a/Telegram/Resources/icons/menu/retract_vote@2x.png b/Telegram/Resources/icons/menu/retract_vote@2x.png new file mode 100644 index 000000000..2a5216977 Binary files /dev/null and b/Telegram/Resources/icons/menu/retract_vote@2x.png differ diff --git a/Telegram/Resources/icons/menu/retract_vote@3x.png b/Telegram/Resources/icons/menu/retract_vote@3x.png new file mode 100644 index 000000000..7c2af35a2 Binary files /dev/null and b/Telegram/Resources/icons/menu/retract_vote@3x.png differ diff --git a/Telegram/Resources/icons/menu/save_image.png b/Telegram/Resources/icons/menu/save_image.png new file mode 100644 index 000000000..820e09250 Binary files /dev/null and b/Telegram/Resources/icons/menu/save_image.png differ diff --git a/Telegram/Resources/icons/menu/save_image@2x.png b/Telegram/Resources/icons/menu/save_image@2x.png new file mode 100644 index 000000000..44c66941f Binary files /dev/null and b/Telegram/Resources/icons/menu/save_image@2x.png differ diff --git a/Telegram/Resources/icons/menu/save_image@3x.png b/Telegram/Resources/icons/menu/save_image@3x.png new file mode 100644 index 000000000..b8b7225cd Binary files /dev/null and b/Telegram/Resources/icons/menu/save_image@3x.png differ diff --git a/Telegram/Resources/icons/menu/search.png b/Telegram/Resources/icons/menu/search.png new file mode 100644 index 000000000..8dedda843 Binary files /dev/null and b/Telegram/Resources/icons/menu/search.png differ diff --git a/Telegram/Resources/icons/menu/search@2x.png b/Telegram/Resources/icons/menu/search@2x.png new file mode 100644 index 000000000..45596db87 Binary files /dev/null and b/Telegram/Resources/icons/menu/search@2x.png differ diff --git a/Telegram/Resources/icons/menu/search@3x.png b/Telegram/Resources/icons/menu/search@3x.png new file mode 100644 index 000000000..fef63044e Binary files /dev/null and b/Telegram/Resources/icons/menu/search@3x.png differ diff --git a/Telegram/Resources/icons/menu/select.png b/Telegram/Resources/icons/menu/select.png new file mode 100644 index 000000000..cac996d72 Binary files /dev/null and b/Telegram/Resources/icons/menu/select.png differ diff --git a/Telegram/Resources/icons/menu/select@2x.png b/Telegram/Resources/icons/menu/select@2x.png new file mode 100644 index 000000000..67ff85b45 Binary files /dev/null and b/Telegram/Resources/icons/menu/select@2x.png differ diff --git a/Telegram/Resources/icons/menu/select@3x.png b/Telegram/Resources/icons/menu/select@3x.png new file mode 100644 index 000000000..6974a22fc Binary files /dev/null and b/Telegram/Resources/icons/menu/select@3x.png differ diff --git a/Telegram/Resources/icons/menu/send.png b/Telegram/Resources/icons/menu/send.png new file mode 100644 index 000000000..3050ae4ce Binary files /dev/null and b/Telegram/Resources/icons/menu/send.png differ diff --git a/Telegram/Resources/icons/menu/send@2x.png b/Telegram/Resources/icons/menu/send@2x.png new file mode 100644 index 000000000..4edf9a6cb Binary files /dev/null and b/Telegram/Resources/icons/menu/send@2x.png differ diff --git a/Telegram/Resources/icons/menu/send@3x.png b/Telegram/Resources/icons/menu/send@3x.png new file mode 100644 index 000000000..eba0a1228 Binary files /dev/null and b/Telegram/Resources/icons/menu/send@3x.png differ diff --git a/Telegram/Resources/icons/menu/share.png b/Telegram/Resources/icons/menu/share.png new file mode 100644 index 000000000..43caf9bb1 Binary files /dev/null and b/Telegram/Resources/icons/menu/share.png differ diff --git a/Telegram/Resources/icons/menu/share@2x.png b/Telegram/Resources/icons/menu/share@2x.png new file mode 100644 index 000000000..e68b22e44 Binary files /dev/null and b/Telegram/Resources/icons/menu/share@2x.png differ diff --git a/Telegram/Resources/icons/menu/share@3x.png b/Telegram/Resources/icons/menu/share@3x.png new file mode 100644 index 000000000..987761780 Binary files /dev/null and b/Telegram/Resources/icons/menu/share@3x.png differ diff --git a/Telegram/Resources/icons/menu/show_in_chat.png b/Telegram/Resources/icons/menu/show_in_chat.png new file mode 100644 index 000000000..6e61bf0ae Binary files /dev/null and b/Telegram/Resources/icons/menu/show_in_chat.png differ diff --git a/Telegram/Resources/icons/menu/show_in_chat@2x.png b/Telegram/Resources/icons/menu/show_in_chat@2x.png new file mode 100644 index 000000000..a4c4bfa6c Binary files /dev/null and b/Telegram/Resources/icons/menu/show_in_chat@2x.png differ diff --git a/Telegram/Resources/icons/menu/show_in_chat@3x.png b/Telegram/Resources/icons/menu/show_in_chat@3x.png new file mode 100644 index 000000000..04dac196b Binary files /dev/null and b/Telegram/Resources/icons/menu/show_in_chat@3x.png differ diff --git a/Telegram/Resources/icons/menu/show_in_folder.png b/Telegram/Resources/icons/menu/show_in_folder.png new file mode 100644 index 000000000..df4875536 Binary files /dev/null and b/Telegram/Resources/icons/menu/show_in_folder.png differ diff --git a/Telegram/Resources/icons/menu/show_in_folder@2x.png b/Telegram/Resources/icons/menu/show_in_folder@2x.png new file mode 100644 index 000000000..c1a08be71 Binary files /dev/null and b/Telegram/Resources/icons/menu/show_in_folder@2x.png differ diff --git a/Telegram/Resources/icons/menu/show_in_folder@3x.png b/Telegram/Resources/icons/menu/show_in_folder@3x.png new file mode 100644 index 000000000..c957b70d8 Binary files /dev/null and b/Telegram/Resources/icons/menu/show_in_folder@3x.png differ diff --git a/Telegram/Resources/icons/menu/stickers.png b/Telegram/Resources/icons/menu/stickers.png new file mode 100644 index 000000000..13e31e39b Binary files /dev/null and b/Telegram/Resources/icons/menu/stickers.png differ diff --git a/Telegram/Resources/icons/menu/stickers@2x.png b/Telegram/Resources/icons/menu/stickers@2x.png new file mode 100644 index 000000000..22e686cd6 Binary files /dev/null and b/Telegram/Resources/icons/menu/stickers@2x.png differ diff --git a/Telegram/Resources/icons/menu/stickers@3x.png b/Telegram/Resources/icons/menu/stickers@3x.png new file mode 100644 index 000000000..ef62842ae Binary files /dev/null and b/Telegram/Resources/icons/menu/stickers@3x.png differ diff --git a/Telegram/Resources/icons/menu/stop_poll.png b/Telegram/Resources/icons/menu/stop_poll.png new file mode 100644 index 000000000..4aa6c7041 Binary files /dev/null and b/Telegram/Resources/icons/menu/stop_poll.png differ diff --git a/Telegram/Resources/icons/menu/stop_poll@2x.png b/Telegram/Resources/icons/menu/stop_poll@2x.png new file mode 100644 index 000000000..2c4360511 Binary files /dev/null and b/Telegram/Resources/icons/menu/stop_poll@2x.png differ diff --git a/Telegram/Resources/icons/menu/stop_poll@3x.png b/Telegram/Resources/icons/menu/stop_poll@3x.png new file mode 100644 index 000000000..ef509132b Binary files /dev/null and b/Telegram/Resources/icons/menu/stop_poll@3x.png differ diff --git a/Telegram/Resources/icons/menu/unarchive.png b/Telegram/Resources/icons/menu/unarchive.png new file mode 100644 index 000000000..f0d1a068a Binary files /dev/null and b/Telegram/Resources/icons/menu/unarchive.png differ diff --git a/Telegram/Resources/icons/menu/unarchive@2x.png b/Telegram/Resources/icons/menu/unarchive@2x.png new file mode 100644 index 000000000..f7f13290b Binary files /dev/null and b/Telegram/Resources/icons/menu/unarchive@2x.png differ diff --git a/Telegram/Resources/icons/menu/unarchive@3x.png b/Telegram/Resources/icons/menu/unarchive@3x.png new file mode 100644 index 000000000..02e8a3ca7 Binary files /dev/null and b/Telegram/Resources/icons/menu/unarchive@3x.png differ diff --git a/Telegram/Resources/icons/menu/unblock.png b/Telegram/Resources/icons/menu/unblock.png new file mode 100644 index 000000000..62966c2b7 Binary files /dev/null and b/Telegram/Resources/icons/menu/unblock.png differ diff --git a/Telegram/Resources/icons/menu/unblock@2x.png b/Telegram/Resources/icons/menu/unblock@2x.png new file mode 100644 index 000000000..d40eb5944 Binary files /dev/null and b/Telegram/Resources/icons/menu/unblock@2x.png differ diff --git a/Telegram/Resources/icons/menu/unblock@3x.png b/Telegram/Resources/icons/menu/unblock@3x.png new file mode 100644 index 000000000..22730b7f5 Binary files /dev/null and b/Telegram/Resources/icons/menu/unblock@3x.png differ diff --git a/Telegram/Resources/icons/menu/unfavorite.png b/Telegram/Resources/icons/menu/unfavorite.png new file mode 100644 index 000000000..8286346ac Binary files /dev/null and b/Telegram/Resources/icons/menu/unfavorite.png differ diff --git a/Telegram/Resources/icons/menu/unfavorite@2x.png b/Telegram/Resources/icons/menu/unfavorite@2x.png new file mode 100644 index 000000000..1f852b166 Binary files /dev/null and b/Telegram/Resources/icons/menu/unfavorite@2x.png differ diff --git a/Telegram/Resources/icons/menu/unfavorite@3x.png b/Telegram/Resources/icons/menu/unfavorite@3x.png new file mode 100644 index 000000000..0fbc2a0f5 Binary files /dev/null and b/Telegram/Resources/icons/menu/unfavorite@3x.png differ diff --git a/Telegram/Resources/icons/menu/unmute.png b/Telegram/Resources/icons/menu/unmute.png new file mode 100644 index 000000000..297348e08 Binary files /dev/null and b/Telegram/Resources/icons/menu/unmute.png differ diff --git a/Telegram/Resources/icons/menu/unmute@2x.png b/Telegram/Resources/icons/menu/unmute@2x.png new file mode 100644 index 000000000..405fc61a4 Binary files /dev/null and b/Telegram/Resources/icons/menu/unmute@2x.png differ diff --git a/Telegram/Resources/icons/menu/unmute@3x.png b/Telegram/Resources/icons/menu/unmute@3x.png new file mode 100644 index 000000000..50ddff29a Binary files /dev/null and b/Telegram/Resources/icons/menu/unmute@3x.png differ diff --git a/Telegram/Resources/icons/menu/unpin.png b/Telegram/Resources/icons/menu/unpin.png new file mode 100644 index 000000000..d6c21f81e Binary files /dev/null and b/Telegram/Resources/icons/menu/unpin.png differ diff --git a/Telegram/Resources/icons/menu/unpin@2x.png b/Telegram/Resources/icons/menu/unpin@2x.png new file mode 100644 index 000000000..89a0aead5 Binary files /dev/null and b/Telegram/Resources/icons/menu/unpin@2x.png differ diff --git a/Telegram/Resources/icons/menu/unpin@3x.png b/Telegram/Resources/icons/menu/unpin@3x.png new file mode 100644 index 000000000..8393d38a8 Binary files /dev/null and b/Telegram/Resources/icons/menu/unpin@3x.png differ diff --git a/Telegram/Resources/icons/menu/unread.png b/Telegram/Resources/icons/menu/unread.png new file mode 100644 index 000000000..6b60c4f56 Binary files /dev/null and b/Telegram/Resources/icons/menu/unread.png differ diff --git a/Telegram/Resources/icons/menu/unread@2x.png b/Telegram/Resources/icons/menu/unread@2x.png new file mode 100644 index 000000000..af9331056 Binary files /dev/null and b/Telegram/Resources/icons/menu/unread@2x.png differ diff --git a/Telegram/Resources/icons/menu/unread@3x.png b/Telegram/Resources/icons/menu/unread@3x.png new file mode 100644 index 000000000..220ce7598 Binary files /dev/null and b/Telegram/Resources/icons/menu/unread@3x.png differ diff --git a/Telegram/Resources/icons/menu/view_replies.png b/Telegram/Resources/icons/menu/view_replies.png new file mode 100644 index 000000000..0c119764f Binary files /dev/null and b/Telegram/Resources/icons/menu/view_replies.png differ diff --git a/Telegram/Resources/icons/menu/view_replies@2x.png b/Telegram/Resources/icons/menu/view_replies@2x.png new file mode 100644 index 000000000..cc358365a Binary files /dev/null and b/Telegram/Resources/icons/menu/view_replies@2x.png differ diff --git a/Telegram/Resources/icons/menu/view_replies@3x.png b/Telegram/Resources/icons/menu/view_replies@3x.png new file mode 100644 index 000000000..b261bca6c Binary files /dev/null and b/Telegram/Resources/icons/menu/view_replies@3x.png differ diff --git a/Telegram/SourceFiles/boxes/connection_box.cpp b/Telegram/SourceFiles/boxes/connection_box.cpp index 05fdd32f4..daf5d0f1a 100644 --- a/Telegram/SourceFiles/boxes/connection_box.cpp +++ b/Telegram/SourceFiles/boxes/connection_box.cpp @@ -32,6 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_boxes.h" #include "styles/style_chat_helpers.h" #include "styles/style_info.h" +#include "styles/style_menu_icons.h" #include #include @@ -496,7 +497,9 @@ void ProxyRow::showMenu() { if (_menu) { return; } - _menu = base::make_unique_q(window()); + _menu = base::make_unique_q( + window(), + st::dropdownMenuWithIcons); const auto weak = _menu.get(); _menu->setHiddenCallback([=] { weak->deleteLater(); @@ -517,25 +520,26 @@ void ProxyRow::showMenu() { _menuToggle->installEventFilter(_menu); const auto addAction = [&]( const QString &text, - Fn callback) { + Fn callback, + const style::icon *icon) { return _menu->addAction(text, std::move(callback)); }; addAction(tr::lng_proxy_menu_edit(tr::now), [=] { _editClicks.fire({}); - }); + }, &st::menuIconEdit); if (_view.supportsShare) { addAction(tr::lng_proxy_edit_share(tr::now), [=] { _shareClicks.fire({}); - }); + }, &st::menuIconShare); } if (_view.deleted) { addAction(tr::lng_proxy_menu_restore(tr::now), [=] { _restoreClicks.fire({}); - }); + }, &st::menuIconDelete); } else { addAction(tr::lng_proxy_menu_delete(tr::now), [=] { _deleteClicks.fire({}); - }); + }, &st::menuIconDelete); } const auto parentTopLeft = window()->mapToGlobal(QPoint()); const auto buttonTopLeft = _menuToggle->mapToGlobal(QPoint()); diff --git a/Telegram/SourceFiles/boxes/dictionaries_manager.cpp b/Telegram/SourceFiles/boxes/dictionaries_manager.cpp index d83c9cdef..6d3bbd113 100644 --- a/Telegram/SourceFiles/boxes/dictionaries_manager.cpp +++ b/Telegram/SourceFiles/boxes/dictionaries_manager.cpp @@ -16,9 +16,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mainwidget.h" #include "mtproto/dedicated_file_loader.h" #include "spellcheck/spellcheck_utils.h" -#include "styles/style_layers.h" -#include "styles/style_settings.h" -#include "styles/style_boxes.h" #include "ui/wrap/vertical_layout.h" #include "ui/widgets/buttons.h" #include "ui/widgets/labels.h" @@ -27,6 +24,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/wrap/slide_wrap.h" #include "ui/effects/animations.h" #include "window/window_session_controller.h" +#include "styles/style_layers.h" +#include "styles/style_settings.h" +#include "styles/style_boxes.h" +#include "styles/style_menu_icons.h" namespace Ui { namespace { @@ -305,12 +306,14 @@ auto AddButtonWithLoader( if (!DictExists(id)) { return false; } - *contextMenu = base::make_unique_q(button); + *contextMenu = base::make_unique_q( + button, + st::popupMenuWithIcons); contextMenu->get()->addAction( tr::lng_settings_manage_remove_dictionary(tr::now), [=] { - Spellchecker::RemoveDictionary(id); - dictionaryRemoved->fire({}); - }); + Spellchecker::RemoveDictionary(id); + dictionaryRemoved->fire({}); + }, &st::menuIconDelete); contextMenu->get()->popup(QCursor::pos()); return true; }; diff --git a/Telegram/SourceFiles/boxes/language_box.cpp b/Telegram/SourceFiles/boxes/language_box.cpp index 2bca858d5..94635ebf8 100644 --- a/Telegram/SourceFiles/boxes/language_box.cpp +++ b/Telegram/SourceFiles/boxes/language_box.cpp @@ -33,6 +33,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_info.h" #include "styles/style_passport.h" #include "styles/style_chat_helpers.h" +#include "styles/style_menu_icons.h" #include #include @@ -437,7 +438,9 @@ void Rows::showMenu(int index) { if (_menu || !hasMenu(row)) { return; } - _menu = base::make_unique_q(window()); + _menu = base::make_unique_q( + window(), + st::dropdownMenuWithIcons); const auto weak = _menu.get(); _menu->setHiddenCallback([=] { weak->deleteLater(); @@ -460,21 +463,25 @@ void Rows::showMenu(int index) { }); const auto addAction = [&]( const QString &text, - Fn callback) { - return _menu->addAction(text, std::move(callback)); + Fn callback, + const style::icon *icon) { + return _menu->addAction(text, std::move(callback), icon); }; if (canShare(row)) { - addAction(tr::lng_proxy_edit_share(tr::now), [=] { share(row); }); + addAction( + tr::lng_proxy_edit_share(tr::now), + [=] { share(row); }, + &st::menuIconShare); } if (canRemove(row)) { if (row->removed) { addAction(tr::lng_proxy_menu_restore(tr::now), [=] { restore(row); - }); + }, &st::menuIconDelete); } else { addAction(tr::lng_proxy_menu_delete(tr::now), [=] { remove(row); - }); + }, &st::menuIconDelete); } } const auto toggle = menuToggleArea(row); diff --git a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp index 8fd36a7cc..c979d01fc 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp @@ -32,6 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/ui_utility.h" #include "window/window_session_controller.h" #include "history/history.h" +#include "styles/style_menu_icons.h" namespace { @@ -1521,7 +1522,9 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( const auto channel = _peer->asChannel(); const auto participant = row->peer(); const auto user = participant->asUser(); - auto result = base::make_unique_q(parent); + auto result = base::make_unique_q( + parent, + st::popupMenuWithIcons); if (_navigation) { result->addAction( (participant->isUser() @@ -1530,7 +1533,10 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( ? tr::lng_context_view_channel : tr::lng_context_view_group)(tr::now), crl::guard(this, [=] { - _navigation->showPeerInfo(participant); })); + _navigation->showPeerInfo(participant); }), + (participant->isUser() + ? &st::menuIconProfile + : &st::menuIconInfo)); } if (_role == Role::Kicked) { if (_peer->isMegagroup() @@ -1538,11 +1544,13 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( if (user && channel->canAddMembers()) { result->addAction( tr::lng_context_add_to_group(tr::now), - crl::guard(this, [=] { unkickParticipant(user); })); + crl::guard(this, [=] { unkickParticipant(user); }), + &st::menuIconInvite); } result->addAction( tr::lng_profile_delete_removed(tr::now), - crl::guard(this, [=] { removeKickedWithRow(participant); })); + crl::guard(this, [=] { removeKickedWithRow(participant); }), + &st::menuIconDelete); } return result; } @@ -1553,7 +1561,10 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( (isAdmin ? tr::lng_context_edit_permissions : tr::lng_context_promote_admin)(tr::now), - crl::guard(this, [=] { showAdmin(user); })); + crl::guard(this, [=] { showAdmin(user); }), + (isAdmin + ? &st::menuIconAdmin + : &st::menuIconPromote)); } if (user && _additional.canRestrictParticipant(participant)) { const auto canRestrictWithoutKick = [&] { @@ -1565,7 +1576,8 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( if (canRestrictWithoutKick) { result->addAction( tr::lng_context_restrict_user(tr::now), - crl::guard(this, [=] { showRestricted(user); })); + crl::guard(this, [=] { showRestricted(user); }), + &st::menuIconRestrict); } } if (user && _additional.canRemoveParticipant(participant)) { @@ -1575,7 +1587,8 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( (isGroup ? tr::lng_context_remove_from_group : tr::lng_profile_kick)(tr::now), - crl::guard(this, [=] { kickParticipant(user); })); + crl::guard(this, [=] { kickParticipant(user); }), + &st::menuIconRemove); } } return result; diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp index 33b648a49..2f49c1ea6 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp @@ -46,6 +46,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_layers.h" // st::boxDividerLabel. #include "styles/style_info.h" #include "styles/style_settings.h" +#include "styles/style_menu_icons.h" #include #include @@ -349,28 +350,36 @@ void Controller::addHeaderBlock(not_null container) { }); const auto createMenu = [=] { - auto result = base::make_unique_q(container); + auto result = base::make_unique_q( + container, + st::popupMenuWithIcons); if (revoked) { result->addAction( tr::lng_group_invite_context_delete(tr::now), - deleteLink); + deleteLink, + &st::menuIconDelete); } else { result->addAction( tr::lng_group_invite_context_copy(tr::now), - copyLink); + copyLink, + &st::menuIconCopy); result->addAction( tr::lng_group_invite_context_share(tr::now), - shareLink); + shareLink, + &st::menuIconShare); result->addAction( tr::lng_group_invite_context_qr(tr::now), - getLinkQr); + getLinkQr, + &st::menuIconQrCode); if (!admin->isBot()) { result->addAction( tr::lng_group_invite_context_edit(tr::now), - editLink); + editLink, + &st::menuIconEdit); result->addAction( tr::lng_group_invite_context_revoke(tr::now), - revokeLink); + revokeLink, + &st::menuIconRemove); } } return result; @@ -745,16 +754,18 @@ base::unique_qptr Controller::createRowContextMenu( const auto user = row->peer()->asUser(); Assert(user != nullptr); - auto result = base::make_unique_q(parent); + auto result = base::make_unique_q( + parent, + st::popupMenuWithIcons); const auto add = _peer->isBroadcast() ? tr::lng_group_requests_add_channel(tr::now) : tr::lng_group_requests_add(tr::now); result->addAction(add, [=] { processRequest(user, true); - }); + }, &st::menuIconInvite); result->addAction(tr::lng_group_requests_dismiss(tr::now), [=] { processRequest(user, false); - }); + }, &st::menuIconRemove); return result; } @@ -960,20 +971,26 @@ void AddPermanentLinkBlock( : data.link; }); const auto createMenu = [=] { - auto result = base::make_unique_q(container); + auto result = base::make_unique_q( + container, + st::popupMenuWithIcons); result->addAction( tr::lng_group_invite_context_copy(tr::now), - copyLink); + copyLink, + &st::menuIconCopy); result->addAction( tr::lng_group_invite_context_share(tr::now), - shareLink); + shareLink, + &st::menuIconShare); result->addAction( tr::lng_group_invite_context_qr(tr::now), - getLinkQr); + getLinkQr, + &st::menuIconQrCode); if (!admin->isBot()) { result->addAction( tr::lng_group_invite_context_revoke(tr::now), - revokeLink); + revokeLink, + &st::menuIconRemove); } return result; }; diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp index 5a187af23..91f592a66 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp @@ -28,6 +28,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_info.h" #include "styles/style_layers.h" // st::boxDividerLabel #include "styles/style_settings.h" // st::settingsDividerLabelPadding +#include "styles/style_menu_icons.h" #include @@ -578,27 +579,29 @@ base::unique_qptr LinksController::createRowContextMenu( const auto real = static_cast(row.get()); const auto data = real->data(); const auto link = data.link; - auto result = base::make_unique_q(parent); + auto result = base::make_unique_q( + parent, + st::popupMenuWithIcons); if (data.revoked) { result->addAction(tr::lng_group_invite_context_delete(tr::now), [=] { DeleteLink(_peer, _admin, link); - }); + }, &st::menuIconDelete); } else { result->addAction(tr::lng_group_invite_context_copy(tr::now), [=] { CopyInviteLink(link); - }); + }, &st::menuIconCopy); result->addAction(tr::lng_group_invite_context_share(tr::now), [=] { ShareInviteLinkBox(_peer, link); - }); + }, &st::menuIconShare); result->addAction(tr::lng_group_invite_context_qr(tr::now), [=] { InviteLinkQrBox(link); - }); + }, &st::menuIconQrCode); result->addAction(tr::lng_group_invite_context_edit(tr::now), [=] { EditLink(_peer, data); - }); + }, &st::menuIconEdit); result->addAction(tr::lng_group_invite_context_revoke(tr::now), [=] { RevokeLink(_peer, _admin, link); - }); + }, &st::menuIconRemove); } return result; } diff --git a/Telegram/SourceFiles/boxes/sticker_set_box.cpp b/Telegram/SourceFiles/boxes/sticker_set_box.cpp index 2b2852381..b07a71c83 100644 --- a/Telegram/SourceFiles/boxes/sticker_set_box.cpp +++ b/Telegram/SourceFiles/boxes/sticker_set_box.cpp @@ -43,6 +43,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_layers.h" #include "styles/style_chat_helpers.h" #include "styles/style_info.h" +#include "styles/style_menu_icons.h" #include #include @@ -297,12 +298,15 @@ void StickerSetBox::updateButtons() { const auto menu = std::make_shared>(); top->setClickedCallback([=] { - *menu = base::make_unique_q(top); + *menu = base::make_unique_q( + top, + st::popupMenuWithIcons); (*menu)->addAction( (isMasks ? tr::lng_stickers_share_masks : tr::lng_stickers_share_pack)(tr::now), - share); + share, + &st::menuIconShare); (*menu)->popup(QCursor::pos()); return true; }); @@ -328,12 +332,15 @@ void StickerSetBox::updateButtons() { const auto menu = std::make_shared>(); top->setClickedCallback([=] { - *menu = base::make_unique_q(top); + *menu = base::make_unique_q( + top, + st::popupMenuWithIcons); (*menu)->addAction( isMasks ? tr::lng_masks_archive_pack(tr::now) : tr::lng_stickers_archive_pack(tr::now), - archive); + archive, + &st::menuIconArchive); (*menu)->popup(QCursor::pos()); return true; }); @@ -652,7 +659,9 @@ void StickerSetBox::Inner::contextMenuEvent(QContextMenuEvent *e) { return; } _previewTimer.cancel(); - _menu = base::make_unique_q(this); + _menu = base::make_unique_q( + this, + st::popupMenuWithIcons); const auto document = _pack[index]; const auto sendSelected = [=](Api::SendOptions options) { @@ -669,11 +678,15 @@ void StickerSetBox::Inner::contextMenuEvent(QContextMenuEvent *e) { document, Data::FileOriginStickerSet(Data::Stickers::FavedSetId, 0)); }; + const auto isFaved = document->owner().stickers().isFaved(document); _menu->addAction( - (document->owner().stickers().isFaved(document) + (isFaved ? tr::lng_faved_stickers_remove : tr::lng_faved_stickers_add)(tr::now), - toggleFavedSticker); + toggleFavedSticker, + (isFaved + ? &st::menuIconUnfave + : &st::menuIconFave)); _menu->popup(QCursor::pos()); } diff --git a/Telegram/SourceFiles/calls/calls_box_controller.cpp b/Telegram/SourceFiles/calls/calls_box_controller.cpp index 85bc8ab86..2fc5122b7 100644 --- a/Telegram/SourceFiles/calls/calls_box_controller.cpp +++ b/Telegram/SourceFiles/calls/calls_box_controller.cpp @@ -30,6 +30,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_layers.h" // st::boxLabel. #include "styles/style_calls.h" #include "styles/style_boxes.h" +#include "styles/style_menu_icons.h" namespace Calls { namespace { @@ -356,12 +357,14 @@ base::unique_qptr BoxController::rowContextMenu( const auto session = &this->session(); const auto ids = session->data().itemsToIds(items); - auto result = base::make_unique_q(parent); + auto result = base::make_unique_q( + parent, + st::popupMenuWithIcons); result->addAction(tr::lng_context_delete_selected(tr::now), [=] { _window->show( Box(session, base::duplicate(ids)), Ui::LayerOption::KeepOther); - }); + }, &st::menuIconDelete); return result; } diff --git a/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp b/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp index 39d2a214d..7156707e3 100644 --- a/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp +++ b/Telegram/SourceFiles/chat_helpers/field_autocomplete.cpp @@ -37,12 +37,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/cached_round_corners.h" #include "base/unixtime.h" #include "base/random.h" +#include "base/qt_adapters.h" #include "window/window_adaptive.h" #include "window/window_session_controller.h" #include "styles/style_chat.h" #include "styles/style_widgets.h" #include "styles/style_chat_helpers.h" -#include "base/qt_adapters.h" +#include "styles/style_menu_icons.h" #include @@ -1190,7 +1191,9 @@ void FieldAutocomplete::Inner::contextMenuEvent(QContextMenuEvent *e) { ? _sendMenuType() : SendMenu::Type::Disabled; const auto method = FieldAutocomplete::ChooseMethod::ByClick; - _menu = base::make_unique_q(this); + _menu = base::make_unique_q( + this, + st::popupMenuWithIcons); const auto send = [=](Api::SendOptions options) { chooseAtIndex(method, index, options); diff --git a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp index 213fcdac1..fa91ecc26 100644 --- a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp @@ -35,6 +35,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/view/history_view_cursor_state.h" #include "storage/storage_account.h" // Account::writeSavedGifs #include "styles/style_chat_helpers.h" +#include "styles/style_menu_icons.h" #include @@ -48,7 +49,7 @@ constexpr auto kSearchBotUsername = "gif"_cs; } // namespace void AddGifAction( - Fn &&)> callback, + Fn &&, const style::icon*)> callback, not_null document) { if (!document->isGifv()) { return; @@ -71,7 +72,7 @@ void AddGifAction( document->session().local().writeSavedGifs(); } data.stickers().notifySavedGifsUpdated(); - }); + }, saved ? &st::menuIconDelete : &st::menuIconGif); } class GifsListWidget::Footer : public TabbedSelector::InnerFooter { @@ -386,8 +387,11 @@ void GifsListWidget::fillContextMenu( ? item->getDocument() // Saved GIF. : item->getPreviewDocument(); // Searched GIF. if (document) { - auto callback = [&](const QString &text, Fn &&done) { - menu->addAction(text, std::move(done)); + auto callback = [&]( + const QString &text, + Fn &&done, + const style::icon *icon) { + menu->addAction(text, std::move(done), icon); }; AddGifAction(std::move(callback), document); } diff --git a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.h b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.h index b03485b32..f07044ebb 100644 --- a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.h +++ b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.h @@ -41,7 +41,7 @@ enum class Type; namespace ChatHelpers { void AddGifAction( - Fn &&)> callback, + Fn &&, const style::icon*)> callback, not_null document); class GifsListWidget diff --git a/Telegram/SourceFiles/chat_helpers/send_context_menu.cpp b/Telegram/SourceFiles/chat_helpers/send_context_menu.cpp index 9c3ac27ff..16ac9378f 100644 --- a/Telegram/SourceFiles/chat_helpers/send_context_menu.cpp +++ b/Telegram/SourceFiles/chat_helpers/send_context_menu.cpp @@ -17,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_peer.h" #include "main/main_session.h" #include "apiwrap.h" +#include "styles/style_menu_icons.h" #include @@ -56,14 +57,18 @@ FillMenuResult FillSendMenu( } if (silent && now != Type::Reminder) { - menu->addAction(tr::lng_send_silent_message(tr::now), silent); + menu->addAction( + tr::lng_send_silent_message(tr::now), + silent, + &st::menuIconMute); } if (schedule && now != Type::SilentOnly) { menu->addAction( (now == Type::Reminder ? tr::lng_reminder_message(tr::now) : tr::lng_schedule_message(tr::now)), - schedule); + schedule, + &st::menuIconSchedule); } return FillMenuResult::Success; } @@ -78,7 +83,9 @@ void SetupMenuAndShortcuts( } const auto menu = std::make_shared>(); const auto showMenu = [=] { - *menu = base::make_unique_q(button); + *menu = base::make_unique_q( + button, + st::popupMenuWithIcons); const auto result = FillSendMenu(*menu, type(), silent, schedule); const auto success = (result == FillMenuResult::Success); if (success) { @@ -149,7 +156,9 @@ void SetupUnreadMentionsMenu( if (!peer) { return; } - state->menu = base::make_unique_q(button); + state->menu = base::make_unique_q( + button, + st::popupMenuWithIcons); const auto text = tr::lng_context_mark_read_mentions_all(tr::now); state->menu->addAction(text, [=] { if (!state->sentForPeers.emplace(peer).second) { @@ -163,7 +172,7 @@ void SetupUnreadMentionsMenu( }).fail([=] { state->sentForPeers.remove(peer); }).send(); - }); + }, &st::menuIconMarkRead); state->menu->popup(QCursor::pos()); }; diff --git a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp index eeccc6f36..bceb5a770 100644 --- a/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/stickers_list_widget.cpp @@ -42,6 +42,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_toggling_media.h" // Api::ToggleFavedSticker #include "styles/style_chat_helpers.h" #include "styles/style_window.h" +#include "styles/style_menu_icons.h" #include @@ -2173,15 +2174,17 @@ void StickersListWidget::fillContextMenu( document, Data::FileOriginStickerSet(Data::Stickers::FavedSetId, 0)); }; + const auto isFaved = document->owner().stickers().isFaved(document); menu->addAction( - (document->owner().stickers().isFaved(document) + (isFaved ? tr::lng_faved_stickers_remove : tr::lng_faved_stickers_add)(tr::now), - toggleFavedSticker); + toggleFavedSticker, + isFaved ? &st::menuIconUnfave : &st::menuIconFave); menu->addAction(tr::lng_context_pack_info(tr::now), [=] { showStickerSetBox(document); - }); + }, &st::menuIconStickers); if (const auto id = set.id; id == Data::Stickers::RecentSetId) { menu->addAction(tr::lng_recent_stickers_remove(tr::now), [=] { @@ -2189,7 +2192,7 @@ void StickersListWidget::fillContextMenu( document, Data::FileOriginStickerSet(id, 0), false); - }); + }, &st::menuIconDelete); } } } diff --git a/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp b/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp index 47bfaf5f7..4b78b3f33 100644 --- a/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp +++ b/Telegram/SourceFiles/chat_helpers/tabbed_selector.cpp @@ -31,6 +31,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mainwindow.h" #include "apiwrap.h" #include "styles/style_chat_helpers.h" +#include "styles/style_menu_icons.h" namespace ChatHelpers { @@ -1057,7 +1058,9 @@ void TabbedSelector::scrollToY(int y) { } void TabbedSelector::showMenuWithType(SendMenu::Type type) { - _menu = base::make_unique_q(this); + _menu = base::make_unique_q( + this, + st::popupMenuWithIcons); currentTab()->widget()->fillContextMenu(_menu, type); if (!_menu->empty()) { diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index 0df9533cd..21096322f 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -50,10 +50,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/unread_badge.h" #include "boxes/filters/edit_filter_box.h" #include "api/api_chat_filters.h" +#include "base/qt_adapters.h" #include "styles/style_dialogs.h" #include "styles/style_chat_helpers.h" #include "styles/style_window.h" -#include "base/qt_adapters.h" +#include "styles/style_menu_icons.h" namespace Dialogs { namespace { @@ -1760,7 +1761,9 @@ void InnerWidget::contextMenuEvent(QContextMenuEvent *e) { mousePressReleased(e->globalPos(), _pressButton); } - _menu = base::make_unique_q(this); + _menu = base::make_unique_q( + this, + row.fullId ? st::defaultPopupMenu : st::popupMenuWithIcons); if (row.fullId) { if (session().supportMode()) { fillSupportSearchMenu(_menu.get()); @@ -1775,8 +1778,11 @@ void InnerWidget::contextMenuEvent(QContextMenuEvent *e) { .section = Dialogs::EntryState::Section::ChatsList, .filterId = _filterId, }, - [&](const QString &text, Fn callback) { - return _menu->addAction(text, std::move(callback)); + [&]( + const QString &text, + Fn callback, + const style::icon *icon) { + return _menu->addAction(text, std::move(callback), icon); }); } connect(_menu.get(), &QObject::destroyed, [=] { diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index 7b3f24f16..c2504a29f 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -57,6 +57,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "facades.h" #include "app.h" #include "styles/style_chat.h" +#include "styles/style_menu_icons.h" #include #include @@ -1158,7 +1159,9 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { isUponSelected = hasSelected; } - _menu = base::make_unique_q(this); + _menu = base::make_unique_q( + this, + st::popupMenuWithIcons); const auto link = ClickHandler::getActive(); auto view = App::hoveredItem() @@ -1176,7 +1179,7 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (isUponSelected > 0) { _menu->addAction(tr::lng_context_copy_selected(tr::now), [=] { copySelectedText(); - }); + }, &st::menuIconCopy); } if (lnkPhoto) { const auto photo = lnkPhoto->photo(); @@ -1184,10 +1187,10 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (!photo->isNull() && media && media->loaded()) { _menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { savePhotoToFile(photo); - })); + }), &st::menuIconSaveImage); _menu->addAction(tr::lng_context_copy_image(tr::now), [=] { copyContextImage(photo); - }); + }, &st::menuIconCopy); } if (photo->hasAttachedStickers()) { const auto controller = _controller; @@ -1197,14 +1200,15 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { }; _menu->addAction( tr::lng_context_attached_stickers(tr::now), - std::move(callback)); + std::move(callback), + &st::menuIconStickers); } } else { auto document = lnkDocument->document(); if (document->loading()) { _menu->addAction(tr::lng_context_cancel_download(tr::now), [=] { cancelContextDownload(document); - }); + }, &st::menuIconCancel); } else { const auto itemId = view ? view->data()->fullId() @@ -1220,17 +1224,17 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (notAutoplayedGif) { _menu->addAction(tr::lng_context_open_gif(tr::now), [=] { openContextGif(itemId); - }); + }, &st::menuIconShowInChat); } } if (!document->filepath(true).isEmpty()) { _menu->addAction(Platform::IsMac() ? tr::lng_context_show_in_finder(tr::now) : tr::lng_context_show_in_folder(tr::now), [=] { showContextInFolder(document); - }); + }, &st::menuIconShowInFolder); } _menu->addAction(lnkIsVideo ? tr::lng_context_save_video(tr::now) : (lnkIsVoice ? tr::lng_context_save_audio(tr::now) : (lnkIsAudio ? tr::lng_context_save_audio_file(tr::now) : tr::lng_context_save_file(tr::now))), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [this, document] { saveDocumentToFile(document); - })); + }), &st::menuIconDownload); if (document->hasAttachedStickers()) { const auto controller = _controller; auto callback = [=, doc = document] { @@ -1239,7 +1243,8 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { }; _menu->addAction( tr::lng_context_attached_stickers(tr::now), - std::move(callback)); + std::move(callback), + &st::menuIconStickers); } } } @@ -1253,7 +1258,10 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { auto msg = dynamic_cast(item); if (isUponSelected > 0) { - _menu->addAction(tr::lng_context_copy_selected(tr::now), [this] { copySelectedText(); }); + _menu->addAction( + tr::lng_context_copy_selected(tr::now), + [this] { copySelectedText(); }, + &st::menuIconCopy); } else { if (item && !isUponSelected) { const auto media = view->media(); @@ -1262,7 +1270,7 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (document->sticker()) { _menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [this, document] { saveDocumentToFile(document); - })); + }), &st::menuIconDownload); } } if (msg @@ -1272,7 +1280,7 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { || item->Has())) { _menu->addAction(tr::lng_context_copy_text(tr::now), [=] { copyContextText(itemId); - }); + }, &st::menuIconCopy); } } } @@ -1285,7 +1293,8 @@ void InnerWidget::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { actionText, [text = link->copyToClipboardText()] { QGuiApplication::clipboard()->setText(text); - }); + }, + &st::menuIconCopy); } } diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 284b69902..b9def165e 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -49,6 +49,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "chat_helpers/emoji_interactions.h" #include "history/history_widget.h" #include "base/platform/base_platform_info.h" +#include "base/qt_adapters.h" #include "base/unixtime.h" #include "mainwindow.h" #include "layout/layout_selection.h" @@ -82,7 +83,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "app.h" #include "styles/style_chat.h" #include "styles/style_window.h" // st::windowMinWidth -#include "base/qt_adapters.h" +#include "styles/style_menu_icons.h" #include #include @@ -1673,7 +1674,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { && Api::WhoReadExists(_dragStateItem); _menu = base::make_unique_q( this, - hasWhoReadItem ? st::whoReadMenu : st::defaultPopupMenu); + hasWhoReadItem ? st::whoReadMenu : st::popupMenuWithIcons); const auto session = &this->session(); const auto controller = _controller; const auto groupLeaderOrSelf = [](HistoryItem *item) -> HistoryItem* { @@ -1706,13 +1707,13 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { item->addReaction(entry.emoji); }); } - _menu->addAction("Reaction", std::move(reactionMenu)); + _menu->addAction("Reaction", std::move(reactionMenu), &st::menuIconReactions); } } if (canSendMessages) { _menu->addAction(tr::lng_context_reply_msg(tr::now), [=] { _widget->replyToMessage(itemId); - }); + }, &st::menuIconReply); } const auto repliesCount = item->repliesCount(); const auto withReplies = (repliesCount > 0); @@ -1726,7 +1727,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { : tr::lng_replies_view_thread(tr::now); _menu->addAction(phrase, [=] { controller->showRepliesForMessage(_history, rootId); - }); + }, &st::menuIconViewReplies); } const auto t = base::unixtime::now(); const auto editItem = (albumPartItem && albumPartItem->allowsEdit(t)) @@ -1738,7 +1739,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { const auto editItemId = editItem->fullId(); _menu->addAction(tr::lng_context_edit_msg(tr::now), [=] { _widget->editMessage(editItemId); - }); + }, &st::menuIconEdit); } const auto pinItem = (item->canPin() && item->isPinned()) ? item @@ -1749,7 +1750,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { const auto controller = _controller; _menu->addAction(isPinned ? tr::lng_context_unpin_msg(tr::now) : tr::lng_context_pin_msg(tr::now), crl::guard(controller, [=] { Window::ToggleMessagePinned(controller, pinItemId, !isPinned); - })); + }), isPinned ? &st::menuIconUnpin : &st::menuIconPin); } }; const auto addPhotoActions = [&](not_null photo, HistoryItem *item) { @@ -1758,24 +1759,24 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (!photo->isNull() && media && media->loaded() && !hasCopyRestriction(item)) { _menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { savePhotoToFile(photo); - })); + }), &st::menuIconSaveImage); _menu->addAction(tr::lng_context_copy_image(tr::now), [=] { copyContextImage(photo, itemId); - }); + }, &st::menuIconCopy); } if (photo->hasAttachedStickers()) { _menu->addAction(tr::lng_context_attached_stickers(tr::now), [=] { session->api().attachedStickers().requestAttachedStickerSets( controller, photo); - }); + }, &st::menuIconStickers); } }; const auto addDocumentActions = [&](not_null document, HistoryItem *item) { if (document->loading()) { _menu->addAction(tr::lng_context_cancel_download(tr::now), [=] { cancelContextDownload(document); - }); + }, &st::menuIconCancel); return; } const auto itemId = item ? item->fullId() : FullMsgId(); @@ -1794,30 +1795,30 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (notAutoplayedGif) { _menu->addAction(tr::lng_context_open_gif(tr::now), [=] { openContextGif(itemId); - }); + }, &st::menuIconShowInChat); } if (!hasCopyRestriction(item)) { _menu->addAction(tr::lng_context_save_gif(tr::now), [=] { saveContextGif(itemId); - }); + }, &st::menuIconGif); } } if (!document->filepath(true).isEmpty()) { _menu->addAction(Platform::IsMac() ? tr::lng_context_show_in_finder(tr::now) : tr::lng_context_show_in_folder(tr::now), [=] { showContextInFolder(document); - }); + }, &st::menuIconShowInFolder); } if (!hasCopyRestriction(item)) { _menu->addAction(lnkIsVideo ? tr::lng_context_save_video(tr::now) : (lnkIsVoice ? tr::lng_context_save_audio(tr::now) : (lnkIsAudio ? tr::lng_context_save_audio_file(tr::now) : tr::lng_context_save_file(tr::now))), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { saveDocumentToFile(itemId, document); - })); + }), &st::menuIconDownload); } if (document->hasAttachedStickers()) { _menu->addAction(tr::lng_context_attached_stickers(tr::now), [=] { session->api().attachedStickers().requestAttachedStickerSets( controller, document); - }); + }, &st::menuIconStickers); } }; @@ -1840,7 +1841,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _widget->updateTopBarSelection(); } } - }); + }, &st::menuIconSelect); } }; @@ -1866,7 +1867,8 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { (isUponSelected > 1 ? tr::lng_context_copy_selected_items(tr::now) : tr::lng_context_copy_selected(tr::now)), - [=] { copySelectedText(); }); + [=] { copySelectedText(); }, + &st::menuIconCopy); } addItemActions(item, item); if (lnkPhoto) { @@ -1877,22 +1879,22 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (item && item->hasDirectLink() && isUponSelected != 2 && isUponSelected != -2) { _menu->addAction(item->history()->peer->isMegagroup() ? tr::lng_context_copy_message_link(tr::now) : tr::lng_context_copy_post_link(tr::now), [=] { HistoryView::CopyPostLink(session, itemId, HistoryView::Context::History); - }); + }, &st::menuIconLink); } if (isUponSelected > 1) { if (selectedState.count > 0 && selectedState.canForwardCount == selectedState.count) { _menu->addAction(tr::lng_context_forward_selected(tr::now), [=] { _widget->forwardSelected(); - }); + }, &st::menuIconForward); } if (selectedState.count > 0 && selectedState.canDeleteCount == selectedState.count) { _menu->addAction(tr::lng_context_delete_selected(tr::now), [=] { _widget->confirmDeleteSelected(); - }); + }, &st::menuIconDelete); } _menu->addAction(tr::lng_context_clear_selection(tr::now), [=] { _widget->clearSelected(); - }); + }, &st::menuIconSelect); } else if (item) { const auto itemId = item->fullId(); const auto blockSender = item->history()->peer->isRepliesChat(); @@ -1900,7 +1902,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (item->allowsForward()) { _menu->addAction(tr::lng_context_forward_msg(tr::now), [=] { forwardItem(itemId); - }); + }, &st::menuIconForward); } if (item->canDelete()) { _menu->addAction(Ui::DeleteMessageContextAction( @@ -1912,14 +1914,14 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (!blockSender && item->suggestReport()) { _menu->addAction(tr::lng_context_report_msg(tr::now), [=] { reportItem(itemId); - }); + }, &st::menuIconReport); } } addSelectMessageAction(item, false); if (isUponSelected != -2 && blockSender) { _menu->addAction(tr::lng_profile_block_user(tr::now), [=] { blockSenderItem(itemId); - }); + }, &st::menuIconBlock); } } } else { // maybe cursor on some text history item? @@ -1947,7 +1949,8 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { ((isUponSelected > 1) ? tr::lng_context_copy_selected_items(tr::now) : tr::lng_context_copy_selected(tr::now)), - [=] { copySelectedText(); }); + [=] { copySelectedText(); }, + &st::menuIconCopy); } addItemActions(item, item); } else { @@ -1960,15 +1963,16 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (document->sticker()->set) { _menu->addAction(document->isStickerSetInstalled() ? tr::lng_context_pack_info(tr::now) : tr::lng_context_pack_add(tr::now), [=] { showStickerPackInfo(document); - }); - _menu->addAction(session->data().stickers().isFaved(document) ? tr::lng_faved_stickers_remove(tr::now) : tr::lng_faved_stickers_add(tr::now), [=] { + }, &st::menuIconStickers); + const auto isFaved = session->data().stickers().isFaved(document); + _menu->addAction(isFaved ? tr::lng_faved_stickers_remove(tr::now) : tr::lng_faved_stickers_add(tr::now), [=] { Api::ToggleFavedSticker(document, itemId); - }); + }, isFaved ? &st::menuIconUnfave : &st::menuIconFave); } if (!hasCopyRestriction(item)) { _menu->addAction(tr::lng_context_save_image(tr::now), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { saveDocumentToFile(itemId, document); - })); + }), &st::menuIconDownload); } } } @@ -1983,13 +1987,13 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { const auto phone = contact->phoneNumber; _menu->addAction(tr::lng_profile_copy_phone(tr::now), [=] { QGuiApplication::clipboard()->setText(phone); - }); + }, &st::menuIconCopy); } } if (item->isSponsored()) { _menu->addAction(tr::lng_sponsored_title({}), [=] { _controller->show(Box(Ui::AboutSponsoredBox)); - }); + }, &st::menuIconInfo); } if (!item->isService() && view @@ -1998,7 +2002,7 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { && (view->hasVisibleText() || mediaHasTextForCopy)) { _menu->addAction(tr::lng_context_copy_text(tr::now), [=] { copyContextText(itemId); - }); + }, &st::menuIconCopy); } } } @@ -2011,39 +2015,40 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { actionText, [text = link->copyToClipboardText()] { QGuiApplication::clipboard()->setText(text); - }); + }, + &st::menuIconCopy); } else if (item && item->hasDirectLink() && isUponSelected != 2 && isUponSelected != -2) { _menu->addAction(item->history()->peer->isMegagroup() ? tr::lng_context_copy_message_link(tr::now) : tr::lng_context_copy_post_link(tr::now), [=] { HistoryView::CopyPostLink(session, itemId, HistoryView::Context::History); - }); + }, &st::menuIconLink); } if (isUponSelected > 1) { if (selectedState.count > 0 && selectedState.count == selectedState.canForwardCount) { _menu->addAction(tr::lng_context_forward_selected(tr::now), [=] { _widget->forwardSelected(); - }); + }, &st::menuIconForward); } if (selectedState.count > 0 && selectedState.count == selectedState.canDeleteCount) { _menu->addAction(tr::lng_context_delete_selected(tr::now), [=] { _widget->confirmDeleteSelected(); - }); + }, &st::menuIconDelete); } _menu->addAction(tr::lng_context_clear_selection(tr::now), [=] { _widget->clearSelected(); - }); + }, &st::menuIconSelect); } else if (item && ((isUponSelected != -2 && (canForward || canDelete)) || item->isRegular())) { if (isUponSelected != -2) { if (canForward) { _menu->addAction(tr::lng_context_forward_msg(tr::now), [=] { forwardAsGroup(itemId); - }); + }, &st::menuIconForward); } if (canDelete) { const auto callback = [=] { deleteAsGroup(itemId); }; if (item->isUploading()) { - _menu->addAction(tr::lng_context_cancel_upload(tr::now), callback); + _menu->addAction(tr::lng_context_cancel_upload(tr::now), callback, &st::menuIconCancel); } else { _menu->addAction(Ui::DeleteMessageContextAction( _menu->menu(), @@ -2055,14 +2060,14 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { if (!canBlockSender && canReport) { _menu->addAction(tr::lng_context_report_msg(tr::now), [=] { reportAsGroup(itemId); - }); + }, &st::menuIconReport); } } addSelectMessageAction(item); if (isUponSelected != -2 && canBlockSender) { _menu->addAction(tr::lng_profile_block_user(tr::now), [=] { blockSenderAsGroup(itemId); - }); + }, &st::menuIconBlock); } } else if (App::mousedItem()) { addSelectMessageAction(App::mousedItem()->data()); diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index c674eb413..b2f690d1f 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -53,6 +53,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_session_settings.h" #include "apiwrap.h" #include "facades.h" +#include "styles/style_menu_icons.h" #include #include @@ -137,13 +138,14 @@ void AddPhotoActions( App::LambdaDelayed( st::defaultDropdownMenu.menu.ripple.hideDuration, &photo->session(), - [=] { SavePhotoToFile(photo); })); + [=] { SavePhotoToFile(photo); }), + &st::menuIconSaveImage); menu->addAction(tr::lng_context_copy_image(tr::now), [=] { const auto item = photo->owner().message(contextId); if (!list->showCopyRestriction(item)) { CopyImage(photo); } - }); + }, &st::menuIconCopy); } if (photo->hasAttachedStickers()) { const auto controller = list->controller(); @@ -153,7 +155,8 @@ void AddPhotoActions( }; menu->addAction( tr::lng_context_attached_stickers(tr::now), - std::move(callback)); + std::move(callback), + &st::menuIconStickers); } } @@ -218,7 +221,8 @@ void AddSaveDocumentAction( App::LambdaDelayed( st::defaultDropdownMenu.menu.ripple.hideDuration, &document->session(), - save)); + save), + &st::menuIconDownload); } void AddDocumentActions( @@ -229,7 +233,7 @@ void AddDocumentActions( if (document->loading()) { menu->addAction(tr::lng_context_cancel_download(tr::now), [=] { document->cancel(); - }); + }, &st::menuIconCancel); return; } const auto contextId = item ? item->fullId() : FullMsgId(); @@ -245,12 +249,12 @@ void AddDocumentActions( if (notAutoplayedGif) { menu->addAction(tr::lng_context_open_gif(tr::now), [=] { OpenGif(list->controller(), contextId); - }); + }, &st::menuIconShowInChat); } if (document->isGifv() && !list->hasCopyRestriction(item)) { menu->addAction(tr::lng_context_save_gif(tr::now), [=] { SaveGif(list->controller(), contextId); - }); + }, &st::menuIconGif); } } if (document->sticker() && document->sticker()->set) { @@ -258,19 +262,23 @@ void AddDocumentActions( (document->isStickerSetInstalled() ? tr::lng_context_pack_info(tr::now) : tr::lng_context_pack_add(tr::now)), - [=] { ShowStickerPackInfo(document, list); }); + [=] { ShowStickerPackInfo(document, list); }, + &st::menuIconStickers); + const auto isFaved = document->owner().stickers().isFaved(document); menu->addAction( - (document->owner().stickers().isFaved(document) + (isFaved ? tr::lng_faved_stickers_remove(tr::now) : tr::lng_faved_stickers_add(tr::now)), - [=] { ToggleFavedSticker(document, contextId); }); + [=] { ToggleFavedSticker(document, contextId); }, + isFaved ? &st::menuIconUnfave : &st::menuIconFave); } if (!document->filepath(true).isEmpty()) { menu->addAction( (Platform::IsMac() ? tr::lng_context_show_in_finder(tr::now) : tr::lng_context_show_in_folder(tr::now)), - [=] { ShowInFolder(document); }); + [=] { ShowInFolder(document); }, + &st::menuIconShowInFolder); } if (document->hasAttachedStickers()) { const auto controller = list->controller(); @@ -280,7 +288,8 @@ void AddDocumentActions( }; menu->addAction( tr::lng_context_attached_stickers(tr::now), - std::move(callback)); + std::move(callback), + &st::menuIconStickers); } AddSaveDocumentAction(menu, item, document, list); } @@ -306,7 +315,8 @@ void AddPostLinkAction( (item->history()->peer->isMegagroup() ? tr::lng_context_copy_message_link : tr::lng_context_copy_post_link)(tr::now), - [=] { CopyPostLink(session, itemId, context); }); + [=] { CopyPostLink(session, itemId, context); }, + &st::menuIconLink); } MessageIdsList ExtractIdsList(const SelectedItems &items) { @@ -339,7 +349,7 @@ bool AddForwardSelectedAction( request.navigation, ExtractIdsList(request.selectedItems), callback); - }); + }, &st::menuIconForward); return true; } @@ -371,7 +381,7 @@ bool AddForwardMessageAction( ? owner->itemOrItsGroup(item) : MessageIdsList{ 1, itemId })); } - }); + }, &st::menuIconForward); return true; } @@ -419,7 +429,7 @@ bool AddSendNowSelectedAction( history, ExtractIdsList(request.selectedItems), callback); - }); + }, &st::menuIconSend); return true; } @@ -452,7 +462,7 @@ bool AddSendNowMessageAction( ? owner->itemOrItsGroup(item) : MessageIdsList{ 1, itemId })); } - }); + }, &st::menuIconSend); return true; } @@ -543,7 +553,7 @@ bool AddRescheduleAction( box->closeBox(); } }, box->lifetime()); - }); + }, &st::menuIconSchedule); return true; } @@ -567,7 +577,7 @@ bool AddReplyToMessageAction( return; } list->replyToMessageRequestNotify(item->fullId()); - }); + }, &st::menuIconReply); return true; } @@ -598,7 +608,7 @@ bool AddViewRepliesAction( const auto history = item->history(); menu->addAction(phrase, crl::guard(controller, [=] { controller->showRepliesForMessage(history, rootId); - })); + }), &st::menuIconViewReplies); return true; } @@ -621,7 +631,7 @@ bool AddEditMessageAction( return; } list->editMessageRequestNotify(item->fullId()); - }); + }, &st::menuIconEdit); return true; } @@ -648,7 +658,7 @@ bool AddPinMessageAction( const auto controller = list->controller(); menu->addAction(isPinned ? tr::lng_context_unpin_msg(tr::now) : tr::lng_context_pin_msg(tr::now), crl::guard(controller, [=] { Window::ToggleMessagePinned(controller, pinItemId, !isPinned); - })); + }), isPinned ? &st::menuIconUnpin : &st::menuIconPin); return true; } @@ -671,7 +681,7 @@ bool AddGoToMessageAction( if (item) { goToMessageClickHandler(item)->onClick(ClickContext{}); } - })); + }), &st::menuIconShowInChat); return true; } @@ -703,7 +713,7 @@ bool AddDeleteSelectedAction( list->cancelSelection(); })); request.navigation->parentController()->show(std::move(box)); - }); + }, &st::menuIconDelete); return true; } @@ -752,7 +762,8 @@ bool AddDeleteMessageAction( if (item->isUploading()) { menu->addAction( tr::lng_context_cancel_upload(tr::now), - callback); + callback, + &st::menuIconCancel); return true; } menu->addAction(Ui::DeleteMessageContextAction( @@ -795,7 +806,10 @@ void AddReportAction( : MessageIdsList{ 1, itemId })); } }); - menu->addAction(tr::lng_context_report_msg(tr::now), callback); + menu->addAction( + tr::lng_context_report_msg(tr::now), + callback, + &st::menuIconReport); } bool AddClearSelectionAction( @@ -807,7 +821,7 @@ bool AddClearSelectionAction( } menu->addAction(tr::lng_context_clear_selection(tr::now), [=] { list->cancelSelection(); - }); + }, &st::menuIconSelect); return true; } @@ -835,7 +849,7 @@ bool AddSelectMessageAction( list->selectItem(item); } } - }); + }, &st::menuIconSelect); return true; } @@ -885,7 +899,8 @@ void AddCopyLinkAction( const auto text = link->copyToClipboardText(); menu->addAction( action, - [=] { QGuiApplication::clipboard()->setText(text); }); + [=] { QGuiApplication::clipboard()->setText(text); }, + &st::menuIconCopy); } } // namespace @@ -898,7 +913,9 @@ ContextMenuRequest::ContextMenuRequest( base::unique_qptr FillContextMenu( not_null list, const ContextMenuRequest &request) { - auto result = base::make_unique_q(list); + auto result = base::make_unique_q( + list, + st::popupMenuWithIcons); const auto link = request.link; const auto view = request.view; @@ -925,7 +942,7 @@ base::unique_qptr FillContextMenu( if (!list->showCopyRestrictionForSelected()) { TextUtilities::SetClipboardText(list->getSelectedText()); } - }); + }, &st::menuIconCopy); } AddTopMessageActions(result, request, list); @@ -958,7 +975,7 @@ base::unique_qptr FillContextMenu( TextUtilities::SetClipboardText(HistoryItemText(item)); } } - }); + }, &st::menuIconCopy); } } @@ -1034,12 +1051,12 @@ void AddPollActions( if (poll->voted() && !poll->quiz()) { menu->addAction(tr::lng_polls_retract(tr::now), [=] { poll->session().api().polls().sendVotes(itemId, {}); - }); + }, &st::menuIconRetractVote); } if (item->canStopPoll()) { menu->addAction(tr::lng_polls_stop(tr::now), [=] { StopPoll(&poll->session(), itemId); - }); + }, &st::menuIconStopPoll); } } diff --git a/Telegram/SourceFiles/history/view/history_view_schedule_box.cpp b/Telegram/SourceFiles/history/view/history_view_schedule_box.cpp index 593c292a5..9c510efda 100644 --- a/Telegram/SourceFiles/history/view/history_view_schedule_box.cpp +++ b/Telegram/SourceFiles/history/view/history_view_schedule_box.cpp @@ -24,6 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_info.h" #include "styles/style_layers.h" #include "styles/style_chat.h" +#include "styles/style_menu_icons.h" #include @@ -35,10 +36,13 @@ void FillSendUntilOnlineMenu( Fn callback) { const auto menu = std::make_shared>(); button->setClickedCallback([=] { - *menu = base::make_unique_q(button); + *menu = base::make_unique_q( + button, + st::popupMenuWithIcons); (*menu)->addAction( tr::lng_scheduled_send_until_online(tr::now), - std::move(callback)); + std::move(callback), + &st::menuIconSend); (*menu)->popup(QCursor::pos()); return true; }); diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp index bb3682e14..c108edd1b 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp @@ -56,6 +56,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_dialogs.h" #include "styles/style_chat.h" #include "styles/style_info.h" +#include "styles/style_menu_icons.h" namespace HistoryView { namespace { @@ -280,7 +281,7 @@ void TopBarWidget::showMenu() { if (!_activeChat.key || _menu) { return; } - _menu.create(parentWidget()); + _menu.create(parentWidget(), st::dropdownMenuWithIcons); _menu->setHiddenCallback([weak = Ui::MakeWeak(this), menu = _menu.data()]{ menu->deleteLater(); if (weak && weak->_menu == menu) { @@ -300,9 +301,10 @@ void TopBarWidget::showMenu() { })); _menuToggle->installEventFilter(_menu); const auto addAction = [&]( - const QString &text, - Fn callback) { - return _menu->addAction(text, std::move(callback)); + const QString &text, + Fn callback, + const style::icon *icon) { + return _menu->addAction(text, std::move(callback), icon); }; Window::FillDialogsEntryMenu( _controller, diff --git a/Telegram/SourceFiles/info/info_wrap_widget.cpp b/Telegram/SourceFiles/info/info_wrap_widget.cpp index a9f72b9c5..bcb40f632 100644 --- a/Telegram/SourceFiles/info/info_wrap_widget.cpp +++ b/Telegram/SourceFiles/info/info_wrap_widget.cpp @@ -37,6 +37,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "styles/style_info.h" #include "styles/style_profile.h" +#include "styles/style_menu_icons.h" namespace Info { namespace { @@ -529,7 +530,9 @@ void WrapWidget::showTopBarMenu() { Ui::InnerDropdown::HideOption::IgnoreShow); return; } - _topBarMenu = base::make_unique_q(this); + _topBarMenu = base::make_unique_q( + this, + st::dropdownMenuWithIcons); _topBarMenu->setHiddenCallback([this] { InvokeQueued(this, [this] { _topBarMenu = nullptr; }); @@ -551,8 +554,9 @@ void WrapWidget::showTopBarMenu() { const auto addAction = [=]( const QString &text, - Fn callback) { - return _topBarMenu->addAction(text, std::move(callback)); + Fn callback, + const style::icon *icon) { + return _topBarMenu->addAction(text, std::move(callback), icon); }; if (const auto peer = key().peer()) { Window::FillDialogsEntryMenu( diff --git a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp index 8d5594f6a..4999f2ef9 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp @@ -36,8 +36,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_session.h" #include "mainwidget.h" #include "mainwindow.h" -#include "styles/style_overview.h" -#include "styles/style_info.h" #include "base/platform/base_platform_info.h" #include "base/weak_ptr.h" #include "media/player/media_player_instance.h" @@ -45,6 +43,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/peer_list_controllers.h" #include "core/file_utilities.h" #include "facades.h" +#include "styles/style_overview.h" +#include "styles/style_info.h" +#include "styles/style_menu_icons.h" #include #include @@ -1580,14 +1581,17 @@ void ListWidget::showContextMenu( const auto itemFullId = item->fullId(); const auto owner = &session().data(); - _contextMenu = base::make_unique_q(this); + _contextMenu = base::make_unique_q( + this, + st::popupMenuWithIcons); _contextMenu->addAction( tr::lng_context_to_msg(tr::now), [=] { if (const auto item = owner->message(itemFullId)) { _controller->parentController()->showPeerHistoryAtItem(item); } - }); + }, + &st::menuIconShowInChat); auto photoLink = dynamic_cast(link.get()); auto fileLink = dynamic_cast(link.get()); @@ -1612,7 +1616,8 @@ void ListWidget::showContextMenu( tr::lng_context_cancel_download(tr::now), [document] { document->cancel(); - }); + }, + &st::menuIconCancel); } else { auto filepath = document->filepath(true); if (!filepath.isEmpty()) { @@ -1626,7 +1631,8 @@ void ListWidget::showContextMenu( (Platform::IsMac() ? tr::lng_context_show_in_finder(tr::now) : tr::lng_context_show_in_folder(tr::now)), - std::move(handler)); + std::move(handler), + &st::menuIconShowInFolder); } auto handler = App::LambdaDelayed( st::defaultDropdownMenu.menu.ripple.hideDuration, @@ -1646,7 +1652,8 @@ void ListWidget::showContextMenu( : isAudio ? tr::lng_context_save_audio_file(tr::now) : tr::lng_context_save_file(tr::now)), - std::move(handler)); + std::move(handler), + &st::menuIconDownload); } } } @@ -1658,7 +1665,8 @@ void ListWidget::showContextMenu( actionText, [text = link->copyToClipboardText()] { QGuiApplication::clipboard()->setText(text); - }); + }, + &st::menuIconCopy); } } if (overSelected == SelectionState::OverSelectedItems) { @@ -1667,20 +1675,23 @@ void ListWidget::showContextMenu( tr::lng_context_forward_selected(tr::now), crl::guard(this, [this] { forwardSelected(); - })); + }), + &st::menuIconForward); } if (canDeleteAll()) { _contextMenu->addAction( tr::lng_context_delete_selected(tr::now), crl::guard(this, [this] { deleteSelected(); - })); + }), + &st::menuIconDelete); } _contextMenu->addAction( tr::lng_context_clear_selection(tr::now), crl::guard(this, [this] { clearSelected(); - })); + }), + &st::menuIconSelect); } else { if (overSelected != SelectionState::NotOverSelectedItems) { if (item->allowsForward()) { @@ -1688,7 +1699,8 @@ void ListWidget::showContextMenu( tr::lng_context_forward_msg(tr::now), crl::guard(this, [this, universalId] { forwardItem(universalId); - })); + }), + &st::menuIconForward); } if (item->canDelete()) { _contextMenu->addAction(Ui::DeleteMessageContextAction( @@ -1710,7 +1722,8 @@ void ListWidget::showContextMenu( update(); } applyItemSelection(universalId, FullSelection); - })); + }), + &st::menuIconSelect); } } diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp index 54b4b8ad9..fe73c81dd 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp @@ -128,7 +128,7 @@ void Gif::setPosition(int32 position) { void DeleteSavedGifClickHandler::onClickImpl() const { ChatHelpers::AddGifAction( - [](QString, Fn &&done) { done(); }, + [](QString, Fn &&done, const style::icon*) { done(); }, _data); } diff --git a/Telegram/SourceFiles/inline_bots/inline_results_inner.cpp b/Telegram/SourceFiles/inline_bots/inline_results_inner.cpp index 2b23004af..c1e1e8ab8 100644 --- a/Telegram/SourceFiles/inline_bots/inline_results_inner.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_results_inner.cpp @@ -29,6 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/effects/path_shift_gradient.h" #include "history/view/history_view_cursor_state.h" #include "styles/style_chat_helpers.h" +#include "styles/style_menu_icons.h" #include @@ -296,7 +297,9 @@ void Inner::contextMenuEvent(QContextMenuEvent *e) { ? _sendMenuType() : SendMenu::Type::Disabled; - _menu = base::make_unique_q(this); + _menu = base::make_unique_q( + this, + st::popupMenuWithIcons); const auto send = [=, selected = _selected](Api::SendOptions options) { selectInlineResult(selected, options, false); @@ -309,8 +312,11 @@ void Inner::contextMenuEvent(QContextMenuEvent *e) { const auto item = _mosaic.itemAt(_selected); if (const auto previewDocument = item->getPreviewDocument()) { - auto callback = [&](const QString &text, Fn &&done) { - _menu->addAction(text, std::move(done)); + auto callback = [&]( + const QString &text, + Fn &&done, + const style::icon *icon) { + _menu->addAction(text, std::move(done), icon); }; ChatHelpers::AddGifAction(std::move(callback), previewDocument); } diff --git a/Telegram/SourceFiles/settings/settings_common.cpp b/Telegram/SourceFiles/settings/settings_common.cpp index 5bfa90bae..2d3ca3948 100644 --- a/Telegram/SourceFiles/settings/settings_common.cpp +++ b/Telegram/SourceFiles/settings/settings_common.cpp @@ -32,6 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_domain.h" #include "styles/style_layers.h" #include "styles/style_settings.h" +#include "styles/style_menu_icons.h" namespace Settings { @@ -210,22 +211,25 @@ void FillMenu( if (type == Type::Chat) { addAction( tr::lng_settings_bg_theme_create(tr::now), - [=] { window->show(Box(Window::Theme::CreateBox, window)); }); + [=] { window->show(Box(Window::Theme::CreateBox, window)); }, + &st::menuIconChangeColors); } else { const auto &list = Core::App().domain().accounts(); if (list.size() < ::Main::Domain::kMaxAccounts) { addAction(tr::lng_menu_add_account(tr::now), [=] { Core::App().domain().addActivated(MTP::Environment{}); - }); + }, &st::menuIconAddAccount); } if (!controller->session().supportMode()) { addAction( tr::lng_settings_information(tr::now), - [=] { showOther(Type::Information); }); + [=] { showOther(Type::Information); }, + &st::menuIconInfo); } addAction( tr::lng_settings_logout(tr::now), - [=] { window->showLogoutConfirmation(); }); + [=] { window->showLogoutConfirmation(); }, + &st::menuIconLeave); } } diff --git a/Telegram/SourceFiles/settings/settings_common.h b/Telegram/SourceFiles/settings/settings_common.h index 1f34036f3..a6862bac7 100644 --- a/Telegram/SourceFiles/settings/settings_common.h +++ b/Telegram/SourceFiles/settings/settings_common.h @@ -108,7 +108,8 @@ not_null AddSubsectionTitle( using MenuCallback = Fn handler)>; + Fn handler, + const style::icon *icon)>; void FillMenu( not_null controller, diff --git a/Telegram/SourceFiles/ui/chat/chat.style b/Telegram/SourceFiles/ui/chat/chat.style index 7d688e711..320acaaec 100644 --- a/Telegram/SourceFiles/ui/chat/chat.style +++ b/Telegram/SourceFiles/ui/chat/chat.style @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL using "ui/basic.style"; using "dialogs/dialogs.style"; using "ui/widgets/widgets.style"; +using "ui/menu_icons.style"; MessageBar { title: TextStyle; @@ -904,13 +905,13 @@ defaultWhoRead: WhoRead { photoSize: 30px; photoSkip: 5px; nameLeft: 57px; - iconPosition: point(14px, 9px); - itemPadding: margins(38px, 8px, 17px, 6px); + iconPosition: point(22px, 11px); + itemPadding: margins(61px, 9px, 17px, 7px); } -whoReadMenu: PopupMenu(defaultPopupMenu) { +whoReadMenu: PopupMenu(popupMenuWithIcons) { scrollPadding: margins(0px, 6px, 0px, 6px); maxHeight: 387px; - menu: Menu(defaultMenu) { + menu: Menu(menuWithIcons) { separatorPadding: margins(0px, 6px, 0px, 8px); } } diff --git a/Telegram/SourceFiles/ui/controls/delete_message_context_action.cpp b/Telegram/SourceFiles/ui/controls/delete_message_context_action.cpp index 31c0b6bd2..aae37a921 100644 --- a/Telegram/SourceFiles/ui/controls/delete_message_context_action.cpp +++ b/Telegram/SourceFiles/ui/controls/delete_message_context_action.cpp @@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/unixtime.h" #include "base/timer.h" #include "styles/style_chat.h" +#include "styles/style_menu_icons.h" namespace Ui { namespace { @@ -104,6 +105,9 @@ void ActionWithTimer::paint(Painter &p) { if (isEnabled()) { paintRipple(p, 0, 0); } + + st::menuIconDelete.paint(p, _st.itemIconPosition, width()); + p.setPen(selected ? _st.itemFgOver : _st.itemFg); _text.drawLeftElided( p, @@ -239,8 +243,8 @@ base::unique_qptr DeleteMessageContextAction( menu, tr::lng_context_delete_msg(tr::now), std::move(callback)), - nullptr, - nullptr); + &st::menuIconDelete, + &st::menuIconDelete); } return base::make_unique_q( menu, diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style new file mode 100644 index 000000000..6e34d9617 --- /dev/null +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -0,0 +1,81 @@ +/* +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 +*/ +using "ui/colors.palette"; +using "ui/widgets/widgets.style"; + +menuWithIcons: Menu(defaultMenu) { + itemIconPosition: point(20px, 7px); + itemPadding: margins(61px, 9px, 17px, 9px); +} +popupMenuWithIcons: PopupMenu(defaultPopupMenu) { + scrollPadding: margins(0px, 5px, 0px, 5px); + menu: menuWithIcons; +} +dropdownMenuWithIcons: DropdownMenu(defaultDropdownMenu) { + wrap: InnerDropdown(defaultInnerDropdown) { + scrollPadding: margins(0px, 5px, 0px, 5px); + } + menu: menuWithIcons; +} + +menuIconReactions: icon {{ "menu/read_reactions", menuSubmenuArrowFg }}; +menuIconReply: icon {{ "menu/reply", menuSubmenuArrowFg }}; +menuIconViewReplies: icon {{ "menu/view_replies", menuSubmenuArrowFg }}; +menuIconEdit: icon {{ "menu/edit", menuSubmenuArrowFg }}; +menuIconPin: icon {{ "menu/pin", menuSubmenuArrowFg }}; +menuIconUnpin: icon {{ "menu/unpin", menuSubmenuArrowFg }}; +menuIconCopy: icon {{ "menu/copy", menuSubmenuArrowFg }}; +menuIconForward: icon {{ "menu/forward", menuSubmenuArrowFg }}; +menuIconDelete: icon {{ "menu/delete", menuSubmenuArrowFg }}; +menuIconSelect: icon {{ "menu/select", menuSubmenuArrowFg }}; +menuIconSaveImage: icon {{ "menu/save_image", menuSubmenuArrowFg }}; +menuIconStickers: icon {{ "menu/stickers", menuSubmenuArrowFg }}; +menuIconCancel: icon {{ "menu/cancel", menuSubmenuArrowFg }}; +menuIconShowInChat: icon {{ "menu/show_in_chat", menuSubmenuArrowFg }}; +menuIconGif: icon {{ "menu/gif", menuSubmenuArrowFg }}; +menuIconShowInFolder: icon {{ "menu/show_in_folder", menuSubmenuArrowFg }}; +menuIconDownload: icon {{ "menu/download", menuSubmenuArrowFg }}; +menuIconLink: icon {{ "menu/link", menuSubmenuArrowFg }}; +menuIconBlock: icon {{ "menu/block", menuSubmenuArrowFg }}; +menuIconUnblock: icon {{ "menu/unblock", menuSubmenuArrowFg }}; +menuIconRestartBot: icon {{ "menu/restart_bot", menuSubmenuArrowFg }}; +menuIconReport: icon {{ "menu/report", menuSubmenuArrowFg }}; +menuIconFave: icon {{ "menu/favorite", menuSubmenuArrowFg }}; +menuIconUnfave: icon {{ "menu/unfavorite", menuSubmenuArrowFg }}; +menuIconProfile: icon {{ "menu/profile", menuSubmenuArrowFg }}; +menuIconInfo: icon {{ "menu/info", menuSubmenuArrowFg }}; +menuIconInvite: icon {{ "menu/invite", menuSubmenuArrowFg }}; +menuIconPromote: icon {{ "menu/admin_promote", menuSubmenuArrowFg }}; +menuIconAdmin: icon {{ "menu/admin", menuSubmenuArrowFg }}; +menuIconRemove: icon {{ "menu/stop_poll", menuSubmenuArrowFg }}; +menuIconStopPoll: icon {{ "menu/stop_poll", menuSubmenuArrowFg }}; +menuIconRetractVote: icon {{ "menu/retract_vote", menuSubmenuArrowFg }}; +menuIconRestrict: icon {{ "menu/permissions", menuSubmenuArrowFg }}; +menuIconShare: icon {{ "menu/share", menuSubmenuArrowFg }}; +menuIconArchive: icon {{ "menu/archive", menuSubmenuArrowFg }}; +menuIconUnarchive: icon {{ "menu/unarchive", menuSubmenuArrowFg }}; +menuIconMarkRead: icon {{ "menu/read", menuSubmenuArrowFg }}; +menuIconMarkUnread: icon {{ "menu/unread", menuSubmenuArrowFg }}; +menuIconChangeColors: icon {{ "menu/colors", menuSubmenuArrowFg }}; +menuIconExport: icon {{ "menu/export", menuSubmenuArrowFg }}; +menuIconClear: icon {{ "menu/clear", menuSubmenuArrowFg }}; +menuIconManage: icon {{ "menu/manage", menuSubmenuArrowFg }}; +menuIconDiscussion: icon {{ "menu/discussion", menuSubmenuArrowFg }}; +menuIconLeave: icon {{ "menu/leave", menuSubmenuArrowFg }}; +menuIconCreatePoll: icon {{ "menu/create_poll", menuSubmenuArrowFg }}; +menuIconQrCode: icon {{ "menu/qr_code", menuSubmenuArrowFg }}; +menuIconExpand: icon {{ "menu/expand", menuSubmenuArrowFg }}; +menuIconCollapse: icon {{ "menu/collapse", menuSubmenuArrowFg }}; +menuIconToMainMenu: icon {{ "menu/move_to_menu", menuSubmenuArrowFg }}; +menuIconFromMainMenu: icon {{ "menu/move_from_menu", menuSubmenuArrowFg }}; +menuIconAddAccount: icon {{ "menu/add_account", menuSubmenuArrowFg }}; +menuIconMute: icon {{ "menu/mute", menuSubmenuArrowFg }}; +menuIconUnmute: icon {{ "menu/unmute", menuSubmenuArrowFg }}; +menuIconSchedule: icon {{ "menu/reschedule", menuSubmenuArrowFg }}; +menuIconSend: icon {{ "menu/send", menuSubmenuArrowFg }}; +//menuIcon: icon {{ "menu/", menuSubmenuArrowFg }}; diff --git a/Telegram/SourceFiles/window/themes/window_themes_cloud_list.cpp b/Telegram/SourceFiles/window/themes/window_themes_cloud_list.cpp index fc89a4d64..dd2cb14e6 100644 --- a/Telegram/SourceFiles/window/themes/window_themes_cloud_list.cpp +++ b/Telegram/SourceFiles/window/themes/window_themes_cloud_list.cpp @@ -29,6 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_settings.h" #include "styles/style_boxes.h" #include "styles/style_chat.h" +#include "styles/style_menu_icons.h" #include #include @@ -583,21 +584,23 @@ void CloudList::showMenu(Element &element) { _contextMenu = nullptr; return; } - _contextMenu = base::make_unique_q(element.button.get()); + _contextMenu = base::make_unique_q( + element.button.get(), + st::popupMenuWithIcons); const auto cloud = element.theme; if (const auto slug = element.theme.slug; !slug.isEmpty()) { _contextMenu->addAction(tr::lng_theme_share(tr::now), [=] { QGuiApplication::clipboard()->setText( _window->session().createInternalLinkFull("addtheme/" + slug)); Ui::Toast::Show(tr::lng_background_link_copied(tr::now)); - }); + }, &st::menuIconShare); } if (cloud.documentId && cloud.createdBy == _window->session().userId() && Background()->themeObject().cloud.id == cloud.id) { _contextMenu->addAction(tr::lng_theme_edit(tr::now), [=] { StartEditor(&_window->window(), cloud); - }); + }, &st::menuIconChangeColors); } const auto id = cloud.id; _contextMenu->addAction(tr::lng_theme_delete(tr::now), [=] { @@ -621,7 +624,7 @@ void CloudList::showMenu(Element &element) { tr::lng_theme_delete_sure(tr::now), tr::lng_theme_delete(tr::now), remove)); - }); + }, &st::menuIconDelete); _contextMenu->popup(QCursor::pos()); } diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index d097a8d5d..044268dfc 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -27,6 +27,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "apiwrap.h" #include "styles/style_widgets.h" #include "styles/style_window.h" +#include "styles/style_menu_icons.h" namespace Window { namespace { @@ -307,16 +308,23 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { if (i == end(_filters)) { return; } - _popupMenu = base::make_unique_q(i->second.get()); - const auto addAction = [&](const QString &text, Fn callback) { + _popupMenu = base::make_unique_q( + i->second.get(), + st::popupMenuWithIcons); + const auto addAction = [&]( + const QString &text, + Fn callback, + const style::icon *icon) { return _popupMenu->addAction( text, - crl::guard(&_outer, std::move(callback))); + crl::guard(&_outer, std::move(callback)), + icon); }; addAction( tr::lng_filters_context_edit(tr::now), - [=] { showEditBox(id); }); + [=] { showEditBox(id); }, + &st::menuIconEdit); auto filteredChats = [=] { return _session->session().data().chatsFilters().chatsList(id); @@ -327,7 +335,8 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { addAction( tr::lng_filters_context_remove(tr::now), - [=] { showRemoveBox(id); }); + [=] { showRemoveBox(id); }, + &st::menuIconDelete); _popupMenu->popup(position); } diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index c56cd1bfd..16c6d4356 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -60,6 +60,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_boxes.h" #include "styles/style_info.h" // infoTopBarMenu #include "styles/style_layers.h" +#include "styles/style_menu_icons.h" #include #include @@ -316,11 +317,17 @@ void MainMenu::AccountButton::paintEvent(QPaintEvent *e) { void MainMenu::AccountButton::contextMenuEvent(QContextMenuEvent *e) { if (!_menu && IsAltShift(e->modifiers())) { - _menu = base::make_unique_q(this); - const auto addAction = [&](const QString &text, Fn callback) { + _menu = base::make_unique_q( + this, + st::popupMenuWithIcons); + const auto addAction = [&]( + const QString &text, + Fn callback, + const style::icon *icon) { return _menu->addAction( text, - crl::guard(this, std::move(callback))); + crl::guard(this, std::move(callback)), + icon); }; MenuAddMarkAsReadAllChatsAction(&_session->data(), addAction); _menu->popup(QCursor::pos()); @@ -329,10 +336,12 @@ void MainMenu::AccountButton::contextMenuEvent(QContextMenuEvent *e) { if (&_session->account() == &Core::App().activeAccount() || _menu) { return; } - _menu = base::make_unique_q(this); + _menu = base::make_unique_q( + this, + st::popupMenuWithIcons); _menu->addAction(tr::lng_menu_activate(tr::now), crl::guard(this, [=] { Core::App().domain().activate(&_session->account()); - })); + }), &st::menuIconProfile); _menu->addAction(tr::lng_settings_logout(tr::now), crl::guard(this, [=] { const auto session = _session; const auto callback = [=](Fn &&close) { @@ -344,7 +353,7 @@ void MainMenu::AccountButton::contextMenuEvent(QContextMenuEvent *e) { tr::lng_settings_logout(tr::now), st::attentionBoxButton, crl::guard(session, callback))); - })); + }), &st::menuIconLeave); _menu->popup(QCursor::pos()); } @@ -684,9 +693,17 @@ void MainMenu::setupArchiveButton() { } else if (which != Qt::RightButton) { return; } - _contextMenu = base::make_unique_q(this); - const auto addAction = [&](const QString &text, Fn callback) { - return _contextMenu->addAction(text, std::move(callback)); + _contextMenu = base::make_unique_q( + this, + st::popupMenuWithIcons); + const auto addAction = [&]( + const QString &text, + Fn callback, + const style::icon *icon) { + return _contextMenu->addAction( + text, + std::move(callback), + icon); }; const auto hide = [=] { @@ -694,7 +711,10 @@ void MainMenu::setupArchiveButton() { controller->session().saveSettingsDelayed(); Ui::hideSettingsAndLayer(); }; - addAction(tr::lng_context_archive_to_list(tr::now), std::move(hide)); + addAction( + tr::lng_context_archive_to_list(tr::now), + std::move(hide), + &st::menuIconFromMainMenu); MenuAddMarkAsReadChatListAction( [f = folder()] { return f->chatsList(); }, diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 559af5834..6543a214c 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -64,6 +64,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_layers.h" #include "styles/style_boxes.h" #include "styles/style_window.h" // st::windowMinWidth +#include "styles/style_menu_icons.h" #include @@ -324,7 +325,7 @@ void Filler::addHidePromotion() { history->session().api().request(MTPhelp_HidePromoData( history->peer->input )).send(); - }); + }, &st::menuIconRemove); } void Filler::addTogglePin() { @@ -340,7 +341,12 @@ void Filler::addTogglePin() { const auto pinToggle = [=] { TogglePinnedDialog(controller, history, filterId); }; - const auto pinAction = _addAction(pinText(), pinToggle); + const auto pinAction = _addAction( + pinText(), + pinToggle, + (history->isPinnedDialog(filterId) + ? &st::menuIconUnpin + : &st::menuIconPin)); // #TODO icons dynamic auto actionText = history->session().changes().historyUpdates( history, @@ -359,7 +365,7 @@ void Filler::addInfo() { : tr::lng_context_view_channel(tr::now)); _addAction(text, [=] { controller->showPeerInfo(peer); - }); + }, peer->isUser() ? &st::menuIconProfile : &st::menuIconInfo); } //void Filler::addSearch() { @@ -367,7 +373,7 @@ void Filler::addInfo() { // const auto peer = _peer; // _addAction(tr::lng_profile_search_messages(tr::now), [=] { // controller->content()->searchInChat(peer->owner().history(peer)); -// }); +// }, &st::menuIconSearch); //} void Filler::addToggleUnreadMark() { @@ -387,7 +393,9 @@ void Filler::addToggleUnreadMark() { history, !markAsRead); } - }); + }, (IsUnreadHistory(history) + ? &st::menuIconMarkRead + : &st::menuIconMarkUnread)); // #TODO icons dynamic auto actionText = history->session().changes().historyUpdates( history, @@ -410,7 +418,10 @@ void Filler::addToggleArchive() { const auto toggle = [=] { ToggleHistoryArchived(history, !isArchived()); }; - const auto archiveAction = _addAction(label(), toggle); + const auto archiveAction = _addAction( + label(), + toggle, // #TODO icons dynamic + isArchived() ? &st::menuIconUnarchive : &st::menuIconArchive); auto actionText = history->session().changes().historyUpdates( history, @@ -442,8 +453,12 @@ void Filler::addBlockUser(not_null user) { user, v::null, v::null)); - } - }); + } // #TODO icons dynamic + }, (!user->isBlocked() + ? &st::menuIconBlock + : user->isBot() + ? &st::menuIconRestartBot + : &st::menuIconUnblock)); auto actionText = _peer->session().changes().peerUpdates( _peer, @@ -463,25 +478,29 @@ void Filler::addUserActions(not_null user) { if (user->session().supportMode()) { _addAction("Edit support info", [=] { user->session().supportHelper().editInfo(controller, user); - }); + }, &st::menuIconEdit); } if (!user->isContact() && !user->isSelf() && !user->isBot()) { _addAction( tr::lng_info_add_as_contact(tr::now), - [=] { window->show(Box(EditContactBox, controller, user)); }); + [=] { window->show(Box(EditContactBox, controller, user)); }, + &st::menuIconInvite); } if (user->canShareThisContact()) { _addAction( tr::lng_info_share_contact(tr::now), - [=] { PeerMenuShareContactBox(controller, user); }); + [=] { PeerMenuShareContactBox(controller, user); }, + &st::menuIconShare); } if (user->isContact() && !user->isSelf()) { _addAction( tr::lng_info_edit_contact(tr::now), - [=] { window->show(Box(EditContactBox, controller, user)); }); + [=] { window->show(Box(EditContactBox, controller, user)); }, + &st::menuIconEdit); _addAction( tr::lng_info_delete_contact(tr::now), - [=] { PeerMenuDeleteContact(user); }); + [=] { PeerMenuDeleteContact(user); }, + &st::menuIconRemove); } if (user->isBot() && !user->isRepliesChat() @@ -489,26 +508,31 @@ void Filler::addUserActions(not_null user) { using AddBotToGroup = AddBotToGroupBoxController; _addAction( tr::lng_profile_invite_to_group(tr::now), - [=] { AddBotToGroup::Start(user); }); + [=] { AddBotToGroup::Start(user); }, + &st::menuIconInvite); } addPollAction(user); if (!user->isBot() && _request.section == Section::History) { _addAction( tr::lng_chat_theme_change(tr::now), - [=] { controller->toggleChooseChatTheme(user); }); + [=] { controller->toggleChooseChatTheme(user); }, + &st::menuIconChangeColors); } if (user->canExportChatHistory()) { _addAction( tr::lng_profile_export_chat(tr::now), - [=] { PeerMenuExportChat(user); }); + [=] { PeerMenuExportChat(user); }, + &st::menuIconExport); } } _addAction( tr::lng_profile_delete_conversation(tr::now), - DeleteAndLeaveHandler(user)); + DeleteAndLeaveHandler(user), + &st::menuIconDelete); _addAction( tr::lng_profile_clear_history(tr::now), - ClearHistoryHandler(user)); + ClearHistoryHandler(user), + &st::menuIconClear); if (!user->isInaccessible() && user != user->session().user() && !user->isRepliesChat() @@ -524,31 +548,35 @@ void Filler::addChatActions(not_null chat) { const auto text = tr::lng_manage_group_title(tr::now); _addAction(text, [=] { navigation->showEditPeerBox(chat); - }); + }, &st::menuIconManage); } if (chat->canAddMembers()) { _addAction( tr::lng_channel_add_members(tr::now), - [=] { AddChatMembers(navigation, chat); }); + [=] { AddChatMembers(navigation, chat); }, + &st::menuIconInvite); } addPollAction(chat); if (chat->canExportChatHistory()) { _addAction( tr::lng_profile_export_chat(tr::now), - [=] { PeerMenuExportChat(chat); }); + [=] { PeerMenuExportChat(chat); }, + &st::menuIconExport); } } _addAction( tr::lng_profile_clear_and_exit(tr::now), - DeleteAndLeaveHandler(_peer)); + DeleteAndLeaveHandler(_peer), + &st::menuIconDelete); _addAction( tr::lng_profile_clear_history(tr::now), - ClearHistoryHandler(_peer)); + ClearHistoryHandler(_peer), + &st::menuIconClear); if (_request.section != Section::ChatsList) { if (!chat->amCreator()) { _addAction(tr::lng_profile_report(tr::now), [=] { HistoryView::ShowReportPeerBox(navigation, chat); - }); + }, &st::menuIconReport); } } } @@ -568,7 +596,7 @@ void Filler::addChannelActions(not_null channel) { navigation->showPeerHistory( chat, Window::SectionShow::Way::Forward); - }); + }, &st::menuIconDiscussion); } } if (EditPeerInfoBox::Available(channel)) { @@ -577,14 +605,15 @@ void Filler::addChannelActions(not_null channel) { : tr::lng_manage_channel_title(tr::now); _addAction(text, [=] { navigation->showEditPeerBox(channel); - }); + }, &st::menuIconManage); } if (channel->canAddMembers()) { _addAction( (channel->isMegagroup() ? tr::lng_channel_add_members(tr::now) : tr::lng_channel_add_users(tr::now)), - [=] { PeerMenuAddChannelMembers(navigation, channel); }); + [=] { PeerMenuAddChannelMembers(navigation, channel); }, + &st::menuIconInvite); } addPollAction(channel); if (channel->canExportChatHistory()) { @@ -592,19 +621,24 @@ void Filler::addChannelActions(not_null channel) { (isGroup ? tr::lng_profile_export_chat(tr::now) : tr::lng_profile_export_channel(tr::now)), - [=] { PeerMenuExportChat(channel); }); + [=] { PeerMenuExportChat(channel); }, + &st::menuIconExport); } } if (channel->amIn()) { auto text = isGroup ? tr::lng_profile_leave_group(tr::now) : tr::lng_profile_leave_channel(tr::now); - _addAction(text, DeleteAndLeaveHandler(channel)); + _addAction( + text, + DeleteAndLeaveHandler(channel), + &st::menuIconLeave); if ((isGroup && !channel->isPublic()) || channel->canDeleteMessages()) { _addAction( tr::lng_profile_clear_history(tr::now), - ClearHistoryHandler(channel)); + ClearHistoryHandler(channel), + &st::menuIconClear); } } else { auto text = isGroup @@ -612,13 +646,14 @@ void Filler::addChannelActions(not_null channel) { : tr::lng_profile_join_channel(tr::now); _addAction( text, - [=] { channel->session().api().joinChannel(channel); }); + [=] { channel->session().api().joinChannel(channel); }, + &st::menuIconInvite); // #TODO icons } if (_request.section != Section::ChatsList) { if (!channel->amCreator()) { _addAction(tr::lng_profile_report(tr::now), [=] { HistoryView::ShowReportPeerBox(navigation, channel); - }); + }, &st::menuIconReport); } } } @@ -650,7 +685,10 @@ void Filler::addPollAction(not_null peer) { source, sendMenuType); }; - _addAction(tr::lng_polls_create(tr::now), std::move(callback)); + _addAction( + tr::lng_polls_create(tr::now), + std::move(callback), + &st::menuIconCreatePoll); } void Filler::fill() { @@ -705,7 +743,7 @@ void Filler::addTogglesForArchive() { _addAction(text, [=] { controller->session().settings().setArchiveCollapsed(!hidden); controller->session().saveSettingsDelayed(); - }); + }, hidden ? &st::menuIconExpand : &st::menuIconCollapse); _addAction(tr::lng_context_archive_to_menu(tr::now), [=] { Ui::Toast::Show(Ui::Toast::Config{ @@ -718,7 +756,7 @@ void Filler::addTogglesForArchive() { controller->session().settings().setArchiveInMainMenu( !controller->session().settings().archiveInMainMenu()); controller->session().saveSettingsDelayed(); - }); + }, &st::menuIconToMainMenu); MenuAddMarkAsReadChatListAction( [folder = _folder] { return folder->chatsList(); }, @@ -1215,7 +1253,9 @@ void PeerMenuAddMuteAction( } else { peer->owner().updateNotifySettings(peer, 0); } - }); + }, (peer->owner().notifyIsMuted(peer) + ? &st::menuIconUnmute + : &st::menuIconMute)); // #TODO icons dynamic auto actionText = Info::Profile::NotificationsEnabledValue( peer @@ -1241,7 +1281,8 @@ void MenuAddMarkAsReadAllChatsAction( }; addAction( tr::lng_context_mark_read_all(tr::now), - std::move(callback)); + std::move(callback), + &st::menuIconMarkRead); } void MenuAddMarkAsReadChatListAction( @@ -1267,7 +1308,8 @@ void MenuAddMarkAsReadChatListAction( }; addAction( tr::lng_context_mark_read(tr::now), - std::move(callback)); + std::move(callback), + &st::menuIconMarkRead); } void ToggleHistoryArchived(not_null history, bool archived) { diff --git a/Telegram/SourceFiles/window/window_peer_menu.h b/Telegram/SourceFiles/window/window_peer_menu.h index b0412fb5e..399fe64e2 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.h +++ b/Telegram/SourceFiles/window/window_peer_menu.h @@ -37,7 +37,8 @@ class SessionNavigation; using PeerMenuCallback = Fn handler)>; + Fn handler, + const style::icon *icon)>; void FillDialogsEntryMenu( not_null controller, diff --git a/Telegram/cmake/td_ui.cmake b/Telegram/cmake/td_ui.cmake index 20d23d0d7..4f04ca58b 100644 --- a/Telegram/cmake/td_ui.cmake +++ b/Telegram/cmake/td_ui.cmake @@ -14,6 +14,7 @@ include(cmake/generate_numbers.cmake) set(style_files ui/td_common.style ui/filter_icons.style + ui/menu_icons.style ui/chat/chat.style boxes/boxes.style dialogs/dialogs.style