GTK+ 3 migration
Inkscape currently makes use of the GTK+ 2.20 library API. Ultimately, we will need to switch to the new GTK+ 3 API. This version of the library introduces a number of major changes that are incompatible with GTK, so we need to make some changes to Inkscape.
- 1 Guidance from upstream
- 2 Deprecated symbols
Guidance from upstream
The GTK+ 3 reference manual offers some guidance for the upgrade process.
Inkscape currently makes use of a number of deprecated GTK+ symbols. We need to get rid of all of these before we can upgrade. Some are very easy to replace. Some are a little more challenging. We need to ensure that Inkscape still builds correctly when the "-DGTK_DISABLE_DEPRECATED" compiler flag is applied. An incomplete "to do" list follows:
Switch to gobject
The GtkType and GtkObject API has been replaced by the gobject library. One of the few remaining issues here is that SPCanvasItem is a subclass of GtkObject. However, this part of the class hierarchy is currently being rewritten, and will be based on a different parent class.
Use accessor functions to GtkWidget
Accessor functions such as
gtk_widget_has_focus() should be used instead of deprecated macros such as
Get rid of "visual" functions for GtkWidgets
The visual for a widget, and also the default visual is now derived from the colormap for the widget and the default colormap.
gtk_widget_pop_visual() now do nothing. Since the visual always had to match that of the colormap, it is safe to simply delete all references to these functions.
- Done Valavanisalex 09:55, 23 June 2011 (UTC)
Don't use GtkNotebookPage
GtkNotebookPage structure has been removed from the public header files; this was never meant to be a public structure, and all functionality that could be done by accessing the struct fields of this structure should be accessible otherwise.
Switch from GtkCombo to GtkComboBoxEntry
- Done. A few symbols are left in #if/#else blocks in src/dialogs/text-edit.cpp to allow build compatibility with GTK+ 2.20. These can be removed once Inkscape has bumped its dependency level to GTK+ >= 2.24. Valavanisalex 09:46, 23 June 2011 (UTC)
Get rid of GtkAction proxy functions
gtk_action_connect_proxy has been deprecated since version 2.16 and should not be used in newly-written code. Use gtk_activatable_set_related_action() instead.
Merge GtkRuler into Inkscape
The GtkRuler class has been completely removed from GTK+ 3, and will not be replaced. GIMP got around the problem by merging the GtkRuler code into their own project.