# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1324896996 0 # Node ID 97002721c4caaddd8e9cf3e7e4a31452b9bfc9dd # Parent 97e5e8688fe1558099d528dd94bcf882a0ceb6a0 Allow passing NULL to the container set item functions on Windows. NULL will empty the field of text and icon. diff -r 97e5e8688fe1 -r 97002721c4ca win/dw.c --- a/win/dw.c Sun Dec 25 14:49:59 2011 +0000 +++ b/win/dw.c Mon Dec 26 10:56:36 2011 +0000 @@ -8408,7 +8408,7 @@ ContainerInfo *cinfo = (ContainerInfo *)GetWindowLongPtr(handle, GWLP_USERDATA); ULONG *flags; LV_ITEM lvi; - char textbuffer[101] = {0}, *destptr = textbuffer; + char textbuffer[101] = {0}; int item = 0; if(pointer) @@ -8416,7 +8416,7 @@ item = (int)dw_window_get_data(handle, "_dw_insertitem"); } - if(!cinfo || !cinfo->flags || !data) + if(!cinfo || !cinfo->flags) return; flags = cinfo->flags; @@ -8424,18 +8424,24 @@ lvi.mask = LVIF_DI_SETITEM | LVIF_TEXT; lvi.iItem = row + item; lvi.iSubItem = column; + lvi.pszText = textbuffer; + lvi.cchTextMax = 0; if(flags[column] & DW_CFA_BITMAPORICON) { - HICON hicon = *((HICON *)data); - lvi.mask = LVIF_DI_SETITEM | LVIF_IMAGE; lvi.pszText = NULL; - lvi.cchTextMax = 0; - - lvi.iImage = _lookup_icon(handle, hicon, 0); - } - else if(flags[column] & DW_CFA_STRING) + + if(data) + { + HICON hicon = *((HICON *)data); + + lvi.iImage = _lookup_icon(handle, hicon, 0); + } + else + lvi.iImage = -1; + } + else if(flags[column] & DW_CFA_STRING && data) { char *tmp = *((char **)data); @@ -8444,18 +8450,16 @@ lvi.pszText = tmp; lvi.cchTextMax = strlen(tmp); - destptr = tmp; - } - else if(flags[column] & DW_CFA_ULONG) + } + else if(flags[column] & DW_CFA_ULONG && data) { ULONG tmp = *((ULONG *)data); _snprintf(textbuffer, 100, "%lu", tmp); - lvi.pszText = textbuffer; lvi.cchTextMax = strlen(textbuffer); } - else if(flags[column] & DW_CFA_DATE) + else if(flags[column] & DW_CFA_DATE && data) { struct tm curtm; CDATE cdate = *((CDATE *)data); @@ -8472,15 +8476,10 @@ curtm.tm_year = cdate.year - 1900; strftime(textbuffer, 100, "%x", &curtm); } - else - { - textbuffer[0] = 0; - } - - lvi.pszText = textbuffer; + lvi.cchTextMax = strlen(textbuffer); } - else if(flags[column] & DW_CFA_TIME) + else if(flags[column] & DW_CFA_TIME && data) { struct tm curtm; CTIME ctime = *((CTIME *)data); @@ -8491,7 +8490,6 @@ strftime(textbuffer, 100, "%X", &curtm); - lvi.pszText = textbuffer; lvi.cchTextMax = strlen(textbuffer); }