Changeset 5973 for branches/newosd

Show
Ignore:
Timestamp:
12/31/07 20:03:04 (11 months ago)
Author:
eugene
Message:

A bit more event processing added.

Location:
branches/newosd/src
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • branches/newosd/src/iface.cpp

    r5968 r5973  
    44 
    55#include <licq_icqd.h> 
     6#include <licq_translate.h> 
    67 
    78Iface::Iface() 
     
    4849void Iface::processSignal(CICQSignal* sig) 
    4950{ 
    50   if (setText(sig->Id(), sig->PPID())) 
    51     aosd_flash(aosd, 0, 1000, 150); 
     51  clearLayout(); 
     52 
     53  switch (sig->Signal()) 
     54  { 
     55    case SIGNAL_UPDATExUSER: 
     56    { 
     57      if (!checkDisabledTimer() || 
     58          !checkOwner(sig->Id(), sig->PPID())) 
     59        break; 
     60 
     61      ICQUser* u = checkUser(sig->Id(), sig->PPID()); 
     62      if (u == NULL) 
     63        break; 
     64 
     65      string msg = ""; 
     66 
     67      switch (sig->SubSignal()) 
     68      { 
     69        case USER_STATUS: 
     70          msg = u->GetAlias(); 
     71          msg += " changed status to: "; 
     72          msg += u->StatusStr(); 
     73          if (sig->Argument() > 0) 
     74            msg += " [logged on]"; 
     75          break; 
     76 
     77        case USER_EVENTS: 
     78          break; 
     79 
     80        default: 
     81          break; 
     82      } 
     83 
     84      gUserManager.DropUser(u); 
     85      pango_layout_set_text_aosd(trd.lay, const_cast<char*>(msg.c_str())); 
     86      displayLayout(); 
     87    } 
     88      break; 
     89 
     90    case SIGNAL_LOGON: 
     91      break; 
     92 
     93    case SIGNAL_LOGOFF: 
     94      break; 
     95 
     96    default: 
     97      break; 
     98  } 
    5299} 
    53100 
    54 bool Iface::setText(char* id, unsigned long ppid) 
     101void Iface::clearLayout() 
    55102{ 
    56   int tag_width; 
    57   unsigned width, height; 
     103  pango_layout_set_text(trd.lay, "", -1); 
     104  pango_layout_set_indent(trd.lay, 0); 
     105} 
    58106 
     107ICQUser* Iface::checkUser(char* id, unsigned long ppid) 
     108{ 
    59109  if (id == NULL) 
     110    return NULL; 
     111 
     112  ICQUser* u = gUserManager.FetchUser(id, ppid, LOCK_R); 
     113 
     114  if (u == NULL) 
     115    return NULL; 
     116 
     117  if (u->IgnoreList()) 
     118  { 
     119    gUserManager.DropUser(u); 
     120    return NULL; 
     121  } 
     122 
     123  return u; 
     124} 
     125 
     126bool Iface::checkOwner(char* id, unsigned long ppid) 
     127{ 
     128  ICQOwner* o = gUserManager.FetchOwner(ppid, LOCK_R); 
     129 
     130  if (o == NULL) 
    60131    return false; 
    61132 
    62   ICQUser* u = gUserManager.FetchUser(id, ppid, LOCK_R); 
    63   if (u == NULL) 
    64     return false; 
     133  bool ret = true; 
    65134 
     135  do 
     136  { 
     137    if (strcmp(id, o->IdString()) == 0) 
     138    { 
     139      ret = false; 
     140      break; 
     141    } 
     142 
     143    // TODO status check 
     144  } while (false); 
     145 
     146  gUserManager.DropOwner(ppid); 
     147  return ret; 
     148} 
     149 
     150bool Iface::checkDisabledTimer() 
     151{ 
     152  return true; 
     153} 
     154 
     155const char* Iface::setLayoutTag(ICQUser* u) 
     156{ 
    66157  string str = u->GetAlias(); 
    67   gUserManager.DropUser(u); 
     158  str += (true && u->Secure()) ? " (S)" : ""; 
    68159  str += ": "; 
     160 
     161  int tag_width = 0; 
    69162 
    70163  pango_layout_set_text(trd.lay, str.c_str(), -1); 
     
    72165  pango_layout_set_indent(trd.lay, -tag_width); 
    73166 
    74   str += "received\nthe\nsignal"; 
     167  return str.c_str(); 
     168} 
    75169 
    76   pango_layout_set_text_aosd(trd.lay, const_cast<char*>(str.c_str())); 
     170void Iface::displayLayout() 
     171{ 
     172  if (strlen(pango_layout_get_text(trd.lay)) == 0) 
     173    return; 
     174 
     175  unsigned width, height; 
     176 
    77177  pango_layout_get_size_aosd(trd.lay, &width, &height, &trd.lbearing); 
    78178 
     
    83183      80, 80); 
    84184 
    85   return true; 
     185  aosd_flash(aosd, 0, 1000, 150); 
    86186} 
    87187 
  • branches/newosd/src/iface.h

    r5965 r5973  
    33 
    44class CICQSignal; 
     5class ICQUser; 
    56 
    67extern "C" 
     
    2324  TextRenderData trd; 
    2425 
    25   bool setText(char* id, unsigned long ppid); 
     26  ICQUser* checkUser(char* id, unsigned long ppid); 
     27  bool checkOwner(char* id, unsigned long ppid); 
     28  bool checkDisabledTimer(); 
     29 
     30  const char* setLayoutTag(ICQUser* u); 
     31  void clearLayout(); 
     32  void displayLayout(); 
    2633}; 
    2734 
  • branches/newosd/src/plugin.cpp

    r5967 r5973  
    8888        break; 
    8989 
     90      case 'E': 
     91        { 
     92          ICQEvent* ev = daemon->PopPluginEvent(); 
     93          if (ev != NULL) 
     94            delete ev; 
     95        } 
     96        break; 
     97 
    9098      case 'X': 
    9199        finita = true;