LCL/CheckCombobox: Fix "no checkbox/no items issue" in cocoa (issue #39427)

This commit is contained in:
wp_xyz 2021-10-15 15:34:11 +02:00
parent 104bb3cabf
commit bc0b673eb6
4 changed files with 79 additions and 4 deletions

View File

@ -0,0 +1,65 @@
unit CocoaWSComboEx;
{$mode objfpc}{$H+}
{$WARN 5024 off : Parameter "$1" not used}
interface
uses
////////////////////////////////////////////////////
// I M P O R T A N T
////////////////////////////////////////////////////
// To get as little as possible circles,
// uncomment only when needed for registration
////////////////////////////////////////////////////
Classes, SysUtils,
StdCtrls, Controls, Graphics, Forms, Themes,
////////////////////////////////////////////////////
ComboEx, WSComboEx;
type
{ TCocoaCustomComboBoxEx }
TCocoaCustomComboBoxEx = class(TWSCustomComboBoxEx)
published
class function GetFocusedEditableMainItemNoDD(const ACombo: TCustomComboboxEx;
ADroppedDown, AMainItem: Boolean): boolean; override;
end;
{ TCocoaWSCustomCheckCombo }
TCocoaWSCustomCheckCombo = class(TWSCustomCheckCombo)
published
class function GetFocusedEditableMainItemNoDD(const ACombo: TCustomCheckCombo;
ADroppedDown: Boolean; ALeft: Integer): boolean; override;
class function GetRejectDropdown(const {%H-}ACombo: TCustomCheckCombo;
ALeft, {%H-}ARight: Integer): Boolean; override;
end;
implementation
{ TCocoaWSCustomComboBoxEx }
class function TCocoaWSCustomComboBoxEx.GetFocusedEditableMainItemNoDD(
const ACombo: TCustomComboBoxEx; ADroppedDown, AMainItem: Boolean): boolean;
begin
Result := ACombo.Focused and aMainItem and not ADroppedDown;
end;
{ TCocoaWSCustomCheckCombo }
class function TCocoaWSCustomCheckCombo.GetFocusedEditableMainItemNoDD(
const ACombo: TCustomCheckCombo; ADroppedDown: Boolean; ALeft: Integer): boolean;
begin
Result := ACombo.Focused and (ALeft > 0) and not ADroppedDown;
end;
class procedure TWin32WSCustomCheckCombo.GetRejectToggleOnSelect(
const ACombo: TCustomCheckCombo; var AResult: Boolean);
begin
if ACombo.DroppedDown then AResult := true;
// AResult := false;
end;
end.

View File

@ -5,9 +5,10 @@ unit CocoaWSFactory;
interface
uses
Classes, Controls, ComCtrls, StdCtrls, Spin, PairSplitter,
Classes, Controls, ComboEx, ComCtrls, StdCtrls, Spin, PairSplitter,
Dialogs, ExtCtrls, Buttons, CheckLst, Forms, Menus, Calendar,
WSLCLClasses,
CocoaWSComboEx,
CocoaWSCommon,
CocoaWSButtons,
CocoaWSExtCtrls,
@ -568,12 +569,14 @@ end;
// ComboEx
function RegisterCustomComboBoxEx: Boolean; alias : 'WSRegisterCustomComboBoxEx';
begin
Result := False;
RegisterWSComponent(TCustomComboBoxEx, TCocoaWSCustomComboBoxEx);
Result := True;
end;
function RegisterCustomCheckCombo: Boolean; alias : 'WSRegisterCustomCheckCombo';
begin
Result := False;
RegisterWSComponent(TCustomCheckCombo, TCocoaWSCustomCheckCombo);
Result := True;
end;
// LazDeviceAPIs

View File

@ -374,6 +374,7 @@ begin
t.Dependencies.AddUnit('cocoascrollers');
t.Dependencies.AddUnit('cocoawsclipboard');
t.Dependencies.AddUnit('cocoawschecklst');
t.Dependencies.AddUnit('cocoawscomboex');
t.Dependencies.AddUnit('cocoadatepicker');
P.Targets.AddImplicitUnit('carbon/agl.pp');
@ -708,6 +709,7 @@ begin
P.Targets.AddImplicitUnit('cocoa/cocoascrollers.pas');
P.Targets.AddImplicitUnit('cocoa/cocoawsclipboard.pas');
P.Targets.AddImplicitUnit('cocoa/cocoawschecklst.pas');
P.Targets.AddImplicitUnit('cocoa/cocoawscomboex.pas');
P.Targets.AddImplicitUnit('cocoa/cocoadatepicker.pas');
// copy the compiled file, so the IDE knows how the package was compiled

View File

@ -130,7 +130,7 @@ end;"/>
<License Value="modified LGPL-2
"/>
<Version Major="2" Minor="3"/>
<Files Count="490">
<Files Count="491">
<Item1>
<Filename Value="carbon/agl.pp"/>
<AddToUsesPkgSection Value="False"/>
@ -2428,6 +2428,11 @@ end;"/>
<AddToUsesPkgSection Value="False"/>
<UnitName Value="WinCEWSComboEx"/>
</Item490>
<Item491>
<Filename Value="cocoa/cocoawscomboex.pas"/>
<AddToUsesPkgSection Value="False"/>
<UnitName Value="CocoaWSComboEx"/>
</Item491>
</Files>
<CompatibilityMode Value="True"/>
<LazDoc Paths="../../docs/xml/lcl"/>