diff --git a/.gitattributes b/.gitattributes index 9e22433bea..21cbfa0464 100644 --- a/.gitattributes +++ b/.gitattributes @@ -560,6 +560,7 @@ lcl/interfaces/gtk/gtklistslh.inc svneol=native#text/pascal lcl/interfaces/gtk/gtklistviewcallback.inc svneol=native#text/pascal lcl/interfaces/gtk/gtkobject.inc svneol=native#text/pascal lcl/interfaces/gtk/gtkproc.inc svneol=native#text/pascal +lcl/interfaces/gtk/gtkproc.pp svneol=native#text/pascal lcl/interfaces/gtk/gtkwinapi.inc svneol=native#text/pascal lcl/interfaces/gtk/gtkwinapih.inc svneol=native#text/pascal lcl/interfaces/gtk/gtkwinapiwindow.pp svneol=native#text/pascal diff --git a/lcl/interfaces/gtk/gtkproc.pp b/lcl/interfaces/gtk/gtkproc.pp new file mode 100644 index 0000000000..ac2fb6eda0 --- /dev/null +++ b/lcl/interfaces/gtk/gtkproc.pp @@ -0,0 +1,406 @@ +unit gtkproc; + +{$mode objfpc}{$H+} + +interface + +uses + InterfaceBase, {$Ifndef NoGdkPixbufLib}gdkpixbuf,{$EndIf} gtk, gdk, + glib, SysUtils, LMessages, Classes, Controls, Forms, VclGlobals, + LCLLinux, LCLType, gtkDef, DynHashArray, LazQueue, GraphType, + GraphicsMath, Graphics, Buttons, Menus, GTKWinApiWindow, StdCtrls, ComCtrls, CListBox, + KeyMap, Calendar, Arrow, Spin, CommCtrl, ExtCtrls, Dialogs, FileCtrl, + LResources, Math, gtkglobals; + + +(* GTKCallback.inc headers *) +procedure EventTrace(const TheMessage : string; data : pointer); +function gtkNoteBookCloseBtnClicked(Widget: PGtkWidget; + Data: Pointer): GBoolean; cdecl; +function gtkRealizeCB(Widget: PGtkWidget; Data: Pointer): GBoolean; cdecl; +function gtkRealizeAfterCB(Widget: PGtkWidget; Data: Pointer): GBoolean; cdecl; +function gtkshowCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkHideCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkactivateCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkchangedCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkchanged_editbox( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkdaychanged(Widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkDraw(Widget: PGtkWidget; area: PGDKRectangle; + data: gPointer) : GBoolean; cdecl; +function gtkDrawAfter(Widget: PGtkWidget; area: PGDKRectangle; + data: gPointer) : GBoolean; cdecl; +function gtkExposeEventAfter(Widget: PGtkWidget; Event : PGDKEventExpose; + Data: gPointer): GBoolean; cdecl; +function gtkfrmactivate( widget: PGtkWidget; Event : TgdkEventFocus; + data: gPointer) : GBoolean; cdecl; +function gtkfrmdeactivate( widget: PGtkWidget; Event : TgdkEventFocus; + data: gPointer) : GBoolean; cdecl; +function GTKMap(Widget: PGTKWidget; Data: gPointer): GBoolean; cdecl; +function GTKKeyUpDown(Widget: PGtkWidget; Event : pgdkeventkey; + Data: gPointer) : GBoolean; cdecl; +function GTKFocusCB( widget: PGtkWidget; event:PGdkEventFocus; data: gPointer) : GBoolean; cdecl; +function GTKKillFocusCB(widget: PGtkWidget; event:PGdkEventFocus; data: gPointer) : GBoolean; cdecl; +function gtkdestroyCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkdeleteCB( widget : PGtkWidget; event : PGdkEvent; data : gPointer) : GBoolean; cdecl; +function gtkresizeCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkMonthChanged(Widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +procedure DeliverMouseMoveMessage(Widget:PGTKWidget; Event: PGDKEventMotion; + AWinControl: TWinControl); +function ControlGetsMouseMoveBefore(AControl: TControl): boolean; +function gtkMotionNotify(Widget:PGTKWidget; Event: PGDKEventMotion; + Data: gPointer): GBoolean; cdecl; +function GTKMotionNotifyAfter(widget:PGTKWidget; event: PGDKEventMotion; + data: gPointer): GBoolean; cdecl; +function ControlGetsMouseDownBefore(AControl: TControl): boolean; +procedure DeliverMouseDownMessage(widget: PGtkWidget; event : pgdkEventButton; + AWinControl: TWinControl); +function gtkMouseBtnPress(widget: PGtkWidget; event : pgdkEventButton; + data: gPointer) : GBoolean; cdecl; +function gtkMouseBtnPressAfter(widget: PGtkWidget; event : pgdkEventButton; + data: gPointer) : GBoolean; cdecl; +function ControlGetsMouseUpBefore(AControl: TControl): boolean; +procedure DeliverMouseUpMessage(widget: PGtkWidget; event : pgdkEventButton; + AWinControl: TWinControl); +function gtkMouseBtnRelease(widget: PGtkWidget; event : pgdkEventButton; + data: gPointer) : GBoolean; cdecl; +function gtkMouseBtnReleaseAfter(widget: PGtkWidget; event : pgdkEventButton; + data: gPointer) : GBoolean; cdecl; +function gtkclickedCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkOpenDialogRowSelectCB( widget : PGtkWidget; row : gint; + column : gint; event : pgdkEventButton; data : gPointer ) : GBoolean; cdecl; +function gtkDialogOKclickedCB( widget: PGtkWidget; + data: gPointer) : GBoolean; cdecl; +function gtkDialogCancelclickedCB(widget: PGtkWidget; data: gPointer): GBoolean;cdecl; +function gtkDialogHelpclickedCB(widget: PGtkWidget; data: gPointer): GBoolean;cdecl; +function gtkDialogApplyclickedCB(widget: PGtkWidget; data: gPointer): GBoolean; cdecl; +function gtkDialogCloseQueryCB(widget: PGtkWidget; data: gPointer): GBoolean; cdecl; +procedure UpdateDetailView(OpenDialog: TOpenDialog); +function GTKDialogKeyUpDownCB(Widget: PGtkWidget; Event : pgdkeventkey; + Data: gPointer) : GBoolean; cdecl; +function GTKDialogRealizeCB(Widget: PGtkWidget; Data: Pointer): GBoolean; cdecl; +function GTKDialogFocusInCB(widget: PGtkWidget; data: gPointer): GBoolean; cdecl; +function GTKDialogSelectRowCB(widget: PGtkWidget; Row, Column: gInt; + bevent: pgdkEventButton; data: gPointer): GBoolean; cdecl; +function GTKDialogMenuActivateCB(widget: PGtkWidget; data: gPointer): GBoolean; cdecl; +function gtkDialogDestroyCB(widget: PGtkWidget; data: gPointer): GBoolean; cdecl; +function gtkpressedCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkenterCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkleaveCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkmovecursorCB(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtksize_allocateCB(widget: PGtkWidget; size :pGtkAllocation; + data: gPointer) : GBoolean; cdecl; +function gtksize_allocate_client(widget: PGtkWidget; size :pGtkAllocation; + data: gPointer) : GBoolean; cdecl; +function gtkswitchpage(widget: PGtkWidget; page: Pgtkwidget; pagenum : integer; + data: gPointer) : GBoolean; cdecl; +function gtkconfigureevent( widget: PGtkWidget; event : PgdkEventConfigure; + data: gPointer) : GBoolean; cdecl; +function gtkreleasedCB( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkInsertText( widget: PGtkWidget; char : pChar; NewTextLength : Integer; Position : pgint; data: gPointer) : GBoolean; cdecl; +function gtkDeleteText( widget: PGtkWidget; Startpos, EndPos : Integer; data: gPointer) : GBoolean; cdecl; +function gtkSetEditable( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkMoveWord( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkMovePage( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkMoveToRow( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkMoveToColumn( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkKillChar( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkKillWord( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkKillLine( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkCutToClip( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkCopyToClip( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkPasteFromClip( widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkValueChanged(widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +function gtkTimerCB(Data: gPointer): gint; cdecl; +function gtkFocusInNotifyCB (widget : PGtkWidget; event : PGdkEvent; + data : gpointer) : GBoolean; cdecl; +function gtkFocusOutNotifyCB (widget : PGtkWidget; event : PGdkEvent; + data : gpointer) : GBoolean; cdecl; +function GTKHScrollCB(Adjustment: PGTKAdjustment; data: GPointer): GBoolean; cdecl; +function GTKVScrollCB(Adjustment: PGTKAdjustment; + data: GPointer): GBoolean; cdecl; +function GTKKeySnooper(Widget: PGtkWidget; Event: PGdkEventKey; + FuncData: gPointer): gInt; cdecl; +function gtkYearChanged(Widget: PGtkWidget; data: gPointer) : GBoolean; cdecl; +procedure ClipboardSelectionReceivedHandler(TargetWidget: PGtkWidget; + SelectionData: PGtkSelectionData; TimeID: cardinal; Data: Pointer); cdecl; +procedure ClipboardSelectionRequestHandler(TargetWidget: PGtkWidget; + SelectionData: PGtkSelectionData; Info: cardinal; TimeID: cardinal; + Data: Pointer); cdecl; +function ClipboardSelectionLostOwnershipHandler(TargetWidget: PGtkWidget; + EventSelection: PGdkEventSelection; Data: Pointer): cardinal; cdecl; +Procedure GTKStyleChanged(Widget: PGtkWidget; previous_style : PGTKStyle; Data: Pointer); cdecl; + +function DeliverPostMessage(const Target: Pointer; var TheMessage): GBoolean; +function DeliverMessage(const Target: Pointer; var AMessage): Integer; + +(* gtkDragCallback.inc headers *) +Function edit_drag_data_received(widget : pgtkWidget; + Context : pGdkDragContext; + X : Integer; + Y : Integer; + seldata : pGtkSelectionData; + info : Integer; + time : Integer; + data : pointer) : GBoolean; cdecl; +Function edit_source_drag_data_get(widget : pgtkWidget; + Context : pGdkDragContext; + Selection_data : pGtkSelectionData; + info : Integer; + time : Integer; + data : pointer) : GBoolean; cdecl; +Function Edit_source_drag_data_delete (widget : pGtkWidget; + context : pGdkDragContext; + data : gpointer): gBoolean ; cdecl; + +(* gtkListViewCallback.inc headers *) + +function gtkLVHScroll(AList: PGTKCList; AData: gPointer): GBoolean; cdecl; +function gtkLVVScroll(AList: PGTKCList; AData: gPointer): GBoolean; cdecl; +function gtkLVAbortColumnResize(AList: PGTKCList; AData: gPointer): GBoolean; cdecl; +function gtkLVResizeColumn(AList: PGTKCList; AColumn, AWidth: Integer; AData: gPointer): GBoolean; cdecl; +function gtkLVClickColumn(AList: PGTKCList; AColumn: Integer; AData: gPointer): GBoolean; cdecl; +function gtkLVRowMove(AList: PGTKCList; AnOldIdx, ANewIdx: Integer; AData: gPointer): GBoolean; cdecl; +function gtkLVSelectRow(AList: PGTKCList; ARow, AColumn: Integer; AEvent: PGDKEventButton; AData: gPointer): GBoolean; cdecl; +function gtkLVUnSelectRow(AList: PGTKCList; ARow, AColumn: Integer; AEvent: PGDKEventButton; AData: gPointer): GBoolean; cdecl; +function gtkLVToggleFocusRow(AList: PGTKCList; AData: gPointer): GBoolean; cdecl; +function gtkLVSelectAll(AList: PGTKCList; AData: gPointer): GBoolean; cdecl; +function gtkLVUnSelectAll(AList: PGTKCList; AData: gPointer): GBoolean; cdecl; +function gtkLVEndSelection(AList: PGTKCList; AData: gPointer): GBoolean; cdecl; + +(* gtkComboBoxCallback.inc headers *) + +function gtkComboBoxShowCB(widget: PGtkWidget; data: gPointer): GBoolean; cdecl; +function gtkComboBoxHideCB(widget: PGtkWidget; data: gPointer): GBoolean; cdecl; + +(* moved from TGTKObject.CreateComponent *) +procedure Set_RC_Name(Sender : TObject; AWidget: PGtkWidget); + +(* GTKProc.inc headers *) +procedure RaiseException(const Msg: string); +function CreatePChar(const s: string): PChar; +function ComparePChar(P1, P2: PChar): boolean; +function FindChar(c: char; p:PChar; Max: integer): integer; +function GtkWidgetIsA(Widget: PGtkWidget; AType: TGtkType): boolean; +function WidgetIsDestroyingHandle(Widget: PGtkWidget): boolean; +procedure SetWidgetIsDestroyingHandle(Widget: PGtkWidget); +function ComponentIsDestroyingHandle(AWinControl: TWinControl): boolean; +function LockOnChange(GtkObject: PGtkObject; LockOffset: integer): integer; +procedure SetComboBoxText(ComboWidget: PGtkCombo; NewText: PChar); +function GetComboBoxItemIndex(ComboBox: TComboBox): integer; +procedure SetComboBoxItemIndex(ComboBox: TComboBox; Index: integer); +function GtkPaintMessageToPaintMessage(GtkPaintMsg: TLMGtkPaint): TLMPaint; +function NewGDIRawImage(const AWidth, AHeight: Integer; const ADepth: Byte): PGDIRawImage; +function AllocGDKColor(const AColor: LongInt): TGDKColor; +function CopyDCData(DestinationDC, SourceDC: TDeviceContext): Boolean; +Function RegionType(RGN : PGDKRegion) : Longint; +Procedure SelectGDIRegion(const DC: HDC); +Procedure FreeGDIColor(var GDIColor : TGDIColor); +Procedure AllocGDIColor(DC : hDC; var GDIColor : TGDIColor); +procedure SetGDIColorRef(var GDIColor : TGDIColor; NewColorRef: TColorRef); +Procedure EnsureGCColor(DC: hDC; ColorType: TDevContextsColorType; + IsSolidBrush: Boolean; AsBackground: Boolean); + +function GetIndexAsKey(p: pointer): pointer; +function GetRGBAsKey(p: pointer): pointer; + +function PaletteIndexExists(Pal : PGDIObject; I : longint): Boolean; +function PaletteRGBExists(Pal : PGDIObject; RGB : longint): Boolean; +function PaletteAddIndex(Pal : PGDIObject; I, RGB : Longint): Boolean; +function PaletteDeleteIndex(Pal : PGDIObject; I : Longint): Boolean; +function PaletteIndexToRGB(Pal : PGDIObject; I : longint): longint; +function PaletteRGBToIndex(Pal : PGDIObject; RGB : longint): longint; +Procedure InitializePalette(Pal : PGDIObject; Entries : PPALETTEENTRY; RGBCount : Longint); + +function GTKEventState2ShiftState(KeyState: Word): TShiftState; +function KeyToListCode(KeyCode, VirtKeyCode: Word; Extended: boolean): integer; +procedure GetGTKKeyInfo(const Event: PGDKEventKey; var KeyCode,VirtualKey: Word; + var SysKey, Extended, Toggle: Boolean); +procedure Uncapturehandle; +procedure StoreCommonDialogSetup(ADialog: TCommonDialog); +procedure DestroyCommonDialogAddOns(ADialog: TCommonDialog); +function ObjectToGTKObject(const AObject: TObject): gtk_object; +function GetMainWidget(const Widget: Pointer): Pointer; +procedure SetMainWidget(const ParentWidget, ChildWidget: Pointer); +function GetFixedWidget(const Widget: Pointer): Pointer; +procedure SetFixedWidget(const ParentWidget, FixedWidget: Pointer); +Procedure FixedMoveControl(Parent, Child : PGTKWIdget; Left, Top : Longint); +Procedure FixedPutControl(Parent, Child : PGTKWIdget; Left, Top : Longint); +Function GetControlWindow(Control: Pointer) : PGDKWindow; +function GetDCOffset(DC: TDeviceContext): TPoint; +function CreateWidgetInfo(const Widget: Pointer): PWinWidgetInfo; +function GetWidgetInfo(const Widget: Pointer; const Create: Boolean): PWinWidgetInfo; +procedure FreeWinWidgetInfo(Widget: Pointer); +procedure DestroyWidget(Widget: PGtkWidget); +function GetGtkNoteBookDummyPage(ANoteBookWidget: PGtkNoteBook): PGtkWidget; +procedure SetGtkNoteBookDummyPage(ANoteBookWidget: PGtkNoteBook; + DummyWidget: PGtkWidget); +procedure UpdateNoteBookClientWidget(ANoteBook: TObject); +procedure SetLCLObject(const Widget: Pointer; const AnObject: TObject); +function GetLCLObject(const Widget: Pointer): TObject; +procedure SetHiddenLCLObject(const Widget: Pointer; const AnObject: TObject); +function GetHiddenLCLObject(const Widget: Pointer): TObject; +function GetWidgetOrigin(TheWidget: PGtkWidget): TPoint; +function GetWidgetClientOrigin(TheWidget: PGtkWidget): TPoint; +function TranslateGdkPointToClientArea(SourceWindow: PGdkWindow; + SourcePos: TPoint; DestinationWidget: PGtkWidget): TPoint; +procedure UpdateMouseCaptureControl; +procedure CheckMouseCaptureHandle(CurrentInputWidget: PGtkWidget); +procedure SetCursor(AWinControl : TWinControl; Data: Pointer); + +type + TConnectSignalFlag = ( + csfAfter, // connect after signal + csfConnectRealize, // auto connect realize handler + csfUpdateSignalMask, // extend signal mask for gdkwindow + csfDesignOnly // mark signal as design only + ); + TConnectSignalFlags = set of TConnectSignalFlag; + + TDesignSignalType = ( + dstUnknown, + dstMousePress, + dstMouseMotion, + dstMouseRelease, + dstDrawAfter, + dstExposeAfter + ); + TDesignSignalTypes = set of TDesignSignalType; + + TDesignSignalMask = longint; + +const + DesignSignalNames: array[TDesignSignalType] of PChar = ( + '', + 'button-press-event', + 'motion-notify-event', + 'button-release-event', + 'draw', + 'expose-event' + ); + + DesignSignalAfter: array[TDesignSignalType] of boolean = + (false,false,false,false,true,true); + + DesignSignalFuncs: array[TDesignSignalType] of Pointer = ( + nil, + @gtkMouseBtnPress, + @gtkMotionNotify, + @gtkMouseBtnRelease, + @gtkDrawAfter, + @gtkExposeEventAfter + ); + +var + DesignSignalMasks: array[TDesignSignalType] of TDesignSignalMask; + +procedure InitDesignSignalMasks; +function DesignSignalNameToType(Name: PChar; After: boolean): TDesignSignalType; +function GetDesignSignalMask(Widget: PGtkWidget): TDesignSignalMask; +procedure SetDesignSignalMask(Widget: PGtkWidget; NewMask: TDesignSignalMask); +function GetDesignOnlySignalFlag(Widget: PGtkWidget; + DesignSignalType: TDesignSignalType): boolean; +procedure ConnectSignal(const AnObject:gtk_Object; const ASignal: PChar; + const ACallBackProc: Pointer; LCLComponent: TComponent; + const ReqSignalMask: TGdkEventMask; SFlags: TConnectSignalFlags); +procedure ConnectSignal(const AnObject:gtk_Object; const ASignal: PChar; + const ACallBackProc: Pointer; LCLComponent: TComponent; + const ReqSignalMask: TGdkEventMask); +procedure ConnectSignalAfter(const AnObject:gtk_Object; const ASignal: PChar; + const ACallBackProc: Pointer; LCLComponent: TComponent; + const ReqSignalMask: TGdkEventMask); +procedure ConnectSignal(const AnObject:gtk_Object; const ASignal: PChar; + const ACallBackProc: Pointer; LCLComponent: TComponent); +procedure ConnectSignalAfter(const AnObject:gtk_Object; const ASignal: PChar; + const ACallBackProc: Pointer; LCLComponent: TComponent); +procedure ConnectInternalWidgetsSignals(AWidget: PGtkWidget; + AWinControl: TWinControl); +procedure SetAccelGroup(const Widget: Pointer; const AnAccelGroup: Pointer); +function GetAccelGroup(const Widget: Pointer): Pointer; +procedure SetAccelKey(const Widget: Pointer; const AKey: Integer); +function GetAccelKey(const Widget: Pointer): Integer; +procedure Accelerate(const Widget : Pointer; const Msg : TLMShortCut; + const Signal : string); +procedure GetGdkPixmapFromGraphic(LCLGraphic: TGraphic; + var IconImg, IconMask: PGdkPixmap; var Width, Height: integer); +procedure GetGdkPixmapFromMenuItem(LCLMenuItem: TMenuItem; + var IconImg, IconMask: PGdkPixmap; var Width, Height: integer); +function MENU_ITEM_CLASS(widget: PGtkWidget): PGtkMenuItemClass; +function CHECK_MENU_ITEM_CLASS(widget: PGtkWidget): PGtkCheckMenuItemClass; +function GetRadioMenuItemGroup(LCLMenuItem: TMenuItem): PGSList; +function GetRadioMenuItemGroup(MenuItem: PGtkRadioMenuItem): PGSList; +procedure UpdateRadioGroupChecks(RadioGroup: PGSList); +procedure DrawMenuItemIcon(MenuItem: PGtkCheckMenuItem; + Area: PGdkRectangle); cdecl; +procedure MenuSizeRequest(widget:PGtkWidget; requisition:PGtkRequisition); cdecl; +procedure SetMenuItemLabelText(LCLMenuItem: TMenuItem; + MenuItemWidget: PGtkWidget); +procedure CreateInnerMenuItem(LCLMenuItem: TMenuItem; + MenuItemWidget: PGtkWidget); +function CreateMenuItem(LCLMenuItem: TMenuItem): Pointer; +procedure SaveSizeNotification(Widget: PGtkWidget); +procedure SaveClientSizeNotification(FixWidget: PGtkWidget); +function CreateTopologicalSortedWidgets(HashArray: TDynHashArray): TList; +Procedure ReportNotObsolete(const Texts : String); +function TGDKColorToTColor(value : TGDKColor) : TColor; +function TColortoTGDKColor(value : TColor) : TGDKColor; +procedure UpdateSysColorMap(Widget: PGtkWidget); +function WaitForClipbrdAnswerDummyTimer(Client: Pointer): gint; cdecl; +function WaitForClipboardAnswer(c: PClipboardEventData): boolean; +function RequestSelectionData(ClipboardWidget: PGtkWidget; + ClipboardType: TClipboardType; FormatID: cardinal): TGtkSelectionData; +procedure FreeClipboardTargetEntries(ClipboardType: TClipboardType); + +function IndexOfStyle(const WName : String): integer; +Procedure ReleaseStyle(const WName : String); +function GetStyle(const WName : String) : PGTKStyle; +Function GetStyleWidget(WName : String) : PGTKWidget; +function GetDefaultFont : PGDKFont; +Function GetSysGCValues(Color : TColorRef) : TGDKGCValues; + +Function DeleteAmpersands(var Str : String) : Longint; + +function Ampersands2Underscore(Src: PChar) : PChar; + +Function GDKPixel2GDIRGB(Pixel : Longint; Visual : PGDKVisual; + Colormap : PGDKColormap) : TGDIRGB; + +Function GetWindowDecorations(AForm : TCustomForm) : Longint; +Function GetWindowFunction(AForm : TCustomForm) : Longint; + +implementation + + procedure Set_RC_Name(Sender : TObject; AWidget: PGtkWidget); + var RCName: string; + AComponent: TComponent; + begin + if (AWidget=nil) or (not (Sender is TComponent)) then exit; + + // check if a unique name can be created + AComponent:=TComponent(Sender); + while (AComponent<>nil) and (AComponent.Name<>'') do begin + AComponent:=AComponent.Owner; + end; + if (AComponent=nil) or (AComponent=TComponent(Application)) then begin + // create unique name + AComponent:=TComponent(Sender); + RCName:=AComponent.Name; + while (AComponent<>nil) do begin + AComponent:=TComponent(AComponent.Owner); + if (AComponent<>nil) and (AComponent.Name<>'') then + RCName:=AComponent.Name+'_'+RCName; + end; + gtk_widget_set_name(AWidget,PChar(RCName)); + gtk_widget_set_rc_style(AWidget); + end; + if (Sender is TCustomForm) + and ((Application.MainForm=TCustomForm(Sender)) + or (Application.MainForm=nil)) + then + UpdateSysColorMap(AWidget); + end; + +{$I gtkproc.inc} +{$I gtkcallback.inc} + +end. +