Signed-off-by: Eduardo Lima (Etrunko) <etrunko@xxxxxxxxxx> --- configure.ac | 2 +- src/remote-viewer.c | 9 +++++++++ src/virt-glib-compat.c | 29 +++++++++++++++++++++++++++++ src/virt-viewer-app.c | 15 +++++++++++++++ src/virt-viewer-app.h | 8 ++++++++ src/virt-viewer.c | 9 +++++++++ 6 files changed, 71 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index bd9524e..889c9cf 100644 --- a/configure.ac +++ b/configure.ac @@ -12,7 +12,7 @@ AC_CANONICAL_HOST m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])]) AM_SILENT_RULES([yes]) -GLIB2_REQUIRED="2.40.0" +GLIB2_REQUIRED="2.38.0" LIBXML2_REQUIRED="2.6.0" LIBVIRT_REQUIRED="0.10.0" GTK3_REQUIRED="3.0" diff --git a/src/remote-viewer.c b/src/remote-viewer.c index 036ee06..deb7288 100644 --- a/src/remote-viewer.c +++ b/src/remote-viewer.c @@ -233,7 +233,12 @@ remote_viewer_class_init (RemoteViewerClass *klass) app_class->start = remote_viewer_start; app_class->deactivated = remote_viewer_deactivated; +#ifdef GLIB_VERSION_2_40 g_app_class->handle_local_options = remote_viewer_handle_local_options; +#else + (void) g_app_class; + app_class->handle_local_options = remote_viewer_handle_local_options; +#endif #ifdef HAVE_SPICE_GTK app_class->activate = remote_viewer_activate; @@ -1262,7 +1267,11 @@ remote_viewer_handle_local_options(GApplication *gapp, GVariantDict *options) if (title && !controller) g_object_set(app, "title", title, NULL); +#ifdef GLIB_VERSION_2_40 ret = G_APPLICATION_CLASS(remote_viewer_parent_class)->handle_local_options(gapp, options); +#else + ret = VIRT_VIEWER_APP_CLASS(remote_viewer_parent_class)->handle_local_options(gapp, options); +#endif end: if (ret == 1) diff --git a/src/virt-glib-compat.c b/src/virt-glib-compat.c index 0118e45..fdd85fb 100644 --- a/src/virt-glib-compat.c +++ b/src/virt-glib-compat.c @@ -36,6 +36,7 @@ GByteArray *g_byte_array_new_take (guint8 *data, gsize len) #ifndef GLIB_VERSION_2_40 #include <glib.h> #include <glib/gi18n.h> +#include "virt-viewer-app.h" /* VIRT_VIEWER_APP_GET_CLASS */ typedef struct _GApplicationOptionsPrivate GApplicationOptionsPrivate; struct _GApplicationOptionsPrivate @@ -232,6 +233,32 @@ g_application_parse_command_line (GApplication *application, #if 0 if (!g_option_context_parse_strv (context, arguments, error)) goto out; +#else + { + /* FIXME: glib code uses context->strv_mode flag that is used in the free + * operation. The original function is implemented like this: + * + * gboolean + * g_option_context_parse_strv (GOptionContext *context, + * gchar ***arguments, + * GError **error) + * { + * gboolean success; + * gint argc; + * + * context->strv_mode = TRUE; + * argc = g_strv_length (*arguments); + * success = g_option_context_parse (context, &argc, arguments, error); + * context->strv_mode = FALSE; + * + * return success; + * } + */ + + gint argc = g_strv_length (*arguments); + if (!g_option_context_parse (context, &argc, arguments, error)) + goto out; + } #endif /* Check for --gapplication-service */ @@ -357,6 +384,8 @@ g_application_real_local_command_line (GApplication *application, #if 0 g_signal_emit (application, g_application_signals[SIGNAL_HANDLE_LOCAL_OPTIONS], 0, options, exit_status); +#else + *exit_status = VIRT_VIEWER_APP_GET_CLASS(application)->handle_local_options(application, options); #endif if (*exit_status >= 0) diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c index 67cac77..fc01423 100644 --- a/src/virt-viewer-app.c +++ b/src/virt-viewer-app.c @@ -112,6 +112,9 @@ static gint virt_viewer_app_handle_local_options(GApplication *app, static void virt_viewer_app_startup_cb(GApplication *app, gpointer data); static void virt_viewer_app_activate_cb(GApplication *app, gpointer data); +#ifndef GLIB_VERSION_2_40 +static gboolean virt_viewer_app_local_command_line(GApplication *app, gchar ***args, int *ret); +#endif struct _VirtViewerAppPrivate { VirtViewerWindow *main_window; @@ -1942,7 +1945,12 @@ virt_viewer_app_class_init (VirtViewerAppClass *klass) object_class->set_property = virt_viewer_app_set_property; object_class->dispose = virt_viewer_app_dispose; +#ifdef GLIB_VERSION_2_40 g_app_class->handle_local_options = virt_viewer_app_handle_local_options; +#else + g_app_class->local_command_line = virt_viewer_app_local_command_line; + klass->handle_local_options = virt_viewer_app_handle_local_options; +#endif klass->start = virt_viewer_app_default_start; klass->initial_connect = virt_viewer_app_default_initial_connect; @@ -2616,6 +2624,13 @@ gboolean virt_viewer_app_get_session_cancelled(VirtViewerApp *self) return self->priv->cancelled; } +#ifndef GLIB_VERSION_2_40 +static gboolean +virt_viewer_app_local_command_line(GApplication *app, gchar ***args, int *ret) +{ + return g_application_real_local_command_line(app, args, ret); +} +#endif /* * Local variables: * c-indent-level: 4 diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h index 7bb22fb..2cc8f3b 100644 --- a/src/virt-viewer-app.h +++ b/src/virt-viewer-app.h @@ -44,6 +44,10 @@ typedef struct { VirtViewerAppPrivate *priv; } VirtViewerApp; +#ifndef GLIB_VERSION_2_40 +typedef struct _GVariantDict GVariantDict; +#endif + typedef struct { GtkApplicationClass parent_class; @@ -53,6 +57,10 @@ typedef struct { gboolean (*activate) (VirtViewerApp *self, GError **error); void (*deactivated) (VirtViewerApp *self, gboolean connect_error); gboolean (*open_connection)(VirtViewerApp *self, int *fd); + +#ifndef GLIB_VERSION_2_40 + gint (*handle_local_options) (GApplication *gapp, GVariantDict *options); +#endif } VirtViewerAppClass; GType virt_viewer_app_get_type (void); diff --git a/src/virt-viewer.c b/src/virt-viewer.c index 0f870de..e1cda23 100644 --- a/src/virt-viewer.c +++ b/src/virt-viewer.c @@ -124,7 +124,12 @@ virt_viewer_class_init (VirtViewerClass *klass) app_class->open_connection = virt_viewer_open_connection; app_class->start = virt_viewer_start; +#ifdef GLIB_VERSION_2_40 g_app_class->handle_local_options = virt_viewer_handle_local_options; +#else + (void) g_app_class; + app_class->handle_local_options = virt_viewer_handle_local_options; +#endif } static void @@ -1054,7 +1059,11 @@ virt_viewer_handle_local_options(GApplication *gapp, GVariantDict *options) if (g_variant_dict_lookup(options, OPT_CONNECT, "s", &uri)) self->priv->uri = g_strdup(uri); +#ifdef GLIB_VERSION_2_40 ret = G_APPLICATION_CLASS(virt_viewer_parent_class)->handle_local_options(gapp, options); +#else + ret = VIRT_VIEWER_APP_CLASS(virt_viewer_parent_class)->handle_local_options(gapp, options); +#endif end: if (ret == 1) -- 2.5.0 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list