[Libreoffice-commits] core.git: vcl/unx

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Jan 31 15:54:18 UTC 2019


 vcl/unx/generic/desktopdetect/desktopdetector.cxx |  225 ++++++++++------------
 1 file changed, 111 insertions(+), 114 deletions(-)

New commits:
commit 4a79cef8b30840ddb69d912b36584363ca7fe1fa
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Tue Jan 29 10:56:28 2019 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Jan 31 16:53:50 2019 +0100

    flatten desktopdetector code
    
    Change-Id: I9a7ee90fc0b8427ba237ebd8feb2c2467f6847d5
    Reviewed-on: https://gerrit.libreoffice.org/67169
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
    Tested-by: Noel Grandin <noel.grandin at collabora.co.uk>
    Tested-by: Jenkins

diff --git a/vcl/unx/generic/desktopdetect/desktopdetector.cxx b/vcl/unx/generic/desktopdetect/desktopdetector.cxx
index 7a1757a94e27..217ffdbb72cc 100644
--- a/vcl/unx/generic/desktopdetect/desktopdetector.cxx
+++ b/vcl/unx/generic/desktopdetect/desktopdetector.cxx
@@ -37,86 +37,85 @@
 
 static bool is_gnome_desktop( Display* pDisplay )
 {
-    bool ret = false;
 
     // warning: these checks are coincidental, GNOME does not
     // explicitly advertise itself
-    if ( nullptr != getenv( "GNOME_DESKTOP_SESSION_ID" ) )
-        ret = true;
+    if ( getenv( "GNOME_DESKTOP_SESSION_ID" ) )
+        return true;
 
-    if( ! ret )
+    bool ret = false;
+
+    Atom nAtom1 = XInternAtom( pDisplay, "GNOME_SM_PROXY", True );
+    Atom nAtom2 = XInternAtom( pDisplay, "NAUTILUS_DESKTOP_WINDOW_ID", True );
+    if( nAtom1 || nAtom2 )
     {
-        Atom nAtom1 = XInternAtom( pDisplay, "GNOME_SM_PROXY", True );
-        Atom nAtom2 = XInternAtom( pDisplay, "NAUTILUS_DESKTOP_WINDOW_ID", True );
-        if( nAtom1 || nAtom2 )
+        int nProperties = 0;
+        Atom* pProperties = XListProperties( pDisplay, DefaultRootWindow( pDisplay ), &nProperties );
+        if( pProperties && nProperties )
         {
-            int nProperties = 0;
-            Atom* pProperties = XListProperties( pDisplay, DefaultRootWindow( pDisplay ), &nProperties );
-            if( pProperties && nProperties )
-            {
-                for( int i = 0; i < nProperties; i++ )
-                    if( pProperties[ i ] == nAtom1 ||
-                        pProperties[ i ] == nAtom2 )
+            for( int i = 0; i < nProperties; i++ )
+                if( pProperties[ i ] == nAtom1 ||
+                    pProperties[ i ] == nAtom2 )
                 {
                     ret = true;
+                    break;
                 }
-                XFree( pProperties );
-            }
+            XFree( pProperties );
         }
     }
+    if (ret)
+        return true;
 
-    if( ! ret )
+    Atom nUTFAtom       = XInternAtom( pDisplay, "UTF8_STRING", True );
+    Atom nNetWMNameAtom = XInternAtom( pDisplay, "_NET_WM_NAME", True );
+    if( nUTFAtom && nNetWMNameAtom )
     {
-        Atom nUTFAtom       = XInternAtom( pDisplay, "UTF8_STRING", True );
-        Atom nNetWMNameAtom = XInternAtom( pDisplay, "_NET_WM_NAME", True );
-        if( nUTFAtom && nNetWMNameAtom )
+        // another, more expensive check: search for a gnome-panel
+        ::Window aRoot, aParent, *pChildren = nullptr;
+        unsigned int nChildren = 0;
+        XQueryTree( pDisplay, DefaultRootWindow( pDisplay ),
+                    &aRoot, &aParent, &pChildren, &nChildren );
+        if( pChildren && nChildren )
         {
-            // another, more expensive check: search for a gnome-panel
-            ::Window aRoot, aParent, *pChildren = nullptr;
-            unsigned int nChildren = 0;
-            XQueryTree( pDisplay, DefaultRootWindow( pDisplay ),
-                        &aRoot, &aParent, &pChildren, &nChildren );
-            if( pChildren && nChildren )
+            for( unsigned int i = 0; i < nChildren && ! ret; i++ )
             {
-                for( unsigned int i = 0; i < nChildren && ! ret; i++ )
+                Atom nType = None;
+                int nFormat = 0;
+                unsigned long nItems = 0, nBytes = 0;
+                unsigned char* pProp = nullptr;
+                XGetWindowProperty( pDisplay,
+                                    pChildren[i],
+                                    nNetWMNameAtom,
+                                    0, 8,
+                                    False,
+                                    nUTFAtom,
+                                    &nType,
+                                    &nFormat,
+                                    &nItems,
+                                    &nBytes,
+                                    &pProp );
+                if( pProp && nType == nUTFAtom )
                 {
-                    Atom nType = None;
-                    int nFormat = 0;
-                    unsigned long nItems = 0, nBytes = 0;
-                    unsigned char* pProp = nullptr;
-                    XGetWindowProperty( pDisplay,
-                                        pChildren[i],
-                                        nNetWMNameAtom,
-                                        0, 8,
-                                        False,
-                                        nUTFAtom,
-                                        &nType,
-                                        &nFormat,
-                                        &nItems,
-                                        &nBytes,
-                                        &pProp );
-                    if( pProp && nType == nUTFAtom )
+                    OString aWMName( reinterpret_cast<char*>(pProp) );
+                    if (
+                        (aWMName.equalsIgnoreAsciiCase("gnome-shell")) ||
+                        (aWMName.equalsIgnoreAsciiCase("gnome-panel"))
+                       )
                     {
-                        OString aWMName( reinterpret_cast<char*>(pProp) );
-                        if (
-                            (aWMName.equalsIgnoreAsciiCase("gnome-shell")) ||
-                            (aWMName.equalsIgnoreAsciiCase("gnome-panel"))
-                           )
-                        {
-                            ret = true;
-                        }
+                        ret = true;
                     }
-                    if( pProp )
-                        XFree( pProp );
                 }
-                XFree( pChildren );
+                if( pProp )
+                    XFree( pProp );
             }
+            XFree( pChildren );
         }
     }
 
     return ret;
 }
 
