mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-17 03:06:17 +02:00
OnSelChange for tComboBox fired only one per click from Darek
git-svn-id: trunk@8957 -
This commit is contained in:
parent
bddde6ee5e
commit
252c0feff3
@ -19,7 +19,13 @@
|
||||
// {$DEFINE ASSERT_IS_ON}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF RELEASE}
|
||||
|
||||
{$DEFINE ASSERT_IS_ON}
|
||||
{$ELSE}
|
||||
{.$DEFINE EventTrace}
|
||||
|
||||
{$ENDIF}
|
||||
|
||||
function DeliverPaintMessage(const Target: Pointer; var TheMessage): GBoolean;
|
||||
var
|
||||
@ -133,7 +139,9 @@ var
|
||||
begin
|
||||
Result := CallBackDefaultReturn;
|
||||
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('realize', nil);
|
||||
{$ENDIF}
|
||||
|
||||
if (Data<>nil) then begin
|
||||
if TObject(Data) is TCustomForm then begin
|
||||
@ -182,7 +190,9 @@ begin
|
||||
Result := CallBackDefaultReturn;
|
||||
|
||||
if Data=nil then ;
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('realizeafter', nil);
|
||||
{$ENDIF}
|
||||
|
||||
HiddenLCLObject:=GetHiddenLCLObject(Widget);
|
||||
if HiddenLCLObject=nil then begin
|
||||
@ -255,7 +265,9 @@ var
|
||||
begin
|
||||
Result := True;
|
||||
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('show', data);
|
||||
{$ENDIF}
|
||||
if Widget=nil then ;
|
||||
FillChar(Mess,SizeOf(Mess),0);
|
||||
Mess.Msg := LM_SHOWWINDOW;
|
||||
@ -270,7 +282,9 @@ var
|
||||
begin
|
||||
Result := True;
|
||||
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('hide', data);
|
||||
{$ENDIF}
|
||||
if Widget=nil then ;
|
||||
FillChar(Mess,SizeOf(Mess),0);
|
||||
Mess.Msg := LM_SHOWWINDOW;
|
||||
@ -283,7 +297,9 @@ var
|
||||
Mess: TLMActivate;
|
||||
begin
|
||||
Result:= True;
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('activate', data);
|
||||
{$ENDIF}
|
||||
|
||||
if LockOnChange(PgtkObject(Widget),0) > 0 then Exit;
|
||||
|
||||
@ -307,8 +323,9 @@ var
|
||||
LCLMenuItem: TMenuItem;
|
||||
begin
|
||||
Result := CallBackDefaultReturn;
|
||||
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('toggled', AData);
|
||||
{$ENDIF}
|
||||
|
||||
LCLMenuItem := TMenuItem(AData);
|
||||
// some sanity checks
|
||||
@ -332,8 +349,9 @@ var
|
||||
begin
|
||||
if ComponentIsDestroyingHandle(TWinControl(Data))
|
||||
or (LockOnChange(PgtkObject(Widget),0)>0) then exit;
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('changed', data);
|
||||
|
||||
{$ENDIF}
|
||||
Mess.Msg := LM_CHANGED;
|
||||
DeliverMessage(Data, Mess);
|
||||
|
||||
@ -347,7 +365,9 @@ begin
|
||||
Result := CallBackDefaultReturn;
|
||||
|
||||
if LockOnChange(PgtkObject(Widget),0)>0 then exit;
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('changed_editbox', data);
|
||||
{$ENDIF}
|
||||
|
||||
Mess.Msg := CM_TEXTCHANGED;
|
||||
DeliverMessage(Data, Mess);
|
||||
@ -3049,7 +3069,9 @@ Procedure GTKStyleChanged(Widget: PGtkWidget; previous_style : PGTKStyle;
|
||||
Data: Pointer); cdecl;
|
||||
begin
|
||||
if (Widget=nil) or (Data=nil) or (previous_style=nil) then ;
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('style-set', nil);
|
||||
{$ENDIF}
|
||||
//ReleaseAllStyles;
|
||||
end;
|
||||
|
||||
@ -3058,15 +3080,28 @@ function gtkListBoxSelectionChangedAfter(widget: PGtkWidget; data: gPointer
|
||||
var
|
||||
Mess: TLMessage;
|
||||
begin
|
||||
//debugln('gtkListBoxSelectionChangedAfter ',GetWidgetDebugReport(Widget));
|
||||
Result := CallBackDefaultReturn;
|
||||
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('gtkListBoxSelectionChangedAfter', data);
|
||||
{$ENDIF}
|
||||
FillChar(Mess,SizeOf(Mess),0);
|
||||
Mess.msg := LM_SelChange;
|
||||
DeliverMessage(Data, Mess);
|
||||
end;
|
||||
|
||||
function gtkListSelectChild(widget: PGtkWidget;child : PGtkWidget; data: gPointer
|
||||
): GBoolean; cdecl;
|
||||
var
|
||||
Mess: TLMessage;
|
||||
begin
|
||||
Result := CallBackDefaultReturn;
|
||||
{$IFDEF EventTrace}
|
||||
EventTrace('gtkListBoxSelectionChangedAfter', data);
|
||||
{$ENDIF}
|
||||
FillChar(Mess,SizeOf(Mess),0);
|
||||
Mess.msg := LM_SelChange;
|
||||
DeliverMessage(Data, Mess);
|
||||
end;
|
||||
|
||||
{$I gtkDragCallback.inc}
|
||||
{$I gtkListViewCallback.inc}
|
||||
|
@ -209,6 +209,9 @@ var
|
||||
//ItemIndex: LongInt;
|
||||
Mess: TLMessage;
|
||||
begin
|
||||
{$IFDEF EventTrace}
|
||||
Debugln('gtkListItemSelectAfterCB');
|
||||
{$ENDIF}
|
||||
// get context
|
||||
GtkList:=PGtkList(gtk_object_get_data(PGtkObject(Data),GtkListItemGtkListTag));
|
||||
if GtkList=nil then
|
||||
@ -317,6 +320,9 @@ var
|
||||
ListItem: PGtkListItem;
|
||||
begin
|
||||
UpdateItemCache;
|
||||
{$IFDEF EventTrace}
|
||||
Debugln( 'connect ',strings[index]);
|
||||
{$ENDIF}
|
||||
ListItem:=FCachedItems[Index];
|
||||
ConnectItemCallbacks(ListItem);
|
||||
end;
|
||||
@ -329,6 +335,9 @@ procedure TGtkListStringList.ConnectItemCallbacks(Li: PGtkListItem);
|
||||
var
|
||||
ChildWidget: Pointer;
|
||||
begin
|
||||
{$IFDEF EventTrace}
|
||||
Debugln('connect itemCallback');
|
||||
{$ENDIF}
|
||||
gtk_object_set_data(PGtkObject(li),GtkListItemLCLListTag,Self);
|
||||
gtk_object_set_data(PGtkObject(li),GtkListItemGtkListTag,FGtkList);
|
||||
//DebugLn('TGtkListStringList.ConnectItemCallbacks Self=',DbgS(Self),
|
||||
@ -348,10 +357,6 @@ begin
|
||||
g_signal_connect_after(G_OBJECT(ChildWidget), 'toggled',
|
||||
G_CALLBACK(@gtkListItemToggledCB), li);
|
||||
end;
|
||||
if FOwner is TCustomComboBox then begin
|
||||
gtk_signal_connect_after(PGtkObject(li), 'select',
|
||||
TGTKSignalFunc(@gtkListItemSelectAfterCB),li);
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -366,6 +371,9 @@ begin
|
||||
i := FCachedCount - 1;
|
||||
while i >= 0 do
|
||||
begin
|
||||
{$IFDEF EventTrace}
|
||||
DebugLn('connect ',strings[i]);
|
||||
{$ENDIF}
|
||||
ConnectItemCallbacks(FCachedItems[i]);
|
||||
Dec(i);
|
||||
end;
|
||||
@ -401,11 +409,6 @@ begin
|
||||
gtk_signal_disconnect_by_func(
|
||||
PGtkObject(ChildWidget), TGTKSignalFunc(@gtkListItemToggledCB), AItem);
|
||||
end;
|
||||
if FOwner is TCustomComboBox
|
||||
then begin
|
||||
gtk_signal_disconnect_by_func(
|
||||
PGtkObject(AItem), TGTKSignalFunc(@gtkListItemSelectAfterCB), AItem);
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
@ -887,6 +890,9 @@ begin
|
||||
{$IFDEF DebugLCLComponents}
|
||||
DebugGtkWidgets.MarkCreated(li,dbgsName(Owner)+' Index='+dbgs(Index)+' Count='+dbgs(Count));
|
||||
{$ENDIF}
|
||||
{$IFDEF EventTrace}
|
||||
Debugln('insertListItem',s);
|
||||
{$ENDIF}
|
||||
ConnectItemCallbacks(PGtkListItem(li));
|
||||
// grow capacity
|
||||
UpdateItemCache;
|
||||
|
@ -1298,7 +1298,6 @@ var
|
||||
begin
|
||||
Caption := ACaption;
|
||||
LabelFromAmpersands(Caption, Pattern, AccelKey);
|
||||
|
||||
gtk_label_set_text(ALabel, PChar(Caption));
|
||||
|
||||
{$ifdef gtk1}
|
||||
@ -3985,7 +3984,10 @@ begin
|
||||
if ALCLObject is TCustomListBox then begin
|
||||
ConnectSenderSignalAfter(PgtkObject(gCore),
|
||||
'selection_changed', @gtkListBoxSelectionChangedAfter);
|
||||
end;
|
||||
end else if ALCLObject is TCustomCombobox then
|
||||
ConnectSenderSignal (PGtkObject(
|
||||
PGtkCombo(gObject)^.list), 'unselect_child', @gtkListSelectChild)
|
||||
else
|
||||
end;
|
||||
|
||||
(*
|
||||
@ -4228,6 +4230,7 @@ begin
|
||||
Begin
|
||||
SetCallback(LM_CHANGED, AGTKObject, ALCLObject);
|
||||
SetCallback(LM_COMMAND, AGTKObject, ALCLObject);
|
||||
SetCallback(LM_SELCHANGE, AGTKObject, ALCLObject);
|
||||
End;
|
||||
|
||||
csListBox:
|
||||
@ -6962,12 +6965,14 @@ var
|
||||
|
||||
function FindLineEnd(LineStart: integer): integer;
|
||||
var
|
||||
LineStop,
|
||||
LineWidth, WordWidth, WordEnd, CharWidth: integer;
|
||||
begin
|
||||
// first search line break or text break
|
||||
Result:=LineStart;
|
||||
while not (AText[Result] in [#0,#10,#13]) do inc(Result);
|
||||
if Result<=LineStart+1 then exit;
|
||||
lineStop:=Result;
|
||||
|
||||
// get current line width in pixel
|
||||
LineWidth:=GetLineWidthInPixel(LineStart,Result-LineStart);
|
||||
@ -6996,6 +7001,7 @@ var
|
||||
CharWidth:=GetLineWidthInPixel(Result,1);
|
||||
inc(LineWidth,CharWidth);
|
||||
if LineWidth>MaxWidthInPixel then break;
|
||||
if result=lineStop then break;
|
||||
inc(Result);
|
||||
until false;
|
||||
// at least one char
|
||||
|
@ -280,6 +280,8 @@ procedure GTKStyleChanged(Widget: PGtkWidget; previous_style :
|
||||
function gtkListBoxSelectionChangedAfter(widget: PGtkWidget;
|
||||
data: gPointer): GBoolean; cdecl;
|
||||
|
||||
function gtkListSelectChild(widget: PGtkWidget;child : PGtkWidget;
|
||||
data: gPointer): GBoolean; cdecl;
|
||||
|
||||
// gtkDragCallback.inc headers
|
||||
Function edit_drag_data_received(widget: pgtkWidget;
|
||||
|
@ -2779,30 +2779,34 @@ var
|
||||
|
||||
MaxLength := theRect.Right - theRect.Left;
|
||||
|
||||
If (Flags and DT_SingleLine) = DT_SingleLine then begin
|
||||
If (Flags and DT_SingleLine) > 0 then begin
|
||||
// ignore word and line breaks
|
||||
GetTextExtentPoint(DC, Str, Count, AP);
|
||||
theRect.Right := theRect.Left + Min(MaxLength, AP.cX);
|
||||
theRect.Bottom := theRect.Top + TM.tmHeight;
|
||||
|
||||
end
|
||||
else begin
|
||||
// consider line breaks
|
||||
If (Flags and DT_WordBreak) <> DT_WordBreak then begin
|
||||
If (Flags and DT_WordBreak) = 0 then begin
|
||||
// do not break at word boundaries
|
||||
GetTextExtentPoint(DC, Str, Count, AP);
|
||||
MaxLength := AP.cX;
|
||||
end;
|
||||
Self.WordWrap(DC, Str, MaxLength, Lines, NumLines);
|
||||
|
||||
LineWidth := 0;
|
||||
If (Lines <> nil) then begin
|
||||
For J := 0 to NumLines - 1 do begin
|
||||
GetTextExtentPoint(DC, Lines[J], StrLen(Lines[J]), AP);
|
||||
LineWidth := Max(LineWidth, AP.cX);
|
||||
if (Flags and DT_CalcRect)<>0 then begin
|
||||
LineWidth := 0;
|
||||
if (Lines <> nil) then begin
|
||||
LineWidth := 0;
|
||||
For J := 0 to NumLines - 1 do begin
|
||||
GetTextExtentPoint(DC, Lines[J], StrLen(Lines[J]), AP);
|
||||
LineWidth := Max(LineWidth, AP.cX);
|
||||
end;
|
||||
end;
|
||||
LineWidth := Min(MaxLength, LineWidth);
|
||||
end else begin
|
||||
LineWidth:=MaxLength;
|
||||
end;
|
||||
LineWidth := Min(MaxLength, LineWidth);
|
||||
|
||||
theRect.Right := theRect.Left + LineWidth;
|
||||
theRect.Bottom := theRect.Top + NumLines*TM.tmHeight;
|
||||
|
Loading…
Reference in New Issue
Block a user