// this is not published in LCL. Copied here.
procedure GetCommonTreeViewWidgets(ATreeViewHandle: PGtkWidget;
out TVWidgets: PTVWidgets);
var
WidgetInfo: PWidgetInfo;
begin
WidgetInfo := GetWidgetInfo(ATreeViewHandle);
TVWidgets := PTVWidgets(WidgetInfo^.UserData);
end;
// this is not defined in LCL. Define here.
function gtk_cell_layout_get_cells(cell_layout:PGtkCellLayout):PGlist;cdecl;
external gtklib name 'gtk_cell_layout_get_cells';
function Gtk2_GtkIconView_GetTextRenderer(icon_view:PGtkIconView):PGtkCellRendererText;
var renderers, renderers_list: PGList;
renderer: PGtkCellRenderer;
begin
renderers_list := gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(icon_view));
renderers := renderers_list;
while (renderers <> nil) and (renderers^.data <> nil) do
begin
renderer := renderers^.data;
if GTK_IS_CELL_RENDERER_TEXT(renderer) then
begin
result := GTK_CELL_RENDERER_TEXT(renderer);
break;
end;
if renderers^.next = nil then break;
renderers := renderers^.next;
end;
g_list_free(renderers_list);
end;
procedure Gtk2WSCustomListView_IconView_SetWordWrap(const ALV: TCustomListView;
const AWordWrap: Boolean; AWrapWidth:integer );
var
Widgets: PTVWidgets;
icon_view: PGtkIconView;
text_renderer : PGtkCellRendererText;
begin
if not WSCheckHandleAllocated(ALV, 'TListViewTestForm')
then Exit;
GetCommonTreeViewWidgets({%H-}PGtkWidget(ALV.Handle), Widgets);
if not GTK_IS_ICON_VIEW(Widgets^.MainView)
then Exit;
icon_view := PGtkIconView(Widgets^.MainView);
text_renderer := Gtk2_GtkIconView_GetTextRenderer(icon_view);
if text_renderer = nil then exit;
if AWordWrap then
begin
gtk_icon_view_set_item_width(icon_view,120);
g_object_set(G_OBJECT(text_renderer),
PChar('alignment'), [gpointer(ptrint(PANGO_ALIGN_CENTER)),
PChar('wrap-mode'), gpointer(ptrint(PANGO_WRAP_WORD_CHAR)),
PChar('wrap-width'), gpointer(ptrint(AWrapWidth)), nil]);
end
else
begin
gtk_icon_view_set_item_width(icon_view, -1);
g_object_set(G_OBJECT(text_renderer),
PChar('alignment'), [gpointer(ptrint(PANGO_ALIGN_LEFT)),
PChar('wrap-mode'), gpointer(ptrint(PANGO_WRAP_CHAR)),
PChar('wrap-width'), gpointer(ptrint(-1)), nil]);
end;
ALV.Invalidate;
end;