On Wed, Jan 10, 2007 at 10:51:26PM -0500, muppet wrote: > > On Jan 10, 2007, at 8:36 PM, Philipp E. Letschert wrote: > > >I have a subroutine connected to a popup menu item. When that > >routine is > >finished a new popup window displays the result. Sometimes the > >routine takes > >longer to finish and during that time the popup menu stays visible. > > > >How can I run the subroutine in background and have the popup menu > >disappear > >right after activating the menu item? > > Have your menu item handler install an idle action that starts the > dialog box. That is: > > 1 user activates menu item > 2 menu handler is called > 3 menu handler does Glib::Idle->add (\&do_the_thing); > 4 menu handler finishes, menu disappears > 5 control returns to main loop > 6 main loop sees that there is a pending idle action > 7 do_the_thing() fires > 8 do_the_thing() launches your dialog box > > In essence, it's just a layer of indirection to defer running the > dialog box until "sometime later".
Thanks, partial success. The menu disappears as requested, but when step 7 is reached, the main window freezes until do_the_thing() finishes. It would be great if the user could continue using the application normally during the subroutine runs (and queue additional calls to that subroutine...). Setting a lower priority with Glib::Idle->add(\&do_the_thing, $data, 300); did not work as desired, I've looked up the API, the tutorial and other sources, but haven't found the right answer (or overlooked it?). Currently I'm also a bit confused if this is a Glib/Gtk issue or perl-specific (fork, threads?). Additional hints, or a pointer to a working solution would be very nice. TIA, Phil _______________________________________________ gtk-perl-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtk-perl-list
