Fix missing SPICE_GTK_MICRO_VERSION value

configure.ac tries to assign a default value of 0 to the micro version if it's
empty, but the shell variable assignemnt doesn't work because there's whitespace
around the '=' sign.

This results in SPICE_GTK_MICRO_VERSION being defined to (), which causes a
compilation failure in files that include it.
build-sys: add missing soup subst
build-sys: re-organize summary to show major info first
Make phodav an optional external dependency

Now that upstream provides a stable/versioned API, it will be
easier to deal with than with submodules.
Update NEWS for v0.25
Ensure keyboard modifiers are synchronized properly

In certain circumstances, the keyboard modifiers get out-of-sync between the
guest and the client. This is easy to reproduce with the following steps:
 - launch virt-viewer with a guest that is not running
 - start the guest
 - while guest is booting, enable CAPS LOCK on the client
 - after guest finishes booting, it will set its modifiers to a default value
   (e.g. numlock on, capslock off)
 - now capslock is OFF in the guest, but ON in the client
 - toggle caps lock
 - now capslock is ON in the guest, but OFF in the client

This moves the responsibility for synchronizing client and guest modifiers into
SpiceGtkSession. It can't be handled easily within the SpiceDisplay widget since
there can be multiple display widgets for each inputs channel.

A new function (spice_gtk_session_sync_keyboard_modifiers()) was added so that
synchronization can be triggered manually if desired. But it also registers a
signal handler for the InputsChannel::inputs-modifiers signal to detect when the
guest has changed its modifiers. The signal handler simply overrides the guests
modifiers and sets them back to the value from the client.
Use GdkKeymap to listen for keyboard modifier changes

Connect to the GdkKeymap::state-changed signal to detect when the client
keyboard modifiers have changed. This keeps the client and the guest in sync
even when the SpiceDisplay widget isn't focused. New values are only sent down
to the guest if the new value is different than the current value.
Add man page

Spice-GTK provides SPICE-specific command line options. This man page
describes these options as well as the format of SPICE URIs.
Use correct printf format modifier for gssize

This fixes this warning/error:

channel-webdav.c: In function 'demux_to_client':
channel-webdav.c:318:5: error: format '%ld' expects argument of type 'long
int', but argument 5 has type 'gssize' [-Werror=format=]
     CHANNEL_DEBUG(self, "pushing %ld to client %p", size, client);
Add compat implementation of g_queue_free_full()

This was introduced in glib 2.32 and the webdav channel uses it.
Gather gtk+ compatibility code in a single file

There are gtk+ version checks in several source files to add
compatibility implementations of gtk3 functions not available
in gtk2. This commit gathers all of them in a gtk-compat.h header,
similar to what is done for glib-compat.h
Include gtk-compat.h in spice-gtk-session.c

GDK_IS_X11_DISPLAY is not available on gtk+ 2.x, but it already has a
fallback definition in gtk-compat.h
gtk-session: s/g_debug/CHANNEL_DEBUG
gtk-session: always sync modifiers for client events

The channel state is not synchronous.

It may happen that we want to set and unset quickly a modifier, but the
guest modifier state hasn't been updated yet, and will still be seen as
unset, preventing the last unset change.
display: signal primary-destroy when clearing all surfaces

When destroying the primary surface, we need to signal it, since
listeners might be referencing the data pointer. Currently, this only
happens during channel finalize().

This could help with rhbz#1082555.
Fix leak in spice_gtk_session_sync_keyboard_modifiers()

The list of channels returned by spice_session_get_channels()
must be freed after use.
option: use more portable default ca-file path

If no CA path is given, a default one is set. Use g_build_filename() to
set a more portable and valid default path.
option: check that default ca-file exists

Don't set default ca-file path if the file doesn't exists.
Include glib-compat.h in spice-option.c

Commit 8c89485 added a call to g_clear_pointer().
clipboard: prevent reentering main loop if main channel is busy

The main channel must be idle to avoid entering the nested loop,
or it will never reach the condition to leave it.

This should not happen. It can happen currently when the remote sends a
clipboard request while the clipboard is grabbed by the remote. In this
case, while the clipboard-request signal is emitted by main channel, the
clipboard_get() loop is entered, but the main coroutine will not be
woken up to proceed with the request, the main channel will remain
"frozen" and it won't be possible to leave cleanly from the inner loop.
The application appears to be frozen, because it can't quit properly.

Related to:
https://bugzilla.redhat.com/show_bug.cgi?id=1083489