[Glade-devel] Commit -- fix selection



On Mon, 2003-06-23 at 16:39, Joaquin Cuenca Abela wrote:
Hi!

Owen wrote:

On Fri, 2003-06-20 at 03:08, Joaquin Cuenca Abela wrote:
Just a little heads up.

I've changed how selection works.

What was broken?

First, the handlers that draw the nodes:

There were two version, one for GladeWidget, and one for 
GladePlaceholders. The GladeWidget one was using the 
GdkWindow of the 
widget directly, instead of using the double buffered window.  No 
wonder it didn't work correctly, needing the "event_after" hack etc.

Probably not important, but this doesn't make sense... during 
expose handling, the double buffered pixmap is all that is 
available ...

Then, I don't understand how all that works...

Let's see, I though that if you have an expose handler, you should draw
on the expose->window, which is the window that gdk creates just before
the expose event (the double buffered one).

The code was instead drawing on the widget->window (or on the window of
one ancestor).  This is the window that I called "the GdkWindow of the
widget".  We were able to saw the nodes, just because we were not taking
in account the damaged region, and we were drawing at each expose the
whole rectangle with the nodes.  The damaged region will be redrawed
when the expose propagation ends with the double buffer (that we didn't
touch), and thus we saw the nodes everywhere except in the damaged
region.

So, am I on crack?  It makes sense for me, but I believe you much more
than myself on anything that concerns gtk.    

Likely what's going on is that you have a widget like GtkEntry where
the main drawing area is in a subwindow of widget->window.

Then when you get an expose on event->area, you were drawing on
widget->window with IncludeInferiors set in the GC, which *did*
draw on the real X window event->area instead of the backing pixmap
(since GDK can't intercept IncludeInferiors drawing) and then
the backing pixmap when flushed wrote over your nodes.

Regards,
                                        Owen






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]