[Bf-blender-cvs] [53a1b48] master: GHOST/X11: Incorrect WM_STATE access
Campbell Barton
noreply at git.blender.org
Sat Nov 19 22:48:30 CET 2016
Commit: 53a1b48321b73b7b6dd3e8fde5f1b58decbf20d7
Author: Campbell Barton
Date: Sun Nov 20 08:58:41 2016 +1100
Branches: master
https://developer.blender.org/rB53a1b48321b73b7b6dd3e8fde5f1b58decbf20d7
GHOST/X11: Incorrect WM_STATE access
This worked by accident because of struct padding,
treat state as a CARD32 as documented.
Matches wine-x11 usage.
===================================================================
M intern/ghost/intern/GHOST_WindowX11.cpp
===================================================================
diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp
index ec2b65e..47fbe12 100644
--- a/intern/ghost/intern/GHOST_WindowX11.cpp
+++ b/intern/ghost/intern/GHOST_WindowX11.cpp
@@ -861,24 +861,32 @@ void GHOST_WindowX11::icccmSetState(int state)
int GHOST_WindowX11::icccmGetState(void) const
{
- Atom *prop_ret;
+ struct {
+ CARD32 state;
+ XID icon;
+ } *prop_ret;
unsigned long bytes_after, num_ret;
Atom type_ret;
- int format_ret, st;
+ int ret, format_ret;
+ CARD32 st;
prop_ret = NULL;
- st = XGetWindowProperty(
+ ret = XGetWindowProperty(
m_display, m_window, m_system->m_atom.WM_STATE, 0, 2,
False, m_system->m_atom.WM_STATE, &type_ret,
&format_ret, &num_ret, &bytes_after, ((unsigned char **)&prop_ret));
- if ((st == Success) && (prop_ret) && (num_ret == 2))
- st = prop_ret[0];
- else
+ if ((ret == Success) && (prop_ret != NULL) && (num_ret == 2)) {
+ st = prop_ret->state;
+ }
+ else {
st = NormalState;
+ }
- if (prop_ret)
+ if (prop_ret) {
XFree(prop_ret);
- return (st);
+ }
+
+ return st;
}
void GHOST_WindowX11::netwmMaximized(bool set)
More information about the Bf-blender-cvs
mailing list