X11: implemented borderless and captionless window style using motif hints
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1703 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
80c07e8b65
commit
b0288518d1
@ -40,6 +40,18 @@
|
|||||||
#include "x11/fg_window_x11_glx.h"
|
#include "x11/fg_window_x11_glx.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Motif window hints, only define needed ones */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
unsigned long functions;
|
||||||
|
unsigned long decorations;
|
||||||
|
long input_mode;
|
||||||
|
unsigned long status;
|
||||||
|
} MotifWmHints;
|
||||||
|
#define MWM_HINTS_DECORATIONS (1L << 1)
|
||||||
|
#define MWM_DECOR_BORDER (1L << 1)
|
||||||
|
|
||||||
static int fghResizeFullscrToggle(void)
|
static int fghResizeFullscrToggle(void)
|
||||||
{
|
{
|
||||||
XWindowAttributes attributes;
|
XWindowAttributes attributes;
|
||||||
@ -341,6 +353,26 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
|
|||||||
XSetWMProtocols( fgDisplay.pDisplay.Display, window->Window.Handle,
|
XSetWMProtocols( fgDisplay.pDisplay.Display, window->Window.Handle,
|
||||||
&fgDisplay.pDisplay.DeleteWindow, 1 );
|
&fgDisplay.pDisplay.DeleteWindow, 1 );
|
||||||
|
|
||||||
|
if (!isSubWindow && !window->IsMenu &&
|
||||||
|
((fgState.DisplayMode & GLUT_BORDERLESS) || (fgState.DisplayMode & GLUT_CAPTIONLESS)))
|
||||||
|
{
|
||||||
|
/* _MOTIF_WM_HINTS is replaced by _NET_WM_WINDOW_TYPE, but that property does not allow precise
|
||||||
|
* control over the visual style of the window, which is what we are trying to achieve here.
|
||||||
|
* Stick with Motif and hope for the best... */
|
||||||
|
MotifWmHints hints = {0};
|
||||||
|
hints.flags = MWM_HINTS_DECORATIONS;
|
||||||
|
hints.decorations = (fgState.DisplayMode & GLUT_CAPTIONLESS) ? MWM_DECOR_BORDER:0;
|
||||||
|
printf("%i\n",hints.decorations);
|
||||||
|
|
||||||
|
XChangeProperty(fgDisplay.pDisplay.Display, window->Window.Handle,
|
||||||
|
XInternAtom( fgDisplay.pDisplay.Display, "_MOTIF_WM_HINTS", False ),
|
||||||
|
XInternAtom( fgDisplay.pDisplay.Display, "_MOTIF_WM_HINTS", False ), 32,
|
||||||
|
PropModeReplace,
|
||||||
|
(unsigned char*) &hints,
|
||||||
|
sizeof(MotifWmHints) / sizeof(long));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (fgDisplay.pDisplay.NetWMSupported
|
if (fgDisplay.pDisplay.NetWMSupported
|
||||||
&& fgDisplay.pDisplay.NetWMPid != None
|
&& fgDisplay.pDisplay.NetWMPid != None
|
||||||
&& fgDisplay.pDisplay.ClientMachine != None)
|
&& fgDisplay.pDisplay.ClientMachine != None)
|
||||||
|
Reference in New Issue
Block a user