mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-27 04:08:53 +01:00
internal/cglfw: bug fix: Motif hints should be updated for functions and decorations at the same time
Updates #2289 Closes #2760
This commit is contained in:
parent
90ee615e00
commit
226497a8a9
@ -35,14 +35,19 @@
|
|||||||
#define Button7 7
|
#define Button7 7
|
||||||
|
|
||||||
// Motif WM hints flags
|
// Motif WM hints flags
|
||||||
#define MWM_HINTS_DECORATIONS 2
|
|
||||||
#define MWM_DECOR_ALL 1
|
|
||||||
#define MWM_HINTS_FUNCTIONS 1
|
#define MWM_HINTS_FUNCTIONS 1
|
||||||
#define MWM_FUNC_RESIZE 2
|
#define MWM_FUNC_RESIZE 2
|
||||||
#define MWM_FUNC_MOVE 4
|
#define MWM_FUNC_MOVE 4
|
||||||
#define MWM_FUNC_MINIMIZE 8
|
#define MWM_FUNC_MINIMIZE 8
|
||||||
#define MWM_FUNC_MAXIMIZE 16
|
#define MWM_FUNC_MAXIMIZE 16
|
||||||
#define MWM_FUNC_CLOSE 32
|
#define MWM_FUNC_CLOSE 32
|
||||||
|
#define MWM_HINTS_DECORATIONS 2
|
||||||
|
#define MWM_DECOR_BORDER 2
|
||||||
|
#define MWM_DECOR_RESIZEH 4
|
||||||
|
#define MWM_DECOR_TITLE 8
|
||||||
|
#define MWM_DECOR_MENU 16
|
||||||
|
#define MWM_DECOR_MINIMIZE 32
|
||||||
|
#define MWM_DECOR_MAXIMIZE 64
|
||||||
|
|
||||||
#define _GLFW_XDND_VERSION 5
|
#define _GLFW_XDND_VERSION 5
|
||||||
|
|
||||||
@ -296,12 +301,61 @@ static void sendEventToWM(_GLFWwindow* window, Atom type,
|
|||||||
&event);
|
&event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void updateWindowHints(_GLFWwindow* window)
|
||||||
|
{
|
||||||
|
Bool maximizable = False;
|
||||||
|
if (!window->monitor && window->resizable && window->maxwidth == GLFW_DONT_CARE && window->maxheight == GLFW_DONT_CARE)
|
||||||
|
{
|
||||||
|
maximizable = True;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
unsigned long functions;
|
||||||
|
unsigned long decorations;
|
||||||
|
long input_mode;
|
||||||
|
unsigned long status;
|
||||||
|
} hints = {0};
|
||||||
|
|
||||||
|
hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
|
||||||
|
|
||||||
|
hints.functions = MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_CLOSE;
|
||||||
|
if (window->resizable && window->decorated)
|
||||||
|
{
|
||||||
|
hints.functions |= MWM_FUNC_RESIZE;
|
||||||
|
}
|
||||||
|
if (maximizable)
|
||||||
|
{
|
||||||
|
hints.functions |= MWM_FUNC_MAXIMIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window->decorated)
|
||||||
|
{
|
||||||
|
hints.decorations |= MWM_DECOR_BORDER | MWM_DECOR_TITLE | MWM_DECOR_MENU | MWM_DECOR_MINIMIZE;
|
||||||
|
if (window->resizable)
|
||||||
|
{
|
||||||
|
hints.decorations |= MWM_DECOR_RESIZEH;
|
||||||
|
}
|
||||||
|
if (maximizable)
|
||||||
|
{
|
||||||
|
hints.decorations |= MWM_DECOR_MAXIMIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XChangeProperty(_glfw.x11.display, window->x11.handle,
|
||||||
|
_glfw.x11.MOTIF_WM_HINTS,
|
||||||
|
_glfw.x11.MOTIF_WM_HINTS, 32,
|
||||||
|
PropModeReplace,
|
||||||
|
(unsigned char*) &hints,
|
||||||
|
sizeof(hints) / sizeof(long));
|
||||||
|
}
|
||||||
|
|
||||||
// Updates the normal hints according to the window settings
|
// Updates the normal hints according to the window settings
|
||||||
//
|
//
|
||||||
static void updateNormalHints(_GLFWwindow* window, int width, int height)
|
static void updateNormalHints(_GLFWwindow* window, int width, int height)
|
||||||
{
|
{
|
||||||
XSizeHints* hints = XAllocSizeHints();
|
XSizeHints* hints = XAllocSizeHints();
|
||||||
Bool maximizable = False;
|
|
||||||
|
|
||||||
if (!window->monitor)
|
if (!window->monitor)
|
||||||
{
|
{
|
||||||
@ -322,10 +376,6 @@ static void updateNormalHints(_GLFWwindow* window, int width, int height)
|
|||||||
hints->max_width = window->maxwidth;
|
hints->max_width = window->maxwidth;
|
||||||
hints->max_height = window->maxheight;
|
hints->max_height = window->maxheight;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
maximizable = True;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window->numer != GLFW_DONT_CARE &&
|
if (window->numer != GLFW_DONT_CARE &&
|
||||||
window->denom != GLFW_DONT_CARE)
|
window->denom != GLFW_DONT_CARE)
|
||||||
@ -349,31 +399,7 @@ static void updateNormalHints(_GLFWwindow* window, int width, int height)
|
|||||||
XSetWMNormalHints(_glfw.x11.display, window->x11.handle, hints);
|
XSetWMNormalHints(_glfw.x11.display, window->x11.handle, hints);
|
||||||
XFree(hints);
|
XFree(hints);
|
||||||
|
|
||||||
struct
|
updateWindowHints(window);
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
unsigned long functions;
|
|
||||||
unsigned long decorations;
|
|
||||||
long input_mode;
|
|
||||||
unsigned long status;
|
|
||||||
} mwmHints = {0};
|
|
||||||
|
|
||||||
mwmHints.flags = MWM_HINTS_FUNCTIONS;
|
|
||||||
mwmHints.functions = MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_CLOSE;
|
|
||||||
if (window->resizable)
|
|
||||||
{
|
|
||||||
mwmHints.functions |= MWM_FUNC_RESIZE;
|
|
||||||
}
|
|
||||||
if (maximizable)
|
|
||||||
{
|
|
||||||
mwmHints.functions |= MWM_FUNC_MAXIMIZE;
|
|
||||||
}
|
|
||||||
XChangeProperty(_glfw.x11.display, window->x11.handle,
|
|
||||||
_glfw.x11.MOTIF_WM_HINTS,
|
|
||||||
_glfw.x11.MOTIF_WM_HINTS, 32,
|
|
||||||
PropModeReplace,
|
|
||||||
(unsigned char*) &mwmHints,
|
|
||||||
sizeof(mwmHints) / sizeof(long));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Updates the full screen status of the window
|
// Updates the full screen status of the window
|
||||||
@ -2642,24 +2668,7 @@ void _glfwPlatformSetWindowResizable(_GLFWwindow* window, GLFWbool enabled)
|
|||||||
|
|
||||||
void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, GLFWbool enabled)
|
void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, GLFWbool enabled)
|
||||||
{
|
{
|
||||||
struct
|
updateWindowHints(window);
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
unsigned long functions;
|
|
||||||
unsigned long decorations;
|
|
||||||
long input_mode;
|
|
||||||
unsigned long status;
|
|
||||||
} hints = {0};
|
|
||||||
|
|
||||||
hints.flags = MWM_HINTS_DECORATIONS;
|
|
||||||
hints.decorations = enabled ? MWM_DECOR_ALL : 0;
|
|
||||||
|
|
||||||
XChangeProperty(_glfw.x11.display, window->x11.handle,
|
|
||||||
_glfw.x11.MOTIF_WM_HINTS,
|
|
||||||
_glfw.x11.MOTIF_WM_HINTS, 32,
|
|
||||||
PropModeReplace,
|
|
||||||
(unsigned char*) &hints,
|
|
||||||
sizeof(hints) / sizeof(long));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled)
|
void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled)
|
||||||
|
Loading…
Reference in New Issue
Block a user