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.