mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-04 07:00:35 +02:00
Qt: propagate mouse events for TQtSystemTrayIcon, MouseMove isn't supported. Fixes #14129.
git-svn-id: trunk@20828 -
This commit is contained in:
parent
922c8cc1c7
commit
9de10817ea
@ -33,7 +33,7 @@ uses
|
||||
// Free Pascal
|
||||
Classes, SysUtils, Types,
|
||||
// LCL
|
||||
LCLType, LCLIntf, Menus, LCLProc, Graphics, ClipBrd;
|
||||
LCLType, LCLIntf, Menus, LCLProc, Graphics, ClipBrd, ExtCtrls;
|
||||
|
||||
type
|
||||
// forward declarations
|
||||
@ -417,8 +417,11 @@ type
|
||||
{ TQtSystemTrayIcon }
|
||||
|
||||
TQtSystemTrayIcon = class(TObject)
|
||||
private
|
||||
FHook: QSystemTrayIcon_hookH;
|
||||
public
|
||||
Handle: QSystemTrayIconH;
|
||||
FTrayIcon: TCustomTrayIcon;
|
||||
public
|
||||
constructor Create(vIcon: QIconH); virtual;
|
||||
destructor Destroy; override;
|
||||
@ -426,6 +429,7 @@ type
|
||||
procedure setContextMenu(menu: QMenuH);
|
||||
procedure setIcon(icon: QIconH);
|
||||
procedure setToolTip(tip: WideString);
|
||||
procedure signalActivated(AReason: QSystemTrayIconActivationReason); cdecl;
|
||||
procedure show;
|
||||
procedure hide;
|
||||
end;
|
||||
@ -661,7 +665,7 @@ function QtScreenContext: TQtDeviceContext;
|
||||
implementation
|
||||
|
||||
uses
|
||||
qtproc;
|
||||
Controls, qtproc;
|
||||
|
||||
const
|
||||
ClipbBoardTypeToQtClipboard: array[TClipboardType] of QClipboardMode =
|
||||
@ -2777,18 +2781,24 @@ end;
|
||||
{ TQtSystemTrayIcon }
|
||||
|
||||
constructor TQtSystemTrayIcon.Create(vIcon: QIconH);
|
||||
var
|
||||
Method: TMethod;
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
if vIcon <> nil then
|
||||
handle := QSystemTrayIcon_create(vicon, nil)
|
||||
Handle := QSystemTrayIcon_create(vicon, nil)
|
||||
else
|
||||
handle := QSystemTrayIcon_create();
|
||||
Handle := QSystemTrayIcon_create();
|
||||
FHook := QSystemTrayIcon_hook_create(Handle);
|
||||
QSystemTrayIcon_activated_Event(Method) := @signalActivated;
|
||||
QSystemTrayIcon_hook_hook_activated(FHook, Method);
|
||||
end;
|
||||
|
||||
destructor TQtSystemTrayIcon.Destroy;
|
||||
begin
|
||||
QSystemTrayIcon_destroy(handle);
|
||||
QSystemTrayIcon_hook_destroy(FHook);
|
||||
QSystemTrayIcon_destroy(Handle);
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
@ -2808,6 +2818,56 @@ begin
|
||||
QSystemTrayIcon_setToolTip(handle, @tip)
|
||||
end;
|
||||
|
||||
procedure TQtSystemTrayIcon.signalActivated(
|
||||
AReason: QSystemTrayIconActivationReason); cdecl;
|
||||
var
|
||||
MousePos: TQtPoint;
|
||||
begin
|
||||
if not Assigned(FTrayIcon) then
|
||||
exit;
|
||||
|
||||
QCursor_pos(@MousePos);
|
||||
|
||||
case AReason of
|
||||
QSystemTrayIconTrigger:
|
||||
begin
|
||||
if Assigned(FTrayIcon.OnMouseDown) then
|
||||
FTrayIcon.OnMouseDown(FTrayIcon, mbLeft, [], MousePos.x, MousePos.y);
|
||||
|
||||
if Assigned(FTrayIcon.OnClick) then
|
||||
FTrayIcon.OnClick(FTrayIcon);
|
||||
|
||||
if Assigned(FTrayIcon.OnMouseUp) then
|
||||
FTrayIcon.OnMouseUp(FTrayIcon, mbLeft, [], MousePos.x, MousePos.y);
|
||||
end;
|
||||
QSystemTrayIconDoubleClick:
|
||||
begin
|
||||
if Assigned(FTrayIcon.OnMouseDown) then
|
||||
FTrayIcon.OnMouseDown(FTrayIcon, mbLeft, [], MousePos.x, MousePos.y);
|
||||
|
||||
if Assigned(FTrayIcon.OnDblClick) then
|
||||
FTrayIcon.OnDblClick(FTrayIcon);
|
||||
|
||||
if Assigned(FTrayIcon.OnMouseUp) then
|
||||
FTrayIcon.OnMouseUp(FTrayIcon, mbLeft, [], MousePos.x, MousePos.y);
|
||||
end;
|
||||
QSystemTrayIconMiddleClick:
|
||||
begin
|
||||
if Assigned(FTrayIcon.OnMouseDown) then
|
||||
FTrayIcon.OnMouseDown(FTrayIcon, mbMiddle, [], MousePos.x, MousePos.y);
|
||||
if Assigned(FTrayIcon.OnMouseUp) then
|
||||
FTrayIcon.OnMouseUp(FTrayIcon, mbMiddle, [], MousePos.x, MousePos.y);
|
||||
end;
|
||||
QSystemTrayIconContext:
|
||||
begin
|
||||
if Assigned(FTrayIcon.OnMouseDown) then
|
||||
FTrayIcon.OnMouseDown(FTrayIcon, mbRight, [], MousePos.x, MousePos.y);
|
||||
if Assigned(FTrayIcon.OnMouseUp) then
|
||||
FTrayIcon.OnMouseUp(FTrayIcon, mbRight, [], MousePos.x, MousePos.y);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TQtSystemTrayIcon.show;
|
||||
begin
|
||||
QSystemTrayIcon_show(handle);
|
||||
|
@ -492,6 +492,7 @@ begin
|
||||
IconH := TQtIcon(ATrayIcon.Icon.Handle).Handle;
|
||||
|
||||
SystemTrayIcon := TQtSystemTrayIcon.Create(IconH);
|
||||
SystemTrayIcon.FTrayIcon := ATrayIcon;
|
||||
|
||||
ATrayIcon.Handle := PtrInt(SystemTrayIcon);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user