From f9013fb09f1e5fc0c3979d3d09b29f7f0c9fb301 Mon Sep 17 00:00:00 2001
From: Glynn Foster <glynn.foster@sun.com>
Date: Sun, 29 Feb 2004 07:34:28 +0000
Subject: Remove all the stupid duplicated code to do the help stuff, and
 instead do

2004-02-29  Glynn Foster  <glynn.foster@sun.com>

	* src/about.c, src/util.c, src/util.h: Remove all the
	stupid duplicated code to do the help stuff, and instead
	do a simple call for 'yelp ghelp:zenity'. -418, +23. Eeek.
	Fixes #135607.
---
 src/about.c |   2 +-
 src/util.c  | 407 ++----------------------------------------------------------
 src/util.h  |   4 +-
 3 files changed, 9 insertions(+), 404 deletions(-)

(limited to 'src')

diff --git a/src/about.c b/src/about.c
index a42a6e1..d955b92 100644
--- a/src/about.c
+++ b/src/about.c
@@ -443,7 +443,7 @@ zenity_about_dialog_response (GtkWidget *widget, int response, gpointer data)
       break;
 
     case GTK_RESPONSE_HELP:
-      zenity_util_show_help (ZENITY_HELP_PATH, "zenity.xml", NULL);
+      zenity_util_show_help (NULL);
       break;
 
     case GTK_RESPONSE_CREDITS:
diff --git a/src/util.c b/src/util.c
index 5091f2a..0b616ef 100644
--- a/src/util.c
+++ b/src/util.c
@@ -194,409 +194,16 @@ zenity_util_set_window_icon_from_stock (GtkWidget *widget, const gchar *stock_id
   g_object_unref (pixbuf);
 }
 
