changeset 13:4c3d7b8a29c4

[/trunk] Changeset 28 by mikael * Display pending message indicator in the roaster. Not very good yet, because it isn't refreshed automatically.
author mikael
date Wed, 23 Mar 2005 20:26:08 +0000
parents 70ca5b9c648a
children c87d8adc9100
files mcabber/buddies.c mcabber/screen.c mcabber/screen.h
diffstat 3 files changed, 31 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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);