#define FREEGLUT_BUILDING_LIB
#include <GL/freeglut.h>
-#include <limits.h> /* LONG_MAX */
-#include <unistd.h> /* usleep */
+#include <limits.h> /* LONG_MAX */
+#include <unistd.h> /* usleep, gethostname, getpid */
+#include <sys/types.h> /* pid_t */
#include "../fg_internal.h"
#ifdef EGL_VERSION_1_0
static int fghResizeFullscrToggle(void)
{
XWindowAttributes attributes;
+ SFG_Window *win = fgStructure.CurrentWindow;
if(glutGet(GLUT_FULL_SCREEN)) {
/* restore original window size */
- SFG_Window *win = fgStructure.CurrentWindow;
fgStructure.CurrentWindow->State.WorkMask = GLUT_SIZE_WORK;
fgStructure.CurrentWindow->State.DesiredWidth = win->State.pWState.OldWidth;
fgStructure.CurrentWindow->State.DesiredHeight = win->State.pWState.OldHeight;
}
#endif
- /*
- * XXX Assume the new window is visible by default
- * XXX Is this a safe assumption?
- */
- window->State.Visible = GL_TRUE;
-
sizeHints.flags = 0;
if ( positionUse )
sizeHints.flags |= USPosition;
XSetWMProtocols( fgDisplay.pDisplay.Display, window->Window.Handle,
&fgDisplay.pDisplay.DeleteWindow, 1 );
+ if (fgDisplay.pDisplay.NetWMSupported
+ && fgDisplay.pDisplay.NetWMPid != None
+ && fgDisplay.pDisplay.ClientMachine != None)
+ {
+ char hostname[HOST_NAME_MAX];
+ pid_t pid = getpid();
+
+ if (pid > 0 && gethostname(hostname, sizeof(hostname)) > -1)
+ {
+ hostname[sizeof(hostname) - 1] = '\0';
+
+ XChangeProperty(
+ fgDisplay.pDisplay.Display,
+ window->Window.Handle,
+ fgDisplay.pDisplay.NetWMPid,
+ XA_CARDINAL,
+ 32,
+ PropModeReplace,
+ (unsigned char *) &pid,
+ 1
+ );
+
+ XChangeProperty(
+ fgDisplay.pDisplay.Display,
+ window->Window.Handle,
+ fgDisplay.pDisplay.ClientMachine,
+ XA_STRING,
+ 8,
+ PropModeReplace,
+ (unsigned char *) hostname,
+ strlen(hostname)
+ );
+ }
+ }
+
#ifdef EGL_VERSION_1_0
fghPlatformOpenWindowEGL(window);
#else
fgRegisterDevices( fgDisplay.pDisplay.Display, &(window->Window.Handle) );
#endif
- XMapWindow( fgDisplay.pDisplay.Display, window->Window.Handle );
+ if (!window->IsMenu) /* Don't show window after creation if its a menu */
+ {
+ XMapWindow( fgDisplay.pDisplay.Display, window->Window.Handle );
+ window->State.Visible = GL_TRUE;
+ }
XFree(visualInfo);
- if( !isSubWindow)
+ /* wait till window visible */
+ if( !isSubWindow && !window->IsMenu)
XPeekIfEvent( fgDisplay.pDisplay.Display, &eventReturnBuffer, &fghWindowIsVisible, (XPointer)(window->Window.Handle) );
#undef WINDOW_CONFIG
}