[/trunk] Changeset 28 by mikael
* Display pending message indicator in the roaster.
Not very good yet, because it isn't refreshed automatically.
--- 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;
--- 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;
}
}
--- 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 <ncurses.h>
+#include <panel.h>
+
+#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);