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; } }
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 ); } }