Ignore continuous wheel events, only rendering after the "last" wheel
event, where two wheel event are continuous if they occur within 200
msecs of each other.
Windows, being deigned by the geniuses that it is, spins the event loop
while deleting files to the recycle bin, and there exists *no other way* to
move files to the Recycle Bin, since the Recycle Bin format is not
documented or stable.
So we move only files out of the library in the thread calling
delete_books(). The files are moved to the Recycle Bin in a worker
thread. This has two advantages:
1) Faster deletes, since the main thread does not have to wait on the
Recycle Bin (some windows' installs are so badly messed up that moving a
single file to the Bin takes seconds)
2) Restoring deleted files from the bin will not restore them inside the
calibre library folder, where they become orphed. They will be restored
elsewhere.
Disadvantages:
1) If the user deletes a lot of books and quits calibre, they might not
be finished deleting on quit, this can probably be mitigated by popping
up a warning at shutdown
get_top_level_move_items() was not checking that the items it returned
actually existed on case-insensitive file systems. This bug is actually
present in olddb as well.
Use index names as the key for plugins rather than names from the
plugin zip file, as deprecated plugins sometimes have the same name in
the zip file, but different names in the index.
Conversion: Fix empty inline tags that are the second child of a
paragraph causing text change location. Fixes#1207735 [Conversion issue from epub to mobi. Italicized word sometimes moves to end of paragrah.](https://bugs.launchpad.net/calibre/+bug/1207735)