Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-86297

Qt does not handle the ACTION_POINTER_UP event on android



    • Android


      If the pen is tap up from the touch screen when there are still have a finger on it , android os will send the ACTION_POINTER_UP event to main activity but not a ACTION_UP event.But the tablet event processed code does not cover this case.So that we will lost the Tablet Release Event .

      // Issue occured code block

       static void tabletEvent(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint deviceId, jlong time, jint action,
              jint pointerType, jint buttonState, jfloat x, jfloat y, jfloat pressure)
              QPointF globalPosF(x, y);
              QPoint globalPos((int)x, (int)y);
              QWindow *tlw = topLevelWindowAt(globalPos);
              QPointF localPos = tlw ? (globalPosF - tlw->position()) : globalPosF;
              // when action == ACTION_UP (1) it's a release; otherwise we say which button is pressed
              Qt::MouseButtons buttons = Qt::NoButton;
              switch (action) {
              case 1:     // ACTION_UP
              case 212:   // stylus release while side-button held on Galaxy Note 4
                  buttons = Qt::NoButton;
              default:    // action is press or drag
                  if (buttonState == 0)
                      buttons = Qt::LeftButton;
                  else // 2 means RightButton
                      buttons = Qt::MouseButtons(buttonState);
              QWindowSystemInterface::handleTabletEvent(tlw, ulong(time),
                  localPos, globalPosF, QTabletEvent::Stylus, pointerType,
                  buttons, pressure, 0, 0, 0., 0., 0, deviceId, Qt::NoModifier);

      One way to fix it
      // add this line into QtNative.java at line 616.

       int actionType = event.getAction();
        if( actionType  == 6 ) Hanlde the ACTION_POINTER_UP
            actionType  = 1;//Mark the ACTION_POINTER_UP as ACTION_UP 
       tabletEvent(id, event.getDeviceId(), event.getEventTime(), actionType , pointerType,
                      event.getButtonState(), event.getX(), event.getY(), event.getPressure());


        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.



              qtandroidteam Qt Android Team
              alex-m Alex Mao
              1 Vote for this issue
              4 Start watching this issue



                Gerrit Reviews

                  There are no open Gerrit changes