~foxtrotgps-team/foxtrotgps/trunk

« back to all changes in this revision

Viewing changes to src/support.c

  • Committer: Joshua Judson Rosen
  • Date: 2009-09-26 02:35:15 UTC
  • Revision ID: rozzin@geekspace.com-20090926023515-yxl5sg1a45gupuc8
Imported from tangogps-0.9.7 tarball.

Show diffs side-by-side

added added

removed removed

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