void Gesture::stroke_timeout() { kDebug() << "GESTURE: timeout"; XAllowEvents( QX11Info::display(), AsyncPointer, CurrentTime ); XUngrabPointer( QX11Info::display(), CurrentTime ); mouse_replay( false ); // for xorg-server 1.7 to 1.9 RC4: disable drag'n'drop support to evade bug #173606 if( VendorRelease( QX11Info::display() ) < 10899905 && VendorRelease( QX11Info::display() ) >= 10700000 ) mouse_replay( true ); recording = false; }
void Gesture::stroke_timeout() { kdDebug( 1217 ) << "GESTURE: timeout" << endl; XAllowEvents( qt_xdisplay(), AsyncPointer, CurrentTime ); XUngrabPointer( qt_xdisplay(), CurrentTime ); mouse_replay( false ); recording = false; }
bool Gesture::x11Event( XEvent* ev_P ) { /* kdDebug(1217) << k_funcinfo << " ( type = " << ev_P->type << " )" << KeyRelease << " " << KeyPress <<endl; if( ev_P->type == XKeyPress || ev_P->type == XKeyRelease ) { return voice_handler->x11Event( ev_P ); }*/ if( ev_P->type == ButtonPress && ev_P->xbutton.button == button ) { kdDebug( 1217 ) << "GESTURE: mouse press" << endl; stroke.reset(); stroke.record( ev_P->xbutton.x, ev_P->xbutton.y ); nostroke_timer.start( timeout, true ); recording = true; start_x = ev_P->xbutton.x_root; start_y = ev_P->xbutton.y_root; return true; } else if( ev_P->type == ButtonRelease && ev_P->xbutton.button == button && recording ) { recording = false; nostroke_timer.stop(); stroke.record( ev_P->xbutton.x, ev_P->xbutton.y ); QString gesture( stroke.translate()); if( gesture.isEmpty()) { kdDebug( 1217 ) << "GESTURE: replay" << endl; XAllowEvents( qt_xdisplay(), AsyncPointer, CurrentTime ); XUngrabPointer( qt_xdisplay(), CurrentTime ); mouse_replay( true ); return true; } kdDebug( 1217 ) << "GESTURE: got: " << gesture << endl; emit handle_gesture( gesture, windows_handler->window_at_position( start_x, start_y )); return true; } else if( ev_P->type == MotionNotify && recording ) { // ignore small initial movement if( nostroke_timer.isActive() && abs( start_x - ev_P->xmotion.x_root ) < 10 && abs( start_y - ev_P->xmotion.y_root ) < 10 ) return true; nostroke_timer.stop(); stroke.record( ev_P->xmotion.x, ev_P->xmotion.y ); } return false; }
bool Gesture::x11Event( XEvent* ev_P ) { /* kDebug() << " ( type = " << ev_P->type << " )" << KeyRelease << " " << KeyPress ; if( ev_P->type == XKeyPress || ev_P->type == XKeyRelease ) { return voice_handler->x11Event( ev_P ); }*/ if( ev_P->type == ButtonPress && ev_P->xbutton.button == button ) { kDebug() << "GESTURE: mouse press"; stroke.reset(); stroke.record( ev_P->xbutton.x, ev_P->xbutton.y ); nostroke_timer.start( timeout ); recording = true; start_x = ev_P->xbutton.x_root; start_y = ev_P->xbutton.y_root; return true; } // if stroke is finished... postprocess the data and send a signal. // then wait for incoming matching scores and execute the best fit. else if( ev_P->type == ButtonRelease && ev_P->xbutton.button == button && recording ) { recording = false; nostroke_timer.stop(); stroke.record( ev_P->xbutton.x, ev_P->xbutton.y ); StrokePoints gesture( stroke.processData() ); if( gesture.isEmpty() ) { kDebug() << "GESTURE: replay"; XAllowEvents( QX11Info::display(), AsyncPointer, CurrentTime ); XUngrabPointer( QX11Info::display(), CurrentTime ); mouse_replay( true ); return true; } // prepare for the incoming scores from different triggers maxScore = 0.0; bestFit = NULL; emit handle_gesture( gesture ); // the signal is emitted directly, so we get all trigger scores before // the next lines are executed. bestFit should now contain // a pointer to the ActionData with the best-matching gesture. if( bestFit != NULL ) { // set up the windows_handler WId window = windows_handler->window_at_position( start_x, start_y ); windows_handler->set_action_window( window ); // then execute the action associated with the best match. bestFit->execute(); } return true; } else if( ev_P->type == MotionNotify && recording ) { // ignore small initial movement if( nostroke_timer.isActive() && abs( start_x - ev_P->xmotion.x_root ) < 10 && abs( start_y - ev_P->xmotion.y_root ) < 10 ) return true; nostroke_timer.stop(); stroke.record( ev_P->xmotion.x, ev_P->xmotion.y ); } return false; }