diff --git a/garcon/garcon-menu-item.c b/garcon/garcon-menu-item.c
index 5ee39ff41c8602056e4548846983595526bd37da..ba5b04aea9e45333dab2697e1ceadf241dabc382 100644
--- a/garcon/garcon-menu-item.c
+++ b/garcon/garcon-menu-item.c
@@ -703,8 +703,20 @@ garcon_menu_item_url_exec (XfceRc *rc)
   url = xfce_rc_read_entry_untranslated (rc, G_KEY_FILE_DESKTOP_KEY_URL, NULL);
   if (url != NULL)
     {
+#if GLIB_CHECK_VERSION (2, 68, 0)
       string = g_string_new (url);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
       g_string_replace (string, "%", "%%", 0);
+G_GNUC_END_IGNORE_DEPRECATIONS
+#else
+      string = g_string_sized_new (2 * strlen (url));
+      for (const gchar *p = url; *p != '\0'; p++)
+        if (*p == '%')
+          string = g_string_append (string, "%%");
+        else
+          string = g_string_append_c (string, *p);
+      string = g_string_append_c (string, '\0');
+#endif
       url_exec = g_strdup_printf ("exo-open '%s'", string->str);
       g_string_free (string, TRUE);
     }