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