if (OS.gtk_tree_view_get_expander_column (handle) == columnHandle) {
if (OS.GTK_VERSION < OS.VERSION (2, 8, 18) && OS.gtk_tree_view_get_expander_column (handle) == columnHandle) {
int /*long*/ rendererRenderProc (int /*long*/ cell, int /*long*/ window, int /*long*/ widget, int /*long*/ background_area, int /*long*/ cell_area, int /*long*/ expose_area, int /*long*/ flags) {	TreeItem item = null;	int /*long*/ iter = OS.g_object_get_qdata (cell, Display.SWT_OBJECT_INDEX2);	if (iter != 0) item = _getItem (iter);	int /*long*/ columnHandle = OS.g_object_get_qdata (cell, Display.SWT_OBJECT_INDEX1);	int columnIndex = 0;	if (columnCount > 0) {		for (int i = 0; i < columnCount; i++) {			if (columns [i].handle == columnHandle) {				columnIndex = i;				break;			}						}	}	if (item != null) {		if (OS.GTK_IS_CELL_RENDERER_TOGGLE (cell) || (OS.GTK_IS_CELL_RENDERER_PIXBUF (cell) && (columnIndex != 0 || (style & SWT.CHECK) == 0))) {			drawFlags = (int)/*64*/flags;			drawState = SWT.FOREGROUND;			int /*long*/ [] ptr = new int /*long*/ [1];			OS.gtk_tree_model_get (modelHandle, item.handle, Tree.BACKGROUND_COLUMN, ptr, -1);			if (ptr [0] == 0) {				int modelIndex = columnCount == 0 ? Tree.FIRST_COLUMN : columns [columnIndex].modelIndex;				OS.gtk_tree_model_get (modelHandle, item.handle, modelIndex + Tree.CELL_BACKGROUND, ptr, -1);			}			if (ptr [0] != 0) drawState |= SWT.BACKGROUND;			if ((flags & OS.GTK_CELL_RENDERER_SELECTED) != 0) drawState |= SWT.SELECTED;			if ((flags & OS.GTK_CELL_RENDERER_FOCUSED) != 0) drawState |= SWT.FOCUSED;									GdkRectangle rect = new GdkRectangle ();			int /*long*/ path = OS.gtk_tree_model_get_path (modelHandle, iter);			OS.gtk_tree_view_get_background_area (handle, path, columnHandle, rect);			OS.gtk_tree_path_free (path);						if ((drawState & SWT.SELECTED) == 0) {				Control control = findBackgroundControl ();				if (control != null && control.backgroundImage != null) {					OS.gdk_window_clear_area (window, rect.x, rect.y, rect.width, rect.height);				}			}			if (hooks (SWT.EraseItem)) {				if ((drawState & SWT.SELECTED) != 0) {					OS.gdk_window_clear_area (window, rect.x, rect.y, rect.width, rect.height);				}				GC gc = new GC (this);				if ((drawState & SWT.SELECTED) != 0) {					gc.setBackground (display.getSystemColor (SWT.COLOR_LIST_SELECTION));					gc.setForeground (display.getSystemColor (SWT.COLOR_LIST_SELECTION_TEXT));				} else {					gc.setBackground (item.getBackground (columnIndex));					gc.setForeground (item.getForeground (columnIndex));				}				gc.setFont (item.getFont (columnIndex));				gc.setClipping (rect.x, rect.y, rect.width, rect.height);				Event event = new Event ();				event.item = item;				event.index = columnIndex;				event.gc = gc;				event.x = rect.x;				event.y = rect.y;				event.width = rect.width;				event.height = rect.height;				event.detail = drawState;				sendEvent (SWT.EraseItem, event);				gc.dispose();				drawState = event.doit ? event.detail : 0;				drawFlags &= ~(OS.GTK_CELL_RENDERER_FOCUSED | OS.GTK_CELL_RENDERER_SELECTED);				if ((drawState & SWT.SELECTED) != 0) drawFlags |= OS.GTK_CELL_RENDERER_SELECTED;				if ((drawState & SWT.FOCUSED) != 0) drawFlags |= OS.GTK_CELL_RENDERER_FOCUSED;				if ((drawState & SWT.SELECTED) != 0) {					int /*long*/ style = OS.gtk_widget_get_style (widget);										//TODO - parity and sorted					byte[] detail = Converter.wcsToMbcs (null, "cell_odd", true);					OS.gtk_paint_flat_box (style, window, OS.GTK_STATE_SELECTED, OS.GTK_SHADOW_NONE, rect, widget, detail, rect.x, rect.y, rect.width, rect.height);				}			}		}	}	int /*long*/ result = 0;	if ((drawState & SWT.BACKGROUND) != 0 && (drawState & SWT.SELECTED) == 0) {		GC gc = new GC (this);		gc.setBackground (item.getBackground (columnIndex));		GdkRectangle rect = new GdkRectangle ();		OS.memmove (rect, background_area, GdkRectangle.sizeof);		gc.fillRectangle (rect.x, rect.y, rect.width, rect.height);		gc.dispose ();	}	if ((drawState & SWT.FOREGROUND) != 0 || OS.GTK_IS_CELL_RENDERER_TOGGLE (cell)) {		int /*long*/ g_class = OS.g_type_class_peek_parent (OS.G_OBJECT_GET_CLASS (cell));		GtkCellRendererClass klass = new GtkCellRendererClass ();		OS.memmove (klass, g_class);		result = OS.call (klass.render, cell, window, handle, background_area, cell_area, expose_area, drawFlags);	}	if (item != null) {		if (OS.GTK_IS_CELL_RENDERER_TEXT (cell)) {			if (hooks (SWT.PaintItem)) {				GdkRectangle rect = new GdkRectangle ();				int /*long*/ path = OS.gtk_tree_model_get_path (modelHandle, iter);				OS.gtk_tree_view_get_cell_area (handle, path, columnHandle, rect);				OS.gtk_tree_path_free (path);				if (OS.gtk_tree_view_get_expander_column (handle) == columnHandle) {					int [] buffer = new int [1];					OS.gtk_widget_style_get (handle, OS.expander_size, buffer, 0);					rect.x += buffer [0] + TreeItem.EXPANDER_EXTRA_PADDING;					rect.width -= buffer [0] + TreeItem.EXPANDER_EXTRA_PADDING;					OS.gtk_widget_style_get (handle, OS.horizontal_separator, buffer, 0);					rect.x += buffer[0];					//rect.width -= buffer [0]; // TODO Is this required for some versions?				}				ignoreSize = true;				int [] contentX = new int [1], contentWidth = new int [1];				OS.gtk_cell_renderer_get_size (cell, handle, null, null, null, contentWidth, null);				OS.gtk_tree_view_column_cell_get_position (columnHandle, cell, contentX, null);				ignoreSize = false;				Image image = item.getImage (columnIndex);				int imageWidth = 0;				if (image != null) {					Rectangle bounds = image.getBounds ();					imageWidth = bounds.width;				}				contentX [0] -= imageWidth;				contentWidth [0] += imageWidth;				GC gc = new GC (this);				if ((drawState & SWT.SELECTED) != 0) {					gc.setBackground (display.getSystemColor (SWT.COLOR_LIST_SELECTION));					gc.setForeground (display.getSystemColor (SWT.COLOR_LIST_SELECTION_TEXT));				} else {					gc.setBackground (item.getBackground (columnIndex));					gc.setForeground (item.getForeground (columnIndex));				}				gc.setFont (item.getFont (columnIndex));				gc.setClipping (rect.x, rect.y, rect.width, rect.height);				Event event = new Event ();				event.item = item;				event.index = columnIndex;				event.gc = gc;				event.x = rect.x + contentX [0];				event.y = rect.y;				event.width = contentWidth [0];				event.height = rect.height;				event.detail = drawState;				sendEvent (SWT.PaintItem, event);					gc.dispose();			}		}	}	return result;}