static void
update_caches(HippoPersonRenderer *renderer,
              GtkWidget           *widget)
{
    const char *name;
    const char *song;
    const char *artist;
    GtkIconTheme *icon_theme;
    GdkPixbuf *note_on;
    GdkPixbuf *note_off;            
    
    if (renderer->person == NULL) {
        name = NULL;
        song = NULL;
        artist = NULL;
    } else {
        /* some of these can return NULL */
        name = hippo_entity_get_name(HIPPO_ENTITY(renderer->person));
        song = hippo_person_get_current_song(renderer->person);
        artist = hippo_person_get_current_artist(renderer->person);
    }
    
    make_layout(widget, &renderer->name_layout, name);
    /* FIXME better to omit the note and the space for music 
     * entirely, but this keeps it from looking broken for now
     */
    if (song == NULL || *song == '\0')
        song = _("No song");
    make_layout(widget, &renderer->song_layout, song);
    make_layout(widget, &renderer->artist_layout, artist);
    
    /* this strongly relies on the icon theme caching the pixbufs
     * so it typically ends up as a no-op
     */
    icon_theme = gtk_icon_theme_get_for_screen(gtk_widget_get_screen(widget));
    note_on = gtk_icon_theme_load_icon(icon_theme, "mugshot_note_on", NOTE_SIZE, 0, NULL);
    note_off = gtk_icon_theme_load_icon(icon_theme, "mugshot_note_on", NOTE_SIZE, 0, NULL);
    
    if (note_on) {
        if (renderer->note_on)
            g_object_unref(renderer->note_on);
        renderer->note_on = note_on;
    }
    if (note_off) {
        if (renderer->note_off)
            g_object_unref(renderer->note_off);
        renderer->note_off = note_off;
    }
}
Example #2
0
void parse_pushed(object_t *obj, event_t *evt)
{
	object_t *window = NULL;
	bounds_t *b;
	object_t *lelex = NULL;
	size_t len;
	int type;
	
	lelex = (object_t *)store_get("lelex", &len, &type);
	assert(len == sizeof(textbox_widget_t) && type == TYPE_TEXTBOX && "invalid object in store for lelex");
	
	// first kill the old window if it is still around
	window = store_take("display.window", &len, &type);
	if(window) {
		window_hide(window);
		event_send(window, "destroy", "");
	}

	b = new_bounds(0,0,0,0);
	*b = store_get_bounds_t("window.bounds");
	
	window = window_widget_create(NULL, b, 0);
	window_set_title(window, "Layout Display");
	object_addhandler(window, "destroy", window_destroy_handle);
	object_addhandler(window, "moved", window_moved_handle);
	object_addhandler(window, "resized", window_moved_handle);
	
	if(!make_layout(window, b, textarea_get_text(lelex))) {
		event_send(window, "destroy", "");
		printf("FAILED TO PARSE");
	} else {
		store_put("display.window", window, sizeof(window_widget_t), TYPE_WINDOW);
		window_show( window );
		window_focus( window );
	}
}