GTK+ 4 Migration
		
		
		
		
		
		Jump to navigation
		Jump to search
		 
		
	
This page is outdated. It is kept for historical reasons, e.g. to document specific decisions in Inkscape development.
Please see https://gitlab.com/inkscape/inkscape/-/issues/4802 for a more current listing.
A page to track the migration to Gtk4.
See: https://docs.gtk.org/gtk4/migrating-3to4.html
Preparation:
- ☑ Do not use GTK-specific command line arguments
 - ☑ Do not use widget style properties (We don't appear to use any.)
 - ☐ Review your window creation flags (3x src/ui/widget/color-slider.cpp) DELAY UNTIL GTK4,
 - ☐ Stop using direct access to GdkEvent structs (note: can use GtkEvent structures) BIG
 - ☑ Stop using gdk_pointer_warp()
 - ☑ Stop using non-RGBA visuals
 - ☑ gtk_widget_set_app_paintable
 - ☐ Stop using GtkBox padding, fill and expand child properties DELAY UNTIL GTK4
 - ☐ Stop using the state argument of GtkStyleContext getters (deprecated in 4.10, gtk_style_context_get_property removed, ui/widget/ink-ruler.cpp, color-slider.cpp, dash-selector.cpp, ink-ruler.cpp, ink-spinscale.cpp; src/ui/util.cpp) DELAY UNTIL GTK4
 - ☑ Stop using gdk_pixbuf_get_from_window() and gdk_cairo_set_source_window()
 - ☐ Stop using GtkButton's image-related API DELAY UNTIL GTK4
 - ☐ Stop using GtkWidget event signals (Convert to Controllers, BIG) DELAY UNTIL GTK4 (Controllers mostly unusable in Gtk3.)
 - ☑ Set a proper application ID
 - ☑ Stop using gtk_main() and related APIs (2geom tests, autotrace, script)
 - ☑ Reduce the use of gtk_widget_destroy() (Only used for message dialogs and for ComboBoxEnryToolItem which will disappear.)
 - ☑ Stop using the GtkWidget.destroy vfunc (Not used)
 - ☐ Reduce the use of generic container APIs DELAY UNTIL GTK4
 - ☑ Review your use of icon resources
 
At time of switch:
Some of these we maybe able to do earlier.
- ☐ Subclassing widgets
 - ☐ Life-cycle handling
 - ☐ Stop using GdkScreen
 - ☐ Stop using the root window. Used in ege-color-prof-tracker.cpp.
 - ☑ Stop using GdkVisual. Don't use.
 - ☑ Stop using GdkDeviceManager. Don't use.
 - ☐ Adapt to GdkWindow API changes
 - ☐ The "iconified" window state has been renamed to "minimized"
 - ☐ Adapt to GdkEvent API changes
 - ☑ Stop using grabs
 - ☐ Adapt to coordinate API changes
 - ☐ Adapt to GdkKeymap API changes
 - ☐ Adapt to changes in keyboard modifier handling
 - ☐ Replace GtkClipboard with GdkClipboard
 - ☐ Stop using gtk_get_current_... APIs
 - ☐ Convert your UI files
 - ☐ Adapt to GtkBuilder API changes
 - ☐ Adapt to event controller API changes
 - ☐ Focus handling changes
 - ☐ Use the new apis for keyboard shortcuts
 - ☐ Stop using GtkEventBox
 - ☑ Stop using GtkButtonBox
 - ☐ Adapt to GtkBox API changes
 - ☐ Adapt to GtkWindow API changes
 - ☑ Adapt to GtkHeaderBar and GtkActionBar API changes. Don't use either.
 - ☐ Adapt to GtkStack, GtkAssistant and GtkNotebook API changes Don't use GtkAssistant
 - ☐ Adapt to button class hierarchy changes
 - ☐ Adapt to GtkScrolledWindow API changes
 - ☐ Adapt to GtkBin removal
 - ☐ Adapt to GtkContainer removal
 - ☐ Stop using GtkContainer::border-width
 - ☐ Adapt to coordinate API changes
 - ☐ Adapt to GtkStyleContext API changes Gtk::StyleContext::add_provider_for_screen -> add_provider_for_display.
 - ☐ Adapt to GtkCssProvider API changes
 - ☐ Stop using GtkShadowType and GtkRelief properties
 - ☐ Adapt to GtkWidget's size request changes
 - ☐ Adapt to GtkWidget's size allocation changes
 - ☐ Switch to GtkWidget's children APIs
 - ☑ Don't use -gtk-gradient in your CSS
 - ☐ Don't use -gtk-icon-effect in your CSS Used in style.css, Minwaita-Inkscape.css
 - ☑ Don't use -gtk-icon-theme in your CSS
 - ☐ Don't use -gtk-outline-...-radius in your CSS Used in style.css, Minwaita-Inkscape.css
 - ☐ Adapt to drawing model changes
 - ☐ Stop using APIs to query GdkSurfaces
 - ☐ Widgets are now visible by default
 - ☐ Adapt to changes in animated hiding and showing of widgets
 - ☐ Stop passing commandline arguments to gtk_init
 - ☐ GdkPixbuf is deemphasized
 - ☐ GtkWidget event signals are removed
 - ☐ Invalidation handling has changed
 - ☐ Stop using GtkWidget::draw
 - ☐ Window content observation has changed
 - ☐ Monitor handling has changed
 - ☐ Adapt to monitor API changes
 - ☐ Adapt to cursor API changes
 - ☐ Adapt to icon size API changes
 - ☐ Adapt to changes in the GtkAssistant API
 - ☐ Adapt to changes in the API of GtkEntry, GtkSearchEntry and GtkSpinButton
 - ☑ Adapt to changes in GtkOverlay. Don't use changed api.
 - ☑ Use GtkFixed instead of GtkLayout. Don't use.
 - ☑ Adapt to search entry changes. Don't use changed api.
 - ☐ Adapt to GtkScale changes
 - ☐ Stop using gtk_window_activate_default()
 - ☐ Stop using gtk_widget_grab_default()
 - ☐ Stop setting ::has-default and ::has-focus in .ui files
 - ☐ Stop using the GtkWidget::display-changed signal
 - ☐ GtkPopover::modal has been renamed to autohide
 - ☐ gtk_widget_get_surface has been removed
 - ☐ gtk_widget_is_toplevel has been removed
 - ☐ gtk_widget_get_toplevel has been removed
 - ☐ GtkEntryBuffer ::deleted-text has changed
 - ☐ GtkMenu, GtkMenuBar and GtkMenuItem are gone
 - ☐ GtkToolbar has been removed
 - ☐ GtkAspectFrame is no longer a frame
 - ☐ Stop using custom tooltip windows
 - ☐ Switch to the new Drag-and-Drop api
 - ☐ Adapt to GtkIconTheme API changes
 - ☐ Adapt to GtkImage changes
 - ☐ Update to GtkFileChooser API changes
 - ☐ Stop using blocking dialog functions
 - ☐ Stop using GtkBuildable API
 - ☐ Adapt to GtkAboutDialog API changes
 - ☐ Adapt to GtkTreeView and GtkIconView tooltip context changes
 - ☐ Adapt to GtkPopover changes
 - ☐ Stop using GtkFileChooserButton
 - ☐ Adapt to changed GtkSettings properties
 
After switch:
- ☐ Use new list widgets.