14

I'm trying to set the cursor to a watch. The problem is that gdk_set_cursor() requires a gdk_window.

How do I get the gdk_window of a gtk_window in C? I've seen examples for gtkmm and pygtk but I can't find the corresponding C function.

General Grievance
  • 4,555
  • 31
  • 31
  • 45
Erwin J.
  • 587
  • 1
  • 5
  • 15

2 Answers2

28
GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(gtk_window));

or, pre GTK 2.14, but now disallowed:

GdkWindow *gdk_window = gtk_window->window;
ptomato
  • 56,175
  • 13
  • 112
  • 165
  • Thanks that solved the problem of how to get the gdkwindow. Unfortunately the mouse pointer still stays the same. GdkWindow *gdkWindow = gtk_widget_get_window(window); GdkCursor *gdkCursor = gdk_cursor_new(GDK_WATCH); gdk_window_set_cursor(gdkWindow,gdkCursor); – Erwin J. Apr 22 '12 at 11:50
  • while(gtk_events_pending ()) { gtk_main_iteration (); } often helps. – murrayc Apr 24 '12 at 16:15
1

In my case gdk_window_set_cursor did not work because gtk_widget_get_window was returning an invalid handle because it was not already realized. Moving those lines after the window is made visible solved it for me.

From docs:

... For example, widget->window will be created when a widget is realized. Normally realization happens implicitly; if you show a widget and all its parent containers, then the widget will be realized and ...