How to put widget in CUSTOM GtkContainer



Hi there, my name is Alan and I have some troubles with GtkContainer.

It's about 2 days, I already have spent trying to solve it, but I (i guess) can't.

I'm writing a program, which looks like:
+-----------------------------+
| Main Window (GtkWindow)     |
| +-------------------------+ |
| | My custom widget        | |
| | +---------------------+ | |
| | | GtkButton           | | |
| | +---------------------+ | |
| +-------------------------+ |
+-----------------------------+

I need some approach to place a GtkButton in my custom widget. I found (from GTK+ sources) that GtkTreeView, GtkNotebook (and others) inherits from GtkContainer . So, I decide to inherit my widget not from GtkWidget, but from GtkContainer.

typedef struct _Grid            Grid;
typedef struct _GridClass       GridClass;

struct _Grid
{
  GtkContainer parent;
};

struct _GridClass
{
  GtkContainerClass parent_class;
};

And my _get_type function looks like:

GtkType
grid_get_type ()
{
  static GtkType grid_type = 0;

  if (!grid_type)
    {
      const GTypeInfo object_info =
      {
        sizeof (GtkContainerClass),
        NULL,
        NULL,
        (GClassInitFunc) grid_class_init,
        NULL,
        NULL,
        sizeof (Grid),
        0,
        (GInstanceInitFunc) grid_init,
        NULL,
      };

grid_type = g_type_register_static (GTK_TYPE_CONTAINER, g_intern_static_string ("Grid"), &object_info, 0);
    }

  return grid_type;
}

The main feature of this function is GTK_TYPE_CONTAINER ;-) You see ;-)

Next in my program, I'm creating my widget (grid) with that:

[...]
grid = grid_new ();
gtk_container_add (GTK_CONTAINER (window), grid);
[...]

So, my problem starts here: at _new() function. I want to create GtkButton and place it in my widget.

GtkWidget*
grid_new ()
{
  Grid *grid;

  grid = g_object_new (grid_get_type (), NULL);

  button = gtk_button_new_with_label ("Test");
  gtk_widget_set_parent (button, GTK_WIDGET (grid));
  gtk_widget_show (button);

  return GTK_WIDGET (grid);
}

Everything right and works without errors ;-) But nothing happens. I can't see a GtkButton ;-)

How to solve it? I need some way for "draw" (expose) GtkButton in my custom widget ;-) How to do it?

P.S. I extremely think, that I just forgot something. But there are no tutorials about it ;-) "Information vacuum", so I decide to ask in mailing-lists. P.P.S. Only information about custom widget creation is a GTK sources, but (even with it) I can't solve my problem. ;-)
P.P.P.S. Also, I really want to understand how GtkBox works ;-)

Thank you.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]