equal
deleted
inserted
replaced
24 */ |
24 */ |
25 |
25 |
26 #include <mcabber/modules.h> |
26 #include <mcabber/modules.h> |
27 #include <mcabber/commands.h> |
27 #include <mcabber/commands.h> |
28 #include <mcabber/hooks.h> |
28 #include <mcabber/hooks.h> |
29 #include <mcabber/logprint.h> |
29 #include <mcabber/screen.h> |
30 |
30 |
31 static void lastmsg_init(void); |
31 static void lastmsg_init(void); |
32 static void lastmsg_uninit(void); |
32 static void lastmsg_uninit(void); |
33 |
33 |
34 /* Module description */ |
34 /* Module description */ |
54 }; |
54 }; |
55 |
55 |
56 static void do_lastmsg(char *args) |
56 static void do_lastmsg(char *args) |
57 { |
57 { |
58 GSList *li; |
58 GSList *li; |
|
59 guint count = 0; |
59 |
60 |
60 if (!lastmsg_list) { |
61 if (!lastmsg_list) { |
61 scr_log_print(LPRINT_NORMAL, "You have no new message."); |
62 scr_log_print(LPRINT_NORMAL, "You have no new message."); |
62 return; |
63 return; |
63 } |
64 } |
68 lastm_item->mucname, lastm_item->nickname, |
69 lastm_item->mucname, lastm_item->nickname, |
69 lastm_item->msg); |
70 lastm_item->msg); |
70 g_free(lastm_item->mucname); |
71 g_free(lastm_item->mucname); |
71 g_free(lastm_item->nickname); |
72 g_free(lastm_item->nickname); |
72 g_free(lastm_item->msg); |
73 g_free(lastm_item->msg); |
|
74 count++; |
73 } |
75 } |
74 g_slist_free(lastmsg_list); |
76 g_slist_free(lastmsg_list); |
75 lastmsg_list = NULL; |
77 lastmsg_list = NULL; |
|
78 if (count*2 > scr_getlogwinheight()) { |
|
79 scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE); |
|
80 scr_setattentionflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE, |
|
81 ROSTER_UI_PRIO_STATUS_WIN_MESSAGE, prio_max); |
|
82 } |
76 } |
83 } |
77 |
84 |
78 static guint last_message_hh(const gchar *hookname, hk_arg_t *args, |
85 static guint last_message_hh(const gchar *hookname, hk_arg_t *args, |
79 gpointer userdata) |
86 gpointer userdata) |
80 { |
87 { |
146 static void lastmsg_init(void) |
153 static void lastmsg_init(void) |
147 { |
154 { |
148 /* Add command */ |
155 /* Add command */ |
149 cmd_add("lastmsg", "Display last missed messages", 0, 0, do_lastmsg, NULL); |
156 cmd_add("lastmsg", "Display last missed messages", 0, 0, do_lastmsg, NULL); |
150 |
157 |
|
158 /* Add hook handlers */ |
151 last_message_hid = hk_add_handler(last_message_hh, HOOK_POST_MESSAGE_IN, |
159 last_message_hid = hk_add_handler(last_message_hh, HOOK_POST_MESSAGE_IN, |
152 G_PRIORITY_DEFAULT_IDLE, NULL); |
160 G_PRIORITY_DEFAULT_IDLE, NULL); |
153 last_status_hid = hk_add_handler(last_status_hh, HOOK_MY_STATUS_CHANGE, |
161 last_status_hid = hk_add_handler(last_status_hh, HOOK_MY_STATUS_CHANGE, |
154 G_PRIORITY_DEFAULT_IDLE, NULL); |
162 G_PRIORITY_DEFAULT_IDLE, NULL); |
155 } |
163 } |
159 { |
167 { |
160 GSList *li; |
168 GSList *li; |
161 |
169 |
162 /* Unregister command */ |
170 /* Unregister command */ |
163 cmd_del("lastmsg"); |
171 cmd_del("lastmsg"); |
|
172 /* Unregister handlers */ |
164 hk_del_handler(HOOK_POST_MESSAGE_IN, last_message_hid); |
173 hk_del_handler(HOOK_POST_MESSAGE_IN, last_message_hid); |
165 hk_del_handler(HOOK_MY_STATUS_CHANGE, last_status_hid); |
174 hk_del_handler(HOOK_MY_STATUS_CHANGE, last_status_hid); |
166 |
175 |
|
176 /* Clean up data */ |
167 for (li = lastmsg_list; li ; li = g_slist_next(li)) { |
177 for (li = lastmsg_list; li ; li = g_slist_next(li)) { |
168 struct lastm_T *lastm_item = li->data; |
178 struct lastm_T *lastm_item = li->data; |
169 g_free(lastm_item->mucname); |
179 g_free(lastm_item->mucname); |
170 g_free(lastm_item->nickname); |
180 g_free(lastm_item->nickname); |
171 g_free(lastm_item->msg); |
181 g_free(lastm_item->msg); |