From 54979c4ae2b550ca8e8e5fdea3e727cd282092a7 Mon Sep 17 00:00:00 2001 From: Abou Al Montacir Date: Mon, 29 May 2023 21:08:15 +0200 Subject: [PATCH] GTK3: Migrate TGtkResponseType to enumeration. In Gtk3 WS code, integers were used instead of enumeration values. This leads to compilation error now that `TGtkResponseType` is defined as an enumeration type. This commit fixes those errors. --- lcl/interfaces/gtk3/gtk3bindings/lazgtk3.pas | 46 +++++++-------- lcl/interfaces/gtk3/gtk3boxes.pas | 60 +++++++++++--------- lcl/interfaces/gtk3/gtk3widgets.pas | 14 ++--- lcl/interfaces/gtk3/gtk3wsdialogs.pp | 2 +- 4 files changed, 62 insertions(+), 60 deletions(-) diff --git a/lcl/interfaces/gtk3/gtk3bindings/lazgtk3.pas b/lcl/interfaces/gtk3/gtk3bindings/lazgtk3.pas index 321528a3de..987469a735 100644 --- a/lcl/interfaces/gtk3/gtk3bindings/lazgtk3.pas +++ b/lcl/interfaces/gtk3/gtk3bindings/lazgtk3.pas @@ -322,6 +322,21 @@ type GTK_DEST_DEFAULT_ALL = 7, TGtkDestDefaultsMaxValue = $7FFFFFFF ); + TGtkResponseType = ( + TGtkResponseTypeMinValue = -$7FFFFFFF, + GTK_RESPONSE_HELP = -11, + GTK_RESPONSE_APPLY = -10, + GTK_RESPONSE_NO = -9, + GTK_RESPONSE_YES = -8, + GTK_RESPONSE_CLOSE = -7, + GTK_RESPONSE_CANCEL = -6, + GTK_RESPONSE_OK = -5, + GTK_RESPONSE_DELETE_EVENT = -4, + GTK_RESPONSE_ACCEPT = -3, + GTK_RESPONSE_REJECT = -2, + GTK_RESPONSE_NONE = -1, + TGtkResponseTypeMaxValue = $7FFFFFFF + ); TGtkJustification = ( TGtkJustificationMinValue = -$7FFFFFFF, GTK_JUSTIFY_LEFT = 0, @@ -1185,25 +1200,6 @@ const GTK_RECENT_MANAGER_ERROR_WRITE: TGtkRecentManagerError = 5; GTK_RECENT_MANAGER_ERROR_UNKNOWN: TGtkRecentManagerError = 6; -//type ??? -// TGtkResponseType = integer; -//PPGtkResponseType = ^PGtkResponseType; -//PGtkResponseType = ^TGtkResponseType; - -const - { GtkResponseType } - GTK_RESPONSE_NONE = -1; - GTK_RESPONSE_REJECT = -2; - GTK_RESPONSE_ACCEPT = -3; - GTK_RESPONSE_DELETE_EVENT = -4; - GTK_RESPONSE_OK = -5; - GTK_RESPONSE_CANCEL = -6; - GTK_RESPONSE_CLOSE = -7; - GTK_RESPONSE_YES = -8; - GTK_RESPONSE_NO = -9; - GTK_RESPONSE_APPLY = -10; - GTK_RESPONSE_HELP = -11; - type TGtkScrollStep = Integer; const @@ -1958,7 +1954,7 @@ type function new: PGtkDialog; cdecl; inline; static; //function new_with_buttons(title: Pgchar; parent: PGtkWindow; flags: TGtkDialogFlags; first_button_text: Pgchar; args: array of const): PGtkDialog; cdecl; inline; static; procedure add_action_widget(child: PGtkWidget; response_id: gint); cdecl; inline; - function add_button(button_text: Pgchar; response_id: gint): PGtkWidget; cdecl; inline; + function add_button(button_text: Pgchar; response_id: TGtkResponseType): PGtkWidget; cdecl; inline; //procedure add_buttons(first_button_text: Pgchar; args: array of const); cdecl; inline; function get_action_area: PGtkWidget; cdecl; inline; function get_content_area: PGtkWidget; cdecl; inline; @@ -1968,7 +1964,7 @@ type function run: gint; cdecl; inline; //procedure set_alternative_button_order(first_response_id: gint; args: array of const); cdecl; inline; procedure set_alternative_button_order_from_array(n_params: gint; new_order: Pgint); cdecl; inline; - procedure set_default_response(response_id: gint); cdecl; inline; + procedure set_default_response(response_id: TGtkResponseType); cdecl; inline; procedure set_response_sensitive(response_id: gint; setting: gboolean); cdecl; inline; end; @@ -11614,7 +11610,7 @@ function gtk_css_section_get_start_line(section: PGtkCssSection): guint; cdecl; function gtk_css_section_get_start_position(section: PGtkCssSection): guint; cdecl; external; function gtk_css_section_get_type: TGType; cdecl; external; function gtk_css_section_ref(section: PGtkCssSection): PGtkCssSection; cdecl; external; -function gtk_dialog_add_button(dialog: PGtkDialog; button_text: Pgchar; response_id: gint): PGtkWidget; cdecl; external; +function gtk_dialog_add_button(dialog: PGtkDialog; button_text: Pgchar; response_id: TGtkResponseType): PGtkWidget; cdecl; external; function gtk_dialog_get_action_area(dialog: PGtkDialog): PGtkWidget; cdecl; external; function gtk_dialog_get_content_area(dialog: PGtkDialog): PGtkWidget; cdecl; external; function gtk_dialog_get_response_for_widget(dialog: PGtkDialog; widget: PGtkWidget): gint; cdecl; external; @@ -13515,7 +13511,7 @@ procedure gtk_dialog_add_buttons(dialog: PGtkDialog; first_button_text: Pgchar; procedure gtk_dialog_response(dialog: PGtkDialog; response_id: gint); cdecl; external; procedure gtk_dialog_set_alternative_button_order(dialog: PGtkDialog; first_response_id: gint; args: array of const); cdecl; external; procedure gtk_dialog_set_alternative_button_order_from_array(dialog: PGtkDialog; n_params: gint; new_order: Pgint); cdecl; external; -procedure gtk_dialog_set_default_response(dialog: PGtkDialog; response_id: gint); cdecl; external; +procedure gtk_dialog_set_default_response(dialog: PGtkDialog; response_id: TGtkResponseType); cdecl; external; procedure gtk_dialog_set_response_sensitive(dialog: PGtkDialog; response_id: gint; setting: gboolean); cdecl; external; procedure gtk_disable_setlocale; cdecl; external; procedure gtk_drag_dest_add_image_targets(widget: PGtkWidget); cdecl; external; @@ -16619,7 +16615,7 @@ begin LazGtk3.gtk_dialog_add_action_widget(@self, child, response_id); end; -function TGtkDialog.add_button(button_text: Pgchar; response_id: gint): PGtkWidget; cdecl; +function TGtkDialog.add_button(button_text: Pgchar; response_id: TGtkResponseType): PGtkWidget; cdecl; begin Result := LazGtk3.gtk_dialog_add_button(@self, button_text, response_id); end; @@ -16659,7 +16655,7 @@ begin LazGtk3.gtk_dialog_set_alternative_button_order_from_array(@self, n_params, new_order); end; -procedure TGtkDialog.set_default_response(response_id: gint); cdecl; +procedure TGtkDialog.set_default_response(response_id: TGtkResponseType); cdecl; begin LazGtk3.gtk_dialog_set_default_response(@self, response_id); end; diff --git a/lcl/interfaces/gtk3/gtk3boxes.pas b/lcl/interfaces/gtk3/gtk3boxes.pas index cc996a0be2..1d007e6a94 100644 --- a/lcl/interfaces/gtk3/gtk3boxes.pas +++ b/lcl/interfaces/gtk3/gtk3boxes.pas @@ -50,13 +50,14 @@ type function btn_ptr_info(ndx:integer):longint; procedure set_message_text(const msg:string;const is_pango_markup:boolean=false); procedure update_widget_list(const func:TBtnListFunction); - procedure CreateButton(const ALabel : String; const AResponse: Integer; + procedure CreateButton(const ALabel : String; const AResponse: Integer); + procedure CreateButton(const ALabel : String; const AResponse: TGtkResponseType; const AImageHint: Integer = -1); function lcl_result:integer; function btn_result:integer; - class function ResponseID(const AnID: Integer): Integer; - class function gtk_resp_to_lcl(const gtk_resp:integer):integer; - class function gtk_resp_to_btn(const gtk_resp:integer):integer; + class function ResponseID(const AnID: Integer): TGtkResponseType; + class function gtk_resp_to_lcl(const gtk_resp:TGtkResponseType):integer; + class function gtk_resp_to_btn(const gtk_resp:TGtkResponseType):integer; class function MessageType(ADialogType:longint):TGtkMessageType; end; @@ -65,11 +66,11 @@ implementation // fake GTK button responses const - GTK_RESPONSE_LCL_ALL = -10; - GTK_RESPONSE_LCL_YESTOALL = -3; // GTK_RESPONSE_ACCEPT; - GTK_RESPONSE_LCL_RETRY = -12; - GTK_RESPONSE_LCL_IGNORE = -13; - GTK_RESPONSE_LCL_NOTOALL = -14; + GTK_RESPONSE_LCL_ALL = TGtkResponseType(-15); + GTK_RESPONSE_LCL_YESTOALL = GTK_RESPONSE_ACCEPT; + GTK_RESPONSE_LCL_RETRY = TGtkResponseType(-12); + GTK_RESPONSE_LCL_IGNORE = TGtkResponseType(-13); + GTK_RESPONSE_LCL_NOTOALL = TGtkResponseType(-14); { callbacks } @@ -102,7 +103,7 @@ begin end; -class function TGtk3DialogFactory.ResponseID(const AnID: Integer): Integer; +class function TGtk3DialogFactory.ResponseID(const AnID: Integer): TGtkResponseType; begin case AnID of idButtonOK : Result := GTK_RESPONSE_OK; @@ -118,11 +119,11 @@ begin idButtonNoToAll : Result := GTK_RESPONSE_LCL_NOTOALL; idButtonYesToAll : Result := GTK_RESPONSE_LCL_YESTOALL; else - Result:=AnID; + Result:=TGtkResponseType(AnID); end; end; -class function TGtk3DialogFactory.gtk_resp_to_lcl(const gtk_resp:integer):integer; +class function TGtk3DialogFactory.gtk_resp_to_lcl(const gtk_resp:TGtkResponseType):integer; begin case gtk_resp of GTK_RESPONSE_OK: Result:=ID_OK; @@ -141,22 +142,22 @@ begin GTK_RESPONSE_LCL_NOTOALL: Result:=idButtonNoToAll; //GTK_RESPONSE_LCL_YESTOALL: Result:= idButtonYesToAll; else - Result:=gtk_resp; + Result:=Integer(gtk_resp); end; end; -class function TGtk3DialogFactory.gtk_resp_to_btn(const gtk_resp:integer):integer; +class function TGtk3DialogFactory.gtk_resp_to_btn(const gtk_resp:TGtkResponseType):integer; begin case gtk_resp of - -5{GTK_RESPONSE_OK}: Result:= idButtonOk; - -6{GTK_RESPONSE_CANCEL}: Result := idButtonCancel; - -7{GTK_RESPONSE_CLOSE}: Result:=idButtonClose; - -8{GTK_RESPONSE_YES}: Result:=idButtonYes; - -9{GTK_RESPONSE_NO}: Result:=idButtonNo; + GTK_RESPONSE_OK {-5} : Result:= idButtonOk; + GTK_RESPONSE_CANCEL {-6} : Result := idButtonCancel; + GTK_RESPONSE_CLOSE {-7} : Result:=idButtonClose; + GTK_RESPONSE_YES {-8} : Result:=idButtonYes; + GTK_RESPONSE_NO {-9} : Result:=idButtonNo; - -1{GTK_RESPONSE_NONE}: Result:=0; - -2{GTK_RESPONSE_REJECT}: Result:=idButtonAbort; - -3{GTK_RESPONSE_ACCEPT}: Result:=idButtonYesToAll; + GTK_RESPONSE_NONE {-1} : Result:=0; + GTK_RESPONSE_REJECT {-2} : Result:=idButtonAbort; + GTK_RESPONSE_ACCEPT {-3} : Result:=idButtonYesToAll; GTK_RESPONSE_LCL_RETRY: Result:=idButtonRetry; GTK_RESPONSE_LCL_IGNORE: Result:=idButtonIgnore; @@ -164,13 +165,18 @@ begin GTK_RESPONSE_LCL_NOTOALL: Result:=idButtonNoToAll; //GTK_RESPONSE_LCL_YESTOALL: Result:= idButtonYesToAll; else - Result:=gtk_resp; + Result:=Integer(gtk_resp); end; end; +procedure TGtk3DialogFactory.CreateButton(const ALabel : String; const AResponse: Integer); +begin + CreateButton(ALabel, TGtkResponseType(AResponse)); +end; + procedure TGtk3DialogFactory.CreateButton( const ALabel : String; - const AResponse: Integer; + const AResponse: TGtkResponseType; const AImageHint: Integer = -1); var NewButton: PGtkWidget; @@ -217,12 +223,12 @@ end; function TGtk3DialogFactory.lcl_result: integer; begin - Result:=gtk_resp_to_lcl(DialogResult); + Result:=gtk_resp_to_lcl(TGtkResponseType(DialogResult)); end; function TGtk3DialogFactory.btn_result: integer; begin - Result:=gtk_resp_to_btn(DialogResult); + Result:=gtk_resp_to_btn(TGtkResponseType(DialogResult)); end; class function TGtk3DialogFactory.MessageType(ADialogType:longint):TGtkMessageType; @@ -306,7 +312,7 @@ begin idButtonYesToAll : CreateButton(dbtn.Caption, GTK_RESPONSE_LCL_YESTOALL, BtnID); end; end else - CreateButton(dbtn.Caption, dbtn.ModalResult, 0); + CreateButton(dbtn.Caption, TGtkResponseType(dbtn.ModalResult), 0); end; end; diff --git a/lcl/interfaces/gtk3/gtk3widgets.pas b/lcl/interfaces/gtk3/gtk3widgets.pas index 76077e2cb7..2d9ec797c2 100644 --- a/lcl/interfaces/gtk3/gtk3widgets.pas +++ b/lcl/interfaces/gtk3/gtk3widgets.pas @@ -828,7 +828,7 @@ type class function ResponseCB(response_id:gint; dlg: TGtk3Dialog): GBoolean; cdecl; class function RealizeCB(dlg:TGtk3Dialog): GBoolean; cdecl; protected - function response_handler(response_id:gint):boolean;virtual; + function response_handler(response_id:TGtkResponseType):boolean;virtual; function close_handler():boolean;virtual; procedure SetCallbacks;virtual; function CreateWidget(const {%H-}Params: TCreateParams):PGtkWidget; override; @@ -852,7 +852,7 @@ type TGtk3FontSelectionDialog = class(TGtk3Dialog) protected - function response_handler(resp_id:gint):boolean; override; + function response_handler(resp_id:TGtkResponseType):boolean; override; public procedure InitializeWidget; override; constructor Create(const ACommonDialog: TCommonDialog); virtual; overload; @@ -870,7 +870,7 @@ type TGtk3newColorSelectionDialog = class(TGtk3Dialog) protected - function response_handler(resp_id:gint):boolean;override; + function response_handler(resp_id:TGtkResponseType):boolean;override; public constructor Create(const ACommonDialog: TCommonDialog); virtual; overload; procedure InitializeWidget;override; @@ -7955,12 +7955,12 @@ end; class function TGtk3Dialog.ResponseCB(response_id:gint; dlg: TGtk3Dialog): GBoolean; cdecl; begin if Assigned(dlg) then - Result:=dlg.response_handler(response_id) + Result:=dlg.response_handler(TGtkResponseType(response_id)) else Result:= false; end; -function TGtk3Dialog.response_handler(response_id:gint):boolean; +function TGtk3Dialog.response_handler(response_id:TGtkResponseType):boolean; begin (* case response_id of GTK_RESPONSE_NONE:; @@ -8133,7 +8133,7 @@ begin inherited InitializeWidget; end; -function TGtk3FontSelectionDialog.response_handler(resp_id: gint): boolean; +function TGtk3FontSelectionDialog.response_handler(resp_id: TGtkResponseType): boolean; var fnt:TFont; pch:PgtkFontChooser; @@ -8244,7 +8244,7 @@ begin inherited; end; -function TGtk3newColorSelectionDialog.response_handler(resp_id: gint): boolean; +function TGtk3newColorSelectionDialog.response_handler(resp_id: TGtkResponseType): boolean; var clr:TColor; rgba:TGdkRGBA; diff --git a/lcl/interfaces/gtk3/gtk3wsdialogs.pp b/lcl/interfaces/gtk3/gtk3wsdialogs.pp index ef725126e0..92d29d682a 100644 --- a/lcl/interfaces/gtk3/gtk3wsdialogs.pp +++ b/lcl/interfaces/gtk3/gtk3wsdialogs.pp @@ -418,7 +418,7 @@ begin end; end; -procedure Gtk2FileChooserResponseCB(widget: PGtkFileChooser; arg1: gint; +procedure Gtk2FileChooserResponseCB(widget: PGtkFileChooser; arg1: TGtkResponseType; data: gpointer); cdecl; procedure AddFile(List: TStrings; const NewFile: string);