mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-23 00:22:54 +02:00
448 lines
22 KiB
ObjectPascal
448 lines
22 KiB
ObjectPascal
{
|
|
*****************************************************************************
|
|
* *
|
|
* This file is part of the Lazarus Component Library (LCL) *
|
|
* *
|
|
* See the file COPYING.LCL, 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. *
|
|
* *
|
|
*****************************************************************************
|
|
}
|
|
unit GTKProc;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$Ifndef Win32}
|
|
X, XLib,//Font retrieval
|
|
{$EndIf}
|
|
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 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 ReleaseMouseCapture(OnlyIfCapturedByLCL: boolean);
|
|
procedure UpdateMouseCaptureControl;
|
|
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);
|
|
function GetAccelGroup(const Widget: PGtkWidget;
|
|
CreateIfNotExists: boolean): PGTKAccelGroup;
|
|
procedure SetAccelGroup(const Widget: PGtkWidget;
|
|
const AnAccelGroup: PGTKAccelGroup);
|
|
procedure FreeAccelGroup(const Widget: PGtkWidget);
|
|
procedure RegroupAccelerator(Widget: PGtkWidget);
|
|
procedure ClearAccelKey(Widget: PGtkWidget);
|
|
procedure Accelerate(Component: TComponent; const Widget : PGtkWidget;
|
|
const Key: guint; Mods: TGdkModifierType; const Signal : string);
|
|
procedure Accelerate(Component: TComponent; const Widget : PGtkWidget;
|
|
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 RemoveAmpersands(Src: PChar; LineLength : Longint) : PChar;
|
|
|
|
Procedure GetTextExtentIgnoringAmpersands(Font : PGDKFont; Str : PChar;
|
|
LineLength : Longint; lbearing, rbearing, width, ascent, descent : Pgint);
|
|
|
|
Function GDKPixel2GDIRGB(Pixel : Longint; Visual : PGDKVisual;
|
|
Colormap : PGDKColormap) : TGDIRGB;
|
|
|
|
Function GetWindowDecorations(AForm : TCustomForm) : Longint;
|
|
Function GetWindowFunction(AForm : TCustomForm) : Longint;
|
|
|
|
Procedure FillScreenFonts(ScreenFonts : TStrings);
|
|
|
|
var
|
|
X11Display : Pointer;
|
|
|
|
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}
|
|
|
|
initialization
|
|
X11Display := nil;
|
|
|
|
Finalization
|
|
{$IfNdef Win32}
|
|
If X11Display <> nil then
|
|
XCloseDisplay(X11Display);
|
|
{$EndIf}
|
|
X11Display := nil;
|
|
|
|
end.
|
|
|