+
 static bool is_kde5_desktop()
 {
     static const char * pFullVersion = getenv( "KDE_FULL_SESSION" );
@@ -162,15 +161,8 @@ DESKTOP_DETECTOR_PUBLIC DesktopType get_desktop_environment()
     if (plugin == "svp")
         return DESKTOP_NONE;
 
-    DesktopType ret;
-
-    const char *pSession;
-    OString aDesktopSession;
-    if ( ( pSession = getenv( "DESKTOP_SESSION" ) ) )
-        aDesktopSession = OString( pSession, strlen( pSession ) );
-
-    const char *pDesktop;
-    if ( ( pDesktop = getenv( "XDG_CURRENT_DESKTOP" ) ) )
+    const char *pDesktop = getenv( "XDG_CURRENT_DESKTOP" );
+    if ( pDesktop )
     {
         OString aCurrentDesktop = OString( pDesktop, strlen( pDesktop ) );
 
@@ -188,75 +180,80 @@ DESKTOP_DETECTOR_PUBLIC DesktopType get_desktop_environment()
         }
     }
 
+    const char *pSession = getenv( "DESKTOP_SESSION" );
+    OString aDesktopSession;
+    if ( pSession )
+        aDesktopSession = OString( pSession, strlen( pSession ) );
+
     // fast environment variable checks
     if ( aDesktopSession.equalsIgnoreAsciiCase( "gnome" ) )
-        ret = DESKTOP_GNOME;
+        return DESKTOP_GNOME;
     else if ( aDesktopSession.equalsIgnoreAsciiCase( "gnome-wayland" ) )
-        ret = DESKTOP_GNOME;
+        return DESKTOP_GNOME;
     else if ( aDesktopSession.equalsIgnoreAsciiCase( "mate" ) )
-        ret = DESKTOP_MATE;
+        return DESKTOP_MATE;
     else if ( aDesktopSession.equalsIgnoreAsciiCase( "xfce" ) )
