diff --git a/lcl/interfaces/gtk2/gtk2proc.pp b/lcl/interfaces/gtk2/gtk2proc.pp index 0733f90c81..11b6eec296 100644 --- a/lcl/interfaces/gtk2/gtk2proc.pp +++ b/lcl/interfaces/gtk2/gtk2proc.pp @@ -58,6 +58,8 @@ uses gtk2callback.inc headers } +const + gtkevent_window_state_event = 'window-state-event'; function GTKWindowStateEventCB(widget: PGtkWidget; state: PGdkEventWindowState; diff --git a/lcl/interfaces/gtk2/gtk2wscustommemo.inc b/lcl/interfaces/gtk2/gtk2wscustommemo.inc index 05f70bb6e0..46ef747a28 100644 --- a/lcl/interfaces/gtk2/gtk2wscustommemo.inc +++ b/lcl/interfaces/gtk2/gtk2wscustommemo.inc @@ -246,6 +246,40 @@ begin // not supported end; +class procedure TGtk2WSCustomMemo.SetCharCase(const ACustomEdit: TCustomEdit; + NewCase: TEditCharCase); +begin + // TODO: implement me! +end; + +class procedure TGtk2WSCustomMemo.SetMaxLength(const ACustomEdit: TCustomEdit; + NewLength: integer); +var + Widget: PGtkWidget; +begin + Widget:=PGtkWidget(ACustomEdit.Handle); + if GtkWidgetIsA(Widget, GTK_TYPE_ENTRY) then + gtk_entry_set_max_length(GTK_ENTRY(Widget), guint16(NewLength)); +end; + +class procedure TGtk2WSCustomMemo.SetReadOnly(const ACustomEdit: TCustomEdit; + NewReadOnly: boolean); +var + Widget: PGtkWidget; +begin + Widget:=PGtkWidget(ACustomEdit.Handle); + if GtkWidgetIsA(Widget, GTK_TYPE_ENTRY) then + gtk_entry_set_editable(GTK_ENTRY(Widget), not ACustomEdit.ReadOnly); +end; + +class procedure TGtk2WSCustomMemo.GetPreferredSize( + const AWinControl: TWinControl; var PreferredWidth, PreferredHeight: integer; + WithThemeSpace: Boolean); +begin + GetGTKDefaultWidgetSize(AWinControl,PreferredWidth,PreferredHeight, + WithThemeSpace); +end; + class function TGtk2WSCustomMemo.GetSelStart(const ACustomEdit: TCustomEdit ): integer; var diff --git a/lcl/interfaces/gtk2/gtk2wsforms.pp b/lcl/interfaces/gtk2/gtk2wsforms.pp index 449d1459e4..f2efe48dea 100644 --- a/lcl/interfaces/gtk2/gtk2wsforms.pp +++ b/lcl/interfaces/gtk2/gtk2wsforms.pp @@ -139,7 +139,7 @@ begin SetCallback(LM_VSCROLL, PGtkObject(AWidget), AWidgetInfo^.LCLObject); end; - g_signal_connect(PGtkObject(AWidgetInfo^.CoreWidget), 'window-state-event', + g_signal_connect(PGtkObject(AWidgetInfo^.CoreWidget), gtkevent_window_state_event, gtk_signal_func(@GTKWindowStateEventCB), AWidgetInfo^.LCLObject); end; @@ -186,11 +186,7 @@ begin else AResizable := FormResizableMap[ABorderStyle]; // gtk_window_set_policy is deprecated in Gtk2 - {$IFDEF Gtk2} - gtk_window_set_resizable(GTK_WINDOW(P), gboolean(AResizable)); - {$ELSE} - gtk_window_set_policy(GTK_WINDOW(P), AResizable, AResizable, 0); - {$ENDIF} + gtk_window_set_resizable(GTK_WINDOW(P), gboolean(AResizable)); // Sets the title gtk_window_set_title(PGtkWindow(P), AParams.Caption); @@ -210,10 +206,8 @@ begin Box := CreateFormContents(ACustomForm, P); gtk_container_add(PGtkContainer(P), Box); - {$IfDef GTK2} - //so we can double buffer ourselves, eg, the Form Designer - gtk_widget_set_double_buffered(Box, False); - {$EndIf} + //so we can double buffer ourselves, eg, the Form Designer + gtk_widget_set_double_buffered(Box, False); gtk_widget_show(Box); diff --git a/lcl/interfaces/gtk2/gtk2wsstdctrls.pp b/lcl/interfaces/gtk2/gtk2wsstdctrls.pp index 78d483e10d..3c135dc179 100644 --- a/lcl/interfaces/gtk2/gtk2wsstdctrls.pp +++ b/lcl/interfaces/gtk2/gtk2wsstdctrls.pp @@ -24,19 +24,16 @@ unit Gtk2WSStdCtrls; {$mode objfpc}{$H+} {$PACKRECORDS c} + interface uses - Classes, SysUtils, Math, Controls, Graphics, -//////////////////////////////////////////////////// -// I M P O R T A N T -//////////////////////////////////////////////////// -// To get as little as posible circles, -// uncomment only when needed for registration -//////////////////////////////////////////////////// - StdCtrls, LMessages, LCLType, LCLProc, -//////////////////////////////////////////////////// + // Bindings glib2, gdk2, gtk2, Pango, + // RTL, FCL, LCL + Classes, SysUtils, Math, Controls, Graphics, + StdCtrls, LMessages, LCLType, LCLProc, + // Widgetset WSControls, WSProc, WSStdCtrls, WSLCLClasses, GtkWSStdCtrls, Gtk2Int, GtkDef, Gtk2CellRenderer, GTKWinApiWindow, GtkGlobals, GtkProc, InterfaceBase, GtkWSPrivate, Gtk2WSPrivate, GtkExtra; @@ -197,23 +194,33 @@ type { TGtk2WSCustomMemo } - TGtk2WSCustomMemo = class(TGtkWSCustomMemo) + TGtk2WSCustomMemo = class(TWSCustomMemo) private protected class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); virtual; public class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; + class function GetSelStart(const ACustomEdit: TCustomEdit): integer; override; class function GetSelLength(const ACustomEdit: TCustomEdit): integer; override; class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override; + class procedure SetAlignment(const ACustomMemo: TCustomMemo; const AAlignment: TAlignment); override; - class procedure SetColor(const AWinControl: TWinControl);override; - class procedure SetFont(const AWinControl: TWinControl;const AFont : TFont);override; + class procedure SetColor(const AWinControl: TWinControl); override; + class procedure SetFont(const AWinControl: TWinControl;const AFont : TFont); override; class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override; class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override; class procedure SetWantTabs(const ACustomMemo: TCustomMemo; const NewWantTabs: boolean); override; class procedure SetEchoMode(const ACustomEdit: TCustomEdit; NewMode: TEchoMode); override; class procedure SetPasswordChar(const ACustomEdit: TCustomEdit; NewChar: char); override; + + class procedure SetCharCase(const ACustomEdit: TCustomEdit; NewCase: TEditCharCase); override; + class procedure SetMaxLength(const ACustomEdit: TCustomEdit; NewLength: integer); override; + class procedure SetReadOnly(const ACustomEdit: TCustomEdit; NewReadOnly: boolean); override; + + class procedure GetPreferredSize(const AWinControl: TWinControl; + var PreferredWidth, PreferredHeight: integer; + WithThemeSpace: Boolean); override; end; { TGtk2WSEdit }