frames: Fix astonishing accidental pointer trickery

Whenever we added a frame to the GHashTable, we added the frame itself
as the value, and a pointer to its storage of the frame window XID,
as the key.

When we iterated over the hash table, we actually looked up the
MetaUIFrame in the key, which might seem extraordinarily wrong, but
eagle-eyed viewers might notice that the XID is the first field in
MetaUIFrame, so the key and value are actually the same pointer.

Changing the layout of MetaUIFrame at all causes this to go haywire,
so let's not do this and simply put the MetaUIFrame in the value,
as expected.
This commit is contained in:
Jasper St. Pierre 2014-12-31 22:31:45 -08:00
parent 4d1d8e831e
commit 669c9da2a4

View File

@ -1622,7 +1622,7 @@ find_frame_to_draw (MetaFrames *frames,
MetaUIFrame *frame; MetaUIFrame *frame;
g_hash_table_iter_init (&iter, frames->frames); g_hash_table_iter_init (&iter, frames->frames);
while (g_hash_table_iter_next (&iter, (gpointer *) &frame, NULL)) while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &frame))
if (gtk_cairo_should_draw_window (cr, frame->window)) if (gtk_cairo_should_draw_window (cr, frame->window))
return frame; return frame;