rem: running = 0;
context: textChangedObserver(void *observerData, WMNotification *notification){    W_FilePanel *panel = (W_FilePanel*)observerData;    char *text;    WMList *list;    int col = WMGetBrowserNumberOfColumns(panel->browser) - 1;    int i, textEvent = (int)WMGetNotificationClientData(notification);    static int running = 0;    if (running)        return;    running = 1;    if (panel->flags.ignoreTextChangeNotification)	return;    list = WMGetBrowserListInColumn(panel->browser, col);    if (!list)	return;    text = WMGetTextFieldText(panel->fileField);    if (panel->flags.autoCompletion && textEvent!=WMDeleteTextEvent)        i = closestListItem(list, text, False);    else        i = closestListItem(list, text, True);    WMSelectListItem(list, i);    if (i>=0 && panel->flags.autoCompletion) {        WMListItem *item = WMGetListItem(list, i);        int textLen = strlen(text), itemTextLen = strlen(item->text);        int visibleItems = WMWidgetHeight(list)/WMGetListItemHeight(list);	        if (textEvent!=WMSetTextEvent || textLen<itemTextLen)            WMSetListPosition(list, i - visibleItems/2);	        if (textEvent!=WMDeleteTextEvent && textLen<itemTextLen) {            WMRange range;	    	    WMInsertTextFieldText(panel->fileField, &item->text[textLen],				  textLen);	    WMSetTextFieldCursorPosition(panel->fileField, itemTextLen);	    range.position = textLen;	    range.count = itemTextLen - textLen;	    WMSelectTextFieldRange(panel->fileField, range);	}    }    free(text);    running = 0;}