1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Only allow swapping active windows

This commit is contained in:
James Booth 2018-03-09 22:59:38 +00:00
parent 136b975b6c
commit e96af8537c
3 changed files with 26 additions and 17 deletions

View File

@ -1269,21 +1269,34 @@ cmd_wins_swap(ProfWin *window, const char *const command, gchar **args)
int source_win = atoi(args[1]); int source_win = atoi(args[1]);
int target_win = atoi(args[2]); int target_win = atoi(args[2]);
if ((source_win == 1) || (target_win == 1)) { if ((source_win == 1) || (target_win == 1)) {
cons_show("Cannot move console window."); cons_show("Cannot move console window.");
} else if (source_win == 10 || target_win == 10) { return TRUE;
cons_show("Window 10 does not exist");
} else if (source_win != target_win) {
gboolean swapped = wins_swap(source_win, target_win);
if (swapped) {
cons_show("Swapped windows %d <-> %d", source_win, target_win);
} else {
cons_show("Window %d does not exist", source_win);
}
} else {
cons_show("Same source and target window supplied.");
} }
if (source_win == 10 || target_win == 10) {
cons_show("Window 10 does not exist");
return TRUE;
}
if (source_win == target_win) {
cons_show("Same source and target window supplied.");
return TRUE;
}
if (wins_get_by_num(source_win) == NULL) {
cons_show("Window %d does not exist", source_win);
return TRUE;
}
if (wins_get_by_num(target_win) == NULL) {
cons_show("Window %d does not exist", target_win);
return TRUE;
}
wins_swap(source_win, target_win);
cons_show("Swapped windows %d <-> %d", source_win, target_win);
return TRUE; return TRUE;
} }

View File

@ -844,7 +844,7 @@ wins_lost_connection(void)
g_list_free(values); g_list_free(values);
} }
gboolean void
wins_swap(int source_win, int target_win) wins_swap(int source_win, int target_win)
{ {
ProfWin *source = g_hash_table_lookup(windows, GINT_TO_POINTER(source_win)); ProfWin *source = g_hash_table_lookup(windows, GINT_TO_POINTER(source_win));
@ -869,7 +869,6 @@ wins_swap(int source_win, int target_win)
wins_set_current_by_num(target_win); wins_set_current_by_num(target_win);
ui_focus_win(console); ui_focus_win(console);
} }
return TRUE;
// target window occupied // target window occupied
} else { } else {
@ -894,10 +893,7 @@ wins_swap(int source_win, int target_win)
if ((wins_get_current_num() == source_win) || (wins_get_current_num() == target_win)) { if ((wins_get_current_num() == source_win) || (wins_get_current_num() == target_win)) {
ui_focus_win(console); ui_focus_win(console);
} }
return TRUE;
} }
} else {
return FALSE;
} }
} }

View File

@ -87,7 +87,7 @@ gboolean wins_tidy(void);
GSList* wins_create_summary(gboolean unread); GSList* wins_create_summary(gboolean unread);
void wins_destroy(void); void wins_destroy(void);
GList* wins_get_nums(void); GList* wins_get_nums(void);
gboolean wins_swap(int source_win, int target_win); void wins_swap(int source_win, int target_win);
void wins_hide_subwin(ProfWin *window); void wins_hide_subwin(ProfWin *window);
void wins_show_subwin(ProfWin *window); void wins_show_subwin(ProfWin *window);