1 /* gmpc-metadata-similarartists.c generated by valac 0.12.0, the Vala compiler
2  * generated from gmpc-metadata-similarartists.vala, do not modify */
3 
4 /* Gnome Music Player Client (GMPC)
5  * Copyright (C) 2004-2011 Qball Cow <qball@gmpclient.org>
6  * Project homepage: http://gmpclient.org/
7 
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12 
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17 
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22 
23 #include <glib.h>
24 #include <glib-object.h>
25 #include <gtk/gtk.h>
26 #include <gtktransition.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <config.h>
30 #include "gmpc-extras.h"
31 #include <libmpd/libmpdclient.h>
32 #include <libmpd/libmpd.h>
33 #include <misc.h>
34 #include <gdk/gdk.h>
35 #include <gmpc-meta-watcher.h>
36 #include <metadata.h>
37 #include <glib/gi18n-lib.h>
38 #include <plugin.h>
39 #include <libmpd/libmpd-internal.h>
40 #include <gmpc-metaimage.h>
41 #include <pango/pango.h>
42 #include <main.h>
43 
44 #define _mpd_freeSong0(var) ((var == NULL) ? NULL : (var = (mpd_freeSong (var), NULL)))
45 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
46 #define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
47 #define _g_free0(var) (var = (g_free (var), NULL))
48 #define _mpd_data_free0(var) ((var == NULL) ? NULL : (var = (mpd_data_free (var), NULL)))
49 #define __g_list_free__g_object_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__g_object_unref0_ (var), NULL)))
50 #define _meta_data_free0(var) ((var == NULL) ? NULL : (var = (meta_data_free (var), NULL)))
51 
52 struct _GmpcMetaDataWidgetsSimilarArtistsPrivate {
53 	mpd_Song* song;
54 	gint columns;
55 	gint button_width;
56 };
57 
58 
59 static gpointer gmpc_meta_data_widgets_similar_artists_parent_class = NULL;
60 
61 #define use_transition_mdsa TRUE
62 #define some_unique_name_mdsa VERSION
63 #define GMPC_META_DATA_WIDGETS_SIMILAR_ARTISTS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GMPC_META_DATA_WIDGETS_TYPE_SIMILAR_ARTISTS, GmpcMetaDataWidgetsSimilarArtistsPrivate))
64 enum  {
65 	GMPC_META_DATA_WIDGETS_SIMILAR_ARTISTS_DUMMY_PROPERTY
66 };
67 static void gmpc_meta_data_widgets_similar_artists_size_changed (GmpcMetaDataWidgetsSimilarArtists* self, GdkRectangle* alloc);
68 static void gmpc_meta_data_widgets_similar_artists_metadata_changed (GmpcMetaDataWidgetsSimilarArtists* self, GmpcMetaWatcher* gmw2, const mpd_Song* song, MetaDataType type, MetaDataResult _result_, const MetaData* met);
69 static void _g_object_unref0_ (gpointer var);
70 static void _g_list_free__g_object_unref0_ (GList* self);
71 static void gmpc_meta_data_widgets_similar_artists_artist_button_clicked (GmpcMetaDataWidgetsSimilarArtists* self, GtkButton* button);
72 static gboolean _misc_header_expose_event_gtk_widget_expose_event (GtkWidget* _sender, GdkEventExpose* event, gpointer self);
73 static void _gmpc_meta_data_widgets_similar_artists_artist_button_clicked_gtk_button_clicked (GtkButton* _sender, gpointer self);
74 #define np2_LOG_DOMAIN "NowPlaying"
75 static void _gmpc_meta_data_widgets_similar_artists_metadata_changed_gmpc_meta_watcher_data_changed (GmpcMetaWatcher* _sender, const mpd_Song* song, MetaDataType type, MetaDataResult _result_, const MetaData* met, gpointer self);
76 static void _gmpc_meta_data_widgets_similar_artists_size_changed_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self);
77 static void gmpc_meta_data_widgets_similar_artists_finalize (GObject* obj);
78 
79 
_g_object_ref0(gpointer self)80 static gpointer _g_object_ref0 (gpointer self) {
81 	return self ? g_object_ref (self) : NULL;
82 }
83 
84 
gmpc_meta_data_widgets_similar_artists_size_changed(GmpcMetaDataWidgetsSimilarArtists * self,GdkRectangle * alloc)85 static void gmpc_meta_data_widgets_similar_artists_size_changed (GmpcMetaDataWidgetsSimilarArtists* self, GdkRectangle* alloc) {
86 	gint t_column;
87 	gint _tmp0_ = 0;
88 	g_return_if_fail (self != NULL);
89 	t_column = (*alloc).width / self->priv->button_width;
90 	if (t_column < 1) {
91 		_tmp0_ = 1;
92 	} else {
93 		_tmp0_ = t_column;
94 	}
95 	t_column = _tmp0_;
96 	if (t_column != self->priv->columns) {
97 		GList* _tmp1_ = NULL;
98 		GList* list;
99 		gint i;
100 		guint _tmp3_;
101 		_tmp1_ = gtk_container_get_children ((GtkContainer*) self);
102 		list = _tmp1_;
103 		{
104 			GList* child_collection;
105 			GList* child_it;
106 			child_collection = list;
107 			for (child_it = child_collection; child_it != NULL; child_it = child_it->next) {
108 				GtkWidget* _tmp2_;
109 				GtkWidget* child;
110 				_tmp2_ = _g_object_ref0 ((GtkWidget*) child_it->data);
111 				child = _tmp2_;
112 				{
113 					g_object_ref ((GObject*) child);
114 					gtk_container_remove ((GtkContainer*) self, child);
115 					_g_object_unref0 (child);
116 				}
117 			}
118 		}
119 		self->priv->columns = t_column;
120 		i = 0;
121 		_tmp3_ = g_list_length (list);
122 		gtk_table_resize ((GtkTable*) self, (_tmp3_ / self->priv->columns) + 1, (guint) self->priv->columns);
123 		{
124 			GList* item_collection;
125 			GList* item_it;
126 			item_collection = list;
127 			for (item_it = item_collection; item_it != NULL; item_it = item_it->next) {
128 				GtkWidget* _tmp4_;
129 				GtkWidget* item;
130 				_tmp4_ = _g_object_ref0 ((GtkWidget*) item_it->data);
131 				item = _tmp4_;
132 				{
133 					gtk_table_attach ((GtkTable*) self, item, (guint) (i % self->priv->columns), (guint) ((i % self->priv->columns) + 1), (guint) (i / self->priv->columns), (guint) ((i / self->priv->columns) + 1), GTK_EXPAND | GTK_FILL, GTK_SHRINK, (guint) 0, (guint) 0);
134 					i++;
135 					_g_object_unref0 (item);
136 				}
137 			}
138 		}
139 		gtk_widget_show_all ((GtkWidget*) self);
140 		_g_list_free0 (list);
141 	}
142 }
143 
144 
145 /**
146      * Handle signals from the metadata object.
147      */
_g_object_unref0_(gpointer var)148 static void _g_object_unref0_ (gpointer var) {
149 	(var == NULL) ? NULL : (var = (g_object_unref (var), NULL));
150 }
151 
152 
_g_list_free__g_object_unref0_(GList * self)153 static void _g_list_free__g_object_unref0_ (GList* self) {
154 	g_list_foreach (self, (GFunc) _g_object_unref0_, NULL);
155 	g_list_free (self);
156 }
157 
158 
gmpc_meta_data_widgets_similar_artists_metadata_changed(GmpcMetaDataWidgetsSimilarArtists * self,GmpcMetaWatcher * gmw2,const mpd_Song * song,MetaDataType type,MetaDataResult _result_,const MetaData * met)159 static void gmpc_meta_data_widgets_similar_artists_metadata_changed (GmpcMetaDataWidgetsSimilarArtists* self, GmpcMetaWatcher* gmw2, const mpd_Song* song, MetaDataType type, MetaDataResult _result_, const MetaData* met) {
160 	gint _tmp0_;
161 	GList* _tmp1_ = NULL;
162 	GList* child_list;
163 	gboolean _tmp3_ = FALSE;
164 	gboolean _tmp4_ = FALSE;
165 	g_return_if_fail (self != NULL);
166 	g_return_if_fail (gmw2 != NULL);
167 	g_return_if_fail (song != NULL);
168 	if (type != META_ARTIST_SIMILAR) {
169 		return;
170 	}
171 	_tmp0_ = g_utf8_collate (self->priv->song->artist, song->artist);
172 	if (_tmp0_ != 0) {
173 		return;
174 	}
175 	_tmp1_ = gtk_container_get_children ((GtkContainer*) self);
176 	child_list = _tmp1_;
177 	{
178 		GList* child_collection;
179 		GList* child_it;
180 		child_collection = child_list;
181 		for (child_it = child_collection; child_it != NULL; child_it = child_it->next) {
182 			GtkWidget* _tmp2_;
183 			GtkWidget* child;
184 			_tmp2_ = _g_object_ref0 ((GtkWidget*) child_it->data);
185 			child = _tmp2_;
186 			{
187 				gtk_object_destroy ((GtkObject*) child);
188 				_g_object_unref0 (child);
189 			}
190 		}
191 	}
192 	if (_result_ == META_DATA_UNAVAILABLE) {
193 		_tmp4_ = TRUE;
194 	} else {
195 		gboolean _tmp5_;
196 		_tmp5_ = meta_data_is_empty (met);
197 		_tmp4_ = _tmp5_;
198 	}
199 	if (_tmp4_) {
200 		_tmp3_ = TRUE;
201 	} else {
202 		gboolean _tmp6_;
203 		_tmp6_ = meta_data_is_text_list (met);
204 		_tmp3_ = !_tmp6_;
205 	}
206 	if (_tmp3_) {
207 		const gchar* _tmp7_ = NULL;
208 		GtkLabel* _tmp8_ = NULL;
209 		GtkLabel* label;
210 		_tmp7_ = _ ("Unavailable");
211 		_tmp8_ = (GtkLabel*) gtk_label_new (_tmp7_);
212 		label = g_object_ref_sink (_tmp8_);
213 		gtk_table_attach ((GtkTable*) self, (GtkWidget*) label, (guint) 0, (guint) 1, (guint) 0, (guint) 1, GTK_SHRINK, GTK_SHRINK, (guint) 0, (guint) 0);
214 		_g_object_unref0 (label);
215 	} else {
216 		if (_result_ == META_DATA_FETCHING) {
217 			const gchar* _tmp9_ = NULL;
218 			GtkLabel* _tmp10_ = NULL;
219 			GtkLabel* label;
220 			_tmp9_ = _ ("Fetching");
221 			_tmp10_ = (GtkLabel*) gtk_label_new (_tmp9_);
222 			label = g_object_ref_sink (_tmp10_);
223 			gtk_table_attach ((GtkTable*) self, (GtkWidget*) label, (guint) 0, (guint) 1, (guint) 0, (guint) 1, GTK_SHRINK, GTK_SHRINK, (guint) 0, (guint) 0);
224 			_g_object_unref0 (label);
225 		} else {
226 			GList* in_db_list;
227 			GList* _tmp11_ = NULL;
228 			GList* _tmp12_ = NULL;
229 			GList* list;
230 			gint items;
231 			gint i;
232 			guint _tmp34_;
233 			guint llength;
234 			gint _tmp35_ = 0;
235 			in_db_list = NULL;
236 			_tmp11_ = meta_data_get_text_list (met);
237 			_tmp12_ = g_list_copy (_tmp11_);
238 			list = _tmp12_;
239 			list = g_list_sort (list, (GCompareFunc) g_utf8_collate);
240 			items = 30;
241 			i = 0;
242 			if (list != NULL) {
243 				GList* liter;
244 				MpdData* _tmp13_ = NULL;
245 				MpdData* data;
246 				gint q;
247 				GList* _tmp30_ = NULL;
248 				liter = NULL;
249 				mpd_database_search_field_start (connection, MPD_TAG_ITEM_ARTIST);
250 				_tmp13_ = mpd_database_search_commit (connection);
251 				data = _tmp13_;
252 				q = 0;
253 				if (data != NULL) {
254 					MpdData* _tmp14_ = NULL;
255 					MpdData* iter;
256 					GList* _tmp15_ = NULL;
257 					gchar* _tmp16_;
258 					gchar* artist;
259 					gboolean _tmp17_;
260 					data = misc_sort_mpddata_by_album_disc_track (data);
261 					_tmp14_ = mpd_data_get_first (data);
262 					iter = _tmp14_;
263 					_tmp15_ = g_list_first (list);
264 					liter = _tmp15_;
265 					_tmp16_ = g_strdup ("");
266 					artist = _tmp16_;
267 					_tmp17_ = g_utf8_validate (iter->tag, (gssize) (-1), NULL);
268 					if (_tmp17_ == FALSE) {
269 						g_error ("gmpc-metadata-similarartists.vala:120: Failed to validate");
270 					}
271 					if (iter->tag != NULL) {
272 						gchar* _tmp18_ = NULL;
273 						_tmp18_ = g_utf8_casefold (iter->tag, (gssize) (-1));
274 						_g_free0 (artist);
275 						artist = _tmp18_;
276 					}
277 					{
278 						gboolean _tmp19_;
279 						_tmp19_ = TRUE;
280 						while (TRUE) {
281 							gchar* _tmp22_ = NULL;
282 							gchar* _tmp23_;
283 							gint _tmp24_;
284 							gint _tmp25_;
285 							gint res;
286 							if (!_tmp19_) {
287 								gboolean _tmp20_ = FALSE;
288 								gboolean _tmp21_ = FALSE;
289 								if (iter != NULL) {
290 									_tmp21_ = liter != NULL;
291 								} else {
292 									_tmp21_ = FALSE;
293 								}
294 								if (_tmp21_) {
295 									_tmp20_ = i < items;
296 								} else {
297 									_tmp20_ = FALSE;
298 								}
299 								if (!_tmp20_) {
300 									break;
301 								}
302 							}
303 							_tmp19_ = FALSE;
304 							_tmp22_ = g_utf8_casefold ((const gchar*) liter->data, (gssize) (-1));
305 							_tmp23_ = _tmp22_;
306 							_tmp24_ = g_utf8_collate (_tmp23_, artist);
307 							_tmp25_ = _tmp24_;
308 							_g_free0 (_tmp23_);
309 							res = _tmp25_;
310 							q++;
311 							if (res == 0) {
312 								GtkWidget* _tmp26_ = NULL;
313 								gchar* _tmp27_;
314 								gchar* d;
315 								_tmp26_ = gmpc_meta_data_widgets_similar_artists_new_artist_button (self, iter->tag, TRUE);
316 								in_db_list = g_list_prepend (in_db_list, _tmp26_);
317 								i++;
318 								_tmp27_ = g_strdup ((const gchar*) liter->data);
319 								d = _tmp27_;
320 								liter = liter->next;
321 								list = g_list_remove (list, d);
322 								iter = mpd_data_get_next_real (iter, FALSE);
323 								if (iter != NULL) {
324 									gchar* _tmp28_ = NULL;
325 									_tmp28_ = g_utf8_casefold (iter->tag, (gssize) (-1));
326 									_g_free0 (artist);
327 									artist = _tmp28_;
328 								}
329 								_g_free0 (d);
330 							} else {
331 								if (res > 0) {
332 									iter = mpd_data_get_next_real (iter, FALSE);
333 									if (iter != NULL) {
334 										gchar* _tmp29_ = NULL;
335 										_tmp29_ = g_utf8_casefold (iter->tag, (gssize) (-1));
336 										_g_free0 (artist);
337 										artist = _tmp29_;
338 									}
339 								} else {
340 									liter = liter->next;
341 								}
342 							}
343 						}
344 					}
345 					_g_free0 (artist);
346 				}
347 				_tmp30_ = g_list_first (list);
348 				liter = _tmp30_;
349 				while (TRUE) {
350 					gboolean _tmp31_ = FALSE;
351 					gchar* _tmp32_;
352 					gchar* artist;
353 					GtkWidget* _tmp33_ = NULL;
354 					if (liter != NULL) {
355 						_tmp31_ = i < items;
356 					} else {
357 						_tmp31_ = FALSE;
358 					}
359 					if (!_tmp31_) {
360 						break;
361 					}
362 					_tmp32_ = g_strdup ((const gchar*) liter->data);
363 					artist = _tmp32_;
364 					_tmp33_ = gmpc_meta_data_widgets_similar_artists_new_artist_button (self, artist, FALSE);
365 					in_db_list = g_list_prepend (in_db_list, _tmp33_);
366 					i++;
367 					liter = liter->next;
368 					_g_free0 (artist);
369 				}
370 				_mpd_data_free0 (data);
371 			}
372 			in_db_list = g_list_reverse (in_db_list);
373 			i = 0;
374 			gtk_widget_hide ((GtkWidget*) self);
375 			_tmp34_ = g_list_length (in_db_list);
376 			llength = _tmp34_;
377 			self->priv->columns = ((GtkWidget*) self)->allocation.width / self->priv->button_width;
378 			if (self->priv->columns < 1) {
379 				_tmp35_ = 1;
380 			} else {
381 				_tmp35_ = self->priv->columns;
382 			}
383 			self->priv->columns = _tmp35_;
384 			gtk_table_resize ((GtkTable*) self, (llength / self->priv->columns) + 1, (guint) self->priv->columns);
385 			{
386 				GList* item_collection;
387 				GList* item_it;
388 				item_collection = in_db_list;
389 				for (item_it = item_collection; item_it != NULL; item_it = item_it->next) {
390 					GtkWidget* _tmp36_;
391 					GtkWidget* item;
392 					_tmp36_ = _g_object_ref0 ((GtkWidget*) item_it->data);
393 					item = _tmp36_;
394 					{
395 						gtk_table_attach ((GtkTable*) self, item, (guint) (i % self->priv->columns), (guint) ((i % self->priv->columns) + 1), (guint) (i / self->priv->columns), (guint) ((i / self->priv->columns) + 1), GTK_EXPAND | GTK_FILL, GTK_SHRINK, (guint) 0, (guint) 0);
396 						i++;
397 						_g_object_unref0 (item);
398 					}
399 				}
400 			}
401 			_g_list_free0 (list);
402 			__g_list_free__g_object_unref0_0 (in_db_list);
403 		}
404 	}
405 	gtk_widget_show_all ((GtkWidget*) self);
406 	_g_list_free0 (child_list);
407 }
408 
409 
gmpc_meta_data_widgets_similar_artists_artist_button_clicked(GmpcMetaDataWidgetsSimilarArtists * self,GtkButton * button)410 static void gmpc_meta_data_widgets_similar_artists_artist_button_clicked (GmpcMetaDataWidgetsSimilarArtists* self, GtkButton* button) {
411 	gconstpointer _tmp0_ = NULL;
412 	const gchar* artist;
413 	g_return_if_fail (self != NULL);
414 	g_return_if_fail (button != NULL);
415 	_tmp0_ = g_object_get_data ((GObject*) button, "artist");
416 	artist = (const gchar*) ((const gchar*) _tmp0_);
417 	info2_fill_artist_view (artist);
418 }
419 
420 
_misc_header_expose_event_gtk_widget_expose_event(GtkWidget * _sender,GdkEventExpose * event,gpointer self)421 static gboolean _misc_header_expose_event_gtk_widget_expose_event (GtkWidget* _sender, GdkEventExpose* event, gpointer self) {
422 	gboolean result;
423 	result = misc_header_expose_event (_sender, event);
424 	return result;
425 }
426 
427 
_gmpc_meta_data_widgets_similar_artists_artist_button_clicked_gtk_button_clicked(GtkButton * _sender,gpointer self)428 static void _gmpc_meta_data_widgets_similar_artists_artist_button_clicked_gtk_button_clicked (GtkButton* _sender, gpointer self) {
429 	gmpc_meta_data_widgets_similar_artists_artist_button_clicked (self, _sender);
430 }
431 
432 
gmpc_meta_data_widgets_similar_artists_new_artist_button(GmpcMetaDataWidgetsSimilarArtists * self,const gchar * artist,gboolean in_db)433 GtkWidget* gmpc_meta_data_widgets_similar_artists_new_artist_button (GmpcMetaDataWidgetsSimilarArtists* self, const gchar* artist, gboolean in_db) {
434 	GtkWidget* result = NULL;
435 	GtkHBox* _tmp0_ = NULL;
436 	GtkHBox* hbox;
437 	GtkEventBox* _tmp1_ = NULL;
438 	GtkEventBox* event;
439 	GmpcMetaImage* _tmp2_ = NULL;
440 	GmpcMetaImage* image;
441 	mpd_Song* _tmp3_ = NULL;
442 	mpd_Song* song;
443 	gchar* _tmp4_;
444 	GtkLabel* _tmp5_ = NULL;
445 	GtkLabel* label;
446 	g_return_val_if_fail (self != NULL, NULL);
447 	g_return_val_if_fail (artist != NULL, NULL);
448 	_tmp0_ = (GtkHBox*) gtk_hbox_new (FALSE, 6);
449 	hbox = g_object_ref_sink (_tmp0_);
450 	gtk_container_set_border_width ((GtkContainer*) hbox, (guint) 4);
451 	_tmp1_ = (GtkEventBox*) gtk_event_box_new ();
452 	event = g_object_ref_sink (_tmp1_);
453 	gtk_widget_set_app_paintable ((GtkWidget*) event, TRUE);
454 	gtk_event_box_set_visible_window (event, TRUE);
455 	g_signal_connect ((GtkWidget*) event, "expose-event", (GCallback) _misc_header_expose_event_gtk_widget_expose_event, NULL);
456 	gtk_widget_set_size_request ((GtkWidget*) event, self->priv->button_width - 20, 60);
457 	_tmp2_ = gmpc_metaimage_new_size (META_ARTIST_ART, 48);
458 	image = g_object_ref_sink (_tmp2_);
459 	gmpc_metaimage_set_no_cover_icon (image, "no-artist");
460 	gmpc_metaimage_set_loading_cover_icon (image, "fetching-artist");
461 	_tmp3_ = mpd_newSong ();
462 	song = _tmp3_;
463 	_tmp4_ = g_strdup (artist);
464 	_g_free0 (song->artist);
465 	song->artist = _tmp4_;
466 	gmpc_metaimage_set_squared (image, TRUE);
467 	gmpc_metaimage_update_cover_from_song_delayed (image, song);
468 	gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) image, FALSE, FALSE, (guint) 0);
469 	_tmp5_ = (GtkLabel*) gtk_label_new (artist);
470 	label = g_object_ref_sink (_tmp5_);
471 	gtk_widget_set_tooltip_text ((GtkWidget*) label, artist);
472 	gtk_label_set_selectable (label, TRUE);
473 	gtk_misc_set_alignment ((GtkMisc*) label, 0.0f, 0.5f);
474 	gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END);
475 	gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) label, TRUE, TRUE, (guint) 0);
476 	if (in_db) {
477 		GtkButton* _tmp6_ = NULL;
478 		GtkButton* find;
479 		GtkImage* _tmp7_ = NULL;
480 		GtkImage* _tmp8_;
481 		gchar* _tmp9_ = NULL;
482 		_tmp6_ = (GtkButton*) gtk_button_new ();
483 		find = g_object_ref_sink (_tmp6_);
484 		_tmp7_ = (GtkImage*) gtk_image_new_from_stock ("gtk-find", GTK_ICON_SIZE_MENU);
485 		_tmp8_ = g_object_ref_sink (_tmp7_);
486 		gtk_container_add ((GtkContainer*) find, (GtkWidget*) _tmp8_);
487 		_g_object_unref0 (_tmp8_);
488 		gtk_button_set_relief (find, GTK_RELIEF_NONE);
489 		gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) find, FALSE, FALSE, (guint) 0);
490 		_tmp9_ = g_strdup_printf ("%s", artist);
491 		g_object_set_data_full ((GObject*) find, "artist", (void*) _tmp9_, (GDestroyNotify) g_free);
492 		g_signal_connect_object (find, "clicked", (GCallback) _gmpc_meta_data_widgets_similar_artists_artist_button_clicked_gtk_button_clicked, self, 0);
493 		_g_object_unref0 (find);
494 	}
495 	gtk_container_add ((GtkContainer*) event, (GtkWidget*) hbox);
496 	result = (GtkWidget*) event;
497 	_g_object_unref0 (label);
498 	_mpd_freeSong0 (song);
499 	_g_object_unref0 (image);
500 	_g_object_unref0 (hbox);
501 	return result;
502 }
503 
504 
_gmpc_meta_data_widgets_similar_artists_metadata_changed_gmpc_meta_watcher_data_changed(GmpcMetaWatcher * _sender,const mpd_Song * song,MetaDataType type,MetaDataResult _result_,const MetaData * met,gpointer self)505 static void _gmpc_meta_data_widgets_similar_artists_metadata_changed_gmpc_meta_watcher_data_changed (GmpcMetaWatcher* _sender, const mpd_Song* song, MetaDataType type, MetaDataResult _result_, const MetaData* met, gpointer self) {
506 	gmpc_meta_data_widgets_similar_artists_metadata_changed (self, _sender, song, type, _result_, met);
507 }
508 
509 
_gmpc_meta_data_widgets_similar_artists_size_changed_gtk_widget_size_allocate(GtkWidget * _sender,GdkRectangle * allocation,gpointer self)510 static void _gmpc_meta_data_widgets_similar_artists_size_changed_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self) {
511 	gmpc_meta_data_widgets_similar_artists_size_changed (self, allocation);
512 }
513 
514 
gmpc_meta_data_widgets_similar_artists_first_show(GmpcMetaDataWidgetsSimilarArtists * self)515 void gmpc_meta_data_widgets_similar_artists_first_show (GmpcMetaDataWidgetsSimilarArtists* self) {
516 	g_return_if_fail (self != NULL);
517 	g_log (np2_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "gmpc-metadata-similarartists.vala:238: First Show()");
518 	if (!self->first_show_b) {
519 		MetaData* item;
520 		MetaData* _tmp0_ = NULL;
521 		MetaDataResult _tmp1_;
522 		MetaDataResult gm_result;
523 		item = NULL;
524 		g_signal_connect_object (gmw, "data-changed", (GCallback) _gmpc_meta_data_widgets_similar_artists_metadata_changed_gmpc_meta_watcher_data_changed, self, 0);
525 		g_signal_connect_object ((GtkWidget*) self, "size-allocate", (GCallback) _gmpc_meta_data_widgets_similar_artists_size_changed_gtk_widget_size_allocate, self, 0);
526 		_tmp1_ = gmpc_meta_watcher_get_meta_path (gmw, self->priv->song, META_ARTIST_SIMILAR, &_tmp0_);
527 		_meta_data_free0 (item);
528 		item = _tmp0_;
529 		gm_result = _tmp1_;
530 		if (gm_result == META_DATA_AVAILABLE) {
531 			gmpc_meta_data_widgets_similar_artists_metadata_changed (self, gmw, self->priv->song, META_ARTIST_SIMILAR, gm_result, item);
532 		}
533 		self->first_show_b = TRUE;
534 		_meta_data_free0 (item);
535 	}
536 }
537 
538 
_mpd_songDup0(gpointer self)539 static gpointer _mpd_songDup0 (gpointer self) {
540 	return self ? mpd_songDup (self) : NULL;
541 }
542 
543 
gmpc_meta_data_widgets_similar_artists_construct(GType object_type,MpdObj * server,const mpd_Song * song)544 GmpcMetaDataWidgetsSimilarArtists* gmpc_meta_data_widgets_similar_artists_construct (GType object_type, MpdObj* server, const mpd_Song* song) {
545 	GmpcMetaDataWidgetsSimilarArtists * self = NULL;
546 	mpd_Song* _tmp0_;
547 	g_return_val_if_fail (server != NULL, NULL);
548 	g_return_val_if_fail (song != NULL, NULL);
549 	self = (GmpcMetaDataWidgetsSimilarArtists*) g_object_new (object_type, NULL);
550 	_tmp0_ = _mpd_songDup0 (song);
551 	_mpd_freeSong0 (self->priv->song);
552 	self->priv->song = _tmp0_;
553 	gtk_table_set_homogeneous ((GtkTable*) self, TRUE);
554 	gtk_table_set_row_spacings ((GtkTable*) self, (guint) 6);
555 	gtk_table_set_col_spacings ((GtkTable*) self, (guint) 6);
556 	gtk_widget_show ((GtkWidget*) self);
557 	return self;
558 }
559 
560 
gmpc_meta_data_widgets_similar_artists_new(MpdObj * server,const mpd_Song * song)561 GmpcMetaDataWidgetsSimilarArtists* gmpc_meta_data_widgets_similar_artists_new (MpdObj* server, const mpd_Song* song) {
562 	return gmpc_meta_data_widgets_similar_artists_construct (GMPC_META_DATA_WIDGETS_TYPE_SIMILAR_ARTISTS, server, song);
563 }
564 
565 
gmpc_meta_data_widgets_similar_artists_class_init(GmpcMetaDataWidgetsSimilarArtistsClass * klass)566 static void gmpc_meta_data_widgets_similar_artists_class_init (GmpcMetaDataWidgetsSimilarArtistsClass * klass) {
567 	gmpc_meta_data_widgets_similar_artists_parent_class = g_type_class_peek_parent (klass);
568 	g_type_class_add_private (klass, sizeof (GmpcMetaDataWidgetsSimilarArtistsPrivate));
569 	G_OBJECT_CLASS (klass)->finalize = gmpc_meta_data_widgets_similar_artists_finalize;
570 }
571 
572 
gmpc_meta_data_widgets_similar_artists_instance_init(GmpcMetaDataWidgetsSimilarArtists * self)573 static void gmpc_meta_data_widgets_similar_artists_instance_init (GmpcMetaDataWidgetsSimilarArtists * self) {
574 	self->priv = GMPC_META_DATA_WIDGETS_SIMILAR_ARTISTS_GET_PRIVATE (self);
575 	self->priv->song = NULL;
576 	self->priv->columns = 1;
577 	self->priv->button_width = 200;
578 	self->first_show_b = FALSE;
579 }
580 
581 
gmpc_meta_data_widgets_similar_artists_finalize(GObject * obj)582 static void gmpc_meta_data_widgets_similar_artists_finalize (GObject* obj) {
583 	GmpcMetaDataWidgetsSimilarArtists * self;
584 	self = GMPC_META_DATA_WIDGETS_SIMILAR_ARTISTS (obj);
585 	_mpd_freeSong0 (self->priv->song);
586 	G_OBJECT_CLASS (gmpc_meta_data_widgets_similar_artists_parent_class)->finalize (obj);
587 }
588 
589 
gmpc_meta_data_widgets_similar_artists_get_type(void)590 GType gmpc_meta_data_widgets_similar_artists_get_type (void) {
591 	static volatile gsize gmpc_meta_data_widgets_similar_artists_type_id__volatile = 0;
592 	if (g_once_init_enter (&gmpc_meta_data_widgets_similar_artists_type_id__volatile)) {
593 		static const GTypeInfo g_define_type_info = { sizeof (GmpcMetaDataWidgetsSimilarArtistsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gmpc_meta_data_widgets_similar_artists_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GmpcMetaDataWidgetsSimilarArtists), 0, (GInstanceInitFunc) gmpc_meta_data_widgets_similar_artists_instance_init, NULL };
594 		GType gmpc_meta_data_widgets_similar_artists_type_id;
595 		gmpc_meta_data_widgets_similar_artists_type_id = g_type_register_static (GTK_TYPE_TABLE, "GmpcMetaDataWidgetsSimilarArtists", &g_define_type_info, 0);
596 		g_once_init_leave (&gmpc_meta_data_widgets_similar_artists_type_id__volatile, gmpc_meta_data_widgets_similar_artists_type_id);
597 	}
598 	return gmpc_meta_data_widgets_similar_artists_type_id__volatile;
599 }
600 
601 
602 
603