Matt Birkholz [Wed, 23 Nov 2016 17:38:21 +0000 (10:38 -0700)]
microcode (OS_test_select_registry): Check for subprocess status
changes when !blockp and the registry is empty. This is most easily
done in OS_pause, where OS_process_any_status_change (if any) is
available. Thus OS_pause gets a new param BLOCKP.
Matt Birkholz [Thu, 17 Nov 2016 22:12:20 +0000 (15:12 -0700)]
runtime/thread.scm (handle-current-thread-events): Do not warn...
...on stderr when there is no current thread. Handle-current-thread-
events is only used by the after-gc-interrupt-handler, which may run
while there is no current thread.
The Gtk branch has no umodules and no lib/ subdirectory to distinguish
the standard library directory. Use the last directory in the library
directory path.
Matt Birkholz [Thu, 10 Nov 2016 00:15:36 +0000 (17:15 -0700)]
Search the library directory path for the standard library directory
containing lib/ and the built-in object files. Adjust pathname->
standard-uri and standard-uri->pathname to use this directory instead
of the first directory in the path.
When plugins used --prepend-library to test a shared object, C worlds
failed. They could not re-load registered object files, nor load
bundled options. The guarded-system-loader only looked in the first
directory in the path, not the standard library directory.
The busy loop in the keyboard peek-no-hang operation is more expensive
than ever. Replace it with a timer in block-for-event. Cache
current-thread and check that it has not changed before deregistering.
Matt Birkholz [Sun, 31 Jul 2016 18:56:31 +0000 (11:56 -0700)]
x11-screen: Fix selection handling (cut/paste between X windows).
Cut/paste should now work with two minor fixes (typos, really), and
one kludge keeping non-unique alien objects in a weak-eq-hash-table.
The original xds (fixnums) are held as strongly as the new interned
symbols.
The xds were intended to be x-displays? Interned x-display objects
would be more appropriate keys for a weak-eq-hash-table.
Matt Birkholz [Fri, 29 Jul 2016 06:16:06 +0000 (23:16 -0700)]
x11: Fix x-display-process-events to return #f when all events read.
The plugin's version of x_display_process_events will return any
keypress even though some do not translate into any input (e.g. when
it IsModifier). X-display-process-events would return #f in that case
and preview-events think all events were read. Now x-display-process-
events returns #t and preview-events disregards it, continuing to read
events. Many callers must disregard these non-events.
Punt property-notify events in the previewer; do not queue them.
Matt Birkholz [Tue, 26 Jul 2016 22:02:26 +0000 (15:02 -0700)]
Restore interruptibility to Edwin commands when on an X display.
Commit 52eea88 (Do NOT use permanently-register-io-thread-event in
Edwin.) removed too much. Without an IO thread event registered to
preview X events, Edwin cannot be interrupted by a ^G key press.
Restore X event previewing using a custom, "permanently" registered IO
thread event that always consumes some input before re-registering
(i.e. withOUT the reading-event? variable that caused the spinning
previously). Now X events are read only in the previewer (and
wait-for-event). Keyboard operations only process queued events. And
the queue is used only by the previewer or with thread events (the
previewer) blocked.
Remove deregister-all-events from cmdl/start so that the "non-
permanent" IO thread event registered by the grab-editor wrapper is
not undone when the editor command level is started. Reversing the
order ("grab" the editor INSIDE the command level) makes the wrapper's
special operations unavailable when the command level is made. If
there is need for the aggressive decoupling of command levels as
rendered by deregister-all-events (which nevertheless did NOT remove
"permanent" IO event registrations), some mechanism will be needed to
set up the previewer after the command level is entered.