diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-02-18 18:37:25 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-02-18 18:37:25 -0500 |
commit | c5bc3455b1bfd2d643f31f66ec61f2098a4d3ba9 (patch) | |
tree | cb65ad1c5fb3a6db7ccf83abdf145b4868e02e2d | |
parent | 901028cec9a9d167e670218188449f40bbd23851 (diff) | |
download | abaddon-portaudio-c5bc3455b1bfd2d643f31f66ec61f2098a4d3ba9.tar.gz abaddon-portaudio-c5bc3455b1bfd2d643f31f66ec61f2098a4d3ba9.zip |
add menus to dm channels + close/leave dm
-rw-r--r-- | components/channels.cpp | 20 | ||||
-rw-r--r-- | components/channels.hpp | 4 | ||||
-rw-r--r-- | discord/discord.cpp | 6 | ||||
-rw-r--r-- | discord/discord.hpp | 1 |
4 files changed, 31 insertions, 0 deletions
diff --git a/components/channels.cpp b/components/channels.cpp index ee53046..453f1a2 100644 --- a/components/channels.cpp +++ b/components/channels.cpp @@ -54,6 +54,26 @@ ChannelListRowDMChannel::ChannelListRowDMChannel(const ChannelData *data) { m_lbl = Gtk::manage(new Gtk::TextView); MakeReadOnly(m_lbl); + AddWidgetMenuHandler(m_ev, m_menu); + AddWidgetMenuHandler(m_lbl, m_menu); + + m_menu_copy_id = Gtk::manage(new Gtk::MenuItem("_Copy ID", true)); + m_menu_copy_id->signal_activate().connect([this] { + Gtk::Clipboard::get()->set_text(std::to_string(ID)); + }); + + if (data->Type == ChannelType::GROUP_DM) + m_menu_close = Gtk::manage(new Gtk::MenuItem("_Leave DM", true)); + else + m_menu_close = Gtk::manage(new Gtk::MenuItem("_Close DM", true)); + m_menu_close->signal_activate().connect([this] { + Abaddon::Get().GetDiscordClient().CloseDM(ID); + }); + + m_menu.append(*m_menu_copy_id); + m_menu.append(*m_menu_close); + m_menu.show_all(); + get_style_context()->add_class("channel-row"); m_lbl->get_style_context()->add_class("channel-row-label"); diff --git a/components/channels.hpp b/components/channels.hpp index 31c494c..8515d02 100644 --- a/components/channels.hpp +++ b/components/channels.hpp @@ -44,6 +44,10 @@ protected: StatusIndicator *m_status = nullptr; Gtk::TextView *m_lbl; Gtk::Image *m_icon = nullptr; + + Gtk::Menu m_menu; + Gtk::MenuItem *m_menu_close; // leave if group + Gtk::MenuItem *m_menu_copy_id; }; class ChannelListRowGuild : public ChannelListRow { diff --git a/discord/discord.cpp b/discord/discord.cpp index 851357b..52f3125 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -436,6 +436,12 @@ void DiscordClient::CreateDM(Snowflake user_id, sigc::slot<void(bool success, Sn }); } +void DiscordClient::CloseDM(Snowflake channel_id) { + m_http.MakeDELETE("/channels/" + std::to_string(channel_id), [this](const http::response &response) { + CheckCode(response); + }); +} + std::optional<Snowflake> DiscordClient::FindDM(Snowflake user_id) { const auto &channels = m_store.GetChannels(); for (const auto &id : channels) { diff --git a/discord/discord.hpp b/discord/discord.hpp index 0e9dab7..fc03682 100644 --- a/discord/discord.hpp +++ b/discord/discord.hpp @@ -109,6 +109,7 @@ public: void UpdateStatus(PresenceStatus status, bool is_afk, const ActivityData &obj); void CreateDM(Snowflake user_id); void CreateDM(Snowflake user_id, sigc::slot<void(bool success, Snowflake channel_id)> callback); + void CloseDM(Snowflake channel_id); std::optional<Snowflake> FindDM(Snowflake user_id); // wont find group dms void AddReaction(Snowflake id, Glib::ustring param); void RemoveReaction(Snowflake id, Glib::ustring param); |