Ref and sink priv->tooltips in init() and unref priv->tooltips in destroy

Tue Dec  4 12:06:13 2001  Owen Taylor  <otaylor@redhat.com>
	* gtk/gtkcolorsel.c: Ref and sink priv->tooltips in
	init() and unref priv->tooltips in destroy rather
	than calling gtk_object_destroy() which has no
	effect on memory management. (#66104, HideToshi
	Tajima)
	* gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full()
	so we free the when the object is freed. (Fixes memory
	leak, #66096, HideToshi Tajima)
	* gdk/gdkevents.c (gdk_synthesize_window_state): Use
	a full GdkEvent structure to avoid reads of uninitialized/
	invalid memory in gdk_event_put() (#65877, patch
	from Hidetoshi Tajima)
This commit is contained in:
Owen Taylor
2001-12-04 17:12:35 +00:00
committed by Owen Taylor
parent 76030813c7
commit feca5a64e2
9 changed files with 136 additions and 23 deletions

View File

@ -941,23 +941,23 @@ gdk_synthesize_window_state (GdkWindow *window,
GdkWindowState unset_flags,
GdkWindowState set_flags)
{
GdkEventWindowState temp_event;
GdkEvent temp_event;
GdkWindowState old;
g_return_if_fail (window != NULL);
temp_event.window = window;
temp_event.type = GDK_WINDOW_STATE;
temp_event.send_event = FALSE;
temp_event.window_state.window = window;
temp_event.window_state.type = GDK_WINDOW_STATE;
temp_event.window_state.send_event = FALSE;
old = ((GdkWindowObject*) temp_event.window)->state;
old = ((GdkWindowObject*) temp_event.window_state.window)->state;
temp_event.changed_mask = (unset_flags | set_flags) ^ old;
temp_event.new_window_state = old;
temp_event.new_window_state |= set_flags;
temp_event.new_window_state &= ~unset_flags;
temp_event.window_state.changed_mask = (unset_flags | set_flags) ^ old;
temp_event.window_state.new_window_state = old;
temp_event.window_state.new_window_state |= set_flags;
temp_event.window_state.new_window_state &= ~unset_flags;
if (temp_event.new_window_state == old)
if (temp_event.window_state.new_window_state == old)
return; /* No actual work to do, nothing changed. */
/* Actually update the field in GdkWindow, this is sort of an odd
@ -965,7 +965,7 @@ gdk_synthesize_window_state (GdkWindow *window,
* inconsistent state to the user.
*/
((GdkWindowObject*) window)->state = temp_event.new_window_state;
((GdkWindowObject*) window)->state = temp_event.window_state.new_window_state;
/* We only really send the event to toplevels, since
* all the window states don't apply to non-toplevels.
@ -977,7 +977,7 @@ gdk_synthesize_window_state (GdkWindow *window,
case GDK_WINDOW_TOPLEVEL:
case GDK_WINDOW_DIALOG:
case GDK_WINDOW_TEMP: /* ? */
gdk_event_put ((GdkEvent*) &temp_event);
gdk_event_put (&temp_event);
break;
case GDK_WINDOW_FOREIGN: