mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-27 14:11:25 +02:00
set application hint when user selects menu items:
- TMenuItem.IntfDoSelect - win32, qt, gtk2 implementation git-svn-id: trunk@15002 -
This commit is contained in:
parent
971f1f253f
commit
30d1e0adcc
@ -263,6 +263,11 @@ begin
|
||||
DesignerMenuItemClick(Self);
|
||||
end;
|
||||
|
||||
procedure TMenuItem.IntfDoSelect;
|
||||
begin
|
||||
Application.Hint := GetLongHint(Hint);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Function: TMenuItem.GetChildren
|
||||
Params: Proc - proc to be called for each child
|
||||
@ -274,7 +279,7 @@ end;
|
||||
procedure TMenuItem.GetChildren(Proc: TGetChildProc; Root: TComponent);
|
||||
var
|
||||
i : Integer;
|
||||
Begin
|
||||
begin
|
||||
if not assigned (FItems) then exit;
|
||||
|
||||
for i := 0 to FItems.Count - 1 do
|
||||
|
@ -39,6 +39,7 @@ type
|
||||
TGtk2WSMenuItem = class(TWSMenuItem)
|
||||
private
|
||||
protected
|
||||
class procedure SetCallbacks(const AGtkWidget: PGtkWidget; const AWidgetInfo: PWidgetInfo);
|
||||
public
|
||||
class procedure AttachMenu(const AMenuItem: TMenuItem); override;
|
||||
class function CreateHandle(const AMenuItem: TMenuItem): HMENU; override;
|
||||
@ -83,8 +84,32 @@ implementation
|
||||
|
||||
{$I gtkdefines.inc}
|
||||
|
||||
function Gtk2MenuItemSelect(item: Pointer; AMenuItem: TMenuItem): GBoolean; cdecl;
|
||||
begin
|
||||
AMenuItem.IntfDoSelect;
|
||||
Result := CallBackDefaultReturn;
|
||||
end;
|
||||
|
||||
function Gtk2MenuItemDeselect(item: Pointer; AMenuItem: TMenuItem): GBoolean; cdecl;
|
||||
begin
|
||||
Application.Hint := '';
|
||||
Result := CallBackDefaultReturn;
|
||||
end;
|
||||
|
||||
{ TGtk2WSMenuItem }
|
||||
|
||||
class procedure TGtk2WSMenuItem.SetCallbacks(const AGtkWidget: PGtkWidget;
|
||||
const AWidgetInfo: PWidgetInfo);
|
||||
begin
|
||||
// connect activate signal (i.e. clicked)
|
||||
g_signal_connect(PGTKObject(AGtkWidget), 'activate',
|
||||
TGTKSignalFunc(@gtkactivateCB), AWidgetInfo^.LCLObject);
|
||||
g_signal_connect(PGTKObject(AGtkWidget), 'select',
|
||||
TGTKSignalFunc(@Gtk2MenuItemSelect), AWidgetInfo^.LCLObject);
|
||||
g_signal_connect(PGTKObject(AGtkWidget), 'deselect',
|
||||
TGTKSignalFunc(@Gtk2MenuItemDeselect), AWidgetInfo^.LCLObject);
|
||||
end;
|
||||
|
||||
class procedure TGtk2WSMenuItem.AttachMenu(const AMenuItem: TMenuItem);
|
||||
var
|
||||
//AccelKey: Integer;
|
||||
@ -197,9 +222,7 @@ begin
|
||||
// create the hbox containing the label and the icon
|
||||
UpdateInnerMenuItem(AMenuItem, Widget);
|
||||
|
||||
// connect activate signal (i.e. clicked)
|
||||
g_signal_connect(PGTKObject(Widget), 'activate',
|
||||
TGTKSignalFunc(@gtkactivateCB), AMenuItem);
|
||||
SetCallbacks(Widget, WidgetInfo);
|
||||
|
||||
gtk_widget_show(Widget);
|
||||
{$IFDEF DebugLCLComponents}
|
||||
|
@ -922,6 +922,7 @@ type
|
||||
private
|
||||
FIcon: QIconH;
|
||||
FTriggeredHook: QAction_hookH;
|
||||
FHoveredHook: QAction_hookH;
|
||||
FAboutToHideHook: QMenu_hookH;
|
||||
FActionHandle: QActionH;
|
||||
FMenuItem: TMenuItem;
|
||||
@ -936,6 +937,7 @@ type
|
||||
procedure AttachEvents; override;
|
||||
procedure DetachEvents; override;
|
||||
|
||||
procedure SlotHovered; cdecl;
|
||||
procedure SlotAboutToHide; cdecl;
|
||||
procedure SlotDestroy; cdecl;
|
||||
procedure SlotTriggered(checked: Boolean = False); cdecl;
|
||||
@ -6587,6 +6589,7 @@ var
|
||||
Method: TMethod;
|
||||
begin
|
||||
FTriggeredHook := QAction_hook_create(ActionHandle);
|
||||
FHoveredHook := QAction_hook_create(ActionHandle);
|
||||
FAboutToHideHook := QMenu_hook_create(Widget);
|
||||
FEventHook := QObject_hook_create(Widget);
|
||||
|
||||
@ -6594,6 +6597,9 @@ begin
|
||||
QAction_hook_hook_triggered(FTriggeredHook, Method);
|
||||
TEventFilterMethod(Method) := @EventFilter;
|
||||
|
||||
QAction_hovered_Event(Method) := @SlotHovered;
|
||||
QAction_hook_hook_hovered(FHoveredHook, Method);
|
||||
|
||||
QMenu_aboutToHide_Event(Method) := @SlotAboutToHide;
|
||||
QMenu_hook_hook_aboutToHide(FAboutToHideHook, Method);
|
||||
|
||||
@ -6609,6 +6615,12 @@ begin
|
||||
FTriggeredHook := nil;
|
||||
end;
|
||||
|
||||
if FHoveredHook <> nil then
|
||||
begin
|
||||
QAction_hook_destroy(FHoveredHook);
|
||||
FHoveredHook := nil;
|
||||
end;
|
||||
|
||||
if FAboutToHideHook <> nil then
|
||||
begin
|
||||
QMenu_hook_destroy(FAboutToHideHook);
|
||||
@ -6618,6 +6630,11 @@ begin
|
||||
inherited DetachEvents;
|
||||
end;
|
||||
|
||||
procedure TQtMenu.SlotHovered; cdecl;
|
||||
begin
|
||||
FMenuItem.IntfDoSelect;
|
||||
end;
|
||||
|
||||
procedure TQtMenu.SlotAboutToHide; cdecl;
|
||||
begin
|
||||
if FMenuItem.Menu is TPopupMenu then
|
||||
|
@ -1285,6 +1285,15 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
WM_MENUSELECT:
|
||||
begin
|
||||
TargetObject := GetMenuItemObject;
|
||||
if TargetObject is TMenuItem then
|
||||
TMenuItem(TargetObject).IntfDoSelect
|
||||
else
|
||||
Application.Hint := '';
|
||||
end;
|
||||
|
||||
WM_COMMAND:
|
||||
begin
|
||||
if LParam=0 then
|
||||
|
@ -200,6 +200,7 @@ type
|
||||
function HasIcon: boolean; virtual;
|
||||
function HasParent: Boolean; override;
|
||||
procedure InitiateAction; virtual;
|
||||
procedure IntfDoSelect; virtual;
|
||||
function IndexOf(Item: TMenuItem): Integer;
|
||||
function IndexOfCaption(const ACaption: string): Integer; virtual;
|
||||
function VisibleIndexOf(Item: TMenuItem): Integer;
|
||||
|
Loading…
Reference in New Issue
Block a user