# HG changeset patch # User mikael # Date 1111609568 0 # Node ID 4c3d7b8a29c4f5f16ddfa47d08b1fb9d06af8ed1 # Parent 70ca5b9c648a111e7e059774a65e91f5225abdaa [/trunk] Changeset 28 by mikael * Display pending message indicator in the roaster. Not very good yet, because it isn't refreshed automatically. diff -r 70ca5b9c648a -r 4c3d7b8a29c4 mcabber/buddies.c --- a/mcabber/buddies.c Mon Mar 21 22:24:17 2005 +0000 +++ b/mcabber/buddies.c Wed Mar 23 20:26:08 2005 +0000 @@ -18,6 +18,7 @@ static LIST_HEAD(buddy_list); static LIST_HEAD(sorted_buddies); + #define buddy_entry(n) list_entry(n, buddy_entry_t, list) @@ -49,7 +50,6 @@ sprintf(buffer, "--> %s %s!", jidfrom, i18n("connected")); break; } - //scr_WriteInWindow(i18n("status window"), buffer, TRUE); scr_LogPrint("%s", buffer); } free(buffer); @@ -217,6 +217,7 @@ int n; int maxx, maxy; int fakeOffset = buddyOffset; + window_entry_t *wintmp; getmaxyx(win, maxy, maxx); @@ -233,6 +234,7 @@ list_for_each_safe(pos, nn, &buddy_list) { char status = '?'; + char pending = ' '; if (fakeOffset > 0) { fakeOffset--; @@ -240,6 +242,16 @@ } tmp = buddy_entry(pos); + // FIXME: we should create a function instead of exporting this! :-( + // Cf. revision ~27 + wintmp = scr_SearchWindow(tmp->jid); + if (wintmp) + scr_LogPrint("wintmp != NULL"); + else + scr_LogPrint("wintmp == NULL"); + if ((wintmp) && (wintmp->pending_msg)) { + pending = '#'; + } if ((tmp->flags && FLAG_BUDDY_CONNECTED) == 1) { status = 'o'; @@ -257,7 +269,7 @@ for (n = 2; n < maxx; n++) waddch(win, ' '); //mvwprintw(win, i, (maxx - strlen(tmp->name)) / 2, "%s", tmp->name); - mvwprintw(win, i, 1, " .[%c] %.12s", status, tmp->name); + mvwprintw(win, i, 1, " %c[%c] %.12s", pending, status, tmp->name); i++; if (i >= maxy - 1) break; diff -r 70ca5b9c648a -r 4c3d7b8a29c4 mcabber/screen.c --- a/mcabber/screen.c Mon Mar 21 22:24:17 2005 +0000 +++ b/mcabber/screen.c Wed Mar 23 20:26:08 2005 +0000 @@ -13,21 +13,9 @@ #include "lang.h" #include "server.h" -#include "list.h" - /* Definicion de tipos */ #define window_entry(n) list_entry(n, window_entry_t, list) -typedef struct _window_entry_t { - WINDOW *win; - PANEL *panel; - char *name; - int nlines; - char **texto; - int pending_msg; - struct list_head list; -} window_entry_t; - LIST_HEAD(window_list); /* Variables globales a SCREEN.C */ @@ -434,7 +422,6 @@ if (!dont_show) { top_panel(tmp->panel); - tmp->pending_msg = TRUE; width = scr_WindowHeight(tmp->win); for (n = 0; n < tmp->nlines; n++) { mvwprintw(tmp->win, n + 1, 1, ""); @@ -445,6 +432,8 @@ update_panels(); doupdate(); + } else { + tmp->pending_msg = TRUE; } } diff -r 70ca5b9c648a -r 4c3d7b8a29c4 mcabber/screen.h --- a/mcabber/screen.h Mon Mar 21 22:24:17 2005 +0000 +++ b/mcabber/screen.h Wed Mar 23 20:26:08 2005 +0000 @@ -2,6 +2,9 @@ #define __SCREEN_H__ 1 #include +#include + +#include "list.h" #define COLOR_POPUP 1 #define COLOR_GENERAL 3 @@ -15,6 +18,17 @@ #define INPUTLINE_LENGTH 1024 + +typedef struct _window_entry_t { + WINDOW *win; + PANEL *panel; + char *name; + int nlines; + char **texto; + int pending_msg; + struct list_head list; +} window_entry_t; + void scr_InitCurses(void); void scr_DrawMainWindow(void); void scr_TerminateCurses(void); @@ -27,6 +41,7 @@ void scr_RoolWindow(void); void scr_ShowBuddyWindow(void); void scr_LogPrint(const char *fmt, ...); +window_entry_t *scr_SearchWindow(char *winId); WINDOW *scr_GetRosterWindow(void); WINDOW *scr_GetStatusWindow(void);