1
0
mirror of https://github.com/irssi/irssi.git synced 2025-01-03 14:56:47 -05:00

window_item_create(): when there's multiple choices where the window

item could be placed, the first window is now selected instead of the
last accessed one of them (which most people think of as a random
window).


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1040 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2001-01-01 14:57:55 +00:00 committed by cras
parent acf60a729c
commit 219c83ae6a
4 changed files with 26 additions and 19 deletions

View File

@ -363,6 +363,26 @@ int windows_refnum_last(void)
return max; return max;
} }
static int window_refnum_cmp(WINDOW_REC *w1, WINDOW_REC *w2)
{
return w1->refnum < w2->refnum ? -1 : 1;
}
GSList *windows_get_sorted(void)
{
GSList *tmp, *sorted;
sorted = NULL;
for (tmp = windows; tmp != NULL; tmp = tmp->next) {
WINDOW_REC *rec = tmp->data;
sorted = g_slist_insert_sorted(sorted, rec, (GCompareFunc)
window_refnum_cmp);
}
return sorted;
}
static void sig_server_looking(SERVER_REC *server) static void sig_server_looking(SERVER_REC *server)
{ {
GSList *tmp; GSList *tmp;

View File

@ -68,6 +68,8 @@ int window_refnum_prev(int refnum, int wrap);
int window_refnum_next(int refnum, int wrap); int window_refnum_next(int refnum, int wrap);
int windows_refnum_last(void); int windows_refnum_last(void);
GSList *windows_get_sorted(void);
void windows_init(void); void windows_init(void);
void windows_deinit(void); void windows_deinit(void);

View File

@ -353,23 +353,6 @@ static void cmd_window_move(const char *data, SERVER_REC *server, WI_ITEM_REC *i
} }
} }
static int windows_compare(WINDOW_REC *w1, WINDOW_REC *w2)
{
return w1->refnum < w2->refnum ? -1 : 1;
}
static GSList *windows_get_sorted(void)
{
GSList *tmp, *list;
list = NULL;
for (tmp = windows; tmp != NULL; tmp = tmp->next) {
list = g_slist_insert_sorted(list, tmp->data, (GCompareFunc) windows_compare);
}
return list;
}
/* SYNTAX: WINDOW LIST */ /* SYNTAX: WINDOW LIST */
static void cmd_window_list(void) static void cmd_window_list(void)
{ {

View File

@ -238,7 +238,7 @@ static int waiting_channels_get(WINDOW_REC *window, const char *tag)
void window_item_create(WI_ITEM_REC *item, int automatic) void window_item_create(WI_ITEM_REC *item, int automatic)
{ {
WINDOW_REC *window; WINDOW_REC *window;
GSList *tmp; GSList *tmp, *sorted;
char *str; char *str;
int clear_waiting, reuse_unused_windows; int clear_waiting, reuse_unused_windows;
@ -253,7 +253,8 @@ void window_item_create(WI_ITEM_REC *item, int automatic)
clear_waiting = TRUE; clear_waiting = TRUE;
window = NULL; window = NULL;
for (tmp = windows; tmp != NULL; tmp = tmp->next) { sorted = windows_get_sorted();
for (tmp = sorted; tmp != NULL; tmp = tmp->next) {
WINDOW_REC *rec = tmp->data; WINDOW_REC *rec = tmp->data;
if (reuse_unused_windows && if (reuse_unused_windows &&
@ -274,6 +275,7 @@ void window_item_create(WI_ITEM_REC *item, int automatic)
} }
} }
} }
g_slist_free(sorted);
g_free_not_null(str); g_free_not_null(str);
if (window == NULL && !settings_get_bool("autocreate_windows")) { if (window == NULL && !settings_get_bool("autocreate_windows")) {