mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-20 11:19:26 +02:00
gtk2 changes for pixmap, getcursorpos, mouse events workaround
git-svn-id: trunk@4573 -
This commit is contained in:
parent
e6d462d8dd
commit
bf84728787
@ -1582,8 +1582,10 @@ begin
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
p, Filename);
|
p, Filename);
|
||||||
GdiObject^.GDIBitmapType:=gbPixmap;
|
GdiObject^.GDIBitmapType:=gbPixmap;
|
||||||
gdk_window_get_geometry(GdiObject^.GDIPixmapObject,
|
// gdk_window_get_geometry(GdiObject^.GDIPixmapObject,
|
||||||
nil, nil, @Width, @Height, @Depth);
|
// nil, nil, @Width, @Height, @Depth);
|
||||||
|
gdk_drawable_get_size(GdiObject^.GDIPixmapObject,@Width, @Height);
|
||||||
|
Depth := gdk_drawable_get_depth(GdiObject^.GDIPixmapObject);
|
||||||
|
|
||||||
If GdiObject^.Visual <> nil then
|
If GdiObject^.Visual <> nil then
|
||||||
GDK_Visual_UnRef(GdiObject^.Visual);
|
GDK_Visual_UnRef(GdiObject^.Visual);
|
||||||
@ -1637,8 +1639,10 @@ var
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
0);
|
0);
|
||||||
|
|
||||||
gdk_window_get_geometry(PGDIObject(TMP)^.GDIPixmapObject,
|
// gdk_window_get_geometry(PGDIObject(TMP)^.GDIPixmapObject,
|
||||||
nil, nil, nil, nil, @Depth);
|
// nil, nil, nil, nil, @Depth);
|
||||||
|
|
||||||
|
Depth := gdk_drawable_get_depth(PGDIObject(TMP)^.GDIPixmapObject);
|
||||||
|
|
||||||
If PGDIObject(TMP)^.Visual <> nil then
|
If PGDIObject(TMP)^.Visual <> nil then
|
||||||
GDK_Visual_UnRef(PGDIObject(TMP)^.Visual);
|
GDK_Visual_UnRef(PGDIObject(TMP)^.Visual);
|
||||||
@ -1747,9 +1751,10 @@ Type
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
0);
|
0);
|
||||||
|
|
||||||
gdk_window_get_geometry(GDIPixmapObject,
|
// gdk_window_get_geometry(GDIPixmapObject,
|
||||||
nil, nil, nil, nil, @Depth);
|
// nil, nil, nil, nil, @Depth);
|
||||||
|
|
||||||
|
Depth := gdk_drawable_get_depth(GDIPixmapObject);
|
||||||
If Visual <> nil then
|
If Visual <> nil then
|
||||||
GDK_Visual_UnRef(Visual);
|
GDK_Visual_UnRef(Visual);
|
||||||
|
|
||||||
@ -2620,7 +2625,7 @@ begin
|
|||||||
Begin
|
Begin
|
||||||
if (TButton(Sender).Default)
|
if (TButton(Sender).Default)
|
||||||
and (GTK_WIDGET_CAN_DEFAULT(pgtkwidget(handle))) then
|
and (GTK_WIDGET_CAN_DEFAULT(pgtkwidget(handle))) then
|
||||||
gtk_widget_grab_default(pgtkwidget(handle))
|
//gtk_widget_grab_default(pgtkwidget(handle))
|
||||||
else begin
|
else begin
|
||||||
{writeln('LM_BTNDEFAULT_CHANGED ',TButton(Sender).Name,':',Sender.ClassName,' widget can not grab default ',
|
{writeln('LM_BTNDEFAULT_CHANGED ',TButton(Sender).Name,':',Sender.ClassName,' widget can not grab default ',
|
||||||
' visible=',GTK_WIDGET_VISIBLE(PGtkWidget(Handle)),
|
' visible=',GTK_WIDGET_VISIBLE(PGtkWidget(Handle)),
|
||||||
@ -3926,7 +3931,7 @@ begin
|
|||||||
LM_PAINT :
|
LM_PAINT :
|
||||||
begin
|
begin
|
||||||
ConnectSenderSignalAfter(gFixed, 'expose-event', @GTKExposeEventAfter);
|
ConnectSenderSignalAfter(gFixed, 'expose-event', @GTKExposeEventAfter);
|
||||||
{$IFNDEF Gtk2}
|
{$IFDEF Gtk1}
|
||||||
ConnectSenderSignalAfter(gFixed, 'draw', @GTKDrawAfter);
|
ConnectSenderSignalAfter(gFixed, 'draw', @GTKDrawAfter);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
ConnectSenderSignal(gFixed,'style-set', @GTKStyleChanged);
|
ConnectSenderSignal(gFixed,'style-set', @GTKStyleChanged);
|
||||||
@ -3969,6 +3974,7 @@ begin
|
|||||||
ConnectSenderSignal(PgtkObject(PgtkCombo(gObject)^.entry),
|
ConnectSenderSignal(PgtkObject(PgtkCombo(gObject)^.entry),
|
||||||
'key-release-event', @GTKKeyUpDown, GDK_KEY_RELEASE_MASK);
|
'key-release-event', @GTKKeyUpDown, GDK_KEY_RELEASE_MASK);
|
||||||
end
|
end
|
||||||
|
{$IfDef GTK1}
|
||||||
else if (Sender is TCustomForm) then begin
|
else if (Sender is TCustomForm) then begin
|
||||||
ConnectSenderSignal(gObject, 'key-press-event', @GTKKeyUpDown,
|
ConnectSenderSignal(gObject, 'key-press-event', @GTKKeyUpDown,
|
||||||
GDK_KEY_PRESS_MASK);
|
GDK_KEY_PRESS_MASK);
|
||||||
@ -3979,6 +3985,7 @@ begin
|
|||||||
GDK_KEY_PRESS_MASK);
|
GDK_KEY_PRESS_MASK);
|
||||||
ConnectSenderSignal(gCore, 'key-release-event', @GTKKeyUpDown,
|
ConnectSenderSignal(gCore, 'key-release-event', @GTKKeyUpDown,
|
||||||
GDK_KEY_RELEASE_MASK);
|
GDK_KEY_RELEASE_MASK);
|
||||||
|
{$EndIf}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
LM_MONTHCHANGED : //calendar
|
LM_MONTHCHANGED : //calendar
|
||||||
@ -4024,10 +4031,12 @@ begin
|
|||||||
@GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK);
|
@GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK);
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
|
{$IfDef GTK1}
|
||||||
ConnectSenderSignal(gFixed, 'motion-notify-event', @GTKMotionNotify,
|
ConnectSenderSignal(gFixed, 'motion-notify-event', @GTKMotionNotify,
|
||||||
GDK_POINTER_MOTION_MASK);
|
GDK_POINTER_MOTION_MASK);
|
||||||
ConnectSenderSignalAfter(gFixed, 'motion-notify-event',
|
ConnectSenderSignalAfter(gFixed, 'motion-notify-event',
|
||||||
@GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK);
|
@GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK);
|
||||||
|
{$EndIf}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -4053,10 +4062,12 @@ begin
|
|||||||
// 'button-press-event', @gtkMouseBtnPress, GDK_BUTTON_PRESS_MASK);
|
// 'button-press-event', @gtkMouseBtnPress, GDK_BUTTON_PRESS_MASK);
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
|
{$IfDef GTK1}
|
||||||
ConnectSenderSignal(gFixed, 'button-press-event', @gtkMouseBtnPress,
|
ConnectSenderSignal(gFixed, 'button-press-event', @gtkMouseBtnPress,
|
||||||
GDK_BUTTON_PRESS_MASK);
|
GDK_BUTTON_PRESS_MASK);
|
||||||
ConnectSenderSignalAfter(gFixed, 'button-press-event',
|
ConnectSenderSignalAfter(gFixed, 'button-press-event',
|
||||||
@gtkMouseBtnPressAfter, GDK_BUTTON_PRESS_MASK);
|
@gtkMouseBtnPressAfter, GDK_BUTTON_PRESS_MASK);
|
||||||
|
{$EndIf}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -4083,10 +4094,12 @@ begin
|
|||||||
// GDK_BUTTON_RELEASE_MASK);
|
// GDK_BUTTON_RELEASE_MASK);
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
|
{$IfDef GTK1}
|
||||||
ConnectSenderSignal(gFixed, 'button-release-event', @gtkMouseBtnRelease,
|
ConnectSenderSignal(gFixed, 'button-release-event', @gtkMouseBtnRelease,
|
||||||
GDK_BUTTON_RELEASE_MASK);
|
GDK_BUTTON_RELEASE_MASK);
|
||||||
ConnectSenderSignalAfter(gFixed, 'button-release-event',
|
ConnectSenderSignalAfter(gFixed, 'button-release-event',
|
||||||
@gtkMouseBtnReleaseAfter,GDK_BUTTON_RELEASE_MASK);
|
@gtkMouseBtnReleaseAfter,GDK_BUTTON_RELEASE_MASK);
|
||||||
|
{$EndIf}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -8151,6 +8164,9 @@ end;
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.408 2003/09/06 17:24:52 ajgenius
|
||||||
|
gtk2 changes for pixmap, getcursorpos, mouse events workaround
|
||||||
|
|
||||||
Revision 1.407 2003/09/05 19:29:38 mattias
|
Revision 1.407 2003/09/05 19:29:38 mattias
|
||||||
Success: The first gtk2 application ran without error
|
Success: The first gtk2 application ran without error
|
||||||
|
|
||||||
|
@ -106,6 +106,17 @@ Function gdk_region_xor(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
|
|||||||
begin
|
begin
|
||||||
result := gdk_regions_xor(source1, source2);
|
result := gdk_regions_xor(source1, source2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Function gdk_drawable_get_depth(Drawable : PGDKDrawable) : gint;
|
||||||
|
begin
|
||||||
|
gdk_window_get_geometry(Drawable, nil, nil, nil, nil, @result);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure gdk_drawable_get_size(Drawable : PGDKDrawable; Width, Height : PGInt);
|
||||||
|
begin
|
||||||
|
gdk_window_get_geometry(Drawable, nil, nil, Width, Height, nil);
|
||||||
|
end;
|
||||||
|
|
||||||
{$EndIf}
|
{$EndIf}
|
||||||
|
|
||||||
{$Ifdef GTK2}
|
{$Ifdef GTK2}
|
||||||
@ -4523,6 +4534,9 @@ end;
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.197 2003/09/06 17:24:52 ajgenius
|
||||||
|
gtk2 changes for pixmap, getcursorpos, mouse events workaround
|
||||||
|
|
||||||
Revision 1.196 2003/09/05 19:29:38 mattias
|
Revision 1.196 2003/09/05 19:29:38 mattias
|
||||||
Success: The first gtk2 application ran without error
|
Success: The first gtk2 application ran without error
|
||||||
|
|
||||||
|
@ -497,6 +497,9 @@ function gtk_widget_get_ythickness(Style : PGTKWidget) : gint; overload;
|
|||||||
Function gdk_region_union(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
|
Function gdk_region_union(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
|
||||||
Function gdk_region_subtract(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
|
Function gdk_region_subtract(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
|
||||||
Function gdk_region_xor(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
|
Function gdk_region_xor(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
|
||||||
|
|
||||||
|
Function gdk_drawable_get_depth(Drawable : PGDKDrawable) : gint;
|
||||||
|
Procedure gdk_drawable_get_size(Drawable : PGDKDrawable; Width, Height : PGInt);
|
||||||
{$EndIF}
|
{$EndIF}
|
||||||
|
|
||||||
{$Ifdef GTK2}
|
{$Ifdef GTK2}
|
||||||
|
@ -1695,8 +1695,8 @@ begin
|
|||||||
gdk_pixmap_colormap_create_from_xpm_d(Window,Colormap,
|
gdk_pixmap_colormap_create_from_xpm_d(Window,Colormap,
|
||||||
{$IfDef GTK1}@{$EndIf}(GdiObject^.GDIBitmapMaskObject), p, Data);
|
{$IfDef GTK1}@{$EndIf}(GdiObject^.GDIBitmapMaskObject), p, Data);
|
||||||
|
|
||||||
gdk_window_get_geometry(GdiObject^.GDIPixmapObject, nil, nil, nil, nil, @Depth);
|
// gdk_window_get_geometry(GdiObject^.GDIPixmapObject, nil, nil, nil, nil, @Depth);
|
||||||
|
Depth := gdk_drawable_get_depth(GdiObject^.GDIPixmapObject);
|
||||||
If GdiObject^.Visual <> nil then
|
If GdiObject^.Visual <> nil then
|
||||||
GDK_Visual_UnRef(GdiObject^.Visual);
|
GDK_Visual_UnRef(GdiObject^.Visual);
|
||||||
|
|
||||||
@ -3757,8 +3757,6 @@ var
|
|||||||
xmask: Cardinal;
|
xmask: Cardinal;
|
||||||
TopList, List: PGList;
|
TopList, List: PGList;
|
||||||
begin
|
begin
|
||||||
// TODO: GTK2 native implementation with gdk_display_get_pointer
|
|
||||||
|
|
||||||
Result := False;
|
Result := False;
|
||||||
|
|
||||||
TopList := gdk_window_get_toplevels;
|
TopList := gdk_window_get_toplevels;
|
||||||
@ -3782,7 +3780,6 @@ begin
|
|||||||
then g_list_free(TopList);
|
then g_list_free(TopList);
|
||||||
{$Else}
|
{$Else}
|
||||||
begin
|
begin
|
||||||
result := False;
|
|
||||||
{$EndIf}
|
{$EndIf}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3848,7 +3845,8 @@ begin
|
|||||||
If Drawable = nil then
|
If Drawable = nil then
|
||||||
Result := GDK_Visual_Get_System^.Depth
|
Result := GDK_Visual_Get_System^.Depth
|
||||||
else
|
else
|
||||||
gdk_window_get_geometry(Drawable, nil, nil, nil, nil, @Result);
|
//gdk_window_get_geometry(Drawable, nil, nil, nil, nil, @Result);
|
||||||
|
Result := gdk_drawable_get_depth(Drawable);
|
||||||
|
|
||||||
PLANES : { Number of planes }
|
PLANES : { Number of planes }
|
||||||
// ToDo
|
// ToDo
|
||||||
@ -4129,8 +4127,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
gbPixmap:
|
gbPixmap:
|
||||||
If GDIPixmapObject <> nil then begin
|
If GDIPixmapObject <> nil then begin
|
||||||
gdk_window_get_geometry(GDIPixmapObject, nil, nil,
|
//gdk_window_get_geometry(GDIPixmapObject, nil, nil,
|
||||||
@biWidth, @biHeight, @biBitCount);
|
// @biWidth, @biHeight, @biBitCount);
|
||||||
|
biBitCount := gdk_drawable_get_depth(GDIPixmapObject);
|
||||||
|
gdk_drawable_get_size(GDIPixmapObject,@biWidth, @biHeight);
|
||||||
end;
|
end;
|
||||||
gbImage :
|
gbImage :
|
||||||
If GDI_RGBImageObject <> nil then
|
If GDI_RGBImageObject <> nil then
|
||||||
@ -7409,7 +7409,7 @@ begin
|
|||||||
NewFocusWidget:=Widget;
|
NewFocusWidget:=Widget;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if not gtk_widget_has_focus(NewFocusWidget) then begin
|
if (NewFocusWidget <> nil) and not gtk_widget_has_focus(NewFocusWidget) then begin
|
||||||
// grab the focus to the parent window
|
// grab the focus to the parent window
|
||||||
if (Screen<>nil)
|
if (Screen<>nil)
|
||||||
and (Screen.FocusedForm<>nil)
|
and (Screen.FocusedForm<>nil)
|
||||||
@ -8711,6 +8711,9 @@ end;
|
|||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.274 2003/09/06 17:24:52 ajgenius
|
||||||
|
gtk2 changes for pixmap, getcursorpos, mouse events workaround
|
||||||
|
|
||||||
Revision 1.273 2003/09/05 19:29:38 mattias
|
Revision 1.273 2003/09/05 19:29:38 mattias
|
||||||
Success: The first gtk2 application ran without error
|
Success: The first gtk2 application ran without error
|
||||||
|
|
||||||
|
@ -31,20 +31,79 @@ interface
|
|||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, gdk2pixbuf, gtk2, gdk2, glib2, gtkInt;
|
Classes, SysUtils,
|
||||||
|
{$IfNDef GTK2_2}
|
||||||
|
X, XLib, XUtil,
|
||||||
|
{$EndIf}
|
||||||
|
gdk2pixbuf, gtk2, gdk2, glib2, gtkInt;
|
||||||
|
|
||||||
type
|
type
|
||||||
TGtk2Object = class(TGtkObject)
|
TGtk2Object = class(TGtkObject)
|
||||||
|
public
|
||||||
|
function GetCursorPos(var lpPoint: TPoint ): Boolean; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{$IfDef GTK2_2}//we need a GTK2_2 FLAG somehow
|
||||||
|
Procedure gdk_display_get_pointer(display : PGdkDisplay; screen :PGdkScreen; x :Pgint; y : Pgint; mask : PGdkModifierType); cdecl; external gdklib;
|
||||||
|
function gdk_display_get_default:PGdkDisplay; cdecl; external gdklib;
|
||||||
|
{$Else}
|
||||||
|
Function gdk_x11_drawable_get_xdisplay(drawable : PGdkDrawable) : PDisplay; cdecl; external gdklib;
|
||||||
|
Function gdk_x11_drawable_get_xid(drawable : PGdkDrawable) : Integer; cdecl; external gdklib;
|
||||||
|
{$EndIf}
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
{------------------------------------------------------------------------------
|
||||||
|
Function: GetCursorPos
|
||||||
|
Params: lpPoint: The cursorposition
|
||||||
|
Returns: True if succesful
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------}
|
||||||
|
function Tgtk2Object.GetCursorPos(var lpPoint: TPoint ): Boolean;
|
||||||
|
{$IfnDef GTK2_2} //we need a GTK2_2 FLAG somehow
|
||||||
|
var
|
||||||
|
root, child: pointer;
|
||||||
|
winx, winy: Integer;
|
||||||
|
xmask: Cardinal;
|
||||||
|
TopList, List: PGList;
|
||||||
|
{$EndIf}
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
{$IfDef GTK2_2} //we need a GTK2_2 FLAG somehow
|
||||||
|
gdk_display_get_pointer(gdk_display_get_default(), nil, @lpPoint.X, @lpPoint.Y, nil);
|
||||||
|
Result := True;
|
||||||
|
{$Else}
|
||||||
|
TopList := gdk_window_get_toplevels;
|
||||||
|
List := TopList;
|
||||||
|
while List <> nil do
|
||||||
|
begin
|
||||||
|
if (List^.Data <> nil)
|
||||||
|
and gdk_window_is_visible(List^.Data)
|
||||||
|
then begin
|
||||||
|
XQueryPointer(gdk_x11_drawable_get_xdisplay (List^.Data),
|
||||||
|
gdk_x11_drawable_get_xid(List^.Data),
|
||||||
|
@root, @child, @lpPoint.X, @lpPoint.Y, @winx, @winy, @xmask);
|
||||||
|
|
||||||
|
Result := True;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
List := g_list_next(List);
|
||||||
|
end;
|
||||||
|
|
||||||
|
if TopList <> nil
|
||||||
|
then g_list_free(TopList);
|
||||||
|
{$EndIf}
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.3 2003/09/06 17:24:52 ajgenius
|
||||||
|
gtk2 changes for pixmap, getcursorpos, mouse events workaround
|
||||||
|
|
||||||
Revision 1.2 2003/08/27 20:55:51 mattias
|
Revision 1.2 2003/08/27 20:55:51 mattias
|
||||||
fixed updating codetools on changing pkg output dir
|
fixed updating codetools on changing pkg output dir
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user