/* SYNTAX: WINDOW GOTO active|<number>|<name> */ static void cmd_window_goto(const char *data) { WINDOW_REC *window; char *target; void *free_arg; g_return_if_fail(data != NULL); if (is_numeric(data, 0)) { cmd_window_refnum(data); return; } if (!cmd_get_params(data, &free_arg, 1, &target)) return; if (g_ascii_strcasecmp(target, "active") == 0) window = window_highest_activity(active_win); else { window = window_find_name(target); if (window == NULL && active_win->active_server != NULL) window = window_find_item_cycle(active_win->active_server, target); if (window == NULL) window = window_find_item_cycle(NULL, target); } if (window != NULL) window_set_active(window); cmd_params_free(free_arg); }
WINDOW_REC *window_find_item(WINDOW_REC *window, const char *name) { WINDOW_REC *rec; WI_ITEM_REC *item; g_return_val_if_fail(name != NULL, NULL); rec = window_find_name(name); if (rec != NULL) return rec; item = window == NULL ? NULL : window_item_find(window->active_server, name); if (item == NULL && window->active_server != NULL) { /* not found from the active server - any server? */ item = window_item_find(NULL, name); } if (item == NULL) { char *chan; /* still nothing? maybe user just left the # in front of channel, try again with it.. */ chan = g_strdup_printf("#%s", name); item = window == NULL ? NULL : window_item_find(window->active_server, chan); if (item == NULL) item = window_item_find(NULL, chan); g_free(chan); } if (item == NULL) return 0; return MODULE_DATA(item); }
static void create_windows(void) { WINDOW_REC *window; int have_status = settings_get_bool("use_status_window"); window = window_find_name("(status)"); if (have_status) { if (window == NULL) { window = window_create(NULL, TRUE); window_set_refnum(window, 1); window_set_name(window, "(status)"); window_set_level(window, MSGLEVEL_ALL ^ (settings_get_bool("use_msgs_window") ? MSGS_WINDOW_LEVELS : 0)); window_set_immortal(window, TRUE); } } else { if (window != NULL) { window_set_name(window, NULL); window_set_level(window, 0); window_set_immortal(window, FALSE); } } window = window_find_name("(msgs)"); if (settings_get_bool("use_msgs_window")) { if (window == NULL) { window = window_create(NULL, TRUE); window_set_refnum(window, have_status ? 2 : 1); window_set_name(window, "(msgs)"); window_set_level(window, MSGS_WINDOW_LEVELS); window_set_immortal(window, TRUE); } } else { if (window != NULL) { window_set_name(window, NULL); window_set_level(window, 0); window_set_immortal(window, FALSE); } } if (windows == NULL) { /* we have to have at least one window.. */ window = window_create(NULL, TRUE); } }
/* SYNTAX: WINDOW NAME <name> */ static void cmd_window_name(const char *data) { WINDOW_REC *win; win = window_find_name(data); if (win == NULL || win == active_win) window_set_name(active_win, data); else if (active_win->name == NULL || strcmp(active_win->name, data) != 0) { printformat_window(active_win, MSGLEVEL_CLIENTERROR, TXT_WINDOW_NAME_NOT_UNIQUE, data); } }
char * fe_xmpp_status_get_window_name(XMPP_SERVER_REC *server) { WINDOW_REC *window; char *name; g_return_val_if_fail(IS_XMPP_SERVER(server), NULL); if ((name = get_window_name(server)) == NULL) return NULL; window = window_find_name(name); g_free(name); return (window != NULL) ? window->name : NULL; }
WINDOW_REC * fe_xmpp_status_get_window(XMPP_SERVER_REC *server) { WINDOW_REC *window; char *name; g_return_val_if_fail(IS_XMPP_SERVER(server), NULL); name = get_window_name(server); if ((window = window_find_name(name)) == NULL) { window = window_create(NULL, TRUE); window_set_name(window, name); window_change_server(window, server); } g_free(name); return window; }
WINDOW_REC *window_find_item(SERVER_REC *server, const char *name) { WINDOW_REC *rec; WI_ITEM_REC *item; g_return_val_if_fail(name != NULL, NULL); rec = window_find_name(name); if (rec != NULL) return rec; item = server == NULL ? NULL : window_item_find(server, name); if (item == NULL) { /* not found from the active server - any server? */ item = window_item_find(NULL, name); } if (item == NULL) return NULL; return window_item_window(item); }