fix playlist closing
[omnplay] / src / 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 #include "pixmap2-internal.h"
20
21 static const void* pixmap2_map[] =
22 {
23 "Axialis_Team_item_add_16x116.png", Axialis_Team_item_add_16x116_png,
24 "Axialis_Team_item_add_from_library_16x16.png", Axialis_Team_item_add_from_library_16x16_png,
25 "Axialis_Team_item_block_16x116.png", Axialis_Team_item_block_16x116_png,
26 "Axialis_Team_item_delete_16x116.png", Axialis_Team_item_delete_16x116_png,
27 "Axialis_Team_item_edit_16x116.png", Axialis_Team_item_edit_16x116_png,
28 "Axialis_Team_item_loop_16x116.png", Axialis_Team_item_loop_16x116_png,
29 "Axialis_Team_item_move_down_16x116.png", Axialis_Team_item_move_down_16x116_png,
30 "Axialis_Team_item_move_up_16x116.png", Axialis_Team_item_move_up_16x116_png,
31 "Axialis_Team_library_refresh_16x16.png", Axialis_Team_library_refresh_16x16_png,
32 "Axialis_Team_player_cue_32x32.png", Axialis_Team_player_cue_32x32_png,
33 "Axialis_Team_player_pause_32x32.png", Axialis_Team_player_pause_32x32_png,
34 "Axialis_Team_player_play_64x32.png", Axialis_Team_player_play_64x32_png,
35 "Axialis_Team_player_stop_32x32.png", Axialis_Team_player_stop_32x32_png,
36 "Axialis_Team_playlist_open_16x16.png", Axialis_Team_playlist_open_16x16_png,
37 "Axialis_Team_playlist_relink_16x16.png", Axialis_Team_playlist_relink_16x16_png,
38 "Axialis_Team_playlist_save_16x16.png", Axialis_Team_playlist_save_16x16_png,
39 "Axialis_Team_search_in_library_16x16.png", Axialis_Team_search_in_library_16x16_png,
40 "Axialis_Team_search_next_16x16.png", Axialis_Team_search_next_16x16_png,
41 "block_type_block_end_16x16.png", block_type_block_end_16x16_png,
42 "block_type_block_loop_16x16.png", block_type_block_loop_16x16_png,
43 "block_type_block_middle_16x16.png", block_type_block_middle_16x16_png,
44 "block_type_block_single_16x16.png", block_type_block_single_16x16_png,
45 "block_type_block_start_16x16.png", block_type_block_start_16x16_png,
46 "block_type_loop_end_16x16.png", block_type_loop_end_16x16_png,
47 "block_type_loop_middle_16x16.png", block_type_loop_middle_16x16_png,
48 "block_type_loop_start_16x16.png", block_type_loop_start_16x16_png,
49 NULL, NULL
50 };
51
52 GdkPixbuf* create_pixbuf2(const gchar *filename)
53 {
54 int i;
55
56 for(i = 0; pixmap2_map[i]; i += 2)
57 if(!strcmp((char*)pixmap2_map[i], filename))
58 return gdk_pixbuf_new_from_inline(-1, pixmap2_map[i + 1], FALSE, NULL);
59
60 return create_pixbuf(filename);
61 }
62
63
64 GtkWidget*
65 lookup_widget (GtkWidget *widget,
66 const gchar *widget_name)
67 {
68 GtkWidget *parent, *found_widget;
69
70 for (;;)
71 {
72 if (GTK_IS_MENU (widget))
73 parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
74 else
75 parent = widget->parent;
76 if (!parent)
77 parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
78 if (parent == NULL)
79 break;
80 widget = parent;
81 }
82
83 found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
84 widget_name);
85 if (!found_widget)
86 g_warning ("Widget not found: %s", widget_name);
87 return found_widget;
88 }
89
90 static GList *pixmaps_directories = NULL;
91
92 /* Use this function to set the directory containing installed pixmaps. */
93 void
94 add_pixmap_directory (const gchar *directory)
95 {
96 pixmaps_directories = g_list_prepend (pixmaps_directories,
97 g_strdup (directory));
98 }
99
100 /* This is an internally used function to find pixmap files. */
101 static gchar*
102 find_pixmap_file (const gchar *filename)
103 {
104 GList *elem;
105
106 /* We step through each of the pixmaps directory to find it. */
107 elem = pixmaps_directories;
108 while (elem)
109 {
110 gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data,
111 G_DIR_SEPARATOR_S, filename);
112 if (g_file_test (pathname, G_FILE_TEST_EXISTS))
113 return pathname;
114 g_free (pathname);
115 elem = elem->next;
116 }
117 return NULL;
118 }
119
120 /* This is an internally used function to create pixmaps. */
121 GtkWidget*
122 create_pixmap (GtkWidget *widget,
123 const gchar *filename)
124 {
125 gchar *pathname = NULL;
126 GtkWidget *pixmap;
127
128 if (!filename || !filename[0])
129 return gtk_image_new ();
130
131 pathname = find_pixmap_file (filename);
132
133 if (!pathname)
134 {
135 g_warning (_("Couldn't find pixmap file: %s"), filename);
136 return gtk_image_new ();
137 }
138
139 pixmap = gtk_image_new_from_file (pathname);
140 g_free (pathname);
141 return pixmap;
142 }
143
144 /* This is an internally used function to create pixmaps. */
145 GdkPixbuf*
146 create_pixbuf (const gchar *filename)
147 {
148 gchar *pathname = NULL;
149 GdkPixbuf *pixbuf;
150 GError *error = NULL;
151
152 if (!filename || !filename[0])
153 return NULL;
154
155 pathname = find_pixmap_file (filename);
156
157 if (!pathname)
158 {
159 g_warning (_("Couldn't find pixmap file: %s"), filename);
160 return NULL;
161 }
162
163 pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
164 if (!pixbuf)
165 {
166 fprintf (stderr, "Failed to load pixbuf file: %s: %s\n",
167 pathname, error->message);
168 g_error_free (error);
169 }
170 g_free (pathname);
171 return pixbuf;
172 }
173
174 /* This is used to set ATK action descriptions. */
175 void
176 glade_set_atk_action_description (AtkAction *action,
177 const gchar *action_name,
178 const gchar *description)
179 {
180 gint n_actions, i;
181
182 n_actions = atk_action_get_n_actions (action);
183 for (i = 0; i < n_actions; i++)
184 {
185 if (!strcmp (atk_action_get_name (action, i), action_name))
186 atk_action_set_description (action, i, description);
187 }
188 }
189