ATTENTION: New iconv dll have name libiconv-2.dll and located in winlibs\lib folder. Place it to GoldenDict.exe folder. Old library libiconv2.dll can be removed.
* Status Bar now available for Scan Popup window as well.
* Fixed #13: Eliminated modal box when sound is not available:
Instead of modal dialog box we now show the status bar message,
with error icon, thus making it visible but not disruptive.
* Proper handling of status bar images.
* Styling of the status bar in both modes
(in Mani Window and in Popup Window).
1. Add search word under cursor through IAccessibleEx interface and UI Automation technology.
2. Reorganize GoldenDict main program and scan libraries interaction to reduce influence to other programs.
3. Fix crash in scan libraries in IE9 protected mode.
Now the status bar behavior is much more reliable on X11 systems, no more
lags when moving GoldenDict window around or when resizing it. Works
better with compositing window managers as well.
Also, the new status bar also supports images, which is good for
warnings and error messages.
The status bar is fully styled and can change its appearence
based on user's CSS, if needed.
Now when a user activates an article (by clicking on it, or by using Alt-Up/Down shortcuts),
corresponding dictionary in the "found in dictionaries" pane is selected.
See Issue #22.
P.S. Lingvo behaves in the same way too.
Here's what happens. At some moment during dictionary conversion,
in DslScanner::readNextLine(), whe call iconv(), when both buffers
are of size 4 (the conversion is from UTF-8 to UTF-16).
Now, the dictionary contains two em-dash symbols at that position,
one after another, each is encoded in 3 bytes in UTF-8. So, the
input buffer of size 4 contains entire first em-dash (3 bytes)
and the first byte from the second em-dash.
Calling iconv() on Linux leads to Iconv::NeedMoreOut (E2BIG),
which makes sense, since we converted the first char and there is
no more space in the output buffer.
Calling iconv() on Windows leads to Iconv::NeedMoreIn (EINVAL),
which *also* makes sense, since we converted the first char, started
to look at the second one and noticed that it is incomplete.
The difference is only what iconv() checks first, the state
of the input or the state of the output. And it seems that it
does different things on Windows and Linux.
The patch takes this into account and resolves the conversion
problem on Windows: the only error condition that requires
to throw an encoding error is when outBytesLeft is non-empty,
that means that iconv didn't convert anything.