[Bug: 21.4.12] xemacs: X Error of failedrequest:BadWindow(invalid Window parameter)

Ben Wing ben at 666.com
Mon Nov 22 22:15:10 EST 2004



> Right, so anything larger than ~4Mb will result in the use of 
> an incremental transfer. This is the case where 
> wait_delaying_user_input() gets called, and that's where the 
> problem appears to lie.
> 
> Incremental selections involve the selection owner storing a 
> chunk of the selection on a property, waiting for the 
> requestor to delete it, storing the next chunk, and so on.
> 
> The owner has to wait for a PropertyNotify event indicating 
> that the requestor has deleted the property before storing 
> the next chunk. To do this, XEmacs calls 
> next_event_internal() to obtain the next event. If it is a 
> command event or an eval or magic_eval event, it enqueues it 
> for later processing, otherwise it dispatches it.
> 
> One issue is that dispatching events may have consequences 
> which the incremental selection code wasn't expecting. E.g. 
> further SelectionRequest events may be processed while an 
> existing transfer is underway (pasting into an xterm results 
> in multiple requests, for UTF8_STRING, TEXT and COMPOUND_TEXT).

I think you're right that XEmacs should be delaying *all* events except the
one it is looking for.  When the selection code was written there was only
the "command event queue" and maybe there are problems putting non-user
events there; certainly it wasn't designed for it.  But now there is also
the "dispatch event queue" which just stores events taken directly from the
window system -- e.g. for quit processing to work well you need to snarf all
pending events so you can look through them.  It seems like you could just
go into a loop something like

Loop
{
  block until X event ready;
  drain queue;
  check for the event we're looking for and if so remove it from the queue
and exit;
}

To block I think you call XtAppProcessEvent (Xt_app_con, XtIMXEvent);
To do the others, see event_stream_quit_p().






More information about the XEmacs-Beta mailing list