GTK+ 3 migration

From Inkscape Wiki
Revision as of 15:32, 23 July 2011 by Valavanisalex (talk | contribs) (→‎Switch to gobject: note about SPCanvasItem rewrite)
Jump to navigation Jump to search

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.

Guidance from upstream

The GTK+ 3 reference manual offers some guidance for the upgrade process.

Deprecated symbols

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

<https://bugs.launchpad.net/inkscape/+bug/813212>

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 GTK_WIDGET_HAS_FOCUS()

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_set_visual(), gtk_widget_set_default_visual(), gtk_widget_push_visual() and 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

The 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

See [1]

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.