Age | Commit message (Collapse) | Author |
|
a vertical scrollbar is shown
fixed horizontal scrollbar showing up in local chat
|
|
These are all very well when we just want to dump the output to a log, or
whatever, but in a unit-test context it matters for comparison.
|
|
|
|
|
|
|
|
|
|
|
|
Also add "len" key to event data on LLProcess::getPump(). If you've used
setLimit(), event["data"].length() may not reflect the length of the
accumulated data in the ReadPipe.
Add unit test with stdin/stdout handshake with child process.
|
|
|
|
|
|
In the course of re-enabling the indra/test tests last year, Log generalized a
workaround I'd introduced in llsdmessage_test.cpp. In Linux viewer land, a
test program trying to catch an expected exception can't seem to catch it by
its specific class (across the libllcommon.so boundary), but must instead
catch std::runtime_error and validate the typeid().name() string. Log added a
macro for this idiom in llevents_tut.cpp. Generalize that macro further for
normal-case processing as well, move it to a header file of its own and use it
in all known places -- plus the new exception-catching tests in
llprocess_test.cpp.
|
|
|
|
|
|
Add LLProcess::FileParam to specify how to construct each child's standard
file slot, with lots of comments about features designed but not yet
implemented. The point is to design it with enough flexibility to be able to
extend to foreseeable use cases.
Add LLProcess::Params::files to collect up to 3 FileParam items. Naturally
this extends the accepted LLSD syntax as well.
Implement type="" (child inherits parent file descriptor) and "pipe" (parent
constructs anonymous pipe to pass to child).
Add LLProcess::FILESLOT enum, plus methods:
getReadPipe(FILESLOT), getOptReadPipe(FILESLOT)
getWritePipe(), getOptWritePipe()
getPipeName(FILESLOT): placeholder implementation for now
Add LLProcess::ReadPipe and WritePipe classes, as returned by get*Pipe().
WritePipe supports get_ostream() method for streaming to child stdin.
ReadPipe supports get_istream() method for reading from child stdout/stderr.
It also provides getPump() returning LLEventPump& so interested parties can
listen for arrival of new data on the aforementioned std::istream.
For "pipe" slots, instantiate appropriate *Pipe class.
ReadPipe and WritePipe classes are pure virtual bases for ReadPipeImpl and
WritePipeImpl, respectively: all implementation data are hidden in the latter
classes, visible only in llprocess.cpp. In fact each *PipeImpl class registers
itself for "mainloop" ticks, attempting nonblocking I/O to the underlying
apr_file_t on each tick. Data are buffered in a boost::asio::streambuf, which
bridges between std::[io]stream and the APR I/O calls.
Sanity-test ReadPipeImpl by using a pipe to absorb the Python "SyntaxError"
output from the successful syntax_error test, rather than alarming the user.
Add first few unit tests for validating FileParam. More tests coming!
|
|
|
|
|
|
|
|
|
|
minimal width in Avatar picker floater)
- Increased min width of the floater
|
|
- Adjusted width of the panel which contains the shop button
|
|
a prim marked for sale show wrong inventory icons)
- In buy floater, for multiple WEARABLES inventory items show corresponding wearable icons
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
When we reimplemented LLProcess on APR, necessitating APR's funny callback
mechanism to sense child-process status, every isRunning() or getStatus() call
called the APR poll function that calls ALL registered LLProcess callbacks. In
other words, every time any consumer called any LLProcess::isRunning() method,
all LLProcess callbacks were redundantly fired. Change that so that the single
APR poll function is called once per frame, courtesy of the "mainloop"
LLEventPump. Once per viewer frame should be well within the realtime duration
in which it's reasonable to expect child-process status to change.
In effect, this changes LLProcess's public API to introduce a dependency on
"mainloop" ticks. Add such ticks to llprocess_test.cpp as well.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Symptoms: Viewer window shrank by a few pixels on each startup.
Reason: We used client rect (which did not include the window border) to create the viewer window.
Solution: Convert client rect into window rect, i.e. expand it by the border size.
|
|
Fixing the cases missed in EXP-1879.
|
|
|
|
|
|
|
|
|
|
notifications
|
|
|
|
folders in double cut scenarios
|
|
for texture indices in the data stream. Also rework gl_FragColor overrides to not collide with some odd driver implementations.
|
|
|
|
a vertical scrollbar is shown
|
|
warn-on-failure:open-license
|
|
|
|
helps me find memory leaks.
|