[glib: 1/2] Revert "gapplication: Expose zero-valued numbers in handle-local-options"




commit 23e935a34260e22656c2f74826430513cf83a9d4
Author: Philip Withnall <pwithnall endlessos org>
Date:   Fri Mar 4 18:16:12 2022 +0000

    Revert "gapplication: Expose zero-valued numbers in handle-local-options"
    
    This reverts commit 1ed67a9c44508dc70b4bbdb02ed91037643fdfd0.
    
    It turns out that including options, with their default values, in the
    `handle-local-options` signal, which weren’t set on the command line,
    breaks some applications.
    
    In particular, it breaks Inkscape, which is the application this commit
    was originally meant to fix (a different problem).
    
    Signed-off-by: Philip Withnall <pwithnall endlessos org>
    
    Fixes: #2611
    Breaks: #2329
    See: !1953

 gio/gapplication.c       | 13 ++++++-------
 gio/tests/gapplication.c | 48 ------------------------------------------------
 2 files changed, 6 insertions(+), 55 deletions(-)
---
diff --git a/gio/gapplication.c b/gio/gapplication.c
index 96c565019..cbc467a92 100644
--- a/gio/gapplication.c
+++ b/gio/gapplication.c
@@ -434,7 +434,8 @@ g_application_pack_option_entries (GApplication *application,
           break;
 
         case G_OPTION_ARG_INT:
-          value = g_variant_new_int32 (*(gint32 *) entry->arg_data);
+          if (*(gint32 *) entry->arg_data)
+            value = g_variant_new_int32 (*(gint32 *) entry->arg_data);
           break;
 
         case G_OPTION_ARG_FILENAME:
@@ -453,11 +454,13 @@ g_application_pack_option_entries (GApplication *application,
           break;
 
         case G_OPTION_ARG_DOUBLE:
-          value = g_variant_new_double (*(gdouble *) entry->arg_data);
+          if (*(gdouble *) entry->arg_data)
+            value = g_variant_new_double (*(gdouble *) entry->arg_data);
           break;
 
         case G_OPTION_ARG_INT64:
-          value = g_variant_new_int64 (*(gint64 *) entry->arg_data);
+          if (*(gint64 *) entry->arg_data)
+            value = g_variant_new_int64 (*(gint64 *) entry->arg_data);
           break;
 
         default:
@@ -696,10 +699,6 @@ add_packed_option (GApplication *application,
  * consumed, they will no longer be visible to the default handling
  * (which treats them as filenames to be opened).
  *
- * The dict includes options that have been explicitly specified on the parsed
- * commandline, as well as zero values for numeric options that were not
- * necessarily specified.
- *
  * It is important to use the proper GVariant format when retrieving
  * the options with g_variant_dict_lookup():
  * - for %G_OPTION_ARG_NONE, use `b`
diff --git a/gio/tests/gapplication.c b/gio/tests/gapplication.c
index f9a95cd31..6f1a27e0f 100644
--- a/gio/tests/gapplication.c
+++ b/gio/tests/gapplication.c
@@ -1020,53 +1020,6 @@ test_handle_local_options_passthrough (void)
   g_test_trap_assert_passed ();
 }
 
-static gint
-test_local_options_double (GApplication *app,
-                           GVariantDict *options,
-                           gpointer      data)
-{
-  gboolean *called = data;
-  gdouble number = 1.0;
-
-  *called = TRUE;
-
-  g_assert_true (g_variant_dict_lookup (options, "number", "d", &number));
-  g_assert_cmpfloat (number, ==, 0.0);
-
-  return 0;
-}
-
-static void
-test_handle_local_options_double (void)
-{
-  g_test_summary ("Test that a double of value 0.0 can be parsed using the options handling");
-  g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2329";);
-
-  if (g_test_subprocess ())
-    {
-      char *binpath = g_test_build_filename (G_TEST_BUILT, "unimportant", NULL);
-      gchar *argv[] = { binpath, "--number", "0.0", NULL };
-      GApplication *app;
-      gboolean called = FALSE;
-      int status;
-
-      app = g_application_new ("org.gtk.TestApplication", 0);
-      g_application_add_main_option (app, "number", 0, G_OPTION_FLAG_NONE, G_OPTION_ARG_DOUBLE, "", "");
-      g_signal_connect (app, "handle-local-options", G_CALLBACK (test_local_options_double), &called);
-
-      status = g_application_run (app, G_N_ELEMENTS (argv) -1, argv);
-      g_assert_true (called);
-      g_assert_cmpint (status, ==, 0);
-
-      g_object_unref (app);
-      g_free (binpath);
-      return;
-    }
-
-  g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_INHERIT_STDOUT | G_TEST_SUBPROCESS_INHERIT_STDERR);
-  g_test_trap_assert_passed ();
-}
-
 static void
 test_api (void)
 {
@@ -1269,7 +1222,6 @@ main (int argc, char **argv)
   g_test_add_func ("/gapplication/test-handle-local-options1", test_handle_local_options_success);
   g_test_add_func ("/gapplication/test-handle-local-options2", test_handle_local_options_failure);
   g_test_add_func ("/gapplication/test-handle-local-options3", test_handle_local_options_passthrough);
-  g_test_add_func ("/gapplication/test-handle-local-options4", test_handle_local_options_double);
   g_test_add_func ("/gapplication/api", test_api);
   g_test_add_data_func ("/gapplication/replace", GINT_TO_POINTER (TRUE), test_replace);
   g_test_add_data_func ("/gapplication/no-replace", GINT_TO_POINTER (FALSE), test_replace);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]