/ src / gui / support.c
support.c
  1  /*
  2   * DO NOT EDIT THIS FILE - it is generated by Glade.
  3   */
  4  
  5  #ifdef HAVE_CONFIG_H
  6  #  include <config.h>
  7  #endif
  8  
  9  #include <sys/types.h>
 10  #include <sys/stat.h>
 11  #include <unistd.h>
 12  #include <string.h>
 13  #include <stdio.h>
 14  
 15  #include <gtk/gtk.h>
 16  
 17  #include "support.h"
 18  
 19  GtkWidget*
 20  lookup_widget                          (GtkWidget       *widget,
 21                                          const gchar     *widget_name)
 22  {
 23    GtkWidget *parent, *found_widget;
 24  
 25    for (;;)
 26      {
 27        if (GTK_IS_MENU (widget))
 28          parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
 29        else
 30          parent = widget->parent;
 31        if (!parent)
 32          parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
 33        if (parent == NULL)
 34          break;
 35        widget = parent;
 36      }
 37  
 38    found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
 39                                                   widget_name);
 40    if (!found_widget)
 41      g_warning ("Widget not found: %s", widget_name);
 42    return found_widget;
 43  }
 44  
 45  static GList *pixmaps_directories = NULL;
 46  
 47  /* Use this function to set the directory containing installed pixmaps. */
 48  void
 49  add_pixmap_directory                   (const gchar     *directory)
 50  {
 51    pixmaps_directories = g_list_prepend (pixmaps_directories,
 52                                          g_strdup (directory));
 53  }
 54  
 55  /* This is an internally used function to find pixmap files. */
 56  static gchar*
 57  find_pixmap_file                       (const gchar     *filename)
 58  {
 59    GList *elem;
 60  
 61    /* We step through each of the pixmaps directory to find it. */
 62    elem = pixmaps_directories;
 63    while (elem)
 64      {
 65        gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data,
 66                                           G_DIR_SEPARATOR_S, filename);
 67        if (g_file_test (pathname, G_FILE_TEST_EXISTS))
 68          return pathname;
 69        g_free (pathname);
 70        elem = elem->next;
 71      }
 72    return NULL;
 73  }
 74  
 75  /* This is an internally used function to create pixmaps. */
 76  GtkWidget*
 77  create_pixmap                          (GtkWidget       *widget,
 78                                          const gchar     *filename)
 79  {
 80    gchar *pathname = NULL;
 81    GtkWidget *pixmap;
 82  
 83    if (!filename || !filename[0])
 84        return gtk_image_new ();
 85  
 86    pathname = find_pixmap_file (filename);
 87  
 88    if (!pathname)
 89      {
 90        g_warning ("Couldn't find pixmap file: %s", filename);
 91        return gtk_image_new ();
 92      }
 93  
 94    pixmap = gtk_image_new_from_file (pathname);
 95    g_free (pathname);
 96    return pixmap;
 97  }
 98  
 99  /* This is an internally used function to create pixmaps. */
100  GdkPixbuf*
101  create_pixbuf                          (const gchar     *filename)
102  {
103    gchar *pathname = NULL;
104    GdkPixbuf *pixbuf;
105    GError *error = NULL;
106  
107    if (!filename || !filename[0])
108        return NULL;
109  
110    pathname = find_pixmap_file (filename);
111  
112    if (!pathname)
113      {
114        g_warning ("Couldn't find pixmap file: %s", filename);
115        return NULL;
116      }
117  
118    pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
119    if (!pixbuf)
120      {
121        fprintf (stderr, "Failed to load pixbuf file: %s: %s\n",
122                 pathname, error->message);
123        g_error_free (error);
124      }
125    g_free (pathname);
126    return pixbuf;
127  }
128  
129  /* This is used to set ATK action descriptions. */
130  void
131  glade_set_atk_action_description       (AtkAction       *action,
132                                          const gchar     *action_name,
133                                          const gchar     *description)
134  {
135    gint n_actions, i;
136  
137    n_actions = atk_action_get_n_actions (action);
138    for (i = 0; i < n_actions; i++)
139      {
140        if (!strcmp (atk_action_get_name (action, i), action_name))
141          atk_action_set_description (action, i, description);
142      }
143  }
144