mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
allow Motif hints to be smaller than expected; GLUT for example seems to
2002-08-10 Havoc Pennington <hp@pobox.com> * src/xprops.c (meta_prop_get_motif_hints): allow Motif hints to be smaller than expected; GLUT for example seems to set a smaller struct. #89841 * src/window.c (update_mwm_hints): use g_free on motif hints as we don't use the XGetWindowProperty return directly anymore
This commit is contained in:
parent
c540438b91
commit
02bcf06809
@ -1,3 +1,12 @@
|
||||
2002-08-10 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* src/xprops.c (meta_prop_get_motif_hints): allow Motif hints to
|
||||
be smaller than expected; GLUT for example seems to set a smaller
|
||||
struct. #89841
|
||||
|
||||
* src/window.c (update_mwm_hints): use g_free on motif hints as we
|
||||
don't use the XGetWindowProperty return directly anymore
|
||||
|
||||
2002-08-10 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* src/window.c (meta_window_free): be sure window is
|
||||
|
@ -4385,7 +4385,7 @@ update_mwm_hints (MetaWindow *window)
|
||||
else
|
||||
meta_verbose ("Functions flag unset\n");
|
||||
|
||||
meta_XFree (hints);
|
||||
g_free (hints);
|
||||
|
||||
recalc_window_features (window);
|
||||
}
|
||||
|
22
src/xprops.c
22
src/xprops.c
@ -166,14 +166,17 @@ meta_prop_get_motif_hints (MetaDisplay *display,
|
||||
gulong bytes_after;
|
||||
MotifWmHints *hints;
|
||||
gulong n_items;
|
||||
int real_size, max_size;
|
||||
|
||||
#define EXPECTED_ITEMS sizeof (MotifWmHints)/sizeof (gulong)
|
||||
#define MAX_ITEMS sizeof (MotifWmHints)/sizeof (gulong)
|
||||
|
||||
*hints_p = NULL;
|
||||
|
||||
hints = NULL;
|
||||
n_items = 0;
|
||||
meta_error_trap_push (display);
|
||||
if (XGetWindowProperty (display->xdisplay, xwindow, xatom,
|
||||
0, EXPECTED_ITEMS,
|
||||
0, MAX_ITEMS,
|
||||
False, AnyPropertyType, &type, &format, &n_items,
|
||||
&bytes_after, (guchar **)&hints) != Success ||
|
||||
type == None)
|
||||
@ -185,14 +188,25 @@ meta_prop_get_motif_hints (MetaDisplay *display,
|
||||
if (meta_error_trap_pop (display) != Success)
|
||||
return FALSE;
|
||||
|
||||
if (type == None || n_items != EXPECTED_ITEMS)
|
||||
if (type == None || n_items <= 0)
|
||||
{
|
||||
meta_verbose ("Motif hints had unexpected type or n_items\n");
|
||||
XFree (hints);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*hints_p = hints;
|
||||
g_assert (hints != NULL);
|
||||
|
||||
/* The issue here is that some old crufty code will set a smaller
|
||||
* MotifWmHints than the one we expect, apparently. I'm not sure of
|
||||
* the history behind it. See bug #89841 for example.
|
||||
*/
|
||||
*hints_p = g_new0 (MotifWmHints, 1);
|
||||
real_size = n_items * sizeof (gulong);
|
||||
max_size = MAX_ITEMS * sizeof (gulong);
|
||||
memcpy (*hints_p, hints, MIN (real_size, max_size));
|
||||
|
||||
XFree (hints);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user