summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graeme@mastermaths.co.za>2010-09-14 11:17:56 +0200
committerGraeme Geldenhuys <graeme@mastermaths.co.za>2010-09-23 16:24:33 +0200
commit7bb9a00e758c9a60acf35077a4537a3c07b29a53 (patch)
treef3a16572959c4a6e1aa33575d2bbc8b8005764b1 /src
parent7a2fa68530e488744b01cdf6bafb864786bb006d (diff)
downloadfpGUI-7bb9a00e758c9a60acf35077a4537a3c07b29a53.tar.xz
Adds some application wide variables that we need for tracking XDND data.
Diffstat (limited to 'src')
-rw-r--r--src/corelib/x11/fpg_x11.pas38
1 files changed, 36 insertions, 2 deletions
diff --git a/src/corelib/x11/fpg_x11.pas b/src/corelib/x11/fpg_x11.pas
index ea69e5f3..e90b8395 100644
--- a/src/corelib/x11/fpg_x11.pas
+++ b/src/corelib/x11/fpg_x11.pas
@@ -28,6 +28,7 @@ interface
uses
Classes,
SysUtils,
+ contnrs,
X,
Xlib,
XUtil,
@@ -238,6 +239,8 @@ type
FComposeBuffer: TfpgString;
FComposeStatus: TStatus;
FEventFilter: TX11EventFilter;
+ { XDND type list received from Source window }
+ FDNDTypeList: TObjectList;
{ all XDND atoms }
XdndAware: TAtom;
XdndTypeList: TAtom;
@@ -255,10 +258,18 @@ type
XdndActionLink: TAtom;
XdndActionAsk: TAtom;
XdndActionPrivate: TAtom;
+ { XDND variables }
+ FActionType: TAtom;
+ FSrcWinHandle: TfpgWinHandle;
+ FDNDVersion: integer;
+ FDNDDataType: TAtom;
+ FSrcTimeStamp: clong;
+ FLastDropTarget: TfpgWinHandle;
function ConvertShiftState(AState: Cardinal): TShiftState;
function KeySymToKeycode(KeySym: TKeySym): Word;
function StartComposing(const Event: TXEvent): TKeySym;
procedure XdndInit;
+ procedure ResetDNDVariables;
protected
FDisplay: PXDisplay;
DisplayDepth: integer;
@@ -331,11 +342,19 @@ uses
fpg_widget,
fpg_popupwindow,
fpg_stringutils, // used for GetTextWidth
+ fpg_utils,
fpg_form, // for modal event support
cursorfont,
- xatom; // used for XA_WM_NAME
+ xatom, // used for XA_WM_NAME
+ math;
type
+ TDNDSrcType = class(TObject)
+ public
+ Name: TfpgString;
+ ID: integer;
+ end;
+
TAtomArray = array [0..0] of TAtom;
PAtomArray = ^TAtomArray;
@@ -741,6 +760,20 @@ begin
XdndActionPrivate := XInternAtom(FDisplay, 'XdndActionPrivate', False);
end;
+procedure TfpgX11Application.ResetDNDVariables;
+var
+ msgp: TfpgMessageParams;
+begin
+ if FLastDropTarget <> 0 then
+ begin
+ fillchar(msgp, sizeof(msgp), 0);
+ fpgPostMessage(nil, FindWindowByHandle(FLastDropTarget), FPGM_DROPINACTIVE, msgp);
+ end;
+ FDNDTypeList.Clear;
+ FActionType := 0;
+ FSrcWinHandle := -1
+end;
+
function TfpgX11Application.DoGetFontFaceList: TStringList;
var
pfs: PFcFontSet;
@@ -804,6 +837,7 @@ begin
xia_wm_state := XInternAtom(FDisplay, 'WM_STATE', TBool(False));
{ initializa the XDND atoms }
+ FDNDTypeList := TObjectList.Create;
XdndInit;
netlayer := TNETWindowLayer.Create(FDisplay);
@@ -824,7 +858,7 @@ destructor TfpgX11Application.Destroy;
begin
netlayer.Free;
XCloseDisplay(FDisplay);
-
+ FDNDTypeList.Free;
inherited Destroy;
end;