diff --git a/lcl/interfaces/gtk/gtkobject.inc b/lcl/interfaces/gtk/gtkobject.inc index b0fd1f39d7..009a84d8bc 100644 --- a/lcl/interfaces/gtk/gtkobject.inc +++ b/lcl/interfaces/gtk/gtkobject.inc @@ -1582,9 +1582,11 @@ begin {$ENDIF} p, Filename); GdiObject^.GDIBitmapType:=gbPixmap; - gdk_window_get_geometry(GdiObject^.GDIPixmapObject, - nil, nil, @Width, @Height, @Depth); - +// gdk_window_get_geometry(GdiObject^.GDIPixmapObject, +// 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 GDK_Visual_UnRef(GdiObject^.Visual); @@ -1637,8 +1639,10 @@ var {$ENDIF} 0); - gdk_window_get_geometry(PGDIObject(TMP)^.GDIPixmapObject, - nil, nil, nil, nil, @Depth); +// gdk_window_get_geometry(PGDIObject(TMP)^.GDIPixmapObject, +// nil, nil, nil, nil, @Depth); + + Depth := gdk_drawable_get_depth(PGDIObject(TMP)^.GDIPixmapObject); If PGDIObject(TMP)^.Visual <> nil then GDK_Visual_UnRef(PGDIObject(TMP)^.Visual); @@ -1747,9 +1751,10 @@ Type {$ENDIF} 0); - gdk_window_get_geometry(GDIPixmapObject, - nil, nil, nil, nil, @Depth); +// gdk_window_get_geometry(GDIPixmapObject, +// nil, nil, nil, nil, @Depth); + Depth := gdk_drawable_get_depth(GDIPixmapObject); If Visual <> nil then GDK_Visual_UnRef(Visual); @@ -2620,7 +2625,7 @@ begin Begin if (TButton(Sender).Default) and (GTK_WIDGET_CAN_DEFAULT(pgtkwidget(handle))) then - gtk_widget_grab_default(pgtkwidget(handle)) + //gtk_widget_grab_default(pgtkwidget(handle)) else begin {writeln('LM_BTNDEFAULT_CHANGED ',TButton(Sender).Name,':',Sender.ClassName,' widget can not grab default ', ' visible=',GTK_WIDGET_VISIBLE(PGtkWidget(Handle)), @@ -3926,7 +3931,7 @@ begin LM_PAINT : begin ConnectSenderSignalAfter(gFixed, 'expose-event', @GTKExposeEventAfter); - {$IFNDEF Gtk2} + {$IFDEF Gtk1} ConnectSenderSignalAfter(gFixed, 'draw', @GTKDrawAfter); {$ENDIF} ConnectSenderSignal(gFixed,'style-set', @GTKStyleChanged); @@ -3969,6 +3974,7 @@ begin ConnectSenderSignal(PgtkObject(PgtkCombo(gObject)^.entry), 'key-release-event', @GTKKeyUpDown, GDK_KEY_RELEASE_MASK); end + {$IfDef GTK1} else if (Sender is TCustomForm) then begin ConnectSenderSignal(gObject, 'key-press-event', @GTKKeyUpDown, GDK_KEY_PRESS_MASK); @@ -3979,6 +3985,7 @@ begin GDK_KEY_PRESS_MASK); ConnectSenderSignal(gCore, 'key-release-event', @GTKKeyUpDown, GDK_KEY_RELEASE_MASK); + {$EndIf} end; LM_MONTHCHANGED : //calendar @@ -4024,10 +4031,12 @@ begin @GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK); end else begin + {$IfDef GTK1} ConnectSenderSignal(gFixed, 'motion-notify-event', @GTKMotionNotify, GDK_POINTER_MOTION_MASK); ConnectSenderSignalAfter(gFixed, 'motion-notify-event', @GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK); + {$EndIf} end; end; @@ -4053,10 +4062,12 @@ begin // 'button-press-event', @gtkMouseBtnPress, GDK_BUTTON_PRESS_MASK); end else begin + {$IfDef GTK1} ConnectSenderSignal(gFixed, 'button-press-event', @gtkMouseBtnPress, GDK_BUTTON_PRESS_MASK); ConnectSenderSignalAfter(gFixed, 'button-press-event', @gtkMouseBtnPressAfter, GDK_BUTTON_PRESS_MASK); + {$EndIf} end; end; @@ -4083,10 +4094,12 @@ begin // GDK_BUTTON_RELEASE_MASK); end else begin + {$IfDef GTK1} ConnectSenderSignal(gFixed, 'button-release-event', @gtkMouseBtnRelease, GDK_BUTTON_RELEASE_MASK); ConnectSenderSignalAfter(gFixed, 'button-release-event', @gtkMouseBtnReleaseAfter,GDK_BUTTON_RELEASE_MASK); + {$EndIf} end; end; @@ -8151,6 +8164,9 @@ end; { ============================================================================= $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 Success: The first gtk2 application ran without error diff --git a/lcl/interfaces/gtk/gtkproc.inc b/lcl/interfaces/gtk/gtkproc.inc index 9208d53322..45d39805db 100644 --- a/lcl/interfaces/gtk/gtkproc.inc +++ b/lcl/interfaces/gtk/gtkproc.inc @@ -106,6 +106,17 @@ Function gdk_region_xor(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion; begin result := gdk_regions_xor(source1, source2); 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} {$Ifdef GTK2} @@ -4523,6 +4534,9 @@ end; { ============================================================================= $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 Success: The first gtk2 application ran without error diff --git a/lcl/interfaces/gtk/gtkproc.pp b/lcl/interfaces/gtk/gtkproc.pp index 95c0826434..1d3c44dcec 100644 --- a/lcl/interfaces/gtk/gtkproc.pp +++ b/lcl/interfaces/gtk/gtkproc.pp @@ -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_subtract(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} {$Ifdef GTK2} diff --git a/lcl/interfaces/gtk/gtkwinapi.inc b/lcl/interfaces/gtk/gtkwinapi.inc index 16227985c5..bff7e564a2 100644 --- a/lcl/interfaces/gtk/gtkwinapi.inc +++ b/lcl/interfaces/gtk/gtkwinapi.inc @@ -1695,8 +1695,8 @@ begin gdk_pixmap_colormap_create_from_xpm_d(Window,Colormap, {$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 GDK_Visual_UnRef(GdiObject^.Visual); @@ -3757,8 +3757,6 @@ var xmask: Cardinal; TopList, List: PGList; begin - // TODO: GTK2 native implementation with gdk_display_get_pointer - Result := False; TopList := gdk_window_get_toplevels; @@ -3782,7 +3780,6 @@ begin then g_list_free(TopList); {$Else} begin - result := False; {$EndIf} end; @@ -3848,7 +3845,8 @@ begin If Drawable = nil then Result := GDK_Visual_Get_System^.Depth 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 } // ToDo @@ -4129,8 +4127,10 @@ begin end; gbPixmap: If GDIPixmapObject <> nil then begin - gdk_window_get_geometry(GDIPixmapObject, nil, nil, - @biWidth, @biHeight, @biBitCount); + //gdk_window_get_geometry(GDIPixmapObject, nil, nil, + // @biWidth, @biHeight, @biBitCount); + biBitCount := gdk_drawable_get_depth(GDIPixmapObject); + gdk_drawable_get_size(GDIPixmapObject,@biWidth, @biHeight); end; gbImage : If GDI_RGBImageObject <> nil then @@ -7409,7 +7409,7 @@ begin NewFocusWidget:=Widget; 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 if (Screen<>nil) and (Screen.FocusedForm<>nil) @@ -8711,6 +8711,9 @@ end; { ============================================================================= $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 Success: The first gtk2 application ran without error diff --git a/lcl/interfaces/gtk2/gtk2int.pas b/lcl/interfaces/gtk2/gtk2int.pas index 8187d1af1c..e21c213f58 100644 --- a/lcl/interfaces/gtk2/gtk2int.pas +++ b/lcl/interfaces/gtk2/gtk2int.pas @@ -31,20 +31,79 @@ interface {$endif} uses - Classes, SysUtils, gdk2pixbuf, gtk2, gdk2, glib2, gtkInt; + Classes, SysUtils, + {$IfNDef GTK2_2} + X, XLib, XUtil, + {$EndIf} + gdk2pixbuf, gtk2, gdk2, glib2, gtkInt; type TGtk2Object = class(TGtkObject) + public + function GetCursorPos(var lpPoint: TPoint ): Boolean; override; 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 + {------------------------------------------------------------------------------ + 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. { $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 fixed updating codetools on changing pkg output dir