mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-09 14:56:24 +02:00
MG: fixed eventmask for realized windows
git-svn-id: trunk@1788 -
This commit is contained in:
parent
c17a79032a
commit
37fdb2af44
@ -107,10 +107,11 @@ end;
|
||||
-------------------------------------------------------------------------------}
|
||||
function GTKRealizeAfterCB(Widget: PGtkWidget; Data: Pointer): GBoolean; cdecl;
|
||||
var
|
||||
WinWidgetInfo: PWinWidgetInfo;
|
||||
WinWidgetInfo, ClientWidgetInfo: PWinWidgetInfo;
|
||||
HiddenLCLObject, LCLObject: TObject;
|
||||
NewEventMask: TGdkEventMask;
|
||||
TheWinControl: TWinControl;
|
||||
ClientWidget: PGtkWidget;
|
||||
begin
|
||||
EventTrace('realizeafter', nil);
|
||||
|
||||
@ -121,6 +122,7 @@ begin
|
||||
WinWidgetInfo:=GetWidgetInfo(Widget,true);
|
||||
LCLObject:=GetLCLObject(Widget);
|
||||
if (LCLObject<>nil) and (WinWidgetInfo<>nil) then begin
|
||||
ClientWidget:=GetFixedWidget(Widget);
|
||||
if (LCLObject is TWinControl) then
|
||||
TheWinControl:=TWinControl(LCLObject)
|
||||
else
|
||||
@ -128,11 +130,23 @@ begin
|
||||
|
||||
// set extra signal masks after the widget window is created
|
||||
// define extra events we're interrested in
|
||||
if (TheWinControl=nil)
|
||||
or (csDesigning in TheWinControl.ComponentState) then begin
|
||||
//write('GTKRealizeAfterCB ');
|
||||
//if TheWinControl<>nil then write(' ',TheWinControl.Name,':',TheWinControl.ClassName,' ',HexStr(Cardinal(TheWinControl.Handle),8));
|
||||
//writeln(' Widget=',HexStr(Cardinal(Widget),8),' Fixed=',HexStr(Cardinal(GetFixedWidget(Widget)),8),' Main=',HexStr(Cardinal(GetMainWidget(Widget)),8));
|
||||
if (TheWinControl<>nil)
|
||||
and (not (csDesigning in TheWinControl.ComponentState)) then begin
|
||||
NewEventMask:=gdk_window_get_events(Widget^.Window)
|
||||
or WinWidgetInfo^.EventMask;
|
||||
gdk_window_set_events(Widget^.Window,NewEventMask);
|
||||
if (ClientWidget<>nil) and (ClientWidget^.Window<>nil) then begin
|
||||
ClientWidgetInfo:=GetWidgetInfo(ClientWidget,false);
|
||||
if ClientWidgetInfo<>nil then begin
|
||||
NewEventMask:=gdk_window_get_events(ClientWidget^.Window)
|
||||
or ClientWidgetInfo^.EventMask;
|
||||
gdk_window_set_events(ClientWidget^.Window,NewEventMask);
|
||||
end;
|
||||
end;
|
||||
//writeln('BBB1 ',HexStr(Cardinal(NewEventMask),8),' ',HexStr(Cardinal(gdk_window_get_events(Widget^.Window)),8));
|
||||
end else begin
|
||||
//SetEventMaskForDesignMode(Widget^.Window);
|
||||
end;
|
||||
@ -576,13 +590,14 @@ var
|
||||
//ShowDebugging : Boolean;
|
||||
//parWindow : PgdkWindow; //the Parent's GDKWindow
|
||||
HiddenLCLObject: TObject;
|
||||
{ $DEFINE VerboseMouseBugfix}
|
||||
begin
|
||||
Result:=true;
|
||||
|
||||
HiddenLCLObject:=GetHiddenLCLObject(Widget);
|
||||
if HiddenLCLObject<>nil then begin
|
||||
writeln('DDD1 Hidden=',HexStr(Cardinal(Data),8),' ',HexStr(Cardinal(HiddenLCLObject),8));
|
||||
writeln(' ',TControl(Data).Name,':',TControl(Data).ClassName);
|
||||
writeln('DDD1 Hidden=',HexStr(Cardinal(Data),8),' ',HexStr(Cardinal(HiddenLCLObject),8));
|
||||
writeln(' ',TControl(Data).Name,':',TControl(Data).ClassName);
|
||||
// this is a hidden widget (= a child widget of a lcl widget)
|
||||
if not (csDesigning in TControl(HiddenLCLObject).ComponentState) then begin
|
||||
// if not in design mode, hidden widgets are controlled by the gtk ...
|
||||
@ -595,6 +610,8 @@ writeln(' ',TControl(Data).Name,':',TControl(Data).ClassName);
|
||||
TControl(Data).Name,':',TObject(Data).ClassName,' ',
|
||||
Trunc(Event^.X),',',Trunc(Event^.Y));
|
||||
{$ENDIF}
|
||||
//writeln('Widget=',HexStr(Cardinal(Widget),8),
|
||||
//' EventMask=',HexStr(Cardinal(gdk_window_get_events(Widget^.Window)),8));
|
||||
|
||||
EventTrace('Mouse button Press', data);
|
||||
Assert(False, Format('Trace:[gtkMouseBtnPress] ', []));
|
||||
@ -800,6 +817,12 @@ var
|
||||
begin
|
||||
Result:=true;
|
||||
|
||||
{$IFDEF VerboseMouseBugfix}
|
||||
writeln('[gtkMouseBtnRelease] A ',
|
||||
TControl(Data).Name,':',TObject(Data).ClassName,' ',
|
||||
Trunc(Event^.X),',',Trunc(Event^.Y));
|
||||
{$ENDIF}
|
||||
|
||||
HiddenLCLObject:=GetHiddenLCLObject(Widget);
|
||||
if HiddenLCLObject<>nil then begin
|
||||
// this is a hidden widget (= a child widget of a lcl widget)
|
||||
@ -2133,6 +2156,9 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.90 2002/07/20 13:47:03 lazarus
|
||||
MG: fixed eventmask for realized windows
|
||||
|
||||
Revision 1.89 2002/06/26 16:15:56 lazarus
|
||||
MG: fixed missing declaration
|
||||
|
||||
|
@ -4123,26 +4123,38 @@ end;
|
||||
|
||||
------------------------------------------------------------------------------}
|
||||
function TgtkObject.SetCapture(Value: Longint): Longint;
|
||||
//var
|
||||
// Sender : TObject;
|
||||
{$IFDEF VerboseMouseCapture}
|
||||
var
|
||||
Sender : TObject;
|
||||
{$ENDIF}
|
||||
begin
|
||||
Assert(False, Format('Trace:> [TgtkObject.SetCapture] 0x%x', [Value]));
|
||||
|
||||
{$IFDEF VerboseMouseCapture}
|
||||
if Value<>0 then
|
||||
Sender:=GetLCLObject(Pointer(Value))
|
||||
else
|
||||
Sender:=nil;
|
||||
write('TgtkObject.SetCapture ',HexStr(Cardinal(Value),8),' ');
|
||||
if Sender=nil then
|
||||
writeln('Sender=nil')
|
||||
else
|
||||
writeln('Sender=',TControl(Sender).Name,':',Sender.ClassName);
|
||||
{$ENDIF}
|
||||
|
||||
//CaptureHandle is defined in gtkint.pp pivate var definition.
|
||||
|
||||
//MWE: there are some problems with grabbing the pointer and tabs
|
||||
// so back to gtk_grab
|
||||
|
||||
if MCaptureHandle <> 0
|
||||
//then gdk_pointer_ungrab(0);
|
||||
then gtk_grab_remove(pgtkwidget(MCaptureHandle));
|
||||
if MCaptureHandle <> 0 then
|
||||
//gdk_pointer_ungrab(0);
|
||||
gtk_grab_remove(pgtkwidget(MCaptureHandle));
|
||||
|
||||
//
|
||||
Result := MCaptureHandle;
|
||||
MCaptureHandle := Value;
|
||||
|
||||
if MCaptureHandle <> 0
|
||||
then begin
|
||||
if MCaptureHandle <> 0 then begin
|
||||
//WriteLN(Format('[TgtkObject.SetCapture] Current widget 0x%p', [gtk_grab_get_current]));
|
||||
gtk_grab_add(Pointer(MCaptureHandle));
|
||||
//WriteLN(Format('[TgtkObject.SetCapture] handle: 0x%p gtk: 0x%p', [Pointer(MCaptureHandle), gtk_grab_get_current]));
|
||||
@ -4812,6 +4824,9 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.82 2002/07/20 13:47:04 lazarus
|
||||
MG: fixed eventmask for realized windows
|
||||
|
||||
Revision 1.81 2002/07/09 17:18:23 lazarus
|
||||
MG: fixed parser for external vars
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user