Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2016-11-20 00:58:41 +0300
committerCampbell Barton <ideasman42@gmail.com>2016-11-20 01:03:51 +0300
commit53a1b48321b73b7b6dd3e8fde5f1b58decbf20d7 (patch)
tree24510ec288cbf0a94abae3319f899c3081b06965
parentdd82d70bc5eade5dddd6d20ef81eb81ba43463da (diff)
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.
-rw-r--r--intern/ghost/intern/GHOST_WindowX11.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp
index ec2b65e67d0..47fbe1256b1 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)