[virt-tools-list] [PATCH 6/7] Adapt glib code to build out of the tree

Eduardo Lima (Etrunko) etrunko at redhat.com
Fri Dec 11 16:40:35 UTC 2015


Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
---
 src/virt-glib-compat.c | 97 +++++++++++++++++++++++++++++++++++---------------
 1 file changed, 68 insertions(+), 29 deletions(-)

diff --git a/src/virt-glib-compat.c b/src/virt-glib-compat.c
index a61a3a6..0118e45 100644
--- a/src/virt-glib-compat.c
+++ b/src/virt-glib-compat.c
@@ -34,6 +34,33 @@ GByteArray *g_byte_array_new_take (guint8 *data, gsize len)
 #endif
 
 #ifndef GLIB_VERSION_2_40
+#include <glib.h>
+#include <glib/gi18n.h>
+
+typedef struct _GApplicationOptionsPrivate GApplicationOptionsPrivate;
+struct _GApplicationOptionsPrivate
+{
+  GApplicationFlags   flags;
+  GOptionGroup       *main_options;
+  GSList             *option_groups;
+  GHashTable         *packed_options;
+  gboolean            options_parsed;
+};
+
+static GApplicationOptionsPrivate *
+get_options_private(GApplication *application)
+{
+    GApplicationOptionsPrivate *priv = g_object_get_data(G_OBJECT(application), "options_private");
+
+    if (priv == NULL) {
+        priv = g_new0(GApplicationOptionsPrivate, 1);
+        priv->flags = g_application_get_flags(application);
+        g_object_set_data_full(G_OBJECT(application), "options_private", priv, g_free);
+    }
+
+    return priv;
+}
+
 static void
 free_option_entry (gpointer data)
 {
@@ -68,8 +95,9 @@ g_application_pack_option_entries (GApplication *application,
 {
   GHashTableIter iter;
   gpointer item;
+  GApplicationOptionsPrivate *priv = get_options_private(application);
 
-  g_hash_table_iter_init (&iter, application->priv->packed_options);
+  g_hash_table_iter_init (&iter, priv->packed_options);
   while (g_hash_table_iter_next (&iter, NULL, &item))
     {
       GOptionEntry *entry = item;
@@ -134,6 +162,7 @@ g_application_parse_command_line (GApplication   *application,
   gboolean become_service = FALSE;
   GVariantDict *dict = NULL;
   GOptionContext *context;
+  GApplicationOptionsPrivate *priv = get_options_private(application);
 
   /* Due to the memory management of GOptionGroup we can only parse
    * options once.  That's because once you add a group to the
@@ -141,7 +170,7 @@ g_application_parse_command_line (GApplication   *application,
    * local_command_line() should never get invoked more than once
    * anyway.  Add a sanity check just to be sure.
    */
-  g_return_val_if_fail (!application->priv->options_parsed, NULL);
+  g_return_val_if_fail (!priv->options_parsed, NULL);
 
   context = g_option_context_new (NULL);
 
@@ -153,40 +182,40 @@ g_application_parse_command_line (GApplication   *application,
    * We must also ignore --help in this case since some applications
    * will try to handle this from the remote side.  See #737869.
    */
-  if (application->priv->main_options == NULL && (application->priv->flags & G_APPLICATION_HANDLES_COMMAND_LINE))
+  if (priv->main_options == NULL && (priv->flags & G_APPLICATION_HANDLES_COMMAND_LINE))
     {
       g_option_context_set_ignore_unknown_options (context, TRUE);
       g_option_context_set_help_enabled (context, FALSE);
     }
 
   /* Add the main option group, if it exists */
-  if (application->priv->main_options)
+  if (priv->main_options)
     {
       /* This consumes the main_options */
-      g_option_context_set_main_group (context, application->priv->main_options);
-      application->priv->main_options = NULL;
+      g_option_context_set_main_group (context, priv->main_options);
+      priv->main_options = NULL;
     }
 
   /* Add any other option groups if they exist.  Adding them to the
    * context will consume them, so we free the list as we go...
    */
-  while (application->priv->option_groups)
+  while (priv->option_groups)
     {
-      g_option_context_add_group (context, application->priv->option_groups->data);
-      application->priv->option_groups = g_slist_delete_link (application->priv->option_groups,
-                                                              application->priv->option_groups);
+      g_option_context_add_group (context, priv->option_groups->data);
+      priv->option_groups = g_slist_delete_link (priv->option_groups,
+                                                 priv->option_groups);
     }
 
   /* In the case that we are not explicitly marked as a service or a
    * launcher then we want to add the "--gapplication-service" option to
    * allow the process to be made into a service.
    */
-  if ((application->priv->flags & (G_APPLICATION_IS_SERVICE | G_APPLICATION_IS_LAUNCHER)) == 0)
+  if ((priv->flags & (G_APPLICATION_IS_SERVICE | G_APPLICATION_IS_LAUNCHER)) == 0)
     {
       GOptionGroup *option_group;
       GOptionEntry entries[] = {
         { "gapplication-service", '\0', 0, G_OPTION_ARG_NONE, &become_service,
-          N_("Enter GApplication service mode (use from D-Bus service files)") },
+          _("Enter GApplication service mode (use from D-Bus service files)"), NULL },
         { NULL }
       };
 
@@ -200,24 +229,26 @@ g_application_parse_command_line (GApplication   *application,
     }
 
   /* Now we parse... */
+#if 0
   if (!g_option_context_parse_strv (context, arguments, error))
     goto out;
+#endif
 
   /* Check for --gapplication-service */
   if (become_service)
-    application->priv->flags |= G_APPLICATION_IS_SERVICE;
+    priv->flags |= G_APPLICATION_IS_SERVICE;
 
   dict = g_variant_dict_new (NULL);
-  if (application->priv->packed_options)
+  if (priv->packed_options)
     {
       g_application_pack_option_entries (application, dict);
-      g_hash_table_unref (application->priv->packed_options);
-      application->priv->packed_options = NULL;
+      g_hash_table_unref (priv->packed_options);
+      priv->packed_options = NULL;
     }
 
 out:
   /* Make sure we don't run again */
-  application->priv->options_parsed = TRUE;
+  priv->options_parsed = TRUE;
 
   g_option_context_free (context);
 
@@ -228,6 +259,7 @@ static void
 add_packed_option (GApplication *application,
                    GOptionEntry *entry)
 {
+  GApplicationOptionsPrivate *priv = get_options_private(application);
   switch (entry->arg)
     {
     case G_OPTION_ARG_NONE:
@@ -258,10 +290,10 @@ add_packed_option (GApplication *application,
       g_return_if_reached ();
     }
 
-  if (!application->priv->packed_options)
-    application->priv->packed_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_option_entry);
+  if (!priv->packed_options)
+    priv->packed_options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_option_entry);
 
-  g_hash_table_insert (application->priv->packed_options,
+  g_hash_table_insert (priv->packed_options,
                        g_strdup (entry->long_name),
                        g_slice_dup (GOptionEntry, entry));
 }
@@ -271,14 +303,15 @@ g_application_add_main_option_entries (GApplication       *application,
                                        const GOptionEntry *entries)
 {
   gint i;
+  GApplicationOptionsPrivate *priv = get_options_private(application);
 
   g_return_if_fail (G_IS_APPLICATION (application));
   g_return_if_fail (entries != NULL);
 
-  if (!application->priv->main_options)
+  if (!priv->main_options)
     {
-      application->priv->main_options = g_option_group_new (NULL, NULL, NULL, NULL, NULL);
-      g_option_group_set_translation_domain (application->priv->main_options, NULL);
+      priv->main_options = g_option_group_new (NULL, NULL, NULL, NULL, NULL);
+      g_option_group_set_translation_domain (priv->main_options, NULL);
     }
 
   for (i = 0; entries[i].long_name; i++)
@@ -289,7 +322,7 @@ g_application_add_main_option_entries (GApplication       *application,
       if (!my_entries[0].arg_data)
         add_packed_option (application, &my_entries[0]);
 
-      g_option_group_add_entries (application->priv->main_options, my_entries);
+      g_option_group_add_entries (priv->main_options, my_entries);
     }
 }
 
@@ -297,10 +330,11 @@ void
 g_application_add_option_group (GApplication *application,
                                 GOptionGroup *group)
 {
+  GApplicationOptionsPrivate *priv = get_options_private(application);
   g_return_if_fail (G_IS_APPLICATION (application));
   g_return_if_fail (group != NULL);
 
-  application->priv->option_groups = g_slist_prepend (application->priv->option_groups, group);
+  priv->option_groups = g_slist_prepend (priv->option_groups, group);
 }
 
 gboolean
@@ -311,6 +345,7 @@ g_application_real_local_command_line (GApplication   *application,
   GError *error = NULL;
   GVariantDict *options;
   gint n_args;
+  GApplicationOptionsPrivate *priv = get_options_private(application);
 
   options = g_application_parse_command_line (application, arguments, &error);
   if (!options)
@@ -320,7 +355,9 @@ g_application_real_local_command_line (GApplication   *application,
       return TRUE;
     }
 
+#if 0
   g_signal_emit (application, g_application_signals[SIGNAL_HANDLE_LOCAL_OPTIONS], 0, options, exit_status);
+#endif
 
   if (*exit_status >= 0)
     {
@@ -339,24 +376,26 @@ g_application_real_local_command_line (GApplication   *application,
 
   n_args = g_strv_length (*arguments);
 
-  if (application->priv->flags & G_APPLICATION_IS_SERVICE)
+  if (priv->flags & G_APPLICATION_IS_SERVICE)
     {
       if ((*exit_status = n_args > 1))
         {
           g_printerr ("GApplication service mode takes no arguments.\n");
-          application->priv->flags &= ~G_APPLICATION_IS_SERVICE;
+          priv->flags &= ~G_APPLICATION_IS_SERVICE;
           *exit_status = 1;
         }
       else
         *exit_status = 0;
     }
-  else if (application->priv->flags & G_APPLICATION_HANDLES_COMMAND_LINE)
+#if 0
+  else if (priv->flags & G_APPLICATION_HANDLES_COMMAND_LINE)
     {
       g_application_call_command_line (application,
                                        (const gchar **) *arguments,
                                        g_variant_dict_end (options),
                                        exit_status);
     }
+#endif
   else
     {
       if (n_args <= 1)
@@ -367,7 +406,7 @@ g_application_real_local_command_line (GApplication   *application,
 
       else
         {
-          if (~application->priv->flags & G_APPLICATION_HANDLES_OPEN)
+          if (~priv->flags & G_APPLICATION_HANDLES_OPEN)
             {
               g_critical ("This application can not open files.");
               *exit_status = 1;
-- 
2.5.0




More information about the virt-tools-list mailing list