~freenx-team/nx-x11/nxcompshad-ubuntu

« back to all changes in this revision

Viewing changes to Input.cpp

  • Committer: Marcelo Boveto Shima
  • Date: 2009-01-22 23:14:12 UTC
  • Revision ID: marceloshima@gmail.com-20090122231412-9683ft4r5xwep1nb
Import nxcompshad-3.3.0-2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**************************************************************************/
 
2
/*                                                                        */
 
3
/* Copyright (c) 2001, 2007 NoMachine, http://www.nomachine.com/.         */
 
4
/*                                                                        */
 
5
/* NXCOMPSHAD, NX protocol compression and NX extensions to this software */
 
6
/* are copyright of NoMachine. Redistribution and use of the present      */
 
7
/* software is allowed according to terms specified in the file LICENSE   */
 
8
/* which comes in the source distribution.                                */
 
9
/*                                                                        */
 
10
/* Check http://www.nomachine.com/licensing.html for applicability.       */
 
11
/*                                                                        */
 
12
/* NX and NoMachine are trademarks of Medialogic S.p.A.                   */
 
13
/*                                                                        */
 
14
/* All rights reserved.                                                   */
 
15
/*                                                                        */
 
16
/**************************************************************************/
 
17
 
 
18
#include <string.h>
 
19
 
 
20
#define PANIC
 
21
#define WARNING
 
22
#undef  TEST
 
23
#undef  DEBUG
 
24
 
 
25
#include "Input.h"
 
26
#include "Logger.h"
 
27
 
 
28
Input::Input()
 
29
{
 
30
  logTrace("Input::Input");
 
31
 
 
32
  eventsHead_ = NULL;
 
33
  eventsTail_ = NULL;
 
34
  keymap_ = NULL;
 
35
}
 
36
 
 
37
Input::~Input()
 
38
{
 
39
  logTrace("Input::~Input");
 
40
 
 
41
  Event *head = eventsHead_;
 
42
 
 
43
  while (head)
 
44
  {
 
45
    Event *next = head -> next;
 
46
 
 
47
    delete head -> event;
 
48
    delete head;
 
49
 
 
50
    head = next;
 
51
  }
 
52
 
 
53
  if (keymap_ != NULL)
 
54
  {
 
55
    logDebug("Input::~Input", "Delete keymap_ [%p].", keymap_);
 
56
 
 
57
    delete [] keymap_;
 
58
  }
 
59
}
 
60
 
 
61
void Input::pushEvent(Display *display, XEvent *event)
 
62
{
 
63
  Event *tail = new Event;
 
64
 
 
65
  if (tail == NULL)
 
66
  {
 
67
    logError("Input::pushEvent", ESET(ENOMEM));
 
68
 
 
69
    return;
 
70
  }
 
71
 
 
72
  tail -> next = NULL;
 
73
  tail -> display = display;
 
74
  tail -> event = event;
 
75
 
 
76
  if (eventsHead_ == NULL)
 
77
  {
 
78
    eventsHead_ = tail;
 
79
  }
 
80
  else
 
81
  {
 
82
    eventsTail_ -> next = tail;
 
83
  }
 
84
 
 
85
  eventsTail_ = tail;
 
86
}
 
87
 
 
88
XEvent *Input::popEvent()
 
89
{
 
90
  Event *head = eventsHead_;
 
91
 
 
92
  if (head == NULL)
 
93
  {
 
94
    return 0;
 
95
  }
 
96
 
 
97
  XEvent *event = head -> event;
 
98
 
 
99
  eventsHead_ = head -> next;
 
100
 
 
101
  delete head;
 
102
 
 
103
  if (eventsHead_ == NULL)
 
104
  {
 
105
    eventsTail_ = NULL;
 
106
  }
 
107
 
 
108
  return event;
 
109
}
 
110
 
 
111
int Input::removeAllEvents(Display *display)
 
112
{
 
113
  logTrace("Input::removeAllEvents");
 
114
 
 
115
  int nRemoved = 0;
 
116
 
 
117
  Event *current = eventsHead_;
 
118
 
 
119
  while (current)
 
120
  {
 
121
    if (display == current -> display)
 
122
    {
 
123
      //
 
124
      // Update head of list.
 
125
      //
 
126
 
 
127
      if (current == eventsHead_)
 
128
      {
 
129
        eventsHead_ = current -> next;
 
130
      }
 
131
 
 
132
      //
 
133
      // Update tail of list.
 
134
      //
 
135
 
 
136
      if (current == eventsTail_)
 
137
      {
 
138
        eventsTail_ = eventsHead_;
 
139
 
 
140
        while (eventsTail_ && eventsTail_ -> next)
 
141
        {
 
142
          eventsTail_ = eventsTail_ -> next;
 
143
        }
 
144
      }
 
145
 
 
146
      //
 
147
      // Remove event.
 
148
      //
 
149
 
 
150
      Event *next = current -> next;
 
151
 
 
152
      delete current -> event;
 
153
      delete current;
 
154
 
 
155
      current = next;
 
156
 
 
157
      nRemoved++;
 
158
    }
 
159
    else
 
160
    {
 
161
      current = current -> next;
 
162
    }
 
163
  }
 
164
 
 
165
  return nRemoved;
 
166
}
 
167