- Window root, child;
- int rx, ry, wx, wy;
- unsigned int mask;
- if (!XQueryPointer (MI_DISPLAY(mi), MI_WINDOW(mi),
- &root, &child, &rx, &ry, &wx, &wy, &mask))
- return False;
- if (! (mask & Button1Mask))
- return False;
- return True;
+ spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)];
+
+ if (event->xany.type == ButtonPress &&
+ event->xbutton.button == Button1)
+ {
+ cc->button_down_p = True;
+ gltrackball_start (cc->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)
+ {
+ cc->button_down_p = False;
+ return True;
+ }
+ else if (event->xany.type == ButtonPress &&
+ (event->xbutton.button == Button4 ||
+ event->xbutton.button == Button5 ||
+ event->xbutton.button == Button6 ||
+ event->xbutton.button == Button7))
+ {
+ gltrackball_mousewheel (cc->trackball, event->xbutton.button, 10,
+ !!event->xbutton.state);
+ return True;
+ }
+ else if (event->xany.type == KeyPress)
+ {
+ KeySym keysym;
+ char c = 0;
+ XLookupString (&event->xkey, &c, 1, &keysym, 0);
+
+ if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+ {
+ cc->change_tick = duration;
+ return True;
+ }
+ }
+ else if (event->xany.type == MotionNotify &&
+ cc->button_down_p)
+ {
+ gltrackball_track (cc->trackball,
+ event->xmotion.x, event->xmotion.y,
+ MI_WIDTH (mi), MI_HEIGHT (mi));
+ return True;
+ }
+
+ return False;