VirtualBox

Changeset 72678 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Jun 25, 2018 2:25:49 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
123193
Message:

FE/Qt: bugref:9197 In X11 check the RENDER extension before setting cursor

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.cpp

    r71900 r72678  
    261261                            {
    262262                                m_fHandleGrabbed = true;
    263                                 setCursor(Qt::SplitHCursor);
     263                                VBoxGlobal::setCursor(this, Qt::SplitHCursor);
    264264                                qApp->postEvent(pHandle, new QMouseEvent(newME));
    265265                                return true;
     
    273273                                    && pMouseEvent->buttons().testFlag(Qt::LeftButton)))
    274274                            {
    275                                 setCursor(Qt::SplitHCursor);
     275                                VBoxGlobal::setCursor(this, Qt::SplitHCursor);
    276276                                qApp->postEvent(pHandle, new QMouseEvent(newME));
    277277                                return true;
     
    281281                                /* If not, reset the state. */
    282282                                m_fHandleGrabbed = false;
    283                                 setCursor(Qt::ArrowCursor);
     283                                VBoxGlobal::setCursor(this, Qt::ArrowCursor);
    284284                            }
    285285                        }
     
    292292            {
    293293                m_fHandleGrabbed = false;
    294                 setCursor(Qt::ArrowCursor);
     294                VBoxGlobal::setCursor(this, Qt::ArrowCursor);
    295295                break;
    296296            }
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp

    r72628 r72678  
    2424# include <QDir>
    2525# include <QFileDialog>
     26# include <QGraphicsWidget>
    2627# include <QLocale>
    2728# include <QMenu>
     
    7677# ifdef VBOX_WS_X11
    7778#  include "UIHostComboEditor.h"
     79#  include "VBoxX11Helper.h"
    7880# endif
    7981# ifdef VBOX_WS_MAC
     
    346348
    347349/* static */
     350uint VBoxGlobal::qtRTMajorVersion()
     351{
     352    QString rt_ver_str("5.11");// = VBoxGlobal::qtRTVersionString();
     353    return rt_ver_str.section ('.', 0, 0).toInt();
     354}
     355
     356/* static */
     357uint VBoxGlobal::qtRTMinorVersion()
     358{
     359    QString rt_ver_str("5.11");// = VBoxGlobal::qtRTVersionString();
     360    return rt_ver_str.section ('.', 1, 1).toInt();
     361}
     362
     363/* static */
     364uint VBoxGlobal::qtRTRevisionNumber()
     365{
     366    QString rt_ver_str("5.11");// = VBoxGlobal::qtRTVersionString();
     367    return rt_ver_str.section ('.', 2, 2).toInt();
     368}
     369
     370/* static */
    348371QString VBoxGlobal::qtRTVersionString()
    349372{
     
    17841807
    17851808/* static */
     1809void VBoxGlobal::setCursor(QWidget *pWidget, const QCursor &cursor)
     1810{
     1811    if (!pWidget)
     1812        return;
     1813
     1814#ifdef VBOX_WS_X11
     1815    /* As reported in #9197, in X11 QWidget::setCursor(..) call uses RENDER
     1816     * extension. Qt (before 5.11) fails to handle the case where the mentioned extension
     1817     * is missing. Please see https://codereview.qt-project.org/#/c/225665/ for Qt patch: */
     1818    if ((VBoxGlobal::qtRTMajorVersion() < 5) ||
     1819        (VBoxGlobal::qtRTMajorVersion() == 5 && VBoxGlobal::qtRTMinorVersion() < 11))
     1820    {
     1821        if (X11CheckExtension("RENDER"))
     1822            pWidget->setCursor(cursor);
     1823    }
     1824    else
     1825    {
     1826        pWidget->setCursor(cursor);
     1827    }
     1828#else
     1829    pWidget->setCursor(cursor);
     1830#endif
     1831}
     1832
     1833/* static */
     1834void VBoxGlobal::setCursor(QGraphicsWidget *pWidget, const QCursor &cursor)
     1835{
     1836
     1837    if (!pWidget)
     1838        return;
     1839
     1840#ifdef VBOX_WS_X11
     1841    /* As reported in #9197, in X11 QGraphicsWidget::setCursor(..) call uses RENDER
     1842     * extension. Qt (before 5.11) fails to handle the case where the mentioned extension
     1843     * is missing. Please see https://codereview.qt-project.org/#/c/225665/ for Qt patch: */
     1844    if ((VBoxGlobal::qtRTMajorVersion() < 5) ||
     1845        (VBoxGlobal::qtRTMajorVersion() == 5 && VBoxGlobal::qtRTMinorVersion() < 11))
     1846    {
     1847        if (X11CheckExtension("RENDER"))
     1848            pWidget->setCursor(cursor);
     1849    }
     1850    else
     1851    {
     1852        pWidget->setCursor(cursor);
     1853    }
     1854#else
     1855    pWidget->setCursor(cursor);
     1856#endif
     1857}
     1858
     1859
     1860/* static */
    17861861bool VBoxGlobal::supportsFullScreenMonitorsProtocolX11()
    17871862{
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h

    r72628 r72678  
    4545
    4646/* Forward declarations: */
     47class QGraphicsWidget;
    4748class QMenu;
    48 class QToolButton;
    4949class QSessionManager;
    5050class QSpinBox;
     51class QToolButton;
    5152class CHostVideoInputDevice;
    5253class CMachine;
     
    150151        /** Returns Qt runtime version. */
    151152        static uint qtRTVersion();
     153        /** Returns Qt runtime major version. */
     154        static uint qtRTMajorVersion();
     155        /** Returns Qt runtime minor version. */
     156        static uint qtRTMinorVersion();
     157        /** Returns Qt runtime revision number. */
     158        static uint qtRTRevisionNumber();
     159
    152160        /** Returns Qt compiled version string. */
    153161        static QString qtCTVersionString();
     
    360368    /** @} */
    361369
    362     /** @name Window/widget geometry stuff.
     370    /** @name Window/widget stuff.
    363371     * @{ */
    364372        /** Search position for @a rectangle to make sure it is fully contained @a boundRegion. */
     
    383391        /** Activates the specified window with given @a wId. Can @a fSwitchDesktop if requested. */
    384392        static bool activateWindow(WId wId, bool fSwitchDesktop = true);
     393        /** Does some checks on certain platforms before calling QWidget::setCursor(...). */
     394        static void setCursor(QWidget *pWidget, const QCursor &cursor);
     395        static void setCursor(QGraphicsWidget *pWidget, const QCursor &cursor);
    385396
    386397#ifdef VBOX_WS_X11
  • trunk/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.cpp

    r71544 r72678  
    147147}
    148148
     149SHARED_LIBRARY_STUFF bool X11CheckExtension(const char *extensionName)
     150{
     151    Display *pDisplay = QX11Info::display();
     152    int major_opcode;
     153    int first_event;
     154    int first_error;
     155    return XQueryExtension(pDisplay, extensionName, &major_opcode, &first_event, &first_error);
     156}
  • trunk/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.h

    r71630 r72678  
    4848/** X11: Restores previously saved screen saver settings. */
    4949SHARED_LIBRARY_STUFF void X11ScreenSaverSettingsRestore();
    50 
     50/** X11: Returns true if XLib extension with name @p extensionName is avaible, false otherwise. */
     51SHARED_LIBRARY_STUFF bool X11CheckExtension(const char *extensionName);
    5152
    5253#endif /* !___VBoxX11Helpers_h___ */
    53 
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp

    r71074 r72678  
    6868/* External includes: */
    6969#ifdef VBOX_WS_X11
     70#include "VBoxX11Helper.h"
    7071# include <xcb/xcb.h>
    7172#endif
     
    474475        QList<ulong> screenIds = m_viewports.keys();
    475476        for (int i = 0; i < screenIds.size(); ++i)
    476             m_viewports[screenIds[i]]->setCursor(Qt::BlankCursor);
     477            VBoxGlobal::setCursor(m_viewports[screenIds[i]], Qt::BlankCursor);
    477478    }
    478479
     
    488489        QList<ulong> screenIds = m_viewports.keys();
    489490        for (int i = 0; i < screenIds.size(); ++i)
    490             m_viewports[screenIds[i]]->setCursor(uisession()->cursor());
     491            VBoxGlobal::setCursor(m_viewports[screenIds[i]], uisession()->cursor());
    491492    }
    492493
     
    12511252}
    12521253#endif /* VBOX_WS_WIN */
    1253 
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.cpp

    r72224 r72678  
    417417    setWindowModality(Qt::ApplicationModal);
    418418    /* With the pointing-hand cursor: */
    419     setCursor(Qt::PointingHandCursor);
     419    VBoxGlobal::setCursor(this, Qt::PointingHandCursor);
    420420    /* And it's being deleted when closed: */
    421421    setAttribute(Qt::WA_DeleteOnClose);
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp

    r69639 r72678  
    681681{
    682682    if (m_fNameHovered)
    683         setCursor(Qt::PointingHandCursor);
     683        VBoxGlobal::setCursor(this, Qt::PointingHandCursor);
    684684    else
    685685        unsetCursor();
     
    699699    m_pButton->setAnimationRange(0, iAdditionalHeight);
    700700}
    701 
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.cpp

    r71521 r72678  
    253253        {
    254254            /* Configure scroll-area: */
    255             m_pScrollArea->setCursor(Qt::ArrowCursor);
     255            VBoxGlobal::setCursor(m_pScrollArea, Qt::ArrowCursor);
    256256            m_pScrollArea->setWidgetResizable(true);
    257257            m_pScrollArea->setFrameStyle(QFrame::NoFrame | QFrame::Plain);
     
    265265            {
    266266                /* Configure scroll-viewport: */
    267                 m_pScrollViewport->setCursor(Qt::ArrowCursor);
     267                VBoxGlobal::setCursor(m_pScrollViewport, Qt::ArrowCursor);
    268268                /* Connect scroll-viewport: */
    269269                connect(this, &UIPopupStack::sigProposeStackViewportSize,
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.cpp

    r69500 r72678  
    3131# include "UIGraphicsTextPane.h"
    3232# include "UIRichTextString.h"
     33# include "VBoxGlobal.h"
    3334
    3435/* Other VBox includes: */
     
    392393        unsetCursor();
    393394    else
    394         setCursor(Qt::PointingHandCursor);
     395        VBoxGlobal::setCursor(this, Qt::PointingHandCursor);
    395396
    396397    /* Update text-layout: */
     
    522523    return QString();
    523524}
    524 
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette