Esempio n. 1
0
/* this does not take owership of pointer_item, it makes a copy */
int APP_CC
xrdp_cache_add_pointer_static(struct xrdp_cache *self,
                              struct xrdp_pointer_item *pointer_item,
                              int index)
{

    if (self == 0)
    {
        return 0;
    }

    self->pointer_items[index].x = pointer_item->x;
    self->pointer_items[index].y = pointer_item->y;
    g_memcpy(self->pointer_items[index].data,
             pointer_item->data, 32 * 32 * 4);
    g_memcpy(self->pointer_items[index].mask,
             pointer_item->mask, 32 * 32 / 8);
    self->pointer_items[index].stamp = self->pointer_stamp;
    self->pointer_items[index].bpp = pointer_item->bpp;
    xrdp_wm_send_pointer(self->wm, index,
                         self->pointer_items[index].data,
                         self->pointer_items[index].mask,
                         self->pointer_items[index].x,
                         self->pointer_items[index].y,
                         self->pointer_items[index].bpp);
    self->wm->current_pointer = index;
    DEBUG(("adding pointer at %d", index));
    return index;
}
Esempio n. 2
0
/* added the pointer to the cache and send it to client, it also sets the
   client if it finds it
   returns the index in the cache
   does not take ownership of pointer_item */
int APP_CC
xrdp_cache_add_pointer(struct xrdp_cache* self,
                       struct xrdp_pointer_item* pointer_item)
{
  int i;
  int oldest;
  int index;

  if (self == 0)
  {
    return 0;
  }
  self->pointer_stamp++;
  /* look for match */
  for (i = 2; i < self->pointer_cache_entries; i++)
  {
    if (self->pointer_items[i].x == pointer_item->x &&
        self->pointer_items[i].y == pointer_item->y &&
        g_memcmp(self->pointer_items[i].data,
                 pointer_item->data, 32 * 32 * 3) == 0 &&
        g_memcmp(self->pointer_items[i].mask,
                 pointer_item->mask, 32 * 32 / 8) == 0)
    {
      self->pointer_items[i].stamp = self->pointer_stamp;
      xrdp_wm_set_pointer(self->wm, i);
      self->wm->current_pointer = i;
      DEBUG(("found pointer at %d", i));
      return i;
    }
  }
  /* look for oldest */
  index = 2;
  oldest = 0x7fffffff;
  for (i = 2; i < self->pointer_cache_entries; i++)
  {
    if (self->pointer_items[i].stamp < oldest)
    {
      oldest = self->pointer_items[i].stamp;
      index = i;
    }
  }
  self->pointer_items[index].x = pointer_item->x;
  self->pointer_items[index].y = pointer_item->y;
  g_memcpy(self->pointer_items[index].data,
           pointer_item->data, 32 * 32 * 3);
  g_memcpy(self->pointer_items[index].mask,
           pointer_item->mask, 32 * 32 / 8);
  self->pointer_items[index].stamp = self->pointer_stamp;
  xrdp_wm_send_pointer(self->wm, index,
                       self->pointer_items[index].data,
                       self->pointer_items[index].mask,
                       self->pointer_items[index].x,
                       self->pointer_items[index].y);
  self->wm->current_pointer = index;
  DEBUG(("adding pointer at %d", index));
  return index;
}