-        ret = DESKTOP_XFCE;
+        return DESKTOP_XFCE;
     else if ( aDesktopSession.equalsIgnoreAsciiCase( "lxqt" ) )
-        ret = DESKTOP_LXQT;
-    else
-    {
-        if ( is_kde5_desktop() )
-            return DESKTOP_KDE5;
+        return DESKTOP_LXQT;
 
-        // tdf#121275 if we still can't tell, and WAYLAND_DISPLAY
-        // is set, default to gtk3
-        const char* pWaylandStr = getenv("WAYLAND_DISPLAY");
-        if (pWaylandStr && *pWaylandStr)
-            return DESKTOP_GNOME;
 
-        // these guys can be slower, with X property fetches,
-        // round-trips etc. and so are done later.
+    if ( is_kde5_desktop() )
+        return DESKTOP_KDE5;
 
-        // get display to connect to
-        const char* pDisplayStr = getenv( "DISPLAY" );
+    // tdf#121275 if we still can't tell, and WAYLAND_DISPLAY
+    // is set, default to gtk3
+    const char* pWaylandStr = getenv("WAYLAND_DISPLAY");
+    if (pWaylandStr && *pWaylandStr)
+        return DESKTOP_GNOME;
 
-        int nParams = rtl_getAppCommandArgCount();
-        OUString aParam;
-        OString aBParm;
-        for( int i = 0; i < nParams; i++ )
+    // these guys can be slower, with X property fetches,
+    // round-trips etc. and so are done later.
+
+    // get display to connect to
+    const char* pDisplayStr = getenv( "DISPLAY" );
+
+    int nParams = rtl_getAppCommandArgCount();
+    OUString aParam;
+    OString aBParm;
+    for( int i = 0; i < nParams; i++ )
+    {
+        rtl_getAppCommandArg( i, &aParam.pData );
+        if( i < nParams-1 && (aParam == "-display" || aParam == "--display" ) )
         {
-            rtl_getAppCommandArg( i, &aParam.pData );
-            if( i < nParams-1 && (aParam == "-display" || aParam == "--display" ) )
-            {
-                rtl_getAppCommandArg( i+1, &aParam.pData );
-                aBParm = OUStringToOString( aParam, osl_getThreadTextEncoding() );
-                pDisplayStr = aBParm.getStr();
-                break;
-            }
+            rtl_getAppCommandArg( i+1, &aParam.pData );
+            aBParm = OUStringToOString( aParam, osl_getThreadTextEncoding() );
+            pDisplayStr = aBParm.getStr();
+            break;
         }
+    }
 
-        // no server at all
-        if( ! pDisplayStr || !*pDisplayStr )
-            return DESKTOP_NONE;
+    // no server at all
+    if( ! pDisplayStr || !*pDisplayStr )
+        return DESKTOP_NONE;
 
 
-        /* #i92121# workaround deadlocks in the X11 implementation
-        */
-        static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
-        /* #i90094#
-           from now on we know that an X connection will be
-           established, so protect X against itself
-        */
-        if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
-            XInitThreads();
+    /* #i92121# workaround deadlocks in the X11 implementation
+    */
+    static const char* pNoXInitThreads = getenv( "SAL_NO_XINITTHREADS" );
+    /* #i90094#
+       from now on we know that an X connection will be
+       established, so protect X against itself
+    */
+    if( ! ( pNoXInitThreads && *pNoXInitThreads ) )
+        XInitThreads();
 
-        Display* pDisplay = XOpenDisplay( pDisplayStr );
-        if( pDisplay == nullptr )
-            return DESKTOP_NONE;
+    Display* pDisplay = XOpenDisplay( pDisplayStr );
+    if( pDisplay == nullptr )
+        return DESKTOP_NONE;
 
-        if ( is_gnome_desktop( pDisplay ) )
-            ret = DESKTOP_GNOME;
-        else
-            ret = DESKTOP_UNKNOWN;
+    DesktopType ret;
+    if ( is_gnome_desktop( pDisplay ) )
+        ret = DESKTOP_GNOME;
+    else
+        ret = DESKTOP_UNKNOWN;
 
-        XCloseDisplay( pDisplay );
-    }
+    XCloseDisplay( pDisplay );
 
     return ret;
 }


More information about the Libreoffice-commits mailing list