Issue 256
7th October 2012 by KDE Commit-Digest TeamContributors
Martin Cigorraga
Marta Rybczynska
Jürgen Appel
This Week...
Statistics
Commits | 2081 by 155 developers |
Open Bugs | 21329 |
Open Wishes | 15978 |
Bugs Opened | 375 in the last 7 days |
Bugs Closed | 450 in the last 7 days |
Commit Summary
Module | Commits |
/trunk/l10n-kde4 |
146
|
/branches/stable |
78
|
/trunk/www |
33
|
/trunk/l10n-support |
31
|
/src/appmenu.cpp |
18
|
/plasma/generic |
16
|
/krita/sketch |
16
|
/plasma/declarativeimports |
13
|
/branches/work |
12
|
/tags/KDE |
12
|
Files | Developer | Commits |
222
|
Laurent Montel |
94
|
177
|
Marco Martin |
72
|
132
|
Cedric Bellegarde |
45
|
96
|
Aleix Pol Gonzalez |
33
|
96
|
Roman Paholík |
32
|
66
|
Martin Klapetek |
29
|
87
|
Sebastian Kügler |
29
|
78
|
Andi Clemens |
26
|
75
|
André Marcelo Alvarenga |
25
|
75
|
Vishesh Handa |
25
|
Internationalization (i18n) Status
Language | Percentage Complete |
French (fr) |
96%
|
Estonian (et) |
96%
|
Dutch (nl) |
96%
|
German (de) |
94%
|
Italian (it) |
90%
|
Danish (da) |
87%
|
Catalan (ca) |
84%
|
Chinese Traditional (zh_TW) |
84%
|
Low Saxon (nds) |
83%
|
Norwegian Bookmal (nb) |
82%
|
Bug Killers
Person | Bugs Closed |
Jekyll Wu |
130
|
Christoph Feck |
31
|
Myriam Schweingruber |
29
|
Laurent Montel |
22
|
Christian Esken |
19
|
Dawit Alemayehu |
17
|
Gilles Caulier |
12
|
Lamarque Souza |
10
|
Milian Wolff |
10
|
Jarosław Staniek |
8
|
Commit Countries
Commit Demographics
Sex
Age
Contents
Bug Fixes | Features | Optimization | Security | Other | |
---|---|---|---|---|---|
Accessibility | |||||
Development Tools | [] | [] | [] | ||
Educational | [] | [] | |||
Graphics | [] | ||||
KDE Base | [] | [] | [] | [] | |
KDE-PIM | [] | [] | |||
Office | [] | [] | [] | [] | |
Konqueror | |||||
Multimedia | [] | ||||
Networking Tools | [] | [] | [] | ||
User Interface | |||||
Utilities | [] | [] | |||
Games | |||||
Other |
There are 97 selections this week
Bug Fixes
Development Tools
Validate imported parent context before accessing it.
Graphics
Add null pointer check because of reported crash here.
FIXED-IN: 3.0
KDE Base
Unbreak Python 2 applet loading.
exec() is a function in Py3, but the syntax used in this file does not
allow it for being called as a function in Python 2. Thus, a simple check
is made, calling the right function depending on the Python version.
It will likely not work with Python 3, but however applets are not
supposed to in the first place.
(cherry picked from commit 14f7b6a18ef8a81237df43551ee7bda122827d93)
Resource: Avoid creating temporary Resources in ResourceData
This is done by adding properties of the form addResource/removeResource
(url) in the Resource Watcher.
This fixes a possibile infinite loop in ResourceData::resetAll where a
temporary Resource is created which is again reset on deletion ..
REVIEW: 106674
Remove noop check in setSortRole
The noop check m_sortRole == role has to be removed
because the hash table m_roleIds can change between two calls to
setSortRole (as it actually happens when resync the hash table).
Possibly one could perform a more clever check (i.e. adding some
m_invalidated flag which would override the check), but I am not sure it is
really worth it.
This fixes sorting issues in the Plasma Device Notifier
Removed Q_ASSERT because apparently item can be null.
FIXED-IN: 4.10
Do not crash when global policy is changed and the Apply button is pressed.
FIXED-IN: 4.10
Hardcode TabBox setting in boxswitch effect false
Boxswitch is activated as tabbox, possibly due to a downstream issue
This results in multiple effects being assigned to the tabbox and no
GUI way for the user to fix this.
Since the BoxSwitch effects nowadays only exists as sidearm for
coverswitch, the tabbox setting is now hardcoded and disabled in the
effect, making it completely impossible to accidentally use it as tabbox.
REVIEW: 106695
FIXED-IN: 4.9.3
Rework the resolving of OpenGL function pointers
The macro GL_RESOLVE_WITH_EXT was fundamentally broken as it tried to
resolve a symbol first by it's name and then by the extension name if
the returned pointer is null.
>From GLX spec:
"A non-NULL return value for glXGetProcAddress does not guarantee that an
extension function is actually supported at runtime. The client must also query
glGetString(GL EXTENSIONS) or glXQueryExtensionsString to determine if an
extension is supported by a particular context."
This macro is now reworked to be used only in case the symbol name does
not match our function name. E.g. glUniform1f vs glUniform1fARB.
The resolving itself also had quite some issues as:
* in same cases function pointers are not nulled
* in same cases only the arb or only the ext is checked
* in same cases the wrong extension is checked
This is now reworked to always check first the ARB extension if available
then the EXT extension and if both are not available the pointers are set
to NULL.
Fix crash when watchUserLimitReached() leads to deleting the KInotify instance
... which emitted the signal. So don't use a direct delete.
FIXED-IN: 4.9.3
Remove noop check in setSortRole
The noop check m_sortRole == role has to be removed
because the hash table m_roleIds can change between two calls to
setSortRole (as it actually happens when resync the hash table).
Possibly one could perform a more clever check (i.e. adding some
m_invalidated flag which would override the check), but I am not sure it is
really worth it.
This fixes sorting issues in the Plasma Device Notifier
Overhaul PowerDevil's notifications
- Removed "The screen is being locked" notification
- Cleaned up the notifyrc (half of the notifications was no longer used)
- Fixed notification icons' size being hardcoded to 20x20px
- Now using more specific icons for notifications rather than generic dialog-warning
- Added notification titles rather than generic "KDE PM" title string
- Added notification for "battery charge complete"
REVIEW: 106670
FIXED-IN: 4.10
Fix build error when GLES is not available
Note to me: always rebuild with all possible build options if something
is changed.
Sorry for the inconvenience and thanks to the early report of the issue.
FIXED-IN: 4.10
fixed position restoration of desktop toolbox
removed early exit, probably dead code
FIXED-IN: 4.9.3
REVIEW: 106743
added settings options to the netbook panel
this action opens just the shell settings.
only available if panel unlocked
FIXED-IN: 4.9.3
REVIEW: 106723
Enable change policy button only when the domain entry is clicked.
FIXED-IN:4.10
Make the per domain cookie policy configuration dialog refelect any current policy
set for the selected domain.
FIXED-IN: 4.10
By popular demand, revert the call to chdir(documentPath).
This was an attempt to make the KDE document path work in non-KDE
gui apps (such as openoffice) (#108510). But it makes terminals
start in ~/Documents, which users don't expect.
302903
Fixed horizontalAlignment and verticalAlignment properties of TextArea
REVIEW: 106702
Fix Removable property in soliddevice engine (HAL)
Current hack to check for Removable property in StorageAccess devices
goes up only one level to search for the StorageDrive device. This
works fine with UDev, but not with HAL, which can have (at least on
FreeBSD) intermediate devices between the volume and its StorageDrive
ancestor, for example partition-type devices. A generic solution would
be to create a method in Solid::Device, but this cannot be done until
libsolid2 is ready; meanwhile, let's add a getAncestorAs() function to
the engine.
The patch was submitted by Andriy Gapon and modified by me to handle
other similar cases.
While here, add logic to really set Hotpluggable property.
The final version of the patch was reviewed by Aaron Seigo on IRC.
REVIEW: 105432
REVIEW: 106378
(cherry picked from commit ec9d4e418ca2327c1a098352ccf78247f1769c83)
KDE-PIM
revert always expanding the to-do tree on view updates.
FIXED-IN: 4.9.3
Fix Bug 295277 - Crash on exit in Akonadi::StandardMailActionManager::action
FIXED-IN: 4.9.3
fix Bug 307618 - parsing problem with anniversary property
converted to upper case
FIXED-IN: 4.9.3
Fix Bug 218310 - Kontact crashed because Webtab could not be reloaded
[QMetaObject::changeGuard, QPointer<QAction>::operator=, QMenuPrivate::activateAction]
FIXED-IN: 4.9.3
We reload => widget is deleted => menu after exec will crash
Fix Bug 304871 - Show "Name" instead of just "Name"
in recipient selection dialog
FIXED-IN: 4.9.3
I just add family name when name is empty or emails.
Fix Bug 96458 - KMail provides link to add vcard even though the vcard
is already in the addressbook
FIXED-IN: 4.10
Set event UID for not deleted events too
FIXED-IN: 0.4.3
Fix Bug 156243 - No keyboard shortcut for articles tab
FIXED-IN: 4.10
Correctly process instances of recurrent events
The bug is fixed only when using LibKGAPI >= 0.4.3, but it causes no
regressions when using older LibKGAPI.
FIXED-IN: 4.9.3
Office
Fix Bug 307809 - TJ scheduler does not respect resource availablefrom/-until
FIXED_IN: 2.5.3
Progressing solution of the "line links blobs" bug
o the cause is the algorithm I'm using, it's made for lines, not blobs. So when it encounters several separate blobs, it treats them like a line
o KarbonCurveFit is temporary, before merging I'll merge the changes to KoPathShape, it should have methods to simplify itself.
o life is good, and I am back
Set number of hours pr day so TJ can handle estimate correctly
Make the actual statistics widget clearly recognizable
* Rename it from KWStatistics to KWStatisticsWidget
* Don't both *be* a widget and *have* a widget. Being is enough.
Correct situation where several local files refer to the same publication.
Always check appointments to avoid overbooking resources
This only bites when a task is interrupted bu another task,
e.g. when there are timing constraints.
Backport: Always check appointments to avoid overbooking resources
This only bites when a task is interrupted bu another task,
e.g. when there are timing constraints.
Fix the lowercase fix and db import
KexiDB
*A fix for the lowercase fix: keep table names in original format but compare them in case-insensitive way when needed
**This way importing from databases with tables upper-case characters works
Migration
*Fix invalid SQL generation for database import
*Fix importing from databases with tables upper-case characters
REVIEW:106726
Fixed zooming of the rotated canvas
Now the zooming process is much easier to understand than it used to be.
No additional pan is needed in various places.
FitPage and FitWidth now work for rotated images as well
Conflicts:
krita/ui/canvas/kis_canvas2.cpp
krita/ui/canvas/kis_canvas2.h
Fix save and save as.
Now they show feedback and save as works properly. Also changed the text
field in SaveImagePage to the text field that fits with the theme.
Multimedia
UpcomingEventsWidget: fix null pointer dereference and potential memleak
The crash happened when Upcoming Events Applet was downloading new info
on track change and MusicBrainzTagger was downloading track info at the
same time. A bit strange, extact cause of the null sender() is unknown,
but being null ptr-aware never hurts.
Fix thread safety of SqlRegistry
Most notably the SqlRegistry::getTrack( const KUrl &url ) lacked the
locking, which was a source of data race conditions. I also added
locking to another method that was lacking it and cleaned up a bit
QMutexLocker usage.
FIXED-IN: 2.7
Refactor the Collection config UI code, and move more stuff into the UI file.
Also, a resizing issue of the UI was fixed, as well as some other small issues.
The patch introduces one new issue, which is that the height of the config dialog
becomes too tall (about 650 pixels). However, work is underway from Matej that
will mitigate this problem.
Fix build without OpenGL.
OpenGL appears to have been intended to be optional, but building without OpenGL didn't work.
REVIEW: 106956
Networking Tools
Ideally, SECRET_TAG and TLS_AUTH_TAG should contain 2 parameters, second
one being the direction (in/out) assuming values 0 or 1 respectively.
Added another check to ensure that the 2nd parameter is present before
accessing that index.
FIXED-IN: 0.9.0.5
Add warning when storage mode is kwallet and kwallet is not enabled. The
warning will be printed in ~/.xsession-errors.
(cherry picked from commit ecb9e75286e2892f8b59a526400e37cc31b38d0d)
Call the onContactPresenceChange directly without connection checks
The connection status at this point is still Tp::ConnectionStatusDisconnected
and so the check for connection being Tp::ConnectionStatusConnected
would never pass, which leads to not printing the "You are now marked
as Available" line when reconnecting, leaving the "You are now offline"
as the last message in the chat.
The contact presence at this point is already correct, so we can
just bypass checking the connection and call it directly.
Reviewed-by: David Edmundson
FIXED-IN: 0.5.1
Utilities
Fix some problems with identifying GTK themes
When finding icons, only find images, the human icon theme provides some
.icon files that made it crash.
In the .gtkrc file, if there's an include, follow it.
If gtk2 doesn't provide a font, let gtk3 tell which one has been defined.
Features
KDE Base
Added preview thumbnail at color wallpaper configuration dialog for each background mode,
and removed the background mode combobox.
sorry for the noise, something strange with previous commit.
REVIEW: 106626
FEATURE:
BackupManager: Output additional signals that can be used by the UIs
* Backup Started
* Backup %
* Restore Started
The started signals can be used by the nepomukcontroller to notify the
user about backups/restores.
Office
Core: add possibility of removing view from window
Implemented preview for the text docs.
REVIEW: 106746
Networking Tools
Add a widget to show a combo of all accounts
Add 3 new roles Type, Account and Contact
Optimization
Development Tools
Don't report warnings about argument names on @classmethods
@classmethod
def myfun(cls): pass
would raise a warning until now since the argument is not called
"self". This has been fixed.
Only handle document model once, not once for every top row.
Educational
Use the simple rotation on the 3D view
I just like it better to have the camera to be always vertical (up
vector is {0,0,1})
i18n: don't translate lesson and course titles anymore
This was necessary for the old version of KTouch because the first
thing any user had to do before he could start training was to pick an
his keyboard layout and a matching course from the lists of all available
resources. For that it was important he was able to understand that
list, so they had to be localized.
Nowadays we detect the user's keyboard layout automatically and present
them only a choice for the courses matching this layout. We can assume
that he understands the language corresponding to the keyboard layout
his computer is set to. With that localization of keyboard layout and
course titles isn't necessary anymore, because the former are completly
invisible to the avarage user and the latter are very propably in a
language he understands.
This also elimates the long standing inconstancy that course titles
were localized but their contents not. Now everythins is presented in
the same language.
All course and keyboard layout for which the titles had native
translations available use these now.
KDE Base
Backup: Save some metadata in the backup file
Save the number of statements and the creation date and time.
This allows us to not have to parse the file twice in order to determine
the number of statements, and lets us easily output the % in the
BackupRestorationJob.
Sync::ResourceIdentifier: Remove unused parts
The original design of the Resource Identifier was way over the top, and
was meant to satisfy a number of different use cases. Currently, it is
just used in storeResources.
Throwing away the unused parts -
* Optional Properties - Aren't used in identification. They are just
stored in a list that is never used.
* Ignore Resource - A convenient way of removing all the statements
related to a particular resource uri
* Force Resource - Identify a uri with a particular Resource (with a
nie:url), and accordingly update the nie:url of all the unidentified
uris which may be in the same folder or sub folder/files of that
particular Resource
The ForceResource function may still be useful in the backup file
resolution, but it does not need to exist over here.
StoreResources: Minor optimization during error checking
Avoid the url comparsion to NIE::url when iterating over the
SyncResource by removing the nie:url before starting the iteration and
inserting it again.
ResourceMerger: Slightly optimize removeDuplicates
Avoid reconstructing a part of the query.
Also remove removeDuplicateInList - It was not being used.
Only reload the background when the engine tells us to
This way we don't get a small slowdown when changing the current item in
the configuration item view.
- Renamed a button text from "Change Policy" to "Configure Policy" because it
allows you to either add or modify a new policy from the management dialog.
- Enable/disable the policy domain edit and ok button as needed. The user will
no longer be allowed to change the domain of existing policies.
- Renamed a couple of UI variable name to refelect their actual purpose.
Support Python 3.2's new method of handling byte compiled files in
PythonMacros.cmake.
Python 3.2 changed the compile mechanism by creating a __pycache__
directory. This obviously breaks a lot of stuff that assumed that pyc
files were stored in the same directory as the py files. This change
adds a check, and adjusts files only in case Python 3.2 is found. Notice
that currently I have way of testing if the suffix (*cpython) is the
same on all supported OSes.
Also, I fixed a number of typos that made the macro work by chance all
these years.
REVIEW: 106707
show control buttons only on hover
add a close button, shown on hover as well
DataManagementModel: Optimize createGraph
* Avoid iterating over the hash and using comparison operators. We can
check for those keys directly.
* Insert all the statements in one go - This avoids a large number of
the expensive url -> n3 conversions. Also we do all the insertions in
one go.
Add null-crash guards for m_dirWatch to FileWatch
ResourceMerger: Better Metadata properties handling
Instead of separating the metadata properties from the Resource,
converting them into statements and handling them separately, we now
handle them in the a separate ResourceHash.
This is somewhat faster, as we can do hash lookups of the properties
instead of iterating and comparing all of them.
ResourceMerger: Literal range check optimization
When checking the literal range, we have a special case for xsd:duration
since Soprano does not support it. During that check we compare both
the Soprano::LiteralTerm's data type (should be ungsigned int) and we
compare the range to the duration xml schema uri.
Comparing the data type is a LOT faster, so we should do that first.
That way we can occasionally save the expensive url comparsion check.
Micro Optimization++
ResourceMerger: Avoid storing the types for new resources
Remove the QHash<QUrl, QList<QUrl>> which was used to store the types of
the new resources. The types are already stored in the resHash along
with the other properties.
All we need is the list of new uris.
Also removed unused function resolveStatement.
StoreResources: Minor optimization by removing unnecessary identification statements
For resolved nodes, we used to add the extra type + nie:url for
identification. This is not required, as the nie:url has been provided
and that is enough for correctly identifying the resource.
Also, added some missing ontologies. They don't really cause any tests
to fail, but it's nice to have them.
Remove the hack of resetting working directory to $HOME
That hack is added due to the the "single process" model used by konsole.
However, That hack seems to make the thing more confusing as reflected in bug
302903
So here is a known issue: if you set konsole as the terminal emulator
used in pcmanfm, pressing F4 twice in different folder will open two
konsole window in the same folder.
Introduce a build option KWIN_BUILD_OPENGL_1_COMPOSITING
If the build option is enabled KWIN_HAVE_OPENGL_1 is passed as a compile
flag when build against OpenGL.
This compile flag is meant to replace the KWIN_HAVE_OPENGLES. So far code
has been ifdefed for special behavior of OpenGL ES 2.0 and to remove
fixed functionality calls which are not available in OpenGL ES 2.0.
With this build flag the fixed functionality calls which are only used in
the OpenGL1 Compositor can be removed and keeping the KWIN_HAVE_OPENGLES
for the real differences between OpenGL 2.x and OpenGL ES 2.0.
E.g. a call like glColor4f should be in an
glColor4f(1.0, 1.0, 1.0, 1.0);
while a call like glPolygonMode should be in an
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
Building for OpenGL ES 2.0 of course implies that KWIN_HAVE_OPENGL_1 is
not defined.
ClassAndPropertyTree: Optimize variantListToNodeSet
The extra url comparsions take approximately 50% of the time spent in
executing variantListToNodeSet. These comparisons are for special cases
and are done based on the property.
They can be done when the tree is being created, instead of each time
this highly important function is called.
* Caching the literal type - QVariant::Type
* Special handling for xsd:duration
* Special handling for rdfs:Literal
Bind ARBBlurShader to OpenGL1
The logic has already ensured that the ARBBlurShader can only be used
when using the OpenGL1 compositor, the OpenGL 2 compositor needs to use
the GLSLBlurShader.
This change moves the complete ARBBlurShader into a KWIN_HAVE_OPENGL_1
ifdef section.
As a side-effect the ::create method can now return a NULL pointer which
makes more sense then returning an ARBBlurShader in case that the
GLSLShader is not supported.
REVIEW: 106738
GLPlatform can recommend the compositor to use
During detecting the OpenGL capabilities also a recommended compositor
can be set. This recommendation is honoured by the OpenGL based
compositors. That is the SceneOpenGL2 requires a recommendation for at
least OpenGL2 and the SceneOpenGL1 requires at least a recommendation for
OpenGL1. If the driver recommends XRender compositing the SceneOpenGL
performs the existing fallback to XRender.
With this recommendation the hacks in the Scene are removed, e.g. it is
no longer checked whether the driver is software emulation as that is
provided through the recommendation.
To overrule the recommendation the environment variable KWIN_COMPOSE is
extended by the values O1 and O2 to enforce either OpenGL 1 or OpenGL 2.
This overwrites all other checks. As a side-effect this allows now to run
KWin on the llvmpipe:
LIBGL_ALWAYS_SOFTWARE=1 KWIN_COMPOSE=O2 kwin --replace &
But not that I would recommend to use it :-)
REVIEW: 106741
Office
Use a better icon for broken presets
Show Undo/Redo buttons for Tables in design view.
Added Undo/Redo buttons to Table view when in design mode so that they
are available for porting Undo/Redo code to KoUndo.
GUI: Added Undo/Redo buttons in Tables when in design view.
Added caching for dabs into the brush paintop
This patch adds caching of the dabs to the paint op system of Krita.
Such cache makes the execution of the benchmarks up to 2 times faster.
Subjectively, the real painting becomes much faster, especially with
huge brushes. Artists report up to 20% speed gain while painting.
Of course, such caching makes the painting a bit less precise: we need
to tolerate subpixel differences to allow the cache to work. Sometimes
small difference in the size of a dab can also be acceptable. That is
why I introduced levels of precision. They are graded from 1 to 5: from
the fastest and less precise to the slowest, but with the best quality.
You can see the slider in the paintop settings dialog. The ToolTip text
explains which features of the brush are sacrificed on each precision
level.
The texturing and mirroring problems are solved.
My next steps are: make this cache tolerate bug 307588 and port it to
other brush-based paitops.
CC
REVIEW:106724
Use a better icon for broken presets
Networking Tools
Remove somewhat pointless AccountItem class.
This should result in a simpler, faster AccountsModel.
Other
Development Tools
Add dots to lex/yacc file patterns.
OutputExecuteJob: use QHash for storing environment overrides.
Educational
Make the first approach to the declarative plugin
This work is happening in views to move this code to Analitza
Parting RocsLib into libraries RocsCore and RocsVisualEditor.
With this commit we separate the data structure backend from its
visual representation. Functional changes due to former hacks when
everything was inside one library will be fixed with the next commit.
KDE Base
Merge branch 'mod-dialog-buttons'
REVIEW: 106705
Improve scene initialization
Fill the background with the selected color.
Simplify the pixmap initialization by always using resizeWallpaper() for
setting it up.
KActivities-Models library
- ActivityModel
- ResourceModel
- QML bindings
Merge branch 'ivan/data-models-library' into master
Build the Nepomuk Runner Plugin
When the Nepomuk Runner was ported to NepomukCore, the top level
CMakeLists was updated to look for NepomukCore instead of Nepomuk.
I guess I forgot to update this if statement over here.
QueryTests: Mark the tests that fail due to user visibility problems
4 tests fails because the ontologies are returned in the results. We
mark those tests with QEXPECT_FAIL. Fixing them will require a big
change in our already broken user visibility system.
Do not resolve glx functions specified in GLX 1.3
According to the OpenGL ABI for Linux GLX 1.3 is a minimum requirement.
Therefore we do not need to resolve the symbols which are present in that
version.
KWin did always require at least 1.3, for all the resolved functions
there were checks in the Scene, but they might have been incorrect.
Instead now the GLX version is checked and OpenGL compositing is blocked
if there is not at least GLX 1.3.
REVIEW: 106704
Mark ResourceWatcherTest::testRemoveProperty_typeRemoved as expect fail
Since createResource now only adds the minimum number of types and
relies on inferencing, type:/A is not added as it is a super class ob
type:/B.
This makes the type notifications in the RessourceWatcher fail, as we do
not currently support super type notifications. Hence, the QEXPECT_FAIL
Use pathOrUrl() instead of prettyUrl() when relevant
REVIEW: 106718
Forward mouse events to the scene
This way the wallpapers can have some kind of way to react to mouse events
So remember: with great power comes great responsibility
KDE-PIM
Add Akonadi Social Utils library
A helper library containing SocialFeedItem and its serializer
and an image provider that gets images from web and stores
them in KImageCache for later reuse.
Read more in akonadi/socialutils/Mainpage.dox
REVIEW: 106631
Office
koproperty: use QMap so items are always sorted by key
Utilities
Standalone archive download support ported from QApt1.