mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 21:18:01 +02:00
lcl: remove LM_DEACTIVATE message. In windows and in Delphi both activation and deactivation are handled by WM_ACTIVATE message. Better to do this merge in LCL before 1.0 to prevent later problems
git-svn-id: trunk@35518 -
This commit is contained in:
parent
27e8d29632
commit
82e9d3f4ce
@ -489,7 +489,6 @@ type
|
||||
procedure SetWindowState(Value : TWindowState);
|
||||
procedure WMActivate(var Message : TLMActivate); message LM_ACTIVATE;
|
||||
procedure WMCloseQuery(var message: TLMessage); message LM_CLOSEQUERY;
|
||||
procedure WMDeactivate(var Message : TLMActivate); message LM_DEACTIVATE;
|
||||
procedure WMHelp(var Message: TLMHelp); message LM_HELP;
|
||||
procedure WMShowWindow(var message: TLMShowWindow); message LM_SHOWWINDOW;
|
||||
procedure WMSize(var message: TLMSize); message LM_Size;
|
||||
|
@ -474,48 +474,39 @@ end;
|
||||
|
||||
Activate event handler.
|
||||
------------------------------------------------------------------------------}
|
||||
procedure TCustomForm.WMActivate(var Message : TLMActivate);
|
||||
procedure TCustomForm.WMActivate(var Message: TLMActivate);
|
||||
begin
|
||||
{$IFDEF VerboseFocus}
|
||||
DebugLn('TCustomForm.WMActivate A ',DbgSName(Self),' Msg.Active=',dbgs(Message.Active));
|
||||
{$ENDIF}
|
||||
if (Parent = nil) and (ParentWindow = 0) and
|
||||
(FormStyle <> fsMDIForm) or (csDesigning in ComponentState) then
|
||||
SetActive(Message.Active);
|
||||
if Message.Active = WA_INACTIVE then
|
||||
begin
|
||||
SetActive(False);
|
||||
if Assigned(Application) then
|
||||
{$IFDEF EnableAsyncDeactivate}
|
||||
Application.QueueAsyncCall(@Application.Deactivate,0);
|
||||
{$ELSE}
|
||||
Application.Deactivate;
|
||||
{$ENDIF}
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (Parent = nil) and (ParentWindow = 0) and
|
||||
(FormStyle <> fsMDIForm) or (csDesigning in ComponentState) then
|
||||
SetActive(True);
|
||||
|
||||
if Application <> nil then
|
||||
Application.Activate;
|
||||
// The button reappears in some situations (e.g. when the window gets the
|
||||
//"urgency" flag) so we hide it again here.
|
||||
// This is the most important place to invoke UpdateShowInTaskBar, since
|
||||
//invoking it anywhere else seeems basically useless/frequently reversed.
|
||||
if (ShowInTaskBar = stNever) or
|
||||
( (ShowInTaskBar = stDefault) and
|
||||
(Application <> nil) and (Application.TaskBarBehavior = tbSingleButton)
|
||||
) then
|
||||
UpdateShowInTaskBar;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Method: TCustomForm.WMDeactivate
|
||||
Params: Msg: When the form is deactivated (loses focus within application)
|
||||
Returns: nothing
|
||||
|
||||
Form deactivation (losing focus within application) event handler.
|
||||
------------------------------------------------------------------------------}
|
||||
procedure TCustomForm.WMDeactivate(var Message : TLMActivate);
|
||||
begin
|
||||
{$IFDEF VerboseFocus}
|
||||
DebugLn('TCustomForm.WMDeactivate ',DbgSName(Self));
|
||||
{$ENDIF}
|
||||
SetActive(False);
|
||||
{$IFDEF EnableAsyncDeactivate}
|
||||
if Application<>nil then
|
||||
Application.QueueAsyncCall(@Application.Deactivate,0);
|
||||
{$ELSE}
|
||||
if Application<>nil then
|
||||
Application.Deactivate;
|
||||
{$ENDIF}
|
||||
if Assigned(Application) then
|
||||
Application.Activate;
|
||||
// The button reappears in some situations (e.g. when the window gets the
|
||||
//"urgency" flag) so we hide it again here.
|
||||
// This is the most important place to invoke UpdateShowInTaskBar, since
|
||||
//invoking it anywhere else seeems basically useless/frequently reversed.
|
||||
if (ShowInTaskBar = stNever) or
|
||||
( (ShowInTaskBar = stDefault) and
|
||||
Assigned(Application) and (Application.TaskBarBehavior = tbSingleButton)
|
||||
) then
|
||||
UpdateShowInTaskBar;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCustomForm.WMHelp(var Message: TLMHelp);
|
||||
|
@ -416,17 +416,7 @@ begin
|
||||
end;
|
||||
WM_ACTIVATE:
|
||||
begin
|
||||
case Lo(WParam) Of
|
||||
WA_ACTIVE, WA_CLICKACTIVE:
|
||||
begin
|
||||
LMessage.Msg := LM_ACTIVATE;
|
||||
end;
|
||||
WA_INACTIVE:
|
||||
begin
|
||||
LMessage.Msg := LM_DEACTIVATE;
|
||||
// Wince => maybe cast to WM_CLOSE?
|
||||
end;
|
||||
end;
|
||||
LMessage.Msg := LM_ACTIVATE;
|
||||
end;
|
||||
WM_CAPTURECHANGED:
|
||||
begin
|
||||
|
@ -381,13 +381,14 @@ begin
|
||||
|
||||
if LockOnChange(PgtkObject(Widget),0) > 0 then Exit;
|
||||
|
||||
FillChar(Mess,SizeOf(Mess),#0);
|
||||
FillChar(Mess, SizeOf(Mess), #0);
|
||||
Mess.Msg := LM_ACTIVATE;
|
||||
Mess.Active:=true;
|
||||
Mess.Minimized:=false;
|
||||
Mess.ActiveWindow:=0;
|
||||
Mess.Active := WA_ACTIVE;
|
||||
Mess.Minimized := False;
|
||||
if GtkWidgetIsA(Widget, gtk_window_get_type) then
|
||||
Mess.ActiveWindow:=HWnd(PtrUInt(PGTKWindow(Widget)^.focus_widget));
|
||||
Mess.ActiveWindow:=HWnd(PtrUInt(PGTKWindow(Widget)^.focus_widget))
|
||||
else
|
||||
Mess.ActiveWindow := 0;
|
||||
Mess.Result := 0;
|
||||
//DebugLn('gtkactivateCB ',DbgSName(TObject(Data)));
|
||||
DeliverMessage(Data, Mess);
|
||||
@ -811,12 +812,14 @@ begin
|
||||
try
|
||||
if (Info <> nil) then
|
||||
Include(Info^.Flags, wwiActivating);
|
||||
FillChar(Mess, SizeOf(Mess), #0);
|
||||
Mess.Msg := LM_ACTIVATE;
|
||||
Mess.Active := True;
|
||||
Mess.Active := WA_ACTIVE;
|
||||
Mess.Minimized := False;
|
||||
Mess.ActiveWindow := 0;
|
||||
if GtkWidgetIsA(Widget, gtk_window_get_type) then
|
||||
Mess.ActiveWindow := HWnd(PtrUInt(PGTKWindow(Widget)^.focus_widget));
|
||||
Mess.ActiveWindow := HWnd(PtrUInt(PGTKWindow(Widget)^.focus_widget))
|
||||
else
|
||||
Mess.ActiveWindow := 0;
|
||||
Mess.Result := 0;
|
||||
DeliverMessage(Data, Mess); // send message directly (not Post)
|
||||
finally
|
||||
@ -856,7 +859,12 @@ begin
|
||||
try
|
||||
if (Info<>nil) then
|
||||
Include(Info^.Flags,wwiDeactivating);
|
||||
Mess.Msg := LM_DEACTIVATE;
|
||||
FillChar(Mess, SizeOf(Mess), #0);
|
||||
Mess.Msg := LM_ACTIVATE;
|
||||
Mess.Active := WA_INACTIVE;
|
||||
Mess.Minimized := False;
|
||||
Mess.ActiveWindow := 0;
|
||||
Mess.Result := 0;
|
||||
DeliverMessage(Data, Mess);
|
||||
finally
|
||||
if Info<>nil then
|
||||
|
@ -338,13 +338,14 @@ begin
|
||||
|
||||
if LockOnChange(PgtkObject(Widget),0) > 0 then Exit;
|
||||
|
||||
FillChar(Mess,SizeOf(Mess),#0);
|
||||
FillChar(Mess, SizeOf(Mess), #0);
|
||||
Mess.Msg := LM_ACTIVATE;
|
||||
Mess.Active:=true;
|
||||
Mess.Minimized:=false;
|
||||
Mess.ActiveWindow:=0;
|
||||
Mess.Active := WA_ACTIVE;
|
||||
Mess.Minimized := False;
|
||||
if GtkWidgetIsA(Widget, gtk_window_get_type) then
|
||||
Mess.ActiveWindow:=HWnd(PtrUInt(PGTKWindow(Widget)^.focus_widget));
|
||||
Mess.ActiveWindow := HWnd(PtrUInt(PGTKWindow(Widget)^.focus_widget))
|
||||
else
|
||||
Mess.ActiveWindow := 0;
|
||||
Mess.Result := 0;
|
||||
//DebugLn('gtkactivateCB ',DbgSName(TObject(Data)));
|
||||
DeliverMessage(Data, Mess);
|
||||
@ -673,11 +674,12 @@ begin
|
||||
if (Info <> nil) then
|
||||
Include(Info^.Flags, wwiActivating);
|
||||
Mess.Msg := LM_ACTIVATE;
|
||||
Mess.Active := True;
|
||||
Mess.Active := WA_ACTIVE;
|
||||
Mess.Minimized := False;
|
||||
Mess.ActiveWindow := 0;
|
||||
if GtkWidgetIsA(Widget, gtk_window_get_type) then
|
||||
Mess.ActiveWindow := HWnd(PtrUInt(PGTKWindow(Widget)^.focus_widget));
|
||||
Mess.ActiveWindow := HWnd(PtrUInt(PGTKWindow(Widget)^.focus_widget))
|
||||
else
|
||||
Mess.ActiveWindow := 0;
|
||||
Mess.Result := 0;
|
||||
DeliverMessage(Data, Mess); // send message directly (not Post)
|
||||
finally
|
||||
@ -713,15 +715,20 @@ begin
|
||||
ResetDefaultIMContext;
|
||||
UpdateMouseCaptureControl;
|
||||
|
||||
Info:=GetWidgetInfo(Widget,false);
|
||||
Info := GetWidgetInfo(Widget,false);
|
||||
try
|
||||
if (Info<>nil) then
|
||||
Include(Info^.Flags,wwiDeactivating);
|
||||
Mess.Msg := LM_DEACTIVATE;
|
||||
Include(Info^.Flags, wwiDeactivating);
|
||||
FillChar(Mess, SizeOf(Mess), #0);
|
||||
Mess.Msg := LM_ACTIVATE;
|
||||
Mess.Active := WA_INACTIVE;
|
||||
Mess.Minimized := False;
|
||||
Mess.ActiveWindow := 0;
|
||||
Mess.Result := 0;
|
||||
DeliverMessage(Data, Mess);
|
||||
finally
|
||||
if Info<>nil then
|
||||
Exclude(Info^.Flags,wwiDeactivating);
|
||||
Exclude(Info^.Flags, wwiDeactivating);
|
||||
end;
|
||||
|
||||
Result := CallBackDefaultReturn;
|
||||
|
@ -129,11 +129,11 @@ begin
|
||||
and GtkWidgetIsA(PGtkWidget(Widget), GTK_TYPE_CHECK_MENU_ITEM)
|
||||
and (not gtk_check_menu_item_get_active(PGTKCheckMenuItem(Widget))) then Exit;
|
||||
|
||||
FillChar(Mess,SizeOf(Mess),#0);
|
||||
FillChar(Mess, SizeOf(Mess), #0);
|
||||
Mess.Msg := LM_ACTIVATE;
|
||||
Mess.Active:=true;
|
||||
Mess.Minimized:=false;
|
||||
Mess.ActiveWindow:=0;
|
||||
Mess.Active := WA_ACTIVE;
|
||||
Mess.Minimized := False;
|
||||
Mess.ActiveWindow := 0;
|
||||
Mess.Result := 0;
|
||||
DeliverMessage(Data, Mess);
|
||||
|
||||
|
@ -6235,13 +6235,12 @@ begin
|
||||
if (vActivate = FIsActivated) or (LCLObject.Parent <> nil) then
|
||||
exit;
|
||||
|
||||
Msg.Active := vActivate;
|
||||
Msg.ActiveWindow := LCLObject.Handle;
|
||||
|
||||
Msg.Msg := LM_ACTIVATE;
|
||||
if vActivate then
|
||||
Msg.Msg := LM_ACTIVATE
|
||||
Msg.Active := WA_ACTIVE
|
||||
else
|
||||
Msg.Msg := LM_DEACTIVATE;
|
||||
Msg.Active := WA_INACTIVE;
|
||||
Msg.ActiveWindow := LCLObject.Handle;
|
||||
|
||||
DeliverMessage(Msg);
|
||||
end;
|
||||
|
@ -1087,20 +1087,9 @@ begin
|
||||
WM_ENTERIDLE: Application.Idle(False);
|
||||
WM_ACTIVATE:
|
||||
begin
|
||||
case LOWORD(WParam) of
|
||||
WA_ACTIVE, WA_CLICKACTIVE:
|
||||
begin
|
||||
LMessage.Msg := LM_ACTIVATE;
|
||||
LMessage.WParam := WParam;
|
||||
LMessage.LParam := LParam;
|
||||
end;
|
||||
WA_INACTIVE:
|
||||
begin
|
||||
LMessage.Msg := LM_DEACTIVATE;
|
||||
LMessage.WParam := WParam;
|
||||
LMessage.LParam := LParam;
|
||||
end;
|
||||
end;
|
||||
LMessage.Msg := LM_ACTIVATE;
|
||||
LMessage.WParam := WParam;
|
||||
LMessage.LParam := LParam;
|
||||
end;
|
||||
WM_IME_ENDCOMPOSITION:
|
||||
begin
|
||||
|
@ -844,7 +844,7 @@ begin
|
||||
@EnumStayOnTopRemove, LPARAM(StayOnTopWindowsInfo));
|
||||
for I := 0 to WindowInfo^.StayOnTopList.Count - 1 do
|
||||
SetWindowPos(HWND(WindowInfo^.StayOnTopList[I]), HWND_NOTOPMOST, 0, 0, 0, 0,
|
||||
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOOWNERZORDER or SWP_DRAWFRAME);
|
||||
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOOWNERZORDER {or SWP_DRAWFRAME});
|
||||
Dispose(StayOnTopWindowsInfo);
|
||||
end;
|
||||
inc(InRemoveStayOnTopFlags);
|
||||
|
@ -1034,11 +1034,12 @@ begin
|
||||
end;
|
||||
WM_ACTIVATE:
|
||||
begin
|
||||
LMessage.Msg := LM_ACTIVATE;
|
||||
LMessage.WParam := WParam;
|
||||
LMessage.LParam := LParam;
|
||||
case Lo(WParam) Of
|
||||
WA_ACTIVE, WA_CLICKACTIVE:
|
||||
begin
|
||||
LMessage.Msg := LM_ACTIVATE;
|
||||
|
||||
// Upon activation of a form, rebuild it's menu
|
||||
if lWinControl is TCustomForm then
|
||||
begin
|
||||
@ -1056,11 +1057,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
WA_INACTIVE:
|
||||
begin
|
||||
LMessage.Msg := LM_DEACTIVATE;
|
||||
// Wince => maybe cast to WM_CLOSE?
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
WM_CAPTURECHANGED:
|
||||
|
@ -37,7 +37,7 @@ uses
|
||||
function DeliverMessage(const Target: TObject; var AMessage): PtrInt;
|
||||
function SendSimpleMessage(const Target: TControl; Msg: Cardinal): PtrInt;
|
||||
|
||||
function LCLSendActivateMsg(const Target: TControl; Active: Boolean; Minimized: Boolean; ActiveWindow: HWND = 0): PtrInt;
|
||||
function LCLSendActivateMsg(const Target: TControl; Active: Word; Minimized: Boolean; ActiveWindow: HWND = 0): PtrInt;
|
||||
function LCLSendSetFocusMsg(const Target: TControl): PtrInt;
|
||||
function LCLSendKillFocusMsg(const Target: TControl): PtrInt;
|
||||
function LCLSendShowWindowMsg(const Target: TControl; Show: Boolean; Status: LPARAM = 0): PtrInt;
|
||||
@ -75,7 +75,6 @@ function LCLSendTimerMsg(const Target: TControl; TimerID: WParam; TimerProc: LPa
|
||||
function LCLSendExitMsg(const Target: TControl): PtrInt;
|
||||
function LCLSendCloseQueryMsg(const Target: TControl): PtrInt;
|
||||
function LCLSendDragStartMsg(const Target: TControl): PtrInt;
|
||||
function LCLSendDeactivateStartMsg(const Target: TControl): PtrInt;
|
||||
function LCLSendMonthChangedMsg(const Target: TControl): PtrInt;
|
||||
function LCLSendYearChangedMsg(const Target: TControl): PtrInt;
|
||||
function LCLSendDayChangedMsg(const Target: TControl): PtrInt;
|
||||
@ -160,17 +159,16 @@ end;
|
||||
* active window *
|
||||
* *
|
||||
******************************************************************************}
|
||||
function LCLSendActivateMsg(const Target: TControl; Active: Boolean; Minimized: Boolean; ActiveWindow: HWND = 0): PtrInt;
|
||||
function LCLSendActivateMsg(const Target: TControl; Active: Word; Minimized: Boolean; ActiveWindow: HWND = 0): PtrInt;
|
||||
var
|
||||
Mess: TLMActivate;
|
||||
begin
|
||||
Result := 0;
|
||||
|
||||
FillChar(Mess,SizeOf(Mess),0);
|
||||
FillChar(Mess, SizeOf(Mess), 0);
|
||||
Mess.Msg := LM_ACTIVATE;
|
||||
Mess.Active:=Active;
|
||||
Mess.Minimized:=Minimized;
|
||||
Mess.ActiveWindow:=ActiveWindow;
|
||||
Mess.Active := Active;
|
||||
Mess.Minimized := Minimized;
|
||||
Mess.ActiveWindow := ActiveWindow;
|
||||
Mess.Result := 0;
|
||||
DeliverMessage(Target, Mess);
|
||||
Result := Mess.Result;
|
||||
@ -979,22 +977,6 @@ begin
|
||||
Result := SendSimpleMessage(Target, LM_DRAGSTART);
|
||||
end;
|
||||
|
||||
{******************************************************************************
|
||||
* *
|
||||
* LCLSendDeactivateStartMsg *
|
||||
* *
|
||||
* Returns : 0 to accept the message, non-zero to reject the message *
|
||||
* *
|
||||
* Params *
|
||||
* *
|
||||
* Target : The Control that will recieve the message LM_DEACTIVATE *
|
||||
* *
|
||||
******************************************************************************}
|
||||
function LCLSendDeactivateStartMsg(const Target: TControl): PtrInt;
|
||||
begin
|
||||
Result := SendSimpleMessage(Target, LM_DEACTIVATE);
|
||||
end;
|
||||
|
||||
{******************************************************************************
|
||||
* *
|
||||
* LCLSendMonthChangedMsg *
|
||||
|
@ -72,7 +72,6 @@ const
|
||||
LM_EXIT = LM_LCL + 60;
|
||||
LM_CLOSEQUERY = LM_LCL + 62;
|
||||
LM_DRAGSTART = LM_LCL + 63;
|
||||
LM_DEACTIVATE = LM_LCL + 64; //used when a form is no longer in front
|
||||
LM_QUIT = LM_LCL + 65;
|
||||
LM_MONTHCHANGED = LM_LCL + 66;
|
||||
LM_YEARCHANGED = LM_LCL + 67;
|
||||
@ -510,17 +509,24 @@ type
|
||||
Result: LRESULT);
|
||||
end;
|
||||
|
||||
// Active state
|
||||
const
|
||||
WA_INACTIVE = 0;
|
||||
WA_ACTIVE = 1;
|
||||
WA_CLICKACTIVE = 2;
|
||||
|
||||
type
|
||||
TLMActivate = record
|
||||
Msg: Cardinal;
|
||||
{$ifdef cpu64}
|
||||
UnusedMsg: Cardinal;
|
||||
{$endif}
|
||||
{$IFDEF FPC_LITTLE_ENDIAN}
|
||||
Active: WordBool;
|
||||
Active: Word;
|
||||
Minimized: WordBool;
|
||||
{$ELSE}
|
||||
Minimized: WordBool;
|
||||
Active: WordBool;
|
||||
Active: Word;
|
||||
{$ENDIF}
|
||||
{$ifdef cpu64}
|
||||
Unused : Longint;
|
||||
@ -1011,7 +1017,6 @@ begin
|
||||
LM_EXIT :Result:='LM_EXIT';
|
||||
LM_CLOSEQUERY :Result:='LM_CLOSEQUERY';
|
||||
LM_DRAGSTART :Result:='LM_DRAGSTART';
|
||||
LM_DEACTIVATE :Result:='LM_DEACTIVATE';
|
||||
|
||||
LM_MONTHCHANGED :Result:='LM_MONTHCHANGED';
|
||||
LM_YEARCHANGED :Result:='LM_YEARCHANGED';
|
||||
|
Loading…
Reference in New Issue
Block a user