glutGet window position should be relative to parent
authorDiederick Niehorster <dcnieho@gmail.com>
Wed, 27 Aug 2014 11:45:58 +0000 (11:45 +0000)
committerDiederick Niehorster <dcnieho@gmail.com>
Wed, 27 Aug 2014 11:45:58 +0000 (11:45 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1701 7f0cb862-5218-0410-a997-914c9d46530a

src/x11/fg_state_x11.c

index 206478f..79a7ac9 100644 (file)
@@ -88,15 +88,23 @@ int fgPlatformGlutGet ( GLenum eWhat )
     case GLUT_WINDOW_HEADER_HEIGHT:
     {
         int x, y;
-        Window w;
+        Window p,w;
 
         if( fgStructure.CurrentWindow == NULL )
             return 0;
 
+        if (fgStructure.CurrentWindow->Parent)
+            /* For child window, we should return relative to upper-left
+             * of parent's client area.
+             */
+            p = fgStructure.CurrentWindow->Parent->Window.Handle;
+        else
+            p = fgDisplay.pDisplay.RootWindow;
+            
         XTranslateCoordinates(
             fgDisplay.pDisplay.Display,
             fgStructure.CurrentWindow->Window.Handle,
-            fgDisplay.pDisplay.RootWindow,
+            p,
             0, 0, &x, &y, &w);
 
         switch ( eWhat )
@@ -105,7 +113,8 @@ int fgPlatformGlutGet ( GLenum eWhat )
         case GLUT_WINDOW_Y: return y;
         }
 
-        if ( w == 0 )
+        if ( w == 0 || fgStructure.CurrentWindow->Parent)
+            /* logic below needs w, and child windows don't have borders */
             return 0;
         XTranslateCoordinates(
             fgDisplay.pDisplay.Display,