window_update_motif_hints(): uint32_t for fields, fixes #2238
xcb_get_property_value() returns 32-bit property fields
This commit is contained in:
parent
6fe8d30d65
commit
ad36e32764
27
src/window.c
27
src/window.c
@ -320,6 +320,9 @@ void window_update_motif_hints(i3Window *win, xcb_get_property_reply_t *prop, bo
|
|||||||
* https://people.gnome.org/~tthurman/docs/metacity/xprops_8h-source.html
|
* https://people.gnome.org/~tthurman/docs/metacity/xprops_8h-source.html
|
||||||
* http://stackoverflow.com/questions/13787553/detect-if-a-x11-window-has-decorations
|
* http://stackoverflow.com/questions/13787553/detect-if-a-x11-window-has-decorations
|
||||||
*/
|
*/
|
||||||
|
#define MWM_HINTS_FLAGS_FIELD 0
|
||||||
|
#define MWM_HINTS_DECORATIONS_FIELD 2
|
||||||
|
|
||||||
#define MWM_HINTS_DECORATIONS (1 << 1)
|
#define MWM_HINTS_DECORATIONS (1 << 1)
|
||||||
#define MWM_DECOR_ALL (1 << 0)
|
#define MWM_DECOR_ALL (1 << 0)
|
||||||
#define MWM_DECOR_BORDER (1 << 1)
|
#define MWM_DECOR_BORDER (1 << 1)
|
||||||
@ -333,17 +336,23 @@ void window_update_motif_hints(i3Window *win, xcb_get_property_reply_t *prop, bo
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The property consists of an array of 5 uint64_t's. The first value is a bit
|
/* The property consists of an array of 5 uint32_t's. The first value is a
|
||||||
* mask of what properties the hint will specify. We are only interested in
|
* bit mask of what properties the hint will specify. We are only interested
|
||||||
* MWM_HINTS_DECORATIONS because it indicates that the second value of the
|
* in MWM_HINTS_DECORATIONS because it indicates that the third value of the
|
||||||
* array tells us which decorations the window should have, each flag being
|
* array tells us which decorations the window should have, each flag being
|
||||||
* a particular decoration. */
|
* a particular decoration. Notice that X11 (Xlib) often mentions 32-bit
|
||||||
uint64_t *motif_hints = (uint64_t *)xcb_get_property_value(prop);
|
* fields which in reality are implemented using unsigned long variables
|
||||||
|
* (64-bits long on amd64 for example). On the other hand,
|
||||||
|
* xcb_get_property_value() behaves strictly according to documentation,
|
||||||
|
* i.e. returns 32-bit data fields. */
|
||||||
|
uint32_t *motif_hints = (uint32_t *)xcb_get_property_value(prop);
|
||||||
|
|
||||||
if (motif_border_style != NULL && motif_hints[0] & MWM_HINTS_DECORATIONS) {
|
if (motif_border_style != NULL &&
|
||||||
if (motif_hints[1] & MWM_DECOR_ALL || motif_hints[1] & MWM_DECOR_TITLE)
|
motif_hints[MWM_HINTS_FLAGS_FIELD] & MWM_HINTS_DECORATIONS) {
|
||||||
|
if (motif_hints[MWM_HINTS_DECORATIONS_FIELD] & MWM_DECOR_ALL ||
|
||||||
|
motif_hints[MWM_HINTS_DECORATIONS_FIELD] & MWM_DECOR_TITLE)
|
||||||
*motif_border_style = BS_NORMAL;
|
*motif_border_style = BS_NORMAL;
|
||||||
else if (motif_hints[1] & MWM_DECOR_BORDER)
|
else if (motif_hints[MWM_HINTS_DECORATIONS_FIELD] & MWM_DECOR_BORDER)
|
||||||
*motif_border_style = BS_PIXEL;
|
*motif_border_style = BS_PIXEL;
|
||||||
else
|
else
|
||||||
*motif_border_style = BS_NONE;
|
*motif_border_style = BS_NONE;
|
||||||
@ -351,6 +360,8 @@ void window_update_motif_hints(i3Window *win, xcb_get_property_reply_t *prop, bo
|
|||||||
|
|
||||||
FREE(prop);
|
FREE(prop);
|
||||||
|
|
||||||
|
#undef MWM_HINTS_FLAGS_FIELD
|
||||||
|
#undef MWM_HINTS_DECORATIONS_FIELD
|
||||||
#undef MWM_HINTS_DECORATIONS
|
#undef MWM_HINTS_DECORATIONS
|
||||||
#undef MWM_DECOR_ALL
|
#undef MWM_DECOR_ALL
|
||||||
#undef MWM_DECOR_BORDER
|
#undef MWM_DECOR_BORDER
|
||||||
|
Loading…
Reference in New Issue
Block a user