static void signal_query_server_changed(QUERY_REC *query) { WINDOW_REC *window; g_return_if_fail(query != NULL); window = window_item_window((WI_ITEM_REC *) query); if (window->active == (WI_ITEM_REC *) query) window_change_server(window, query->server); }
void window_item_set_active(WINDOW_REC *window, WI_ITEM_REC *item) { g_return_if_fail(window != NULL); if (window->active != item) { window->active = item; if (item != NULL) window_change_server(window, window->active_server); signal_emit("window item changed", 2, window, item); } }
/* SYNTAX: WINDOW SERVER [-sticky | -unsticky] <tag> */ static void cmd_window_server(const char *data) { GHashTable *optlist; SERVER_REC *server; char *tag; void *free_arg; if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS, "window server", &optlist, &tag)) return; if (*tag == '\0' && active_win->active_server != NULL && (g_hash_table_lookup(optlist, "sticky") != NULL || g_hash_table_lookup(optlist, "unsticky") != NULL)) { tag = active_win->active_server->tag; } if (*tag == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); server = server_find_tag(tag); if (server == NULL) server = server_find_lookup_tag(tag); if (g_hash_table_lookup(optlist, "unsticky") != NULL && active_win->servertag != NULL) { g_free_and_null(active_win->servertag); printformat_window(active_win, MSGLEVEL_CLIENTNOTICE, TXT_UNSET_SERVER_STICKY); } if (active_win->servertag != NULL && g_hash_table_lookup(optlist, "sticky") == NULL) { printformat_window(active_win, MSGLEVEL_CLIENTERROR, TXT_ERROR_SERVER_STICKY); } else if (server == NULL) { printformat_window(active_win, MSGLEVEL_CLIENTNOTICE, TXT_UNKNOWN_SERVER_TAG, tag); } else if (active_win->active == NULL) { window_change_server(active_win, server); if (g_hash_table_lookup(optlist, "sticky") != NULL) { g_free_not_null(active_win->servertag); active_win->servertag = g_strdup(server->tag); printformat_window(active_win, MSGLEVEL_CLIENTNOTICE, TXT_SET_SERVER_STICKY, server->tag); } printformat_window(active_win, MSGLEVEL_CLIENTNOTICE, TXT_SERVER_CHANGED, server->tag, server->connrec->address, server->connrec->chatnet == NULL ? "" : server->connrec->chatnet); } cmd_params_free(free_arg); }
void window_item_change_server(WI_ITEM_REC *item, void *server) { WINDOW_REC *window; g_return_if_fail(item != NULL); window = window_item_window(item); item->server = server; signal_emit("window item server changed", 2, window, item); if (window->active == item) window_change_server(window, item->server); }
static void sig_server_disconnected(void *server) { GSList *tmp; g_return_if_fail(server != NULL); for (tmp = windows; tmp != NULL; tmp = tmp->next) { WINDOW_REC *rec = tmp->data; if (rec->active_server == server) window_change_server(rec, NULL); } }
/* SYNTAX: WINDOW NEW [hide] */ static void cmd_window_new(const char *data, void *server, WI_ITEM_REC *item) { WINDOW_REC *window; int type; g_return_if_fail(data != NULL); type = (g_ascii_strncasecmp(data, "hid", 3) == 0 || g_ascii_strcasecmp(data, "tab") == 0) ? 1 : (g_ascii_strcasecmp(data, "split") == 0 ? 2 : 0); signal_emit("gui window create override", 1, GINT_TO_POINTER(type)); window = window_create(NULL, FALSE); window_change_server(window, server); }
static void sig_server_looking(void *server) { GSList *tmp; g_return_if_fail(server != NULL); /* try to keep some server assigned to windows.. */ for (tmp = windows; tmp != NULL; tmp = tmp->next) { WINDOW_REC *rec = tmp->data; if (rec->active_server == NULL) window_change_server(rec, server); } }
/* SYNTAX: WINDOW SERVER <tag> */ static void cmd_window_server(const char *data) { SERVER_REC *server; g_return_if_fail(data != NULL); server = server_find_tag(data); if (server == NULL) printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_UNKNOWN_SERVER_TAG, data); else if (active_win->active == NULL) { window_change_server(active_win, server); printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_SERVER_CHANGED, server->tag, server->connrec->address, server->connrec->chatnet == NULL ? "" : server->connrec->chatnet); } }
static void sig_server_disconnected(SERVER_REC *server) { GSList *tmp; SERVER_REC *new_server; g_return_if_fail(server != NULL); new_server = servers == NULL ? NULL : servers->data; for (tmp = windows; tmp != NULL; tmp = tmp->next) { WINDOW_REC *rec = tmp->data; if (rec->active_server == server) window_change_server(rec, new_server); } }
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; }
static void sig_server_looking(SERVER_REC *server) { GSList *tmp; g_return_if_fail(server != NULL); /* Try to keep some server assigned to windows.. Also change active window's server if the window is empty */ for (tmp = windows; tmp != NULL; tmp = tmp->next) { WINDOW_REC *rec = tmp->data; if (rec->active_server == NULL || (rec == active_win && rec->items == NULL)) window_change_server(rec, server); } }
void window_item_set_active(WINDOW_REC *window, WI_ITEM_REC *item) { g_return_if_fail(window != NULL); if (item != NULL && window_item_window(item) != window) { /* move item to different window */ window_item_remove(item); window_item_add(window, item, FALSE); } if (window->active != item) { window->active = item; if (item != NULL && window->active_server != item->server) window_change_server(window, item->server); signal_emit("window item changed", 2, window, item); } }
static void sig_server_connected(SERVER_REC *server) { GSList *tmp; g_return_if_fail(server != NULL); /* Try to keep some server assigned to windows.. Also change active window's server if the window is empty */ for (tmp = windows; tmp != NULL; tmp = tmp->next) { WINDOW_REC *rec = tmp->data; if ((rec->servertag == NULL || g_ascii_strcasecmp(rec->servertag, server->tag) == 0) && (rec->active_server == NULL || (rec == active_win && rec->items == NULL))) window_change_server(rec, server); } }
static void cmd_window_server(const char *data) { SERVER_REC *server; g_return_if_fail(data != NULL); server = server_find_tag(data); if (irc_server_check(server) && irc_item_query(active_win->active)) { /* /WINDOW SERVER used in a query window */ query_change_server((QUERY_REC *) active_win->active, (IRC_SERVER_REC *) server); window_change_server(active_win, server); printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_QUERY_SERVER_CHANGED, server->tag, server->connrec->address, server->connrec->ircnet == NULL ? "" : server->connrec->ircnet); signal_stop(); } }