1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-01 07:16:37 +02:00

core: add signals and hsignals for nicklist events

New signals: nicklist_group_removing and nicklist_nick_removing.
New hsignals: nicklist_group_added, nicklist_nick_added, nicklist_group_removing,
nicklist_nick_removing, nicklist_group_changed, nicklist_nick_changed.
This commit is contained in:
Sebastien Helleu
2013-03-08 23:13:58 +01:00
parent fced67b459
commit 9fdeef247e
5 changed files with 231 additions and 12 deletions
+48
View File
@@ -35,6 +35,7 @@
#include "../core/weechat.h"
#include "../core/wee-config.h"
#include "../core/wee-hashtable.h"
#include "../core/wee-hdata.h"
#include "../core/wee-hook.h"
#include "../core/wee-infolist.h"
@@ -47,6 +48,9 @@
#include "gui-color.h"
struct t_hashtable *gui_nicklist_hsignal = NULL;
/*
* Sends a signal when something has changed in nicklist.
*/
@@ -79,6 +83,40 @@ gui_nicklist_send_signal (const char *signal, struct t_gui_buffer *buffer,
}
}
/*
* Sends a hsignal when something will change or has changed in nicklist.
*/
void
gui_nicklist_send_hsignal (const char *signal, struct t_gui_buffer *buffer,
struct t_gui_nick_group *group,
struct t_gui_nick *nick)
{
if (!gui_nicklist_hsignal)
{
gui_nicklist_hsignal = hashtable_new (32,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_POINTER,
NULL,
NULL);
}
if (!gui_nicklist_hsignal)
return;
hashtable_remove_all (gui_nicklist_hsignal);
hashtable_set (gui_nicklist_hsignal, "buffer", buffer);
hashtable_set (gui_nicklist_hsignal, "parent_group",
(group) ? group->parent : nick->group);
if (group)
hashtable_set (gui_nicklist_hsignal, "group", group);
if (nick)
hashtable_set (gui_nicklist_hsignal, "nick", nick);
hook_hsignal_send (signal, gui_nicklist_hsignal);
}
/*
* Searches for position of a group (to keep nicklist sorted).
*/
@@ -259,6 +297,7 @@ gui_nicklist_add_group (struct t_gui_buffer *buffer,
buffer->nicklist_visible_count++;
gui_nicklist_send_signal ("nicklist_group_added", buffer, name);
gui_nicklist_send_hsignal ("nicklist_group_added", buffer, new_group, NULL);
return new_group;
}
@@ -421,6 +460,7 @@ gui_nicklist_add_nick (struct t_gui_buffer *buffer,
gui_buffer_ask_chat_refresh (buffer, 1);
gui_nicklist_send_signal ("nicklist_nick_added", buffer, name);
gui_nicklist_send_hsignal ("nicklist_nick_added", buffer, NULL, new_nick);
return new_nick;
}
@@ -440,6 +480,9 @@ gui_nicklist_remove_nick (struct t_gui_buffer *buffer,
nick_removed = (nick->name) ? strdup (nick->name) : NULL;
gui_nicklist_send_signal ("nicklist_nick_removing", buffer, nick_removed);
gui_nicklist_send_hsignal ("nicklist_nick_removing", buffer, NULL, nick);
/* remove nick from list */
if (nick->prev_nick)
(nick->prev_nick)->next_nick = nick->next_nick;
@@ -507,6 +550,9 @@ gui_nicklist_remove_group (struct t_gui_buffer *buffer,
gui_nicklist_remove_nick (buffer, group->nicks);
}
gui_nicklist_send_signal ("nicklist_group_removing", buffer, group_removed);
gui_nicklist_send_hsignal ("nicklist_group_removing", buffer, group, NULL);
if (group->parent)
{
/* remove group from list */
@@ -855,6 +901,7 @@ gui_nicklist_group_set (struct t_gui_buffer *buffer,
{
gui_nicklist_send_signal ("nicklist_group_changed", buffer,
group->name);
gui_nicklist_send_hsignal ("nicklist_group_changed", buffer, group, NULL);
}
}
@@ -979,6 +1026,7 @@ gui_nicklist_nick_set (struct t_gui_buffer *buffer,
{
gui_nicklist_send_signal ("nicklist_nick_changed", buffer,
nick->name);
gui_nicklist_send_hsignal ("nicklist_nick_changed", buffer, NULL, nick);
}
}