diff --git a/.gitattributes b/.gitattributes index 277f938e0f..89bad3917f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2961,6 +2961,7 @@ lcl/interfaces/gtk/gtk1extrah.inc svneol=native#text/pascal lcl/interfaces/gtk/gtk1int.pp svneol=native#text/pascal lcl/interfaces/gtk/gtk1memostrings.inc svneol=native#text/pascal lcl/interfaces/gtk/gtk1memostringsh.inc svneol=native#text/pascal +lcl/interfaces/gtk/gtk1privatelist.inc svneol=native#text/pascal lcl/interfaces/gtk/gtk1trayicon.inc -text lcl/interfaces/gtk/gtk1widgetset.inc svneol=native#text/pascal lcl/interfaces/gtk/gtk1wsprivate.pp svneol=native#text/pascal @@ -2985,6 +2986,7 @@ lcl/interfaces/gtk/gtklistsl.inc svneol=native#text/pascal lcl/interfaces/gtk/gtklistslh.inc svneol=native#text/pascal lcl/interfaces/gtk/gtkmsgqueue.pp svneol=native#text/pascal lcl/interfaces/gtk/gtkpagecallback.inc svneol=native#text/pascal +lcl/interfaces/gtk/gtkprivatelist.inc svneol=native#text/pascal lcl/interfaces/gtk/gtkprivatewidget.inc svneol=native#text/plain lcl/interfaces/gtk/gtkproc.inc svneol=native#text/pascal lcl/interfaces/gtk/gtkproc.pp svneol=native#text/pascal @@ -3042,6 +3044,7 @@ lcl/interfaces/gtk2/gtk2interface.pas svneol=native#text/pascal lcl/interfaces/gtk2/gtk2lclintf.inc svneol=native#text/pascal lcl/interfaces/gtk2/gtk2lclintfh.inc svneol=native#text/pascal lcl/interfaces/gtk2/gtk2memostrings.inc svneol=native#text/pascal +lcl/interfaces/gtk2/gtk2privatelist.inc svneol=native#text/pascal lcl/interfaces/gtk2/gtk2privatewidget.inc svneol=native#text/plain lcl/interfaces/gtk2/gtk2themes.pas svneol=native#text/pascal lcl/interfaces/gtk2/gtk2trayicon.inc -text diff --git a/lcl/interfaces/gtk/gtk1privatelist.inc b/lcl/interfaces/gtk/gtk1privatelist.inc new file mode 100644 index 0000000000..32d495d446 --- /dev/null +++ b/lcl/interfaces/gtk/gtk1privatelist.inc @@ -0,0 +1,26 @@ +{%mainunit gtk1wsprivate.pp} + +{ + ***************************************************************************** + * * + * This file is part of the Lazarus Component Library (LCL) * + * * + * See the file COPYING.modifiedLGPL, included in this distribution, * + * for details about the copyright. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * * + ***************************************************************************** +} + +{ TGtk1PrivateList } + +class procedure TGtk1PrivateList.SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); +begin + TGtkWSWinControl.SetCallbacks(PGtkObject(AGtkWidget), TComponent(AWidgetInfo^.LCLObject)); + GTKWidgetSet.SetCallback(LM_SELCHANGE, PGtkObject(AGtkWidget), AWidgetInfo^.LCLObject); +end; + + diff --git a/lcl/interfaces/gtk/gtk1wsprivate.pp b/lcl/interfaces/gtk/gtk1wsprivate.pp index ae1f1d6856..381ec9b121 100644 --- a/lcl/interfaces/gtk/gtk1wsprivate.pp +++ b/lcl/interfaces/gtk/gtk1wsprivate.pp @@ -38,7 +38,7 @@ uses // widgetset WSControls, WSLCLClasses, WSProc, // interface - GtkDef, GtkProc, GtkWSPrivate; + GtkDef, GtkProc, GtkWSPrivate, GtkWsControls, GtkInt; type @@ -101,6 +101,20 @@ type public end; + + { TGtk1PrivateList } + { Private class for gtklists } + + TGtk1PrivateList = class(TGtkPrivateList) + private + protected + public + class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); override; + end; + + { TGtk1PrivateNotebook } + { Private class for gtknotebooks } + TGtk1PrivateNotebook = class(TGtkPrivateNotebook) private protected @@ -109,6 +123,7 @@ type implementation // {$I Gtk1PrivateWidget.inc} + {$I Gtk1PrivateList.inc} end. diff --git a/lcl/interfaces/gtk/gtkint.pp b/lcl/interfaces/gtk/gtkint.pp index 12b558bc7f..f476f80377 100644 --- a/lcl/interfaces/gtk/gtkint.pp +++ b/lcl/interfaces/gtk/gtkint.pp @@ -74,7 +74,7 @@ uses Graphics, Menus, Maps, Themes, // widgetset GtkDebug, - GtkFontCache, gtkDef, GtkProc, gtkMsgQueue, GtkExtra, gtkWSPrivate, WSLCLClasses; + GtkFontCache, gtkDef, GtkProc, gtkMsgQueue, GtkExtra, WSLCLClasses; type @@ -326,8 +326,9 @@ uses GtkWSSpin, GtkWSStdCtrls, // GtkWSToolwin, - GtkThemes, //////////////////////////////////////////////////// + GtkWSPrivate, + GtkThemes, Buttons, StdCtrls, PairSplitter, GTKWinApiWindow, ComCtrls, CListBox, Calendar, Arrow, Spin, ExtCtrls, FileCtrl, LResources, gtkglobals; diff --git a/lcl/interfaces/gtk/gtkprivatelist.inc b/lcl/interfaces/gtk/gtkprivatelist.inc new file mode 100644 index 0000000000..1feeeb08a0 --- /dev/null +++ b/lcl/interfaces/gtk/gtkprivatelist.inc @@ -0,0 +1,24 @@ +{%mainunit gtk1wsprivate.pp} + +{ + ***************************************************************************** + * * + * This file is part of the Lazarus Component Library (LCL) * + * * + * See the file COPYING.modifiedLGPL, included in this distribution, * + * for details about the copyright. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * * + ***************************************************************************** +} + +{ TGtkPrivateList } + +class procedure TGtkPrivateList.SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); +begin +end; + + diff --git a/lcl/interfaces/gtk/gtkwscontrols.pp b/lcl/interfaces/gtk/gtkwscontrols.pp index f7b19deb27..7328890a54 100644 --- a/lcl/interfaces/gtk/gtkwscontrols.pp +++ b/lcl/interfaces/gtk/gtkwscontrols.pp @@ -37,10 +37,6 @@ uses SysUtils, Classes, Controls, LMessages, InterfaceBase, WSControls, WSLCLClasses, WSProc, Graphics, ComCtrls, Forms, LCLType, - GTKWSPrivate, - {$ifdef gtk1} - GTK1WSPrivate, - {$endif} GtkDef, GTKExtra; type @@ -150,6 +146,10 @@ function GetWidgetVAdjustment(AWidget: PGTKWidget): PGTKAdjustment; implementation uses + GTKWSPrivate, + {$ifdef gtk1} + GTK1WSPrivate, + {$endif} GtkInt, gtkglobals, gtkproc, GTKWinApiWindow, StdCtrls, LCLProc, LCLIntf; diff --git a/lcl/interfaces/gtk/gtkwsprivate.pp b/lcl/interfaces/gtk/gtkwsprivate.pp index 6fc427dd1f..037d06c731 100644 --- a/lcl/interfaces/gtk/gtkwsprivate.pp +++ b/lcl/interfaces/gtk/gtkwsprivate.pp @@ -44,7 +44,7 @@ uses // widgetset WSControls, WSLCLClasses, WSProc, // interface - GtkDef, GtkProc; + GtkDef, GtkProc, GtkWsControls; type @@ -153,6 +153,16 @@ type public end; + { TGtkPrivateList } + { Private class for gtklists } + + TGtkPrivateListClass = class of TGtkPrivateList; + TGtkPrivateList = class(TGtkPrivateScrolling) + private + protected + public + class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); virtual; + end; { TGtkPrivateNotebook } { Private class for gtknotebooks } @@ -178,6 +188,10 @@ procedure SetWindowCursor(AWindow: PGdkWindow; ACursor: HCursor; ARecursive: Boo implementation +// some circles are needed. +uses + GtkInt; + // Helper functions function GetWidgetWithWindow(const AHandle: THandle): PGtkWidget; @@ -314,6 +328,7 @@ begin end; {$I gtkprivatewidget.inc} +{$I gtkprivatelist.inc} end. diff --git a/lcl/interfaces/gtk/gtkwsstdctrls.pp b/lcl/interfaces/gtk/gtkwsstdctrls.pp index 25bc6eae75..5ba43e0b61 100644 --- a/lcl/interfaces/gtk/gtkwsstdctrls.pp +++ b/lcl/interfaces/gtk/gtkwsstdctrls.pp @@ -119,7 +119,6 @@ type protected public {$IFDEF GTK1} - class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); virtual; class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override; class function GetIndexAtY(const ACustomListBox: TCustomListBox; y: integer): integer; override; class function GetItemIndex(const ACustomListBox: TCustomListBox): integer; override; @@ -441,12 +440,6 @@ end; { TGtkWSCustomListBox } {$IFDEF GTK1} -class procedure TGtkWSCustomListBox.SetCallbacks(const AGtkWidget: PGtkWidget; - const AWidgetInfo: PWidgetInfo); -begin - TGtkWSWinControl.SetCallbacks(PGtkObject(AGtkWidget), TComponent(AWidgetInfo^.LCLObject)); - TGtkWidgetset(Widgetset).SetCallback(LM_SELCHANGE, PGtkObject(AGtkWidget), AWidgetInfo^.LCLObject); -end; class function TGtkWSCustomListBox.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; @@ -483,7 +476,8 @@ begin DebugGtkWidgets.MarkCreated(Widget, dbgsName(AWinControl)); {$ENDIF} Set_RC_Name(AWinControl, Widget); - SetCallbacks(Widget, WidgetInfo); + + TGtkPrivateListClass(WSPrivate).SetCallbacks(Widget, WidgetInfo); end; class function TGtkWSCustomListBox.GetIndexAtY( @@ -2049,12 +2043,12 @@ initialization // RegisterWSComponent(TGroupBox, TGtkWSGroupBox); RegisterWSComponent(TCustomComboBox, TGtkWSCustomComboBox); // RegisterWSComponent(TComboBox, TGtkWSComboBox); - RegisterWSComponent(TCustomListBox, TGtkWSCustomListBox, TGtkPrivateScrolling); // RegisterWSComponent(TListBox, TGtkWSListBox); RegisterWSComponent(TCustomEdit, TGtkWSCustomEdit, TGtkPrivateEntry); RegisterWSComponent(TCustomMemo, TGtkWSCustomMemo, TGtkPrivateScrolling); // RegisterWSComponent(TButtonControl, TGtkWSButtonControl); {$ifdef gtk1} + RegisterWSComponent(TCustomListBox, TGtkWSCustomListBox, TGtk1PrivateList); RegisterWSComponent(TCustomButton, TGtkWSButton, TGtk1PrivateButton); {$else} RegisterWSComponent(TCustomButton, TGtkWSButton, TGtk2PrivateButton); diff --git a/lcl/interfaces/gtk2/gtk2privatelist.inc b/lcl/interfaces/gtk2/gtk2privatelist.inc new file mode 100644 index 0000000000..096cc88738 --- /dev/null +++ b/lcl/interfaces/gtk2/gtk2privatelist.inc @@ -0,0 +1,45 @@ +{%mainunit gtk2wsprivate.pp} + +{ + ***************************************************************************** + * * + * This file is part of the Lazarus Component Library (LCL) * + * * + * See the file COPYING.modifiedLGPL, included in this distribution, * + * for details about the copyright. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + * * + ***************************************************************************** +} + + +procedure Gtk2WS_ListBoxChange(Selection: PGtkTreeSelection; WidgetInfo: PWidgetInfo); cdecl; +var + Mess: TLMessage; +begin + {$IFDEF EventTrace} + EventTrace('Gtk2WS_ListBoxChange', WidgetInfo^.LCLObject); + {$ENDIF} + FillChar(Mess,SizeOf(Mess),0); + Mess.msg := LM_SelChange; + DeliverMessage(WidgetInfo^.LCLObject, Mess); +end; + + + +{ TGtk2PrivateList } + +class procedure TGtk2PrivateList.SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); +var + Selection: PGtkTreeSelection; +begin + TGtkWSBaseScrollingWinControl.SetCallbacks(AGtkWidget,AWidgetInfo); + + Selection := gtk_tree_view_get_selection(PGtkTreeView(AWidgetInfo^.CoreWidget)); + SignalConnect(PGtkWidget(Selection), 'changed', @Gtk2WS_ListBoxChange, AWidgetInfo); +end; + + diff --git a/lcl/interfaces/gtk2/gtk2wsprivate.pp b/lcl/interfaces/gtk2/gtk2wsprivate.pp index 38e6af5e62..52a135b468 100644 --- a/lcl/interfaces/gtk2/gtk2wsprivate.pp +++ b/lcl/interfaces/gtk2/gtk2wsprivate.pp @@ -38,7 +38,7 @@ uses // widgetset WSControls, WSLCLClasses, WSProc, // interface - GtkDef, GtkProc, GtkWSPrivate; + GtkDef, GtkProc, GtkWSPrivate, GtkWSControls; type @@ -102,6 +102,19 @@ type class procedure UpdateCursor(AInfo: PWidgetInfo); override; end; + { TGtk2PrivateList } + { Private class for gtklists } + + TGtk2PrivateList = class(TGtkPrivateList) + private + protected + public + class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); override; + end; + + { TGtk2PrivateNotebook } + { Private class for gtknotebooks } + TGtk2PrivateNotebook = class(TGtkPrivateNotebook) private protected @@ -120,6 +133,7 @@ type implementation {$I Gtk2PrivateWidget.inc} +{$I Gtk2PrivateList.inc} end. diff --git a/lcl/interfaces/gtk2/gtk2wsstdctrls.pp b/lcl/interfaces/gtk2/gtk2wsstdctrls.pp index e75ae9d659..ef5c799b82 100644 --- a/lcl/interfaces/gtk2/gtk2wsstdctrls.pp +++ b/lcl/interfaces/gtk2/gtk2wsstdctrls.pp @@ -38,7 +38,8 @@ uses //////////////////////////////////////////////////// glib2, gdk2, gtk2, Pango, WSControls, WSProc, WSStdCtrls, WSLCLClasses, GtkWSStdCtrls, Gtk2Int, LCLType, GtkDef, - LCLProc, Gtk2CellRenderer, GTKWinApiWindow, gtkglobals, gtkproc, InterfaceBase; + LCLProc, Gtk2CellRenderer, GTKWinApiWindow, gtkglobals, gtkproc, InterfaceBase, + GtkWsPrivate, Gtk2WsPrivate; type @@ -144,7 +145,6 @@ type TGtk2WSCustomListBox = class(TGtkWSCustomListBox) private protected - class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); virtual; public class function GetIndexAtY(const ACustomListBox: TCustomListBox; y: integer): integer; override; class function GetItemIndex(const ACustomListBox: TCustomListBox): integer; override; @@ -333,18 +333,6 @@ end; { TGtk2WSCustomListBox } -procedure Gtk2WS_ListBoxChange(Selection: PGtkTreeSelection; WidgetInfo: PWidgetInfo); cdecl; -var - Mess: TLMessage; -begin - {$IFDEF EventTrace} - EventTrace('Gtk2WS_ListBoxChange', WidgetInfo^.LCLObject); - {$ENDIF} - FillChar(Mess,SizeOf(Mess),0); - Mess.msg := LM_SelChange; - DeliverMessage(WidgetInfo^.LCLObject, Mess); -end; - procedure StoreFirstSelectedPath(model:PGtkTreeModel; path:PGtkTreePath; iter:PGtkTreeIter; data:gpointer); cdecl; begin @@ -575,18 +563,8 @@ begin end; WidgetInfo := GetWidgetInfo(p, False); - SetCallbacks(p, WidgetInfo); -end; - -class procedure TGtk2WSCustomListBox.SetCallbacks( - const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo); -var - Selection: PGtkTreeSelection; -begin - TGtkWSBaseScrollingWinControl.SetCallbacks(AGtkWidget,AWidgetInfo); - - Selection := gtk_tree_view_get_selection(PGtkTreeView(AWidgetInfo^.CoreWidget)); - SignalConnect(PGtkWidget(Selection), 'changed', @Gtk2WS_ListBoxChange, AWidgetInfo); + + TGtkPrivateListClass(WSPrivate).SetCallbacks(p, WidgetInfo); end; class function TGtk2WSCustomListBox.GetIndexAtY( @@ -1462,7 +1440,7 @@ initialization // RegisterWSComponent(TGroupBox, TGtk2WSGroupBox); RegisterWSComponent(TCustomComboBox, TGtk2WSCustomComboBox); // RegisterWSComponent(TComboBox, TGtk2WSComboBox); - RegisterWSComponent(TCustomListBox, TGtk2WSCustomListBox); + RegisterWSComponent(TCustomListBox, TGtk2WSCustomListBox, TGtk2PrivateList); // RegisterWSComponent(TListBox, TGtk2WSListBox); RegisterWSComponent(TCustomEdit, TGtk2WSCustomEdit); RegisterWSComponent(TCustomMemo, TGtk2WSCustomMemo);