mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-01 09:25:05 +02:00
133 lines
3.7 KiB
PHP
133 lines
3.7 KiB
PHP
{%mainunit gtk2wsprivate.pp}
|
|
|
|
{
|
|
*****************************************************************************
|
|
This file is part of the Lazarus Component Library (LCL)
|
|
|
|
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
|
for details about the license.
|
|
*****************************************************************************
|
|
}
|
|
|
|
{ TGtkPrivateWidget }
|
|
|
|
class procedure TGtkPrivateWidget.UpdateCursor(AInfo: PWidgetInfo);
|
|
var
|
|
Widget, FixWidget: PGtkWidget;
|
|
Window: PGdkWindow;
|
|
begin
|
|
Widget := AInfo^.CoreWidget;
|
|
FixWidget := GetFixedWidget(Widget);
|
|
Window := GetControlWindow(FixWidget);
|
|
if Window = nil then Exit;
|
|
// always recurse windows which do not accept controls.
|
|
// this way we will catch all widgets with double windows
|
|
if not (csAcceptsControls in TControl(AInfo^.LCLObject).ControlStyle) then
|
|
SetWindowCursor(Window, AInfo^.ControlCursor, False, True)
|
|
else
|
|
SetCursorForWindowsWithInfo(Window, AInfo, True);
|
|
end;
|
|
|
|
class procedure TGtkPrivateWidget.SetZPosition(const AWinControl: TWinControl; const APosition: TWSZPosition);
|
|
var
|
|
Widget: PGtkWidget;
|
|
begin
|
|
if not WSCheckHandleAllocated(AWincontrol, 'SetZPosition')
|
|
then Exit;
|
|
|
|
Widget := GetWidgetWithWindow(AWincontrol.Handle);
|
|
if Widget = nil then Exit;
|
|
if Widget^.Window=nil then exit;
|
|
|
|
case APosition of
|
|
wszpBack: begin
|
|
gdk_window_lower(Widget^.Window);
|
|
end;
|
|
wszpFront: begin
|
|
gdk_window_raise(Widget^.Window);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
{ TGtkPrivatePaned }
|
|
|
|
class procedure TGtkPrivatePaned.UpdateCursor(AInfo: PWidgetInfo);
|
|
var
|
|
Widget: PGtkWidget;
|
|
Window: PGdkWindow;
|
|
begin
|
|
Widget := AInfo^.CoreWidget;
|
|
Window := PGTkPaned(Widget)^.handle;
|
|
if Window = nil then Exit;
|
|
SetWindowCursor(Window, AInfo^.ControlCursor, False, True);
|
|
end;
|
|
|
|
|
|
{ TGtkPrivateEntry }
|
|
|
|
class procedure TGtk2PrivateButton.UpdateCursor(AInfo: PWidgetInfo);
|
|
var
|
|
Widget: PGtkWidget;
|
|
Window: PGdkWindow;
|
|
begin
|
|
Widget := AInfo^.CoreWidget;
|
|
if (Widget = nil) or not GTK_IS_BUTTON(Widget) then Exit;
|
|
Window := PGtkButton(Widget)^.event_window;
|
|
if Window = nil then Exit;
|
|
SetWindowCursor(Window, AInfo^.ControlCursor, False, True);
|
|
end;
|
|
|
|
{ TGtk2PrivateMemo }
|
|
|
|
class procedure TGtk2PrivateMemo.UpdateCursor(AInfo: PWidgetInfo);
|
|
var
|
|
Widget, FixWidget: PGtkWidget;
|
|
Window: PGdkWindow;
|
|
begin
|
|
Widget := AInfo^.CoreWidget;
|
|
if (Widget = nil) or not GTK_IS_TEXT_VIEW(Widget) then Exit;
|
|
FixWidget := GetFixedWidget(Widget);
|
|
Window := GetControlWindow(FixWidget);
|
|
if Window = nil then Exit;
|
|
if TControl(AInfo^.LCLObject).Cursor = crDefault then
|
|
SetWindowCursor(Window, 0, True, False)
|
|
else
|
|
SetWindowCursor(Window, AInfo^.ControlCursor, True, False);
|
|
end;
|
|
|
|
class procedure TGtk2PrivateNotebook.UpdateCursor(AInfo: PWidgetInfo);
|
|
var
|
|
Widget: PGtkWidget;
|
|
Window: PGdkWindow;
|
|
|
|
procedure UpdateCursorInternal(AInfo: PWidgetInfo);
|
|
var
|
|
Widget, FixWidget: PGtkWidget;
|
|
Window: PGdkWindow;
|
|
begin
|
|
Widget := AInfo^.CoreWidget;
|
|
FixWidget := GetFixedWidget(Widget);
|
|
Window := GetControlWindow(FixWidget);
|
|
if Window = nil then Exit;
|
|
// always recurse windows which do not accept controls.
|
|
// this way we will catch all widgets with double windows
|
|
if not (csAcceptsControls in TControl(AInfo^.LCLObject).ControlStyle) then
|
|
SetWindowCursor(Window, AInfo^.ControlCursor, True, True)
|
|
else
|
|
SetCursorForWindowsWithInfo(Window, AInfo, True);
|
|
end;
|
|
|
|
begin
|
|
if IsTTabControl(AInfo^.CoreWidget) then
|
|
begin
|
|
UpdateCursorInternal(AInfo);
|
|
exit;
|
|
end;
|
|
Widget := AInfo^.CoreWidget;
|
|
Window := PGTkNotebook(Widget)^.event_window;
|
|
if Window <> nil then
|
|
SetWindowCursor(Window, AInfo^.ControlCursor, False, True);
|
|
// do not know how to set cursor under tabs
|
|
end;
|
|
|