diff --git a/src/friendlist.c b/src/friendlist.c index 7ccc0c0..71d6bb2 100644 --- a/src/friendlist.c +++ b/src/friendlist.c @@ -450,11 +450,20 @@ static void select_friend(ToxWindow *self, wint_t key, int *selected, int num) static void delete_friend(Tox *m, int32_t f_num) { + int i; + + if (friends[f_num].chatwin >= 0) { + ToxWindow *toxwin = get_window_ptr(friends[f_num].chatwin); + + if (toxwin != NULL) { + kill_chat_window(toxwin); + set_active_window(1); /* keep friendlist focused */ + } + } + tox_del_friend(m, f_num); memset(&friends[f_num], 0, sizeof(ToxicFriend)); - int i; - for (i = max_friends_index; i > 0; --i) { if (friends[i - 1].active) break; diff --git a/src/windows.c b/src/windows.c index 295d5c4..64c3155 100644 --- a/src/windows.c +++ b/src/windows.c @@ -480,6 +480,17 @@ void refresh_inactive_windows(void) } } +/* returns a pointer to the ToxWindow in the ith index. Returns NULL if no ToxWindow exists */ +ToxWindow *get_window_ptr(int i) +{ + ToxWindow *toxwin = NULL; + + if (windows[i].active) + toxwin = &windows[i]; + + return toxwin; +} + int get_num_active_windows(void) { return num_active_windows; diff --git a/src/windows.h b/src/windows.h index 7522431..109eb78 100644 --- a/src/windows.h +++ b/src/windows.h @@ -225,6 +225,7 @@ void set_active_window(int ch); int get_num_active_windows(void); void kill_all_windows(void); /* should only be called on shutdown */ void on_window_resize(void); +ToxWindow *get_window_ptr(int i); /* refresh inactive windows to prevent scrolling bugs. call at least once per second */