| File: | fe-common/core/fe-queries.c |
| Location: | line 54, column 17 |
| Description: | Dereference of null pointer. |
| 1 | /* |
| 2 | fe-queries.c : irssi |
| 3 | |
| 4 | Copyright (C) 1999-2000 Timo Sirainen |
| 5 | |
| 6 | This program is free software; you can redistribute it and/or modify |
| 7 | it under the terms of the GNU General Public License as published by |
| 8 | the Free Software Foundation; either version 2 of the License, or |
| 9 | (at your option) any later version. |
| 10 | |
| 11 | This program is distributed in the hope that it will be useful, |
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 14 | GNU General Public License for more details. |
| 15 | |
| 16 | You should have received a copy of the GNU General Public License along |
| 17 | with this program; if not, write to the Free Software Foundation, Inc., |
| 18 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 19 | */ |
| 20 | |
| 21 | #include "module.h" |
| 22 | #include "module-formats.h" |
| 23 | #include "modules.h" |
| 24 | #include "signals.h" |
| 25 | #include "commands.h" |
| 26 | #include "levels.h" |
| 27 | #include "settings.h" |
| 28 | |
| 29 | #include "chat-protocols.h" |
| 30 | #include "servers.h" |
| 31 | #include "queries.h" |
| 32 | |
| 33 | #include "fe-core-commands.h" |
| 34 | #include "fe-windows.h" |
| 35 | #include "window-items.h" |
| 36 | #include "printtext.h" |
| 37 | |
| 38 | static int queryclose_tag, query_auto_close, querycreate_level; |
| 39 | |
| 40 | /* Return query where to put the private message. */ |
| 41 | QUERY_REC *privmsg_get_query(SERVER_REC *server, const char *nick, |
| 42 | int own, int level) |
| 43 | { |
| 44 | QUERY_REC *query; |
| 45 | |
| 46 | g_return_val_if_fail(IS_SERVER(server), NULL)do{ if ((((SERVER_REC *) module_check_cast(server, __builtin_offsetof (SERVER_REC, type), "SERVER")) ? (!(0)) : (0))) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__, "IS_SERVER(server)"); return (((void *)0)); }; }while (0); |
[1] '?' condition evaluates to true | |
[2] Taking true branch | |
[3] Loop condition is false. Exiting loop | |
| 47 | g_return_val_if_fail(nick != NULL, NULL)do{ if (nick != ((void *)0)) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__, "nick != NULL"); return ( ((void *)0)); }; }while (0); |
[4] Taking true branch | |
[5] Loop condition is false. Exiting loop | |
| 48 | |
| 49 | query = query_find(server, nick); |
| 50 | if (query == NULL((void *)0) && !command_hide_output && |
[6] Taking true branch | |
| 51 | (querycreate_level & level) != 0 && |
| 52 | (!own || settings_get_bool("autocreate_own_query"))) { |
| 53 | query = CHAT_PROTOCOL(server)((server) == ((void *)0) ? chat_protocol_get_default() : chat_protocol_find_id ((server)->chat_type))-> |
[7] '?' condition evaluates to true | |
| 54 | query_create(server->tag, nick, TRUE(!(0))); |
[8] Dereference of null pointer | |
| 55 | } |
| 56 | |
| 57 | return query; |
| 58 | } |
| 59 | |
| 60 | static void signal_query_created(QUERY_REC *query, gpointer automatic) |
| 61 | { |
| 62 | TEXT_DEST_REC dest; |
| 63 | |
| 64 | g_return_if_fail(IS_QUERY(query))do{ if ((((QUERY_REC *) module_check_cast_module(query, __builtin_offsetof (QUERY_REC, type), "WINDOW ITEM TYPE", "QUERY")) ? (!(0)) : ( 0))) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__ , "IS_QUERY(query)"); return; }; }while (0); |
| 65 | |
| 66 | if (window_item_window(query)((WINDOW_REC *) ((WI_ITEM_REC *) (query))->window) == NULL((void *)0)) { |
| 67 | window_item_create((WI_ITEM_REC *) query, |
| 68 | GPOINTER_TO_INT(automatic)((gint) (automatic))); |
| 69 | } |
| 70 | |
| 71 | format_create_dest_tag(&dest, query->server, query->server_tag, |
| 72 | query->name, MSGLEVEL_CLIENTNOTICE, NULL((void *)0)); |
| 73 | printformat_dest(&dest, TXT_QUERY_START,printformat_module_dest("fe-common/core", &dest, TXT_QUERY_START , query->name, query->server_tag) |
| 74 | query->name, query->server_tag)printformat_module_dest("fe-common/core", &dest, TXT_QUERY_START , query->name, query->server_tag); |
| 75 | } |
| 76 | |
| 77 | static void signal_query_created_curwin(QUERY_REC *query) |
| 78 | { |
| 79 | g_return_if_fail(IS_QUERY(query))do{ if ((((QUERY_REC *) module_check_cast_module(query, __builtin_offsetof (QUERY_REC, type), "WINDOW ITEM TYPE", "QUERY")) ? (!(0)) : ( 0))) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__ , "IS_QUERY(query)"); return; }; }while (0); |
| 80 | |
| 81 | window_item_add(active_win, (WI_ITEM_REC *) query, FALSE(0)); |
| 82 | } |
| 83 | |
| 84 | static void signal_query_destroyed(QUERY_REC *query) |
| 85 | { |
| 86 | WINDOW_REC *window; |
| 87 | TEXT_DEST_REC dest; |
| 88 | |
| 89 | g_return_if_fail(IS_QUERY(query))do{ if ((((QUERY_REC *) module_check_cast_module(query, __builtin_offsetof (QUERY_REC, type), "WINDOW ITEM TYPE", "QUERY")) ? (!(0)) : ( 0))) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__ , "IS_QUERY(query)"); return; }; }while (0); |
| 90 | |
| 91 | window = window_item_window((WI_ITEM_REC *) query)((WINDOW_REC *) ((WI_ITEM_REC *) ((WI_ITEM_REC *) query))-> window); |
| 92 | if (window == NULL((void *)0)) |
| 93 | return; |
| 94 | |
| 95 | format_create_dest_tag(&dest, query->server, query->server_tag, |
| 96 | query->name, MSGLEVEL_CLIENTNOTICE, NULL((void *)0)); |
| 97 | printformat_dest(&dest, TXT_QUERY_STOP, query->name)printformat_module_dest("fe-common/core", &dest, TXT_QUERY_STOP , query->name); |
| 98 | |
| 99 | window_item_destroy((WI_ITEM_REC *) query); |
| 100 | |
| 101 | if (!query->unwanted) |
| 102 | window_auto_destroy(window); |
| 103 | else { |
| 104 | /* eg. connection lost to dcc chat */ |
| 105 | window_bind_add(window, query->server_tag, query->name); |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | static void signal_query_server_changed(QUERY_REC *query) |
| 110 | { |
| 111 | WINDOW_REC *window; |
| 112 | |
| 113 | g_return_if_fail(query != NULL)do{ if (query != ((void *)0)) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__, "query != NULL"); return ; }; }while (0); |
| 114 | |
| 115 | window = window_item_window((WI_ITEM_REC *) query)((WINDOW_REC *) ((WI_ITEM_REC *) ((WI_ITEM_REC *) query))-> window); |
| 116 | if (window->active == (WI_ITEM_REC *) query) |
| 117 | window_change_server(window, query->server); |
| 118 | } |
| 119 | |
| 120 | static void signal_query_nick_changed(QUERY_REC *query, const char *oldnick) |
| 121 | { |
| 122 | TEXT_DEST_REC dest; |
| 123 | |
| 124 | g_return_if_fail(query != NULL)do{ if (query != ((void *)0)) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__, "query != NULL"); return ; }; }while (0); |
| 125 | |
| 126 | format_create_dest_tag(&dest, query->server, query->server_tag, |
| 127 | query->name, MSGLEVEL_NICKS, NULL((void *)0)); |
| 128 | |
| 129 | /* don't print the nick change message if only the case was changed */ |
| 130 | if (g_strcasecmp(query->name, oldnick) != 0) { |
| 131 | printformat_dest(&dest, TXT_NICK_CHANGED, oldnick,printformat_module_dest("fe-common/core", &dest, TXT_NICK_CHANGED , oldnick, query->name, query->name, query->address == ((void *)0) ? "" : query->address) |
| 132 | query->name, query->name,printformat_module_dest("fe-common/core", &dest, TXT_NICK_CHANGED , oldnick, query->name, query->name, query->address == ((void *)0) ? "" : query->address) |
| 133 | query->address == NULL ? "" : query->address)printformat_module_dest("fe-common/core", &dest, TXT_NICK_CHANGED , oldnick, query->name, query->name, query->address == ((void *)0) ? "" : query->address); |
| 134 | } |
| 135 | |
| 136 | signal_emit("window item changed", 2, |
| 137 | window_item_window((WI_ITEM_REC *) query)((WINDOW_REC *) ((WI_ITEM_REC *) ((WI_ITEM_REC *) query))-> window), query); |
| 138 | } |
| 139 | |
| 140 | static void signal_window_item_server_changed(WINDOW_REC *window, |
| 141 | QUERY_REC *query) |
| 142 | { |
| 143 | if (IS_QUERY(query)(((QUERY_REC *) module_check_cast_module(query, __builtin_offsetof (QUERY_REC, type), "WINDOW ITEM TYPE", "QUERY")) ? (!(0)) : ( 0))) { |
| 144 | g_free_and_null(query->server_tag)do { if (query->server_tag) { g_free(query->server_tag) ; (query->server_tag) = ((void *)0); } } while (0); |
| 145 | if (query->server != NULL((void *)0)) |
| 146 | query->server_tag = g_strdup(query->server->tag); |
| 147 | } |
| 148 | } |
| 149 | |
| 150 | static void sig_server_connected(SERVER_REC *server) |
| 151 | { |
| 152 | GSList *tmp; |
| 153 | |
| 154 | if (!IS_SERVER(server)(((SERVER_REC *) module_check_cast(server, __builtin_offsetof (SERVER_REC, type), "SERVER")) ? (!(0)) : (0))) |
| 155 | return; |
| 156 | |
| 157 | /* check if there's any queries without server */ |
| 158 | for (tmp = queries; tmp != NULL((void *)0); tmp = tmp->next) { |
| 159 | QUERY_REC *rec = tmp->data; |
| 160 | |
| 161 | if (rec->server == NULL((void *)0) && |
| 162 | (rec->server_tag == NULL((void *)0) || |
| 163 | g_strcasecmp(rec->server_tag, server->tag) == 0)) { |
| 164 | window_item_change_server((WI_ITEM_REC *) rec, server); |
| 165 | server->queries = g_slist_append(server->queries, rec); |
| 166 | } |
| 167 | } |
| 168 | } |
| 169 | |
| 170 | static void cmd_window_server(const char *data) |
| 171 | { |
| 172 | SERVER_REC *server; |
| 173 | QUERY_REC *query; |
| 174 | TEXT_DEST_REC dest; |
| 175 | |
| 176 | g_return_if_fail(data != NULL)do{ if (data != ((void *)0)) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__, "data != NULL"); return; }; }while (0); |
| 177 | |
| 178 | server = server_find_tag(data); |
| 179 | query = QUERY(active_win->active)((QUERY_REC *) module_check_cast_module(active_win->active , __builtin_offsetof(QUERY_REC, type), "WINDOW ITEM TYPE", "QUERY" )); |
| 180 | if (server == NULL((void *)0) || query == NULL((void *)0)) |
| 181 | return; |
| 182 | |
| 183 | /* /WINDOW SERVER used in a query window */ |
| 184 | format_create_dest_tag(&dest, query->server, query->server_tag, |
| 185 | query->name, MSGLEVEL_CLIENTNOTICE, NULL((void *)0)); |
| 186 | printformat_dest(&dest, TXT_QUERY_SERVER_CHANGED,printformat_module_dest("fe-common/core", &dest, TXT_QUERY_SERVER_CHANGED , query->name, server->tag) |
| 187 | query->name, server->tag)printformat_module_dest("fe-common/core", &dest, TXT_QUERY_SERVER_CHANGED , query->name, server->tag); |
| 188 | |
| 189 | query_change_server(query, server); |
| 190 | signal_stop(); |
| 191 | } |
| 192 | |
| 193 | /* SYNTAX: UNQUERY [<nick>] */ |
| 194 | static void cmd_unquery(const char *data, SERVER_REC *server, WI_ITEM_REC *item) |
| 195 | { |
| 196 | QUERY_REC *query; |
| 197 | char *nick; |
| 198 | void *free_arg; |
| 199 | |
| 200 | g_return_if_fail(data != NULL)do{ if (data != ((void *)0)) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__, "data != NULL"); return; }; }while (0); |
| 201 | |
| 202 | if (!cmd_get_params(data, &free_arg, 1, &nick)) |
| 203 | return; |
| 204 | |
| 205 | if (*nick == '\0') { |
| 206 | /* remove current query */ |
| 207 | query = QUERY(item)((QUERY_REC *) module_check_cast_module(item, __builtin_offsetof (QUERY_REC, type), "WINDOW ITEM TYPE", "QUERY")); |
| 208 | } else { |
| 209 | query = query_find(server, nick); |
| 210 | if (query == NULL((void *)0)) { |
| 211 | printformat(server, NULL, MSGLEVEL_CLIENTERROR,printformat_module("fe-common/core", server, ((void *)0), MSGLEVEL_CLIENTERROR , TXT_NO_QUERY, nick) |
| 212 | TXT_NO_QUERY, nick)printformat_module("fe-common/core", server, ((void *)0), MSGLEVEL_CLIENTERROR , TXT_NO_QUERY, nick); |
| 213 | } |
| 214 | } |
| 215 | |
| 216 | if (query != NULL((void *)0)) |
| 217 | query_destroy(query); |
| 218 | |
| 219 | cmd_params_free(free_arg); |
| 220 | } |
| 221 | |
| 222 | /* SYNTAX: QUERY [-window] [-<server tag>] <nick> [<message>] */ |
| 223 | static void cmd_query(const char *data, SERVER_REC *server, WI_ITEM_REC *item) |
| 224 | { |
| 225 | GHashTable *optlist; |
| 226 | QUERY_REC *query; |
| 227 | char *nick, *msg; |
| 228 | void *free_arg; |
| 229 | |
| 230 | g_return_if_fail(data != NULL)do{ if (data != ((void *)0)) { } else { g_return_if_fail_warning (((gchar*) 0), __PRETTY_FUNCTION__, "data != NULL"); return; }; }while (0); |
| 231 | |
| 232 | if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST0x00002000 | |
| 233 | PARAM_FLAG_OPTIONS0x00004000 | PARAM_FLAG_UNKNOWN_OPTIONS0x00008000, |
| 234 | "query", &optlist, &nick, &msg)) |
| 235 | return; |
| 236 | |
| 237 | if (*nick == '\0') { |
| 238 | /* remove current query */ |
| 239 | cmd_unquery("", server, item); |
| 240 | cmd_params_free(free_arg); |
| 241 | return; |
| 242 | } |
| 243 | |
| 244 | server = cmd_options_get_server("query", optlist, server); |
| 245 | if (server == NULL((void *)0)) { |
| 246 | cmd_params_free(free_arg); |
| 247 | return; |
| 248 | } |
| 249 | |
| 250 | if (*nick != '=' && (server == NULL((void *)0) || !server->connected)) |
| 251 | cmd_param_error(CMDERR_NOT_CONNECTED)do { cmd_params_free(free_arg); do { signal_emit("error command" , 1, ((gpointer) (CMDERR_NOT_CONNECTED))); signal_stop(); return ; } while (0); } while (0); |
| 252 | |
| 253 | if (g_hash_table_lookup(optlist, "window") != NULL((void *)0)) { |
| 254 | signal_add("query created",signal_add_full("fe-common/core", 0, ("query created"), (SIGNAL_FUNC ) ((SIGNAL_FUNC) signal_query_created_curwin), ((void *)0)) |
| 255 | (SIGNAL_FUNC) signal_query_created_curwin)signal_add_full("fe-common/core", 0, ("query created"), (SIGNAL_FUNC ) ((SIGNAL_FUNC) signal_query_created_curwin), ((void *)0)); |
| 256 | } |
| 257 | |
| 258 | query = query_find(server, nick); |
| 259 | if (query == NULL((void *)0)) |
| 260 | query = CHAT_PROTOCOL(server)((server) == ((void *)0) ? chat_protocol_get_default() : chat_protocol_find_id ((server)->chat_type))-> |
| 261 | query_create(server->tag, nick, FALSE(0)); |
| 262 | else { |
| 263 | /* query already exists, set it active */ |
| 264 | WINDOW_REC *window = window_item_window(query)((WINDOW_REC *) ((WI_ITEM_REC *) (query))->window); |
| 265 | |
| 266 | if (window != active_win) |
| 267 | window_set_active(window); |
| 268 | window_item_set_active(active_win, (WI_ITEM_REC *) query); |
| 269 | } |
| 270 | |
| 271 | if (g_hash_table_lookup(optlist, "window") != NULL((void *)0)) { |
| 272 | signal_remove("query created",signal_remove_full(("query created"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) signal_query_created_curwin), ((void *)0)) |
| 273 | (SIGNAL_FUNC) signal_query_created_curwin)signal_remove_full(("query created"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) signal_query_created_curwin), ((void *)0)); |
| 274 | } |
| 275 | |
| 276 | if (*msg != '\0') { |
| 277 | msg = g_strdup_printf("-nick %s %s", nick, msg); |
| 278 | signal_emit("command msg", 3, msg, server, query); |
| 279 | g_free(msg); |
| 280 | } |
| 281 | |
| 282 | cmd_params_free(free_arg); |
| 283 | } |
| 284 | |
| 285 | static void window_reset_query_timestamps(WINDOW_REC *window) |
| 286 | { |
| 287 | GSList *tmp; |
| 288 | |
| 289 | if (window == NULL((void *)0)) |
| 290 | return; |
| 291 | |
| 292 | for (tmp = window->items; tmp != NULL((void *)0); tmp = tmp->next) { |
| 293 | QUERY_REC *query = QUERY(tmp->data)((QUERY_REC *) module_check_cast_module(tmp->data, __builtin_offsetof (QUERY_REC, type), "WINDOW ITEM TYPE", "QUERY")); |
| 294 | |
| 295 | if (query != NULL((void *)0)) |
| 296 | query->last_unread_msg = time(NULL((void *)0)); |
| 297 | } |
| 298 | } |
| 299 | |
| 300 | static void sig_window_changed(WINDOW_REC *window, WINDOW_REC *old_window) |
| 301 | { |
| 302 | /* reset the queries last_unread_msg so query doesn't get closed |
| 303 | immediately after switched to the window, or after changed to |
| 304 | some other window from it */ |
| 305 | window_reset_query_timestamps(window); |
| 306 | window_reset_query_timestamps(old_window); |
| 307 | } |
| 308 | |
| 309 | static int sig_query_autoclose(void) |
| 310 | { |
| 311 | WINDOW_REC *window; |
| 312 | GSList *tmp, *next; |
| 313 | time_t now; |
| 314 | |
| 315 | now = time(NULL((void *)0)); |
| 316 | for (tmp = queries; tmp != NULL((void *)0); tmp = next) { |
| 317 | QUERY_REC *rec = tmp->data; |
| 318 | |
| 319 | next = tmp->next; |
| 320 | window = window_item_window((WI_ITEM_REC *) rec)((WINDOW_REC *) ((WI_ITEM_REC *) ((WI_ITEM_REC *) rec))->window ); |
| 321 | if (window != active_win && rec->data_level < DATA_LEVEL_MSG && |
| 322 | now-rec->last_unread_msg > query_auto_close) |
| 323 | query_destroy(rec); |
| 324 | } |
| 325 | return 1; |
| 326 | } |
| 327 | |
| 328 | static void sig_message_private(SERVER_REC *server, const char *msg, |
| 329 | const char *nick, const char *address) |
| 330 | { |
| 331 | QUERY_REC *query; |
| 332 | |
| 333 | /* create query window if needed */ |
| 334 | query = privmsg_get_query(server, nick, FALSE(0), MSGLEVEL_MSGS); |
| 335 | |
| 336 | /* reset the query's last_unread_msg timestamp */ |
| 337 | if (query != NULL((void *)0)) |
| 338 | query->last_unread_msg = time(NULL((void *)0)); |
| 339 | } |
| 340 | |
| 341 | static void read_settings(void) |
| 342 | { |
| 343 | querycreate_level = settings_get_level("autocreate_query_level"); |
| 344 | query_auto_close = settings_get_time("autoclose_query")/1000; |
| 345 | if (query_auto_close > 0 && queryclose_tag == -1) |
| 346 | queryclose_tag = g_timeout_add(5000, (GSourceFunc) sig_query_autoclose, NULL((void *)0)); |
| 347 | else if (query_auto_close <= 0 && queryclose_tag != -1) { |
| 348 | g_source_remove(queryclose_tag); |
| 349 | queryclose_tag = -1; |
| 350 | } |
| 351 | } |
| 352 | |
| 353 | void fe_queries_init(void) |
| 354 | { |
| 355 | settings_add_level("lookandfeel", "autocreate_query_level", "MSGS DCCMSGS")settings_add_level_module("fe-common/core", "lookandfeel", "autocreate_query_level" , "MSGS DCCMSGS"); |
| 356 | settings_add_bool("lookandfeel", "autocreate_own_query", TRUE)settings_add_bool_module("fe-common/core", "lookandfeel", "autocreate_own_query" , (!(0))); |
| 357 | settings_add_time("lookandfeel", "autoclose_query", "0")settings_add_time_module("fe-common/core", "lookandfeel", "autoclose_query" , "0"); |
| 358 | |
| 359 | queryclose_tag = -1; |
| 360 | read_settings(); |
| 361 | |
| 362 | signal_add("query created", (SIGNAL_FUNC) signal_query_created)signal_add_full("fe-common/core", 0, ("query created"), (SIGNAL_FUNC ) ((SIGNAL_FUNC) signal_query_created), ((void *)0)); |
| 363 | signal_add("query destroyed", (SIGNAL_FUNC) signal_query_destroyed)signal_add_full("fe-common/core", 0, ("query destroyed"), (SIGNAL_FUNC ) ((SIGNAL_FUNC) signal_query_destroyed), ((void *)0)); |
| 364 | signal_add("query server changed", (SIGNAL_FUNC) signal_query_server_changed)signal_add_full("fe-common/core", 0, ("query server changed") , (SIGNAL_FUNC) ((SIGNAL_FUNC) signal_query_server_changed), ( (void *)0)); |
| 365 | signal_add("query nick changed", (SIGNAL_FUNC) signal_query_nick_changed)signal_add_full("fe-common/core", 0, ("query nick changed"), ( SIGNAL_FUNC) ((SIGNAL_FUNC) signal_query_nick_changed), ((void *)0)); |
| 366 | signal_add("window item server changed", (SIGNAL_FUNC) signal_window_item_server_changed)signal_add_full("fe-common/core", 0, ("window item server changed" ), (SIGNAL_FUNC) ((SIGNAL_FUNC) signal_window_item_server_changed ), ((void *)0)); |
| 367 | signal_add("server connected", (SIGNAL_FUNC) sig_server_connected)signal_add_full("fe-common/core", 0, ("server connected"), (SIGNAL_FUNC ) ((SIGNAL_FUNC) sig_server_connected), ((void *)0)); |
| 368 | signal_add("window changed", (SIGNAL_FUNC) sig_window_changed)signal_add_full("fe-common/core", 0, ("window changed"), (SIGNAL_FUNC ) ((SIGNAL_FUNC) sig_window_changed), ((void *)0)); |
| 369 | signal_add_first("message private", (SIGNAL_FUNC) sig_message_private)signal_add_full("fe-common/core", -100, ("message private"), ( SIGNAL_FUNC) ((SIGNAL_FUNC) sig_message_private), ((void *)0) ); |
| 370 | signal_add("setup changed", (SIGNAL_FUNC) read_settings)signal_add_full("fe-common/core", 0, ("setup changed"), (SIGNAL_FUNC ) ((SIGNAL_FUNC) read_settings), ((void *)0)); |
| 371 | |
| 372 | command_bind("query", NULL, (SIGNAL_FUNC) cmd_query)command_bind_full("fe-common/core", 0, "query", -1, ((void *) 0), (SIGNAL_FUNC) cmd_query, ((void *)0)); |
| 373 | command_bind("unquery", NULL, (SIGNAL_FUNC) cmd_unquery)command_bind_full("fe-common/core", 0, "unquery", -1, ((void * )0), (SIGNAL_FUNC) cmd_unquery, ((void *)0)); |
| 374 | command_bind("window server", NULL, (SIGNAL_FUNC) cmd_window_server)command_bind_full("fe-common/core", 0, "window server", -1, ( (void *)0), (SIGNAL_FUNC) cmd_window_server, ((void *)0)); |
| 375 | |
| 376 | command_set_options("query", "window")command_set_options_module("fe-common/core", "query", "window" ); |
| 377 | } |
| 378 | |
| 379 | void fe_queries_deinit(void) |
| 380 | { |
| 381 | if (queryclose_tag != -1) g_source_remove(queryclose_tag); |
| 382 | |
| 383 | signal_remove("query created", (SIGNAL_FUNC) signal_query_created)signal_remove_full(("query created"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) signal_query_created), ((void *)0)); |
| 384 | signal_remove("query destroyed", (SIGNAL_FUNC) signal_query_destroyed)signal_remove_full(("query destroyed"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) signal_query_destroyed), ((void *)0)); |
| 385 | signal_remove("query server changed", (SIGNAL_FUNC) signal_query_server_changed)signal_remove_full(("query server changed"), (SIGNAL_FUNC) (( SIGNAL_FUNC) signal_query_server_changed), ((void *)0)); |
| 386 | signal_remove("query nick changed", (SIGNAL_FUNC) signal_query_nick_changed)signal_remove_full(("query nick changed"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) signal_query_nick_changed), ((void *)0)); |
| 387 | signal_remove("window item server changed", (SIGNAL_FUNC) signal_window_item_server_changed)signal_remove_full(("window item server changed"), (SIGNAL_FUNC ) ((SIGNAL_FUNC) signal_window_item_server_changed), ((void * )0)); |
| 388 | signal_remove("server connected", (SIGNAL_FUNC) sig_server_connected)signal_remove_full(("server connected"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) sig_server_connected), ((void *)0)); |
| 389 | signal_remove("window changed", (SIGNAL_FUNC) sig_window_changed)signal_remove_full(("window changed"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) sig_window_changed), ((void *)0)); |
| 390 | signal_remove("message private", (SIGNAL_FUNC) sig_message_private)signal_remove_full(("message private"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) sig_message_private), ((void *)0)); |
| 391 | signal_remove("setup changed", (SIGNAL_FUNC) read_settings)signal_remove_full(("setup changed"), (SIGNAL_FUNC) ((SIGNAL_FUNC ) read_settings), ((void *)0)); |
| 392 | |
| 393 | command_unbind("query", (SIGNAL_FUNC) cmd_query)command_unbind_full("query", (SIGNAL_FUNC) cmd_query, ((void * )0)); |
| 394 | command_unbind("unquery", (SIGNAL_FUNC) cmd_unquery)command_unbind_full("unquery", (SIGNAL_FUNC) cmd_unquery, ((void *)0)); |
| 395 | command_unbind("window server", (SIGNAL_FUNC) cmd_window_server)command_unbind_full("window server", (SIGNAL_FUNC) cmd_window_server , ((void *)0)); |
| 396 | } |