lastmsg/lastmsg.c
changeset 26 a15aa7a218ec
parent 18 fb84350decc5
child 37 a05815df848c
equal deleted inserted replaced
25:a98004eb58cd 26:a15aa7a218ec
    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);