On Sun, Dec 28, 2008 at 6:45 AM, Francesco Montorsi
<f18m_cpp217...@yahoo.it> wrote:
> Hi,
>   is it possible to process only some specific events from the GTK/GDK event
> queue and leave the others in the queue so they can be processed later by
> the main loop?
>
> I'll try to explain it better: I have a GTK-based app which runs the
> gtk_main() in its void main().
> However at a certain point (e.g. upon user click on a GtkButton), I need to
> perform a long computation. I don't want to use a secondary thread; rather
> I'd like to do everything from the main thread. To avoid blocking the GUI of
> my app during the computation, I call from time to time:
>
> while (gtk_events_pending() != 0)
>    gtk_main_iteration();
>
> to process the pending events in the queue. However now I'd like to process
> only _some_ of the events of the queue, and leave the others in the queue
> itself.
>
> Is it possible?

Hi, for some odd cases you can use:
   http://library.gnome.org/devel/gdk/stable/gdk-Events.html#gdk-event-put

i.e. by pumping the events out of the event queue yourself, and putting the
ones you didnt process back.

I doubt this is what you need, I think that removing the while
(gtk_events_pending())
code all together and replacing it with more returns to the event
loop, and shorter
iterations in timeouts and signal callbacks - will probably fix
whatever problems
you are having.

i.e. save an iterator position and process only a few iterations every time
the idle handler you install is called, when the loop is finally
finished then signal that
your computation is finished.

You can also push a progress bar and set your UI insensitive for the duration
of the process this way.

Cheers,
                    -Tristan
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to