Zitat von SteveG <steveg@nevets.com.au>:

> Need some pointers on the way Laz/fpc handle gtkwidgets if possible.
>
> I am attempting (as a test) to get and then set the size and position of
> a Laz form using Gtk / Gdk - (not necessary I know, just leading to
> further things)

See in gtk intf:
procedure SetWindowSizeAndPosition


> The Form1.Handle is a pointer to a gtkwidget - saved as 'WinHandle'.
>  From this, I can retrieve its name, and so know I have the right pointer.

The type depends on various settings. But normallly a TForm is a
gtk_window_get_type.


> How can I alter the forms size / pos using the widget handle ?

You can only give suggestions, which are given by the gtk to the window manager
which decides what to do with them.


> TGtkWidget( PGtkWidget(Winhandle)^).allocation.width  - returns garbage

It's the last allocated width.

> gtk_widget_size_request(Winhandle, @GtkAllocation) - returns 0's

This tells gtk to compute a nice size (typically the minimum size). It can only
be computed after the window was realized and some other things have been done.


> Working on the theory that I have to use the GDKWindow instead,
> TGtkWidget( PGtkWidget(Winhandle)^).Window - returns a number (no idea
> if its correct)

The gdk_window exists only after it has been mapped. For top level widgets like
a normal gtk_window 'realized' and 'mapped' happen together.


> but trying to use it with any GDK_Window_ procedures gives various
> errors (depending on proc called)

And depending on the time of use.


> Even simply attempting to get the TopLevel windows seems beyond me -
> gList := gdk_window_get_toplevels();
> gdk_window_get_position( GDK_WINDOW(gList^.data), pXPos, pYPos);
>
> fails with 'GLib-GObject-CRITICAL - use IA__g_type_init() prior to this
> function
> though I can easily accept that my understanding of glists is built on
> shakey ground

See TGtkWidgetSet.GetActiveWindow for an example.


> I know that Laz/fpc can handle most of this 'internally' for its own
> forms/controls - I am wanting to extend programming control outside of
> my app itself
> eg - finding xcalc by name, moving / sizing / keystrokes / etc (not just
> xcalc obviously)
>
> Any suggestions appreciated, as its damned frustrating knowing whats
> possible using Gtk/Gdk/GScreen/etc - and its just out of reach :)

The gtk uses a different design than winapi/carbon/qt.
It is very modular, uses low level C with lots of object orientated sugar (low
learning curve), and uses for everything themes and rules. Fixed values are
only used as defaults if no rule exists. That means it is hard to '_only_
change the color or width of a widget to a fixed value', but it is easy to
create widgets that adapt to the target system.
It's more for programmers, than for designers.

Mattias