-/* This is copied from libgnome/gnome-i18n.c since we try and avoid using
- * the evils of gnome_program_init (), which messes up the commandline
- */
-
-static GHashTable *alias_table = NULL;
-
-/*read an alias file for the locales*/
-static void
-zenity_read_aliases (char *file)
-{
-  FILE *fp;
-  char buf[256];
-
-  if (!alias_table)
-  alias_table = g_hash_table_new (g_str_hash, g_str_equal);
-
-  fp = fopen (file,"r");
-
-  if (!fp)
-    return;
-
-  while (fgets (buf,256,fp)) {
-    gchar *p;
-    g_strstrip (buf);
-
-    if (buf[0]=='#' || buf[0]=='\0')
-      continue;
-
-    p = (gchar *) strtok (buf, "\t ");
-
-    if (!p)
-      continue;
-
-    p = (gchar *) strtok (NULL, "\t ");
-
-    if(!p)
-      continue;
-
-    if (!g_hash_table_lookup (alias_table, buf))
-      g_hash_table_insert (alias_table, g_strdup (buf), g_strdup (p));
-  }
-
-  fclose (fp);
-}
-
-/*return the un-aliased language as a newly allocated string*/
-static char *
-zenity_unalias_lang (char *lang)
-{
-  char *p;
-  int i;
-
-  if (!alias_table) { 
-    zenity_read_aliases ("/usr/share/locale/locale.alias");
-    zenity_read_aliases ("/usr/local/share/locale/locale.alias");
-    zenity_read_aliases ("/usr/lib/X11/locale/locale.alias");
-    zenity_read_aliases ("/usr/openwin/lib/locale/locale.alias");
-  }
-  
-  i = 0;
-  while ((p = g_hash_table_lookup (alias_table,lang)) && strcmp (p, lang)) {
-    lang = p;
-       
-    if (i++ == 30) {
-      static gboolean said_before = FALSE;
-
-      if (!said_before)
-        g_warning (_("Too many alias levels for a locale may indicate a loop"));
-
-      said_before = TRUE;
-      return lang;
-    }
-  }
-  return lang;
-}
-
-/* Mask for components of locale spec. The ordering here is from
- * least significant to most significant
- */
-enum
-{
-  COMPONENT_CODESET =   1 << 0,
-  COMPONENT_TERRITORY = 1 << 1,
-  COMPONENT_MODIFIER =  1 << 2
-};
-
-/* Break an X/Open style locale specification into components
- */
-static guint
-zenity_explode_locale (const gchar *locale,
-                       gchar      **language, 
-                       gchar      **territory, 
-                       gchar      **codeset, 
-                       gchar      **modifier)
-{
-  const gchar *uscore_pos;
-  const gchar *at_pos; 
-  const gchar *dot_pos; 
-  guint mask = 0;
-
-  uscore_pos = (const gchar *) strchr (locale, '_'); 
-  dot_pos = (const gchar *) strchr (uscore_pos ? uscore_pos : locale, '.'); 
-  at_pos = (const gchar *) strchr (dot_pos ? dot_pos : (uscore_pos ? uscore_pos : locale), '@'); 
-
-  if (at_pos) { 
-    mask |= COMPONENT_MODIFIER; 
-    *modifier = g_strdup (at_pos);
-  } 
-  else 
-    at_pos = locale + strlen (locale);
-
-  if (dot_pos) { 
-    mask |= COMPONENT_CODESET; 
-    *codeset = g_new (gchar, 1 + at_pos - dot_pos); 
-    strncpy (*codeset, dot_pos, at_pos - dot_pos);
-    (*codeset) [at_pos - dot_pos] = '\0';
-  } 
-  else 
-    dot_pos = at_pos;
-
-  if (uscore_pos) {
-    mask |= COMPONENT_TERRITORY; 
-    *territory = g_new (gchar, 1 + dot_pos - uscore_pos); 
-    strncpy (*territory, uscore_pos, dot_pos - uscore_pos); 
-    (*territory)[dot_pos - uscore_pos] = '\0';
-  } 
-  else
-    uscore_pos = dot_pos;
-
-  *language = g_new (gchar, 1 + uscore_pos - locale); 
-  strncpy (*language, locale, uscore_pos - locale); 
-  (*language) [uscore_pos - locale] = '\0';
-
-  return mask;
-}
-
-static GList *
-zenity_compute_locale_variants (const gchar *locale)
-{
-  GList *retval = NULL; 
-  gchar *language; 
-  gchar *territory; 
-  gchar *codeset; 
-  gchar *modifier; 
-  guint mask;
-  guint i;
-
-
-  g_return_val_if_fail (locale != NULL, NULL); 
-      
-  mask = zenity_explode_locale (locale, &language, &territory, &codeset, &modifier); 
-        
-  /* Iterate through all possible combinations, from least attractive
-   * to most attractive.
-   */
-  
-  for (i = 0; i <= mask; i++) 
-    if ((i & ~mask) == 0) { 
-      gchar *val = g_strconcat (language, (i & COMPONENT_TERRITORY) ? territory : "", 
-                                          (i & COMPONENT_CODESET) ? codeset : "", 
-                                          (i & COMPONENT_MODIFIER) ? modifier : "", NULL);
-      retval = g_list_prepend (retval, val);
-    }
-
-    g_free (language); 
-        
-    if (mask & COMPONENT_CODESET) 
-      g_free (codeset); 
-    if (mask & COMPONENT_TERRITORY) 
-      g_free (territory); 
-    if (mask & COMPONENT_MODIFIER) 
-      g_free (modifier);
-
-    return retval;
-}
-
-static const gchar *
-zenity_guess_category_value (const gchar *categoryname)
-{
-  const gchar *retval;
-
-  /* The highest priority value is the `LANGUAGE' environment 
-   * variable.  This is a GNU extension.
-   */
-
-  retval = g_getenv ("LANGUAGE");
-
-  if (retval != NULL && retval[0] != '\0') 
-    return retval;
-
-  /* `LANGUAGE' is not set.  So we have to proceed with the POSIX 
-   * methods of looking to `LC_ALL', `LC_xxx', and `LANG'.  On some 
-   * systems this can be done by the `setlocale' function itself. 
-   */
-
-  /* Setting of LC_ALL overwrites all other.  */
-
-  retval = g_getenv ("LC_ALL");
-
-  if (retval != NULL && retval[0] != '\0') 
-    return retval;
-
-  /* Next comes the name of the desired category.  */ 
-  retval = g_getenv (categoryname);
-
-  if (retval != NULL && retval[0] != '\0') 
-    return retval;
-
-  /* Last possibility is the LANG environment variable.  */ 
-  retval = g_getenv ("LANG"); 
-  if (retval != NULL && retval[0] != '\0') 
-    return retval;
-
-  return NULL;
-}
-
-
-static GHashTable *category_table= NULL;
-
-static const GList *
-zenity_i18n_get_language_list (const gchar *category_name)
-{
-  GList *list; 
-        
-  if (!category_name) 
-    category_name= "LC_ALL"; 
-        
-  if (category_table) {
-    list= g_hash_table_lookup (category_table, (const gpointer) category_name); 
-  } else { 
-    category_table= g_hash_table_new (g_str_hash, g_str_equal); 
-    list= NULL; 
-  }
-
-  if (!list) {
-    gint c_locale_defined= FALSE; 
-    const gchar *category_value; 
-    gchar *category_memory, *orig_category_memory; 
-                
-    category_value = zenity_guess_category_value (category_name); 
-               
-    if (! category_value) 
-      category_value = "C"; 
-
-      orig_category_memory = category_memory = g_malloc (strlen (category_value) + 1);
-      
-      while (category_value[0] != '\0') {
-	while (category_value[0] != '\0' && category_value[0] == ':') 
-        ++category_value; 
-                        
-        if (category_value[0] != '\0') {
-	  char *cp= category_memory; 
-                                
-          while (category_value[0] != '\0' && category_value[0] != ':') 
-            *category_memory++= *category_value++; 
-                                
-          category_memory[0]= '\0'; 
-          category_memory++; 
-                                
-          cp = zenity_unalias_lang (cp); 
-                               
-          if (strcmp (cp, "C") == 0)
-            c_locale_defined= TRUE; 
-
-          list= g_list_concat (list, zenity_compute_locale_variants (cp)); 
-        } 
-     } 
-                
-     g_free (orig_category_memory); 
-                
-     if (!c_locale_defined) 
-       list= g_list_append (list, "C"); 
-                
-     g_hash_table_insert (category_table, (gpointer) category_name, list); 
-  } 
-       
-  return list;
-}
-
-/* This is copied from libgnome/gnome-help.c since we try and avoid using
- * the evils of gnome_program_init (), which messes up the commandline
- */
-
-static char *
-zenity_locate_help_file (const char *path, const char *doc_name)
-{
-  int i;
-  char *exts[] = { ".xml", ".docbook", ".sgml", ".html", "", NULL };
-  const GList *lang_list = zenity_i18n_get_language_list ("LC_MESSAGES");
-
-  for (;lang_list != NULL; lang_list = lang_list->next) {
-    const char *lang = lang_list->data;
-
-    /* This has to be a valid language AND a language with
-     * no encoding postfix.  The language will come up without
-     * encoding next
-     */
-
-    if (lang == NULL || (gchar *) strchr (lang, '.') != NULL)
-      continue;
-
-    for (i = 0; exts[i] != NULL; i++) {
-       char *name;
-       char *full;
-      
-       name = g_strconcat (doc_name, exts[i], NULL);
-       full = g_build_filename (path, lang, name, NULL);
-
-       if (g_file_test (full, G_FILE_TEST_EXISTS))
-         return full;
-
-       g_free (full);
-
-    }
-  }
-
-  return NULL;
-}
-
-/* This is copied from libgnome/gnome-url.c since we try and avoid using
- * the evils of gnome_program_init (), which messes up the commandline
- */
-
-gboolean
-zenity_util_show_help (const gchar *path, const gchar *document, GError **error)
+void
+zenity_util_show_help (GError **error)
 {
-  GConfClient *client;
-  gint i;
-  gchar *pos, *template;
-  int argc;
-  char **argv;
-  gboolean ret;
-  char *url;
-	
-  g_return_val_if_fail (path != NULL, FALSE);
-  g_return_val_if_fail (document != NULL, FALSE);
-        
-  url = g_strconcat ("ghelp:///", zenity_locate_help_file (path, document), NULL);
-  pos = (gchar *) strchr (url, ':');
-
-  client = gconf_client_get_default ();
-
-  if (pos != NULL) {
-    gchar *protocol, *path;
-
-    g_return_val_if_fail (pos >= url, FALSE);
-
-    protocol = g_new (gchar, pos - url + 1);
-    strncpy (protocol, url, pos - url);
-    protocol[pos - url] = '\0';
-    g_ascii_strdown (protocol, -1);
-    
-    path = g_strconcat (URL_HANDLER_DIR, protocol, "/command", NULL);
-    template = gconf_client_get_string (client, path, NULL);
-
-    if (template == NULL) {
-      gchar* template_temp;
-			
-      template_temp = gconf_client_get_string (client, DEFAULT_HANDLER_PATH, NULL);
-						
-      /* Retry to get the right url handler */
-      template = gconf_client_get_string (client, path, NULL);
-
-      if (template == NULL) 
-        template = template_temp;
-      else
-        g_free (template_temp);
+  gchar *tmp;
+  tmp = g_find_program_in_path ("yelp");
 
-    }
-		
-    g_free (path);
-    g_free (protocol);
-
-  } else {
-    /* no ':' ? this shouldn't happen. Use default handler */
-    template = gconf_client_get_string (client, DEFAULT_HANDLER_PATH, NULL);
+  if (tmp) {
+    g_free (tmp);
+    g_spawn_command_line_async ("yelp ghelp:zenity", error);
   }
-
-  g_object_unref (G_OBJECT (client));
-
-  if (!g_shell_parse_argv (template, &argc, &argv, error)) {
-    g_free (template);
-    return FALSE;
-  }
-
-  g_free (template);
-
-  for (i = 0; i < argc; i++) {
-    char *arg;
-
-    if (strcmp (argv[i], "%s") != 0)
-      continue;
-
-    arg = argv[i];
-    argv[i] = g_strdup (url);
-    g_free (arg);
-  }
-	
-  /* This can return some errors */
-  ret = g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, error); 
-  g_strfreev (argv);
-
-  return ret;
 }
 
 gint 
diff --git a/src/util.h b/src/util.h
index 0b518a1..1374818 100644
--- a/src/util.h
+++ b/src/util.h
@@ -19,9 +19,7 @@ void            zenity_util_set_window_icon               (GtkWidget      *widge
                                                            const gchar    *filename);
 void            zenity_util_set_window_icon_from_stock    (GtkWidget      *widget,
                                                            const gchar    *stock_id);
-gboolean        zenity_util_show_help                     (const gchar    *path,
-                                                           const gchar    *document,
-                                                           GError        **error);
+void		zenity_util_show_help                     (GError        **error);
 gint		zenity_util_return_exit_code 		  (ZenityExitCode value);                      
                                
 G_END_DECLS
-- 
cgit v1.2.3-2-g168b