summaryrefslogtreecommitdiff
path: root/components/friendslist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'components/friendslist.cpp')
-rw-r--r--components/friendslist.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/components/friendslist.cpp b/components/friendslist.cpp
index 4486d97..9a8efe8 100644
--- a/components/friendslist.cpp
+++ b/components/friendslist.cpp
@@ -77,6 +77,7 @@ FriendsList::FriendsList()
FriendsListFriendRow *FriendsList::MakeRow(const UserData &user, RelationshipType type) {
auto *row = Gtk::manage(new FriendsListFriendRow(type, user));
row->signal_action_remove().connect(sigc::bind(sigc::mem_fun(*this, &FriendsList::OnActionRemove), user.ID));
+ row->signal_action_accept().connect(sigc::bind(sigc::mem_fun(*this, &FriendsList::OnActionAccept), user.ID));
return row;
}
@@ -102,6 +103,17 @@ void FriendsList::OnRelationshipRemove(Snowflake id, RelationshipType type) {
}
}
+void FriendsList::OnActionAccept(Snowflake id) {
+ const auto cb = [this](bool success, DiscordError code) {
+ if (!success) {
+ Gtk::MessageDialog dlg(*dynamic_cast<Gtk::Window *>(get_toplevel()), "Failed to accept", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ dlg.set_position(Gtk::WIN_POS_CENTER);
+ dlg.run();
+ }
+ };
+ Abaddon::Get().GetDiscordClient().PutRelationship(id, sigc::track_obj(cb, *this));
+}
+
void FriendsList::OnActionRemove(Snowflake id) {
auto &discord = Abaddon::Get().GetDiscordClient();
const auto user = discord.GetUser(id);
@@ -316,7 +328,7 @@ FriendsListFriendRow::type_signal_remove FriendsListFriendRow::signal_action_rem
}
FriendsListFriendRow::type_signal_accept FriendsListFriendRow::signal_action_accept() {
- return type_signal_accept();
+ return m_signal_accept;
}
FriendsListWindow::FriendsListWindow() {