diff --git a/lcl/interfaces/gtk/gtkcallback.inc b/lcl/interfaces/gtk/gtkcallback.inc index e9d9662e0f..b3d1bbdfaf 100644 --- a/lcl/interfaces/gtk/gtkcallback.inc +++ b/lcl/interfaces/gtk/gtkcallback.inc @@ -3276,14 +3276,14 @@ begin {$IFDEF EventTrace} EventTrace('gtkListSelectionChangedAfter', data); {$ENDIF} + GtkList:=PGtkList(widget); + if (GtkList^.selection = nil) or (LockOnChange(PGtkObject(widget),0) > 0) then + Exit; FillChar(Mess,SizeOf(Mess),0); Mess.msg := LM_SelChange; - GtkList:=PGtkList(widget); - if (data=nil) or (GtkList^.selection<>nil) then begin - if gtkListGetSelectionMode(GtkList)=GTK_SELECTION_SINGLE then - gtk_list_set_selection_mode(GtkList,GTK_SELECTION_BROWSE); - DeliverMessage(Data, Mess); - end; + if gtkListGetSelectionMode(GtkList)=GTK_SELECTION_SINGLE then + gtk_list_set_selection_mode(GtkList,GTK_SELECTION_BROWSE); + DeliverMessage(Data, Mess); end; {$I gtkDragCallback.inc} diff --git a/lcl/interfaces/gtk/gtkwsstdctrls.pp b/lcl/interfaces/gtk/gtkwsstdctrls.pp index 518ded0df3..a376c07c46 100644 --- a/lcl/interfaces/gtk/gtkwsstdctrls.pp +++ b/lcl/interfaces/gtk/gtkwsstdctrls.pp @@ -520,6 +520,7 @@ begin Handle := ACustomListBox.Handle; if Handle<>0 then begin + LockOnChange(PGtkObject(Handle),+1); Widget:=GetWidgetInfo(Pointer(Handle),True)^.CoreWidget; if GtkWidgetIsA(Widget,gtk_list_get_type) then begin if AIndex >= 0 then @@ -531,6 +532,7 @@ begin gtk_clist_select_row(PGtkCList(Widget), AIndex, 1); // column end else raise Exception.Create(''); + LockOnChange(PGtkObject(Handle),-1); end; end;