void item_list_view_update_item (ItemListView *ilv, itemPtr item) { GtkTreeStore *itemstore; GtkTreeIter iter; gchar *title, *time_str; const GdkPixbuf *state_icon; if (!item_list_view_id_to_iter (ilv, item->id, &iter)) return; time_str = (0 != item->time) ? date_format ((time_t)item->time, NULL) : g_strdup (""); title = item->title && strlen (item->title) ? item->title : _("*** No title ***"); title = g_strstrip (g_strdup (title)); state_icon = item->flagStatus ? icon_get (ICON_FLAG) : !item->readStatus ? icon_get (ICON_UNREAD) : NULL; if (ilv->priv->batch_mode) itemstore = ilv->priv->batch_itemstore; else itemstore = GTK_TREE_STORE (gtk_tree_view_get_model (ilv->priv->treeview)); gtk_tree_store_set (itemstore, &iter, IS_LABEL, title, IS_TIME_STR, time_str, IS_STATEICON, state_icon, ITEMSTORE_UNREAD, item->readStatus ? PANGO_WEIGHT_NORMAL : PANGO_WEIGHT_BOLD, ITEMSTORE_ALIGN, item_list_title_alignment (title), -1); g_free (time_str); g_free (title); }
static void item_list_view_add_item_to_tree_store (ItemListView *ilv, GtkTreeStore *itemstore, itemPtr item) { gint state = 0; nodePtr node; GtkTreeIter *iter; GtkTreeIter old_iter; gboolean exists; if (item->flagStatus) state += 2; if (!item->readStatus) state += 1; node = node_from_id (item->nodeId); if(!node) return; /* comment items do cause this... maybe filtering them earlier would be a good idea... */ exists = item_list_view_id_to_iter (ilv, item->id, &old_iter); iter = &old_iter; if (!exists) { iter = g_new0 (GtkTreeIter, 1); gtk_tree_store_prepend (itemstore, iter, NULL); g_hash_table_insert (ilv->priv->item_id_to_iter, GUINT_TO_POINTER (item->id), (gpointer)iter); } gtk_tree_store_set (itemstore, iter, IS_TIME, (guint64)item->time, IS_NR, item->id, IS_PARENT, node, IS_FAVICON, node->icon, IS_ENCICON, item->hasEnclosure?icon_get (ICON_ENCLOSURE):NULL, IS_ENCLOSURE, item->hasEnclosure, IS_SOURCE, node, IS_STATE, state, -1); }
nodeTypePtr vfolder_get_node_type (void) { static struct nodeType nti = { NODE_CAPABILITY_SHOW_ITEM_FAVICONS | NODE_CAPABILITY_SHOW_ITEM_COUNT, "vfolder", NULL, vfolder_import, vfolder_export, vfolder_load, vfolder_save, vfolder_update_counters, vfolder_remove, node_default_render, vfolder_add, vfolder_properties, vfolder_free }; nti.icon = icon_get (ICON_VFOLDER); return &nti; }
void feed_list_node_update (const gchar *nodeId) { GtkTreeIter *iter; gchar *label, *count = NULL; guint labeltype; nodePtr node; static gchar *countColor = NULL; node = node_from_id (nodeId); iter = feed_list_node_to_iter (nodeId); if (!iter) return; /* Initialize unread item color Pango CSS */ if (!countColor) { const gchar *bg = NULL, *fg = NULL; bg = render_get_theme_color ("FEEDLIST_UNREAD_BG"); fg = render_get_theme_color ("FEEDLIST_UNREAD_FG"); if (fg && bg) { countColor = g_strdup_printf ("foreground='#%s' background='#%s'", fg, bg); debug1 (DEBUG_HTML, "Feed list unread CSS: %s\n", countColor); } } labeltype = NODE_TYPE (node)->capabilities; labeltype &= (NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_SHOW_ITEM_COUNT); if (node->unreadCount == 0 && (labeltype & NODE_CAPABILITY_SHOW_UNREAD_COUNT)) labeltype -= NODE_CAPABILITY_SHOW_UNREAD_COUNT; label = g_markup_escape_text (node_get_title (node), -1); switch (labeltype) { case NODE_CAPABILITY_SHOW_UNREAD_COUNT | NODE_CAPABILITY_SHOW_ITEM_COUNT: /* treat like show unread count */ case NODE_CAPABILITY_SHOW_UNREAD_COUNT: count = g_strdup_printf ("<span weight='bold' %s> %u </span>", countColor?countColor:"", node->unreadCount); break; case NODE_CAPABILITY_SHOW_ITEM_COUNT: count = g_strdup_printf ("<span weight='bold' %s> %u </span>", countColor?countColor:"", node->itemCount); break; default: break; } /* Extra message for search folder rebuilds */ if (IS_VFOLDER (node) && node->data) { if (((vfolderPtr)node->data)->reloading) { gchar *tmp = label; label = g_strdup_printf (_("%s\n<i>Rebuilding</i>"), label); g_free (tmp); } } gtk_tree_store_set (feedstore, iter, FS_LABEL, label, FS_UNREAD, node->unreadCount, FS_ICON, node->available?node_get_icon (node):icon_get (ICON_UNAVAILABLE), FS_COUNT, count, -1); g_free (label); if (node->parent) feed_list_node_update (node->parent->id); }
VOID edit_icon(LONG tree, WORD sobj) { LONG obspec, taddr; WORD where, type, itmp, exitobj, ok; GRECT p; BYTE text[14], valid[2], name[9]; WORD trule, crule, w, h; if (rcs_state != ALRT_STATE) { get_fields(tree, sobj, &type, &obspec, &p); ini_tree(&tree, ICONDIAL); where = set_obname(tree, ICONNAME, name, ad_view, sobj); taddr = LLGET(obspec); set_text(tree, IBTEXT, (LONG)ADDR(&text[0]), 13); set_text(tree, IBCHAR, (LONG)ADDR(&valid[0]), 2); icon_set(taddr, &text[0], &valid[0]); trule = icon_twhich(LWGET(IB_YTEXT(taddr)), LWGET(IB_HICON(taddr))); sel_obj(tree, IBTPOS0 + trule); itmp = icon_cwhich(LWGET(IB_YCHAR(taddr)), gl_hschar, LWGET(IB_HICON(taddr))); crule = icon_cwhich(LWGET(IB_XCHAR(taddr)), gl_wschar, LWGET(IB_WICON(taddr))); crule += 3 * itmp; sel_obj(tree, IBCPOS0 + crule); do { exitobj = hndl_dial(tree, IBTEXT, &p); desel_obj(tree, exitobj); ok = DEFAULT & GET_FLAGS(tree, exitobj); } while (ok && !name_ok(name, where, TRUE)); if (ok) { rcs_edited = TRUE; get_obname(name, ad_view, sobj); icon_get(taddr, &text[0], &valid[0]); itmp = encode(tree, IBTPOS0, 3); if (itmp != trule) { itmp = icon_tapply(itmp, gl_hschar, LWGET(IB_HICON(taddr))); LWSET(IB_YTEXT(taddr), itmp); } LWSET(IB_WTEXT(taddr), (WORD)(gl_wschar * strlen(text))); icon_tfix(taddr); itmp = encode(tree, IBCPOS0, 9); if (itmp != crule) { crule = itmp; itmp = icon_capply(crule / 3, gl_hschar, LWGET(IB_HICON(taddr))); LWSET(IB_YCHAR(taddr), itmp); itmp = icon_capply(crule % 3, gl_wschar, LWGET(IB_WICON(taddr))); LWSET(IB_XCHAR(taddr), itmp); } icon_wh(taddr, &w, &h); newsize_obj(ad_view, sobj, w, h, FALSE); } map_tree(tree, ROOT, NIL, (fkt_parm)desel_obj); /* clear radio buttons */ } }
int main (int argc, char ** argv) { yctx = yutani_init(); int width = yctx->display_width; int height = yctx->display_height; sprite_t * wallpaper_tmp = malloc(sizeof(sprite_t)); char f_name[512]; sprintf(f_name, "%s/.wallpaper.png", getenv("HOME")); FILE * f = fopen(f_name, "r"); if (f) { fclose(f); load_sprite_png(wallpaper_tmp, f_name); } else { load_sprite_png(wallpaper_tmp, "/usr/share/wallpaper.png"); } /* Initialize hashmap for icon cache */ icon_cache = hashmap_create(10); { /* Generic fallback icon */ sprite_t * app_icon = malloc(sizeof(sprite_t)); load_sprite_png(app_icon, "/usr/share/icons/48/applications-generic.png"); hashmap_set(icon_cache, "generic", app_icon); } sprintf(f_name, "%s/.desktop", getenv("HOME")); f = fopen(f_name, "r"); if (!f) { f = fopen("/etc/default.desktop", "r"); } read_applications(f); /* Load applications */ uint32_t i = 0; while (applications[i].icon) { applications[i].icon_sprite = icon_get(applications[i].icon); ++i; } float x = (float)width / (float)wallpaper_tmp->width; float y = (float)height / (float)wallpaper_tmp->height; int nh = (int)(x * (float)wallpaper_tmp->height); int nw = (int)(y * (float)wallpaper_tmp->width);; wallpaper = create_sprite(width, height, ALPHA_OPAQUE); gfx_context_t * tmp = init_graphics_sprite(wallpaper); if (nw > width) { draw_sprite_scaled(tmp, wallpaper_tmp, (width - nw) / 2, 0, nw, height); } else { draw_sprite_scaled(tmp, wallpaper_tmp, 0, (height - nh) / 2, width, nh); } free(tmp); win_width = width; win_height = height; wina = yutani_window_create(yctx, width, height); assert(wina); yutani_set_stack(yctx, wina, YUTANI_ZORDER_BOTTOM); ctx = init_graphics_yutani_double_buffer(wina); init_shmemfonts(); redraw_apps(); yutani_flip(yctx, wina); while (_continue) { yutani_msg_t * m = yutani_poll(yctx); waitpid(-1, NULL, WNOHANG); if (m) { switch (m->type) { case YUTANI_MSG_WINDOW_MOUSE_EVENT: wallpaper_check_click((struct yutani_msg_window_mouse_event *)m->data); break; case YUTANI_MSG_SESSION_END: _continue = 0; break; } free(m); } } yutani_close(yctx, wina); return 0; }