mirror of
https://github.com/irssi/irssi.git
synced 2026-08-18 16:12:30 +02:00
Try to choose better the window where we print when matching by level and
multiple windows have a match. Should fix problems with query windows with a default msgs window + /SET window_check_level_first ON. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@3002 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
9b8406f335
commit
0368fa6b5b
1 changed files with 40 additions and 20 deletions
|
|
@ -268,46 +268,66 @@ const char *window_get_active_name(WINDOW_REC *window)
|
||||||
WINDOW_REC *window_find_level(void *server, int level)
|
WINDOW_REC *window_find_level(void *server, int level)
|
||||||
{
|
{
|
||||||
GSList *tmp;
|
GSList *tmp;
|
||||||
|
WINDOW_REC *match;
|
||||||
|
|
||||||
/* prefer active window if possible */
|
match = NULL;
|
||||||
if (active_win != NULL &&
|
|
||||||
WINDOW_LEVEL_MATCH(active_win, server, level))
|
|
||||||
return active_win;
|
|
||||||
|
|
||||||
for (tmp = windows; tmp != NULL; tmp = tmp->next) {
|
for (tmp = windows; tmp != NULL; tmp = tmp->next) {
|
||||||
WINDOW_REC *rec = tmp->data;
|
WINDOW_REC *rec = tmp->data;
|
||||||
|
|
||||||
if (WINDOW_LEVEL_MATCH(rec, server, level))
|
if (WINDOW_LEVEL_MATCH(rec, server, level)) {
|
||||||
return rec;
|
/* prefer windows without any items */
|
||||||
|
if (rec->items == NULL)
|
||||||
|
return rec;
|
||||||
|
|
||||||
|
if (match == NULL)
|
||||||
|
match = rec;
|
||||||
|
else if (active_win == rec) {
|
||||||
|
/* prefer active window over others */
|
||||||
|
match = rec;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
WINDOW_REC *window_find_closest(void *server, const char *name, int level)
|
WINDOW_REC *window_find_closest(void *server, const char *name, int level)
|
||||||
{
|
{
|
||||||
WINDOW_REC *window,*namewindow=NULL;
|
WINDOW_REC *window,*namewindow=NULL;
|
||||||
WI_ITEM_REC *item;
|
WI_ITEM_REC *item;
|
||||||
|
int i;
|
||||||
|
|
||||||
/* match by name */
|
/* match by name */
|
||||||
item = name == NULL ? NULL :
|
item = name == NULL ? NULL :
|
||||||
window_item_find(server, name);
|
window_item_find(server, name);
|
||||||
if (item != NULL) {
|
if (item != NULL) {
|
||||||
namewindow = window_item_window(item);
|
namewindow = window_item_window(item);
|
||||||
if (namewindow != NULL && ((namewindow->level & level) != 0 ||
|
if (namewindow != NULL &&
|
||||||
!settings_get_bool("window_check_level_first")))
|
((namewindow->level & level) != 0 ||
|
||||||
return namewindow;
|
!settings_get_bool("window_check_level_first"))) {
|
||||||
|
/* match, but if multiple windows have the same level
|
||||||
|
we could be choosing a bad one here, eg.
|
||||||
|
name=nick1 would get nick2's query instead of
|
||||||
|
generic msgs window. */
|
||||||
|
if (g_strcasecmp(name, item->visible_name) == 0)
|
||||||
|
return namewindow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* match by level */
|
/* prefer windows without items */
|
||||||
if (level != MSGLEVEL_HILIGHT)
|
for (i = 0; i < 2; i++) {
|
||||||
level &= ~(MSGLEVEL_HILIGHT | MSGLEVEL_NOHILIGHT);
|
/* match by level */
|
||||||
window = window_find_level(server, level);
|
if (level != MSGLEVEL_HILIGHT)
|
||||||
if (window != NULL) return window;
|
level &= ~(MSGLEVEL_HILIGHT | MSGLEVEL_NOHILIGHT);
|
||||||
|
window = window_find_level(server, level);
|
||||||
|
if (window != NULL && (i == 1 || window->items == NULL))
|
||||||
|
return window;
|
||||||
|
|
||||||
/* match by level - ignore server */
|
/* match by level - ignore server */
|
||||||
window = window_find_level(NULL, level);
|
window = window_find_level(NULL, level);
|
||||||
if (window != NULL) return window;
|
if (window != NULL && (i == 1 || window->items == NULL))
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
/* still return item's window if we didnt find anything */
|
/* still return item's window if we didnt find anything */
|
||||||
if (namewindow != NULL) return namewindow;
|
if (namewindow != NULL) return namewindow;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue