diff options
Diffstat (limited to 'testing/toxic/main.c')
-rw-r--r-- | testing/toxic/main.c | 84 |
1 files changed, 41 insertions, 43 deletions
diff --git a/testing/toxic/main.c b/testing/toxic/main.c index 8ab2d393..a109311e 100644 --- a/testing/toxic/main.c +++ b/testing/toxic/main.c | |||
@@ -21,14 +21,9 @@ | |||
21 | 21 | ||
22 | #include "configdir.h" | 22 | #include "configdir.h" |
23 | #include "windows.h" | 23 | #include "windows.h" |
24 | #include "prompt.h" | ||
25 | #include "friendlist.h" | ||
24 | 26 | ||
25 | extern ToxWindow new_prompt(); | ||
26 | extern ToxWindow new_friendlist(); | ||
27 | |||
28 | extern int friendlist_onFriendAdded(Messenger *m, int num); | ||
29 | extern void disable_chatwin(int f_num); | ||
30 | extern int add_req(uint8_t *public_key); // XXX | ||
31 | extern unsigned char *hex_string_to_bin(char hex_string[]); | ||
32 | 27 | ||
33 | /* Holds status of chat windows */ | 28 | /* Holds status of chat windows */ |
34 | char WINDOW_STATUS[MAX_WINDOW_SLOTS]; | 29 | char WINDOW_STATUS[MAX_WINDOW_SLOTS]; |
@@ -221,12 +216,14 @@ int add_window(Messenger *m, ToxWindow w, int n) | |||
221 | windows[n] = w; | 216 | windows[n] = w; |
222 | w.onInit(&w, m); | 217 | w.onInit(&w, m); |
223 | w_num++; | 218 | w_num++; |
219 | active_window = n; | ||
224 | return n; | 220 | return n; |
225 | } | 221 | } |
226 | 222 | ||
227 | /* Deletes window w and cleans up */ | 223 | /* Deletes window w and cleans up */ |
228 | void del_window(ToxWindow *w, int f_num) | 224 | void del_window(ToxWindow *w, int f_num) |
229 | { | 225 | { |
226 | active_window = 0; // Go to prompt screen | ||
230 | delwin(w->window); | 227 | delwin(w->window); |
231 | int i; | 228 | int i; |
232 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) { | 229 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) { |
@@ -240,13 +237,48 @@ void del_window(ToxWindow *w, int f_num) | |||
240 | refresh(); | 237 | refresh(); |
241 | } | 238 | } |
242 | 239 | ||
240 | /* Shows next window when tab or back-tab is pressed */ | ||
241 | void set_active_window(int ch) | ||
242 | { | ||
243 | int f_inf = 0; | ||
244 | int max = MAX_WINDOW_SLOTS-1; | ||
245 | if (ch == '\t') { | ||
246 | int i = (active_window + 1) % max; | ||
247 | while (true) { | ||
248 | if (WINDOW_STATUS[i] != -1) { | ||
249 | active_window = i; | ||
250 | return; | ||
251 | } | ||
252 | i = (i + 1) % max; | ||
253 | if (f_inf++ > max) { // infinite loop check | ||
254 | endwin(); | ||
255 | exit(2); | ||
256 | } | ||
257 | } | ||
258 | }else { | ||
259 | int i = active_window - 1; | ||
260 | if (i < 0) i = max; | ||
261 | while (true) { | ||
262 | if (WINDOW_STATUS[i] != -1) { | ||
263 | active_window = i; | ||
264 | return; | ||
265 | } | ||
266 | if (--i < 0) i = max; | ||
267 | if (f_inf++ > max) { | ||
268 | endwin(); | ||
269 | exit(2); | ||
270 | } | ||
271 | } | ||
272 | } | ||
273 | } | ||
274 | |||
243 | static void init_windows(Messenger *m) | 275 | static void init_windows(Messenger *m) |
244 | { | 276 | { |
245 | w_num = 0; | 277 | w_num = 0; |
246 | int n_prompt = 0; | 278 | int n_prompt = 0; |
247 | int n_friendslist = 1; | 279 | int n_friendslist = 1; |
248 | if (add_window(m, new_prompt(), n_prompt) == -1 | 280 | if (add_window(m, new_prompt(on_friendadded), n_prompt) == -1 |
249 | || add_window(m, new_friendlist(), n_friendslist) == -1) { | 281 | || add_window(m, new_friendlist(del_window, set_active_window, add_window, WINDOW_STATUS), n_friendslist) == -1) { |
250 | fprintf(stderr, "add_window() failed.\n"); | 282 | fprintf(stderr, "add_window() failed.\n"); |
251 | endwin(); | 283 | endwin(); |
252 | exit(1); | 284 | exit(1); |
@@ -378,40 +410,6 @@ void prepare_window(WINDOW *w) | |||
378 | wresize(w, LINES-2, COLS); | 410 | wresize(w, LINES-2, COLS); |
379 | } | 411 | } |
380 | 412 | ||
381 | /* Shows next window when tab or back-tab is pressed */ | ||
382 | void set_active_window(int ch) | ||
383 | { | ||
384 | int f_inf = 0; | ||
385 | int max = MAX_WINDOW_SLOTS-1; | ||
386 | if (ch == '\t') { | ||
387 | int i = (active_window + 1) % max; | ||
388 | while (true) { | ||
389 | if (WINDOW_STATUS[i] != -1) { | ||
390 | active_window = i; | ||
391 | return; | ||
392 | } | ||
393 | i = (i + 1) % max; | ||
394 | if (f_inf++ > max) { // infinite loop check | ||
395 | endwin(); | ||
396 | exit(2); | ||
397 | } | ||
398 | } | ||
399 | }else { | ||
400 | int i = active_window - 1; | ||
401 | if (i < 0) i = max; | ||
402 | while (true) { | ||
403 | if (WINDOW_STATUS[i] != -1) { | ||
404 | active_window = i; | ||
405 | return; | ||
406 | } | ||
407 | if (--i < 0) i = max; | ||
408 | if (f_inf++ > max) { | ||
409 | endwin(); | ||
410 | exit(2); | ||
411 | } | ||
412 | } | ||
413 | } | ||
414 | } | ||
415 | 413 | ||
416 | int main(int argc, char *argv[]) | 414 | int main(int argc, char *argv[]) |
417 | { | 415 | { |