summaryrefslogtreecommitdiff
path: root/components/memberlist.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2020-11-08 00:44:26 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2020-11-08 00:44:26 -0500
commitf124626a6dcecf928be90193b2faf8e265ba502b (patch)
treeca8a04dbfa7eca331440312f72f955ff3ed3069a /components/memberlist.cpp
parent0c442a423eaebe04a61decc91d7018c33e3fdbde (diff)
downloadabaddon-portaudio-f124626a6dcecf928be90193b2faf8e265ba502b.tar.gz
abaddon-portaudio-f124626a6dcecf928be90193b2faf8e265ba502b.zip
allow multiple components to display shared user menu
Diffstat (limited to 'components/memberlist.cpp')
-rw-r--r--components/memberlist.cpp65
1 files changed, 3 insertions, 62 deletions
diff --git a/components/memberlist.cpp b/components/memberlist.cpp
index fc317e7..5578e17 100644
--- a/components/memberlist.cpp
+++ b/components/memberlist.cpp
@@ -56,24 +56,6 @@ MemberList::MemberList() {
m_listbox->set_selection_mode(Gtk::SELECTION_NONE);
- m_menu_copy_id = Gtk::manage(new Gtk::MenuItem("_Copy ID", true));
- m_menu_copy_id->signal_activate().connect(sigc::mem_fun(*this, &MemberList::on_copy_id_activate));
- m_menu.append(*m_menu_copy_id);
-
- m_menu_insert_mention = Gtk::manage(new Gtk::MenuItem("Insert _Mention", true));
- m_menu_insert_mention->signal_activate().connect(sigc::mem_fun(*this, &MemberList::on_insert_mention_activate));
- m_menu.append(*m_menu_insert_mention);
-
- m_menu_kick = Gtk::manage(new Gtk::MenuItem("_Kick User", true));
- m_menu_kick->signal_activate().connect(sigc::mem_fun(*this, &MemberList::on_kick_activate));
- m_menu.append(*m_menu_kick);
-
- m_menu_ban = Gtk::manage(new Gtk::MenuItem("_Ban User", true));
- m_menu_ban->signal_activate().connect(sigc::mem_fun(*this, &MemberList::on_ban_activate));
- m_menu.append(*m_menu_ban);
-
- m_menu.show_all();
-
m_main->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
m_main->add(*m_listbox);
m_main->show_all();
@@ -229,43 +211,10 @@ void MemberList::UpdateMemberListInternal() {
}
}
-void MemberList::on_copy_id_activate() {
- auto *row = dynamic_cast<MemberListUserRow *>(m_row_menu_target);
- if (row == nullptr) return;
- Gtk::Clipboard::get()->set_text(std::to_string(row->ID));
-}
-
-void MemberList::on_insert_mention_activate() {
- auto *row = dynamic_cast<MemberListUserRow *>(m_row_menu_target);
- if (row == nullptr) return;
- m_signal_action_insert_mention.emit(row->ID);
-}
-
-void MemberList::on_kick_activate() {
- auto *row = dynamic_cast<MemberListUserRow *>(m_row_menu_target);
- if (row == nullptr) return;
- m_signal_action_kick.emit(row->ID, m_guild_id);
-}
-
-void MemberList::on_ban_activate() {
- auto *row = dynamic_cast<MemberListUserRow *>(m_row_menu_target);
- if (row == nullptr) return;
- m_signal_action_ban.emit(row->ID, m_guild_id);
-}
-
void MemberList::AttachUserMenuHandler(Gtk::ListBoxRow *row, Snowflake id) {
row->signal_button_press_event().connect([this, row, id](GdkEventButton *e) -> bool {
if (e->type == GDK_BUTTON_PRESS && e->button == GDK_BUTTON_SECONDARY) {
- const auto &discord = Abaddon::Get().GetDiscordClient();
- const auto me = discord.GetUserData().ID;
- const bool has_kick = discord.HasGuildPermission(me, m_guild_id, Permission::KICK_MEMBERS);
- const bool has_ban = discord.HasGuildPermission(me, m_guild_id, Permission::BAN_MEMBERS);
- const bool can_manage = discord.CanManageMember(m_chan_id, discord.GetUserData().ID, id);
-
- m_row_menu_target = row;
- m_menu_kick->set_sensitive(has_kick && can_manage);
- m_menu_ban->set_sensitive(has_ban && can_manage);
- m_menu.popup_at_pointer(reinterpret_cast<const GdkEvent *>(e));
+ m_signal_action_show_user_menu.emit(reinterpret_cast<const GdkEvent *>(e), id, m_guild_id);
return true;
}
@@ -273,14 +222,6 @@ void MemberList::AttachUserMenuHandler(Gtk::ListBoxRow *row, Snowflake id) {
});
}
-MemberList::type_signal_action_insert_mention MemberList::signal_action_insert_mention() {
- return m_signal_action_insert_mention;
-}
-
-MemberList::type_signal_action_kick MemberList::signal_action_kick() {
- return m_signal_action_kick;
-}
-
-MemberList::type_signal_action_ban MemberList::signal_action_ban() {
- return m_signal_action_ban;
+MemberList::type_signal_action_show_user_menu MemberList::signal_action_show_user_menu() {
+ return m_signal_action_show_user_menu;
}