On Mon, 20 Mar 2017 16:01:39 +0000
Tristan Van Berkom <tristan.vanber...@codethink.co.uk> wrote:

> 
> Use instance private data, this will not need any priv pointer and
> can be done with th G_DEFINE_TYPE_WITH_PRIVATE() macro, and another
> to lookup your private data inside your C file (under the hood, this
> uses negative instance offsets with power nter arithmatic, so public
> and private data are on the same allocated memory slice)
> 

So how is instance private data different from the priv field in the
struct? Only because G_DEFINE_TYPE_WITH_PRIVATE was called?
This is (roughly) what I found in the developer docs describing what
the boilerplate parts should look like:
myType.h

#include <gtk/gtk.h>

#define MY_TYPE my_type_get_type ()
G_DECLARE_FINAL_TYPE (MyType, my_type, MY, TYPE, GtkWidget)

/* function declarations */

myType.c

#include "myType.h"

/* Private structure definition. */
typedef struct {
  guint i;
  /* stuff */
} MyTypePrivate;


struct _MyType
{
  GtkWidget parent;

  /* Other members, including private data. */
}

G_DEFINE_TYPE_WITH_PRIVATE (MyType, my_type, GTK_TYPE_WIDGET)

So do I have to add the MyTypePrivat *priv field to the struct _MyType
definition (where the comment is)? And is this (finally) the recommended
way of "inheritance"?

> 
> There is no difference for accessing these things as inherited code
> or external code: do so with API (no such thing as "protected").
>

It makes a difference to the compiler I suppose. The nicest way would
be to use
MyType *myWidget;
gtk_widget_set_name (myWidget, "myWidget");
but the pointer types don't match.
Also, gtk_widget_set_name (myWidget->parent, "myWidget"); and
gtk_widget_set_name (GTK_WIDGET (myWidget), "myWidget"); seem a bit
different to me, because the first only affects the internal parent
instance, the second affects the whole custom widget. I do not know
enough about GTK internals if those two are semantically equivalent
anyway.

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to