GtkWidgets and their underlying GdkWindows

We all "know" that some GtkWidgets have their own GdkWindows (ie
GtkButtons), and some do not (ie GtkLabels). At least, that's what the
documentation tells us.

As I understand it, for GtkWidget* widget,


is this GdkWindow*, if so assigned.


I was working on writing a method to expose this in the Java bindings,
and was somewhat surprised to find that all the Widgets in my little
test app had the _same_ GdkWindow. Huh?

So I poked around some more, and in C found the same thing:

#include <gtk/gtk.h>

main(int argc, char **argv)
	GtkWidget *window;
	GtkWidget *button;
	GtkWidget *vbox;
	GtkWidget *label;

	gtk_init(&argc, &argv);

	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	label = gtk_label_new("Hello");
	button = gtk_button_new_with_label("Press Me!");
	vbox = gtk_vbox_new(0, FALSE);
	gtk_container_add(GTK_CONTAINER(vbox), label);
	gtk_container_add(GTK_CONTAINER(vbox), button);
	gtk_container_add(GTK_CONTAINER(window), vbox);

	g_print("0x%X\n", window->window);
	g_print("0x%X\n", vbox->window);
	g_print("0x%X\n", label->window);
	g_print("0x%X\n", button->window);

gives me:

$ ./demo

I really would have expected the GtkButton and GtkLabel to have
different GdkWindows. According to this, they're all writing to the same


This is not a problem; I'm just not sure how to explain it (and in turn
document our binding of GdkWindow). My guess is either a) my app is too
simple, or b) GTK is doing something smart under the hood and the
original Xlib <-> GDK wrapping has long been superseded, perhaps by the
Cairo drawing layer.

Have things evolved from when the original API documentation was
written, or am I just doing something really silly?


Attachment: signature.asc
Description: This is a digitally signed message part

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