1 /*
2 // event.c
3 */
4
5 #include "xbook.h"
6
7 Time LastEventTime = CurrentTime;
8
CheckEvent(display,want_exposes,width,height,event,keysym)9 CheckEvent( display, want_exposes, width, height, event, keysym )
10 Display *display;
11 int want_exposes;
12 int width, height;
13 XEvent *event;
14 KeySym *keysym;
15 {
16 int status;
17
18 status = False;
19 if( XPending( display ) > 0 )
20 {
21 XNextEvent( display, event );
22 status = ParseEvent( event,
23 want_exposes,
24 width, height,
25 keysym );
26 }
27 return ( status );
28 }
29
NextEvent(display,want_exposes,width,height,event,keysym)30 NextEvent( display, want_exposes, width, height, event, keysym )
31 Display *display;
32 int want_exposes;
33 int width, height;
34 XEvent *event;
35 KeySym *keysym;
36 {
37 int status;
38
39 status = False;
40 while( status == False )
41 {
42 XNextEvent( display, event );
43 status = ParseEvent( event,
44 want_exposes,
45 width, height,
46 keysym );
47 }
48 }
49
ParseEvent(event,want_exposes,width,height,keysym)50 ParseEvent( event, want_exposes, width, height, keysym )
51 XEvent *event;
52 int want_exposes;
53 int width, height;
54 KeySym *keysym;
55 {
56 int status;
57
58 status = False;
59 switch( event->type )
60 {
61 case ButtonPress:
62 LastEventTime = event->xbutton.time;
63 status = True;
64 break;
65 case ClientMessage:
66 status = True;
67 break;
68 case PropertyNotify:
69 LastEventTime = event->xproperty.time;
70 status = True;
71 break;
72 case SelectionClear:
73 LastEventTime = event->xselectionclear.time;
74 status = True;
75 break;
76 case SelectionNotify:
77 LastEventTime = event->xselection.time;
78 status = True;
79 break;
80 case SelectionRequest:
81 LastEventTime = event->xselectionrequest.time;
82 status = True;
83 break;
84 case ConfigureNotify:
85 if( ( width != event->xconfigure.width ) ||
86 ( height != event->xconfigure.height ) )
87 {
88 status = True;
89 }
90 break;
91 case Expose:
92 status = True;
93 if( want_exposes == False )
94 {
95 if( event->xexpose.count != 0 )
96 {
97 status = False;
98 }
99 }
100 break;
101 case KeyPress:
102 LastEventTime = event->xkey.time;
103 status = True;
104 *keysym = Key2Keysym( event );
105 break;
106 case MappingNotify:
107 XRefreshKeyboardMapping( (XMappingEvent *) event );
108 break;
109 }
110 return ( status );
111 }
112
Key2Keysym(keyevent)113 KeySym Key2Keysym( keyevent )
114 XKeyEvent *keyevent;
115 {
116 XComposeStatus composestatus;
117 KeySym keysym;
118 char string[ 10 ];
119
120 XLookupString( keyevent, string,
121 9, &keysym, &composestatus );
122 return ( keysym );
123 }
124
LastTimeStamp()125 Time LastTimeStamp()
126 {
127 return (LastEventTime);
128 }
129