WINDOW_REC *window_find_closest(void *server, const char *name, int level) { WINDOW_REC *window,*namewindow=NULL; WI_ITEM_REC *item; /* match by name */ item = name == NULL ? NULL : window_item_find(server, name); if (item != NULL) { namewindow = window_item_window(item); if (namewindow != NULL && ((namewindow->level & level) != 0 || !settings_get_bool("window_check_level_first"))) return namewindow; } /* match by level */ if (level != MSGLEVEL_HILIGHT) level &= ~(MSGLEVEL_HILIGHT | MSGLEVEL_NOHILIGHT); window = window_find_level(server, level); if (window != NULL) return window; /* match by level - ignore server */ window = window_find_level(NULL, level); if (window != NULL) return window; /* still return item's window if we didnt find anything */ if (namewindow != NULL) return namewindow; /* fallback to active */ return active_win; }
WINDOW_REC *window_find_closest(void *server, const char *name, int level) { WINDOW_REC *window,*namewindow=NULL; WI_ITEM_REC *item; int i; /* match by name */ item = name == NULL ? NULL : window_item_find(server, name); if (item != NULL) { namewindow = window_item_window(item); if (namewindow != NULL && ((namewindow->level & level) != 0 || !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. And check for prefixed !channel name --Borys */ if (g_ascii_strcasecmp(name, item->visible_name) == 0 || g_ascii_strcasecmp(name, (char *) window_item_get_target((WI_ITEM_REC *) item)) == 0) return namewindow; } } /* prefer windows without items */ for (i = 0; i < 2; i++) { /* match by level */ if (level != MSGLEVEL_HILIGHT) 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 */ window = window_find_level(NULL, level); if (window != NULL && (i == 1 || window->items == NULL)) return window; } /* still return item's window if we didnt find anything */ if (namewindow != NULL) return namewindow; /* fallback to active */ return active_win; }
WINDOW_REC *window_find_closest(void *server, const char *name, int level) { WINDOW_REC *window; WI_ITEM_REC *item; /* match by name */ item = name == NULL ? NULL : window_item_find(server, name); if (item != NULL) return window_item_window(item); /* match by level */ if (level != MSGLEVEL_HILIGHT) level &= ~(MSGLEVEL_HILIGHT | MSGLEVEL_NOHILIGHT); window = window_find_level(server, level); if (window != NULL) return window; /* match by level - ignore server */ window = window_find_level(NULL, level); if (window != NULL) return window; /* fallback to active */ return active_win; }
static PyObject *PyServer_window_find_level(PyServer *self, PyObject *args, PyObject *kwds) { static char *kwlist[] = {"level", NULL}; int level = 0; WINDOW_REC *win; RET_NULL_IF_INVALID(self->data); if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &level)) return NULL; win = window_find_level(self->data, level); if (win) return pywindow_new(win); Py_RETURN_NONE; }