Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. QWS VNC doesn't work on Portrait mode
Forum Updated to NodeBB v4.3 + New Features

QWS VNC doesn't work on Portrait mode

Scheduled Pinned Locked Moved Mobile and Embedded
vncqwsembedded4.8rotate
29 Posts 3 Posters 14.8k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S SGaist
    27 Jul 2015, 20:34

    Hi,

    I'd look at the sendMouseEvent patch part, it's probably there that the dispatching is not done correctly

    K Offline
    K Offline
    kumararajas
    wrote on 27 Jul 2015, 20:41 last edited by kumararajas
    #3

    @SGaist Hi Sam, Thank you for taking time and looking at the implementation.

    How to go about?

    Thanks,
    Kumara

    --Kumar

    1 Reply Last reply
    0
    • S SGaist
      27 Jul 2015, 20:34

      Hi,

      I'd look at the sendMouseEvent patch part, it's probably there that the dispatching is not done correctly

      K Offline
      K Offline
      kumararajas
      wrote on 27 Jul 2015, 20:42 last edited by kumararajas
      #4

      @SGaist This was the else part added as part of the patch (that is attached in Qt bug)

          if (qt_screen->isTransformed()) 
          {
              QSize s = QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
              tpos = qt_screen->mapFromDevice(pos, s);
          } 
          else 
          {
              //tpos = pos;
              // Only in case of Multi Display
              // If main screen is not transformed, then check if sub screens are transformed
              QList<QScreen*> screens = qt_screen->subScreens();
              if (screens.size() && !bRemote) 
              {
                  for (int i = 0; i < screens.size(); ++i) 
                  {
                      QScreen *screen = screens.at(i);
                      if (screen->isTransformed())
                      {
                          QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                          tpos = screen->mapFromDevice(pos, s);
                          break;
                      }
                  }
              }
          }

      --Kumar

      1 Reply Last reply
      0
      • S SGaist
        27 Jul 2015, 20:34

        Hi,

        I'd look at the sendMouseEvent patch part, it's probably there that the dispatching is not done correctly

        K Offline
        K Offline
        kumararajas
        wrote on 28 Jul 2015, 14:47 last edited by
        #5

        @SGaist This Qt bug is not fixed in any of Qt 4.8 versions?

        --Kumar

        1 Reply Last reply
        0
        • S Offline
          S Offline
          SGaist
          Lifetime Qt Champion
          wrote on 28 Jul 2015, 22:02 last edited by
          #6

          It's still the same in 4.8.7

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          K 1 Reply Last reply 29 Jul 2015, 12:30
          0
          • S SGaist
            28 Jul 2015, 22:02

            It's still the same in 4.8.7

            K Offline
            K Offline
            kumararajas
            wrote on 29 Jul 2015, 12:30 last edited by
            #7

            @SGaist Ok Sam. Do you see any way to fix this problem?

            Thank you.

            --Kumar

            1 Reply Last reply
            0
            • S Offline
              S Offline
              SGaist
              Lifetime Qt Champion
              wrote on 29 Jul 2015, 20:40 last edited by
              #8

              If I understand the patch correctly, it only check other screens if the main screen is not transformed. Since you have more that one screen transformed, you should check all screens (main + sub-screens)

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              K 1 Reply Last reply 30 Jul 2015, 19:06
              0
              • S SGaist
                29 Jul 2015, 20:40

                If I understand the patch correctly, it only check other screens if the main screen is not transformed. Since you have more that one screen transformed, you should check all screens (main + sub-screens)

                K Offline
                K Offline
                kumararajas
                wrote on 30 Jul 2015, 19:06 last edited by
                #9

                @SGaist Then it means that, the else part of code, should be done for if condition as well?

                    if (qt_screen->isTransformed()) 
                    {
                        QSize s = QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
                        tpos = qt_screen->mapFromDevice(pos, s);
                    } 
                    //tpos = pos;
                    // Only in case of Multi Display
                    // If main screen is not transformed, then check if sub screens are transformed
                    QList<QScreen*> screens = qt_screen->subScreens();
                    if (screens.size() && !bRemote) 
                    {
                        for (int i = 0; i < screens.size(); ++i) 
                        {
                            QScreen *screen = screens.at(i);
                            if (screen->isTransformed())
                            {
                                QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                                tpos = screen->mapFromDevice(pos, s);
                                break;
                            }
                        }
                    }
                

                Is it like that?

                --Kumar

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 31 Jul 2015, 19:49 last edited by
                  #10

                  I'd remove also the bRemote, just check them all

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  K 1 Reply Last reply 31 Jul 2015, 20:59
                  0
                  • S SGaist
                    31 Jul 2015, 19:49

                    I'd remove also the bRemote, just check them all

                    K Offline
                    K Offline
                    kumararajas
                    wrote on 31 Jul 2015, 20:59 last edited by
                    #11

                    @SGaist Hmm, let me test this.

                    Just for better understanding attaching the modified code:

                    if (qt_screen->isTransformed()) 
                        {
                            QSize s = QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
                            tpos = qt_screen->mapFromDevice(pos, s);
                        } 
                        //tpos = pos;
                        // Only in case of Multi Display
                        // If main screen is not transformed, then check if sub screens are transformed
                        QList<QScreen*> screens = qt_screen->subScreens();
                        if (screens.size()) 
                        {
                            for (int i = 0; i < screens.size(); ++i) 
                            {
                                QScreen *screen = screens.at(i);
                                if (screen->isTransformed())
                                {
                                    QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                                    tpos = screen->mapFromDevice(pos, s);
                                    break;
                                }
                            }
                        } 
                    

                    I'll test and keep you posted..

                    --Kumar

                    K 1 Reply Last reply 4 Aug 2015, 15:15
                    0
                    • K kumararajas
                      31 Jul 2015, 20:59

                      @SGaist Hmm, let me test this.

                      Just for better understanding attaching the modified code:

                      if (qt_screen->isTransformed()) 
                          {
                              QSize s = QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
                              tpos = qt_screen->mapFromDevice(pos, s);
                          } 
                          //tpos = pos;
                          // Only in case of Multi Display
                          // If main screen is not transformed, then check if sub screens are transformed
                          QList<QScreen*> screens = qt_screen->subScreens();
                          if (screens.size()) 
                          {
                              for (int i = 0; i < screens.size(); ++i) 
                              {
                                  QScreen *screen = screens.at(i);
                                  if (screen->isTransformed())
                                  {
                                      QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                                      tpos = screen->mapFromDevice(pos, s);
                                      break;
                                  }
                              }
                          } 
                      

                      I'll test and keep you posted..

                      K Offline
                      K Offline
                      kumararajas
                      wrote on 4 Aug 2015, 15:15 last edited by
                      #12

                      No success yet!

                      While running the application with Multi for VNC, still the touch inputs on the device is still not rotated.

                      --Kumar

                      K 1 Reply Last reply 4 Aug 2015, 16:34
                      0
                      • S Offline
                        S Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on 4 Aug 2015, 16:11 last edited by
                        #13

                        Silly idea (and just to verify) but what about just dropping the if and do the transform for all screens anyway ?

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        K 2 Replies Last reply 4 Aug 2015, 16:36
                        0
                        • K kumararajas
                          4 Aug 2015, 15:15

                          No success yet!

                          While running the application with Multi for VNC, still the touch inputs on the device is still not rotated.

                          K Offline
                          K Offline
                          kumararajas
                          wrote on 4 Aug 2015, 16:34 last edited by kumararajas 8 Apr 2015, 16:35
                          #14

                          Just for more information:

                          export QWS_DISPLAY="Multi: VNC:0:size=480x640 Transformed:rot0"
                          

                          This displays the UI in a landscape mode and the touch input works as per the UI.

                          export QWS_DISPLAY="Multi: VNC:0:size=480x640 Transformed:rot90"
                          

                          This rotates the UI to 90 degrees. But the touch input is as same as 0 degrees.

                          This clearly indicates that the display transformation works good but the transformation to touch input mapping is not working.

                          --Kumar

                          1 Reply Last reply
                          0
                          • S SGaist
                            4 Aug 2015, 16:11

                            Silly idea (and just to verify) but what about just dropping the if and do the transform for all screens anyway ?

                            K Offline
                            K Offline
                            kumararajas
                            wrote on 4 Aug 2015, 16:36 last edited by
                            #15

                            @SGaist Sam, can you please send me the code snippet to be on same page?

                            Thanks,
                            Kumara

                            --Kumar

                            1 Reply Last reply
                            0
                            • S SGaist
                              4 Aug 2015, 16:11

                              Silly idea (and just to verify) but what about just dropping the if and do the transform for all screens anyway ?

                              K Offline
                              K Offline
                              kumararajas
                              wrote on 6 Aug 2015, 13:45 last edited by
                              #16

                              @SGaist You mean to try this kind of code:

                              QList<QScreen*> screens = qt_screen->subScreens();
                              if (screens.size()) 
                              {
                                  for (int i = 0; i < screens.size(); ++i) 
                                  {
                                      QScreen *screen = screens.at(i);
                                      QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                                      tpos = screen->mapFromDevice(pos, s);
                                      break;
                                  }
                              }
                              

                              instead of

                              if (qt_screen->isTransformed()) 
                                  {
                                      QSize s = QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
                                      tpos = qt_screen->mapFromDevice(pos, s);
                                  } 
                                  else 
                                  {
                                      //tpos = pos;
                                      // Only in case of Multi Display
                                      // If main screen is not transformed, then check if sub screens are transformed
                                      QList<QScreen*> screens = qt_screen->subScreens();
                                      if (screens.size() && !bRemote) 
                                      {
                                          for (int i = 0; i < screens.size(); ++i) 
                                          {
                                              QScreen *screen = screens.at(i);
                                              if (screen->isTransformed())
                                              {
                                                  QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                                                  tpos = screen->mapFromDevice(pos, s);
                                                  break;
                                              }
                                          }
                                      }
                                  }
                              

                              Sam, if you confirm, I can make these changes and build my packages.

                              Thanks,
                              Kumara

                              --Kumar

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                SGaist
                                Lifetime Qt Champion
                                wrote on 6 Aug 2015, 21:03 last edited by
                                #17

                                Yes that's what I had in mind, without forgetting the main screen first.

                                Interested in AI ? www.idiap.ch
                                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                K 2 Replies Last reply 6 Aug 2015, 22:02
                                0
                                • S SGaist
                                  6 Aug 2015, 21:03

                                  Yes that's what I had in mind, without forgetting the main screen first.

                                  K Offline
                                  K Offline
                                  kumararajas
                                  wrote on 6 Aug 2015, 22:02 last edited by
                                  #18

                                  @SGaist Oh ya, I missed the main screen

                                  So here is the code which I can do the test:

                                  // Main screen
                                  QSize s = QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
                                  tpos = qt_screen->mapFromDevice(pos, s);
                                  
                                  // Subscreens
                                  QList<QScreen*> screens = qt_screen->subScreens();
                                  if (screens.size()) 
                                  {
                                      for (int i = 0; i < screens.size(); ++i) 
                                      {
                                          QScreen *screen = screens.at(i);
                                          QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                                          tpos = screen->mapFromDevice(pos, s);
                                          break;
                                      }
                                  }
                                  

                                  Right?

                                  --Kumar

                                  1 Reply Last reply
                                  0
                                  • S SGaist
                                    6 Aug 2015, 21:03

                                    Yes that's what I had in mind, without forgetting the main screen first.

                                    K Offline
                                    K Offline
                                    kumararajas
                                    wrote on 6 Aug 2015, 22:23 last edited by
                                    #19

                                    @SGaist Below the patch code, I see

                                        QPoint tpos;
                                        // Main screen
                                        QSize s = QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
                                        tpos = qt_screen->mapFromDevice(pos, s);
                                    
                                        // Sub screens
                                        QList<QScreen*> screens = qt_screen->subScreens();
                                        if (screens.size()) 
                                        {
                                            for (int i = 0; i < screens.size(); ++i) 
                                            {
                                                QScreen *screen = screens.at(i);
                                                QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                                                tpos = screen->mapFromDevice(pos, s);
                                                break;
                                            }
                                        }
                                    
                                        if (qt_last_x) {
                                             *qt_last_x = tpos.x();
                                             *qt_last_y = tpos.y();
                                        }
                                        QWSServer::mousePosition = tpos;
                                        qwsServerPrivate->mouseState = state;
                                    

                                    We use the tpos and mouse the mousePosition just once. Even though, we have many subscreens, we just do it once.

                                    Is this correct?

                                    Should we not do this in a loop for all the screens?

                                    Please let me know.

                                    --Kumar

                                    K 1 Reply Last reply 7 Aug 2015, 19:27
                                    0
                                    • K kumararajas
                                      6 Aug 2015, 22:23

                                      @SGaist Below the patch code, I see

                                          QPoint tpos;
                                          // Main screen
                                          QSize s = QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
                                          tpos = qt_screen->mapFromDevice(pos, s);
                                      
                                          // Sub screens
                                          QList<QScreen*> screens = qt_screen->subScreens();
                                          if (screens.size()) 
                                          {
                                              for (int i = 0; i < screens.size(); ++i) 
                                              {
                                                  QScreen *screen = screens.at(i);
                                                  QSize s = QSize(screen->deviceWidth(), screen->deviceHeight());
                                                  tpos = screen->mapFromDevice(pos, s);
                                                  break;
                                              }
                                          }
                                      
                                          if (qt_last_x) {
                                               *qt_last_x = tpos.x();
                                               *qt_last_y = tpos.y();
                                          }
                                          QWSServer::mousePosition = tpos;
                                          qwsServerPrivate->mouseState = state;
                                      

                                      We use the tpos and mouse the mousePosition just once. Even though, we have many subscreens, we just do it once.

                                      Is this correct?

                                      Should we not do this in a loop for all the screens?

                                      Please let me know.

                                      K Offline
                                      K Offline
                                      kumararajas
                                      wrote on 7 Aug 2015, 19:27 last edited by
                                      #20

                                      Looks like I am in a wrong direction.

                                      I suspect "Transformed" driver is not having problem.

                                      I think, it is "multi" screen driver is what not working good.

                                      Because, when VNC option is selected, Transformed works food.
                                      When LinuxFb is selected, Transformed works good.

                                      When both are used, there lies the problem.

                                      I guess, we may have to look at Multi Screen driver source code to see how it has been implemented.

                                      Can you please point me to the right location?

                                      Thanks,
                                      Kumara

                                      --Kumar

                                      1 Reply Last reply
                                      0
                                      • S Offline
                                        S Offline
                                        SGaist
                                        Lifetime Qt Champion
                                        wrote on 8 Aug 2015, 11:43 last edited by
                                        #21

                                        I'd take a look a the qscreenmulti_qws.cpp file

                                        Interested in AI ? www.idiap.ch
                                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        K 2 Replies Last reply 8 Aug 2015, 15:27
                                        0
                                        • S SGaist
                                          8 Aug 2015, 11:43

                                          I'd take a look a the qscreenmulti_qws.cpp file

                                          K Offline
                                          K Offline
                                          kumararajas
                                          wrote on 8 Aug 2015, 15:27 last edited by
                                          #22

                                          @SGaist Oh!
                                          Any thing you found?

                                          --Kumar

                                          1 Reply Last reply
                                          0

                                          12/29

                                          4 Aug 2015, 15:15

                                          • Login

                                          • Login or register to search.
                                          12 out of 29
                                          • First post
                                            12/29
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved