+Bool polytopes_handle_event(ModeInfo *mi, XEvent *event)
+{
+ Display *display = MI_DISPLAY(mi);
+ KeySym sym;
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button == Button1)
+ {
+ button_pressed = True;
+ gltrackball_start(trackballs[current_trackball],
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH(mi), MI_HEIGHT(mi));
+ return True;
+ }
+ else if (event->xany.type == ButtonRelease &&
+ event->xbutton.button == Button1)
+ {
+ button_pressed = False;
+ return True;
+ }
+ else if (event->xany.type == KeyPress)
+ {
+ sym = XKeycodeToKeysym(display,event->xkey.keycode,0);
+ if (sym == XK_Shift_L || sym == XK_Shift_R)
+ {
+ current_trackball = 1;
+ if (button_pressed)
+ gltrackball_start(trackballs[current_trackball],
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH(mi), MI_HEIGHT(mi));
+ return True;
+ }
+ }
+ else if (event->xany.type == KeyRelease)
+ {
+ sym = XKeycodeToKeysym(display,event->xkey.keycode,0);
+ if (sym == XK_Shift_L || sym == XK_Shift_R)
+ {
+ current_trackball = 0;
+ if (button_pressed)
+ gltrackball_start(trackballs[current_trackball],
+ event->xbutton.x, event->xbutton.y,
+ MI_WIDTH(mi), MI_HEIGHT(mi));
+ return True;
+ }
+ }
+ else if (event->xany.type == MotionNotify && button_pressed)
+ {
+ gltrackball_track(trackballs[current_trackball],
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH(mi), MI_HEIGHT(mi));
+ return True;
+ }
+
+ return False;
+}
+
+