| Things to care about when using/programing for GTK+ |
| =================================================== |
| |
| This file is meant to collect some frequently triggered failures when |
| programming for/with Gtk, having the spirit of a developers FAQ. |
| It is also the correct place to list up things that programmers should |
| care about in general. |
| |
| In the hope that this text might be useful to someone, |
| |
| - Tim Janik <timj@gimp.org> |
| 1998/02/11 |
| |
| |
| Automatic destruction of widgets on removal from parent |
| ------------------------------------------------------- |
| |
| This is a reference counting issue, you would want to refer |
| to refcounting.txt on it. |
| |
| |
| What are all the widget flags about? |
| ------------------------------------ |
| |
| Refer to the file widget_system.txt which covers widget flags and the |
| resulting invariants in a detailed way. |
| |
| |
| GdkWindow pointers may be NULL in GdkEvents |
| ------------------------------------------- |
| |
| The notification nature of the signal mechanism might cause events to |
| be emitted that have their GdkWindow pointer set to NULL. |
| This is due to the fact that certain events need to be emitted after the |
| real GdkWindow of a widget is not any longer pertinent. |
| It's up to the signal handling function (application) to check for the |
| window field of the event structure to be != NULL, if it is going to |
| perform any operations through Gdk calls on it. |
| Events that a likely to trigger a missing check for the window pointer |
| currently are (and correspond to the trailing signals): |
| |
| GDK_SELECTION_CLEAR GtkWidget::selection_clear_event |
| GDK_FOCUS_CHANGE GtkWidget::focus_in_event |
| GtkWidget::focus_out_event |
| |
| Events that are assured to have a valid GdkEvent.any.window field are |
| |
| GDK_EXPOSE GtkWidget::expose_event |
| |
| |
| Writing Gdk functions |
| --------------------- |
| |
| When writing Gdk functions that operate on GdkWindow structures in any |
| meaningful sense, that is casting to a GdkWindowPrivate structure for |
| access to fields other then GdkWindow.user_data, the programmer is |
| recommended to check for the GdkWindowPrivate.destroyed field to be == |
| FALSE, especially if the GdkWindowPrivate.xwindow field is used. |
| Silent abortion of the Gdk function is the correct behaviour if this |
| condition isn't met. |