Port Builder to GTK 4
Apparently I didn't create an overview issue for this so we might as well create one now so that we have a place to drop a bunch of "mental state" in the form of TODO items other than in code. We can just add items here as needed to ensure that we get them done before the release.
Foundry
-
Add IdeRunCommandProvider
- This interface should act likeIdeBuildTargetProvider
but for artifacts that can be run. -
Change Flatpak plugin's IdeBuildTargetProvider
toIdeRunCommandProvider
as that is closer to what it does. -
Remove FlatpakBuildTargetProvider -
Implement selection dialog to choosing run command -
Allow setting custom run command/environment from run command dialog. -
Add "Deploy to Device" menu item in the run menu. -
Manage SDKs from the preferences window -
Build menu needs to allow selecting active project configuration. -
Buildui plugin needs to gain error/warning indicators -
Add IdeRunContext to have "tool arguments" separate from "argv to execute" and allow layers -
Use IdeRunCommand to execute runners/gdb/etc -
Remove use of IdeBuildTarget for running -
Simplify device manager to always use deploy strategy (add local strategy) -
Move deploy strategy to pipeline and remove from device manager -
Allow sending custom signals to shutdown application (2x to force-quit) -
Move TestProvider to using RunCommand -
Drop IdeTestProvider and IdeTest
-
Terminal
-
Rebuild terminal launchers on IdeRunCommand -
Port shellcmd to use runcommand+terminal launcher
Project Run
-
Implement settings for color scheme (light, dark, follow) for launched application. (libadwaita only) -
Implement setting for High-Contrast (libadwaita only) -
LTR/RTL. May take GTK integration. -
Followup on GTK LTR/RTL changes, propagate those back into Builder's IdeRunManager envvar setting. -
Allow running unit tests, including with debugger/etc. This may require changing our IdeTestProvider interface. -
Move test providers to run providers w/ run command kind "test" -
Move unit tests to a new panel (using testui), possibly on the right side of workspace.
Threading/Subprocesses
-
Use flatpak-spawn
instead of IdeSubprocessLauncher/IdeSubprocess subprocess. We can still subclass, but use flatpak-spawn to do the work. -
Use flatpak-spawn
for run commands
Preferences
-
Ensure all of the preferences from ide-preferences-builtin.c
are ported over. -
Make sure we can tweak language settings. -
Make per-project language settings use settings-layers so that they can take application setting into account. -
Make sure IdeFileSettings gsettings implementation takes layered settings into account.
Commands
-
Make sure command manager, commands, etc all work via global search window -
Add search provider for shellcmd plugin
-
-
Make sure custom keybindings for commands work -
Make sure shellcmd command provider works and can be used with both application and per-project preference windows.
Indenters
-
Port Vala indenter to GtkSourceView 5 -
Port Python indenter to GtkSourceView 5 -
Port C indenter to GtkSourceView 5
Language Servers
-
Make sure language servers don't auto-spawn unless they are actually needed -
Show language server messages in the statusbar -
Simplified LSP definition to simplify porting LSP plugins to C
Sysprof
-
Port sysprof plugin to using workbench addin, workspace addin, and pges -
Finish implementing actions for page context menu (save-as, record again, move to workspace, etc) -
Implement toggles/actions for features in run menu
Editor
-
Port search to new editorui plugin -
Make sure we aren't missing any features from old editor plugin -
Make sure we aren't missing features from old IdeSourceView -
Re-implement auto-hide for overview map -
Make all those dropdown/menubutton work with proper actions in the statusbar -
encoding selection -
newline type selection -
Jump to line/column -
tabs/spaces/etc -
language selector
-
-
Fix the symbolic (GtkSymbolicPaintable) rendering in the omni-gutter-renderer -
Remove old src/plugins/editor/ after new editorui is finished
Shortcut Plugins
-
Make sure we still have working sublime, etc shortcut plugins. We probably have to drop emacs plugin at least initially because we can't support it from GTK 4 easily. -
Make run/build/debug/profile shortcuts somewhat sane and predictable -
generate shortcut window or some other way to make sure we have proper keybindings displayed
Beautifier Plugin
-
Rewrite beautifier plugin to be more generic. We probably want it to use something like an IdeFormatter
interface or something.
Devhelp
-
Figure out how this fits into GTK 4. It might only be using data and no display widgetry.
GVls Plugin
-
Figure out if we want to keep shipping this, not sure we do.
Make external plugins possible with Flatpak
Remove PyGObject
-
I'd like everything PyGObject removed from our core plugin modules #1670 (closed)
Drop History Plugin
-
I don't think we need it anymore at all, now that history is done w/ Vim plugin and that is what it existed for.
Vim Plugin
-
Make c&p work better across multiple views by making GSV share a single register for default yank.
Valgrind
-
Port to C -
Add toggles to run menu for leak-check/track-origins
Plugins
-
Make sure all plugins are ported from src/plugins/. -
Check for #if 0
in any plugins -
Delete vagrant plugin or make sure it works -
Fix warning message about "recommended" to be more clear that it's not recommended to install it
Project Tree
-
Use pixbuf renderer instead of custom cell renderer to improve GPU cache-ability
Workspace
-
Improve confirm-save-changes during shutdown. Some of this should get better with libpanel and PanelSaveDelegate
-
Session management has not yet been ported over to GTK 4. It can be simplified a bunch now that IdePanelPosition
can be used to more reliably place pages/panes/frames/etc. -
Teach session management to save/restore IdePane
positions based on a "pane identifier".
Greeter / VCS
-
Make sure gnome-builder --clone
works, which currently isif 0
due to the movement of the clone widget to a plugin -
The create-project wizard needs to be changed to use AdwEntryRow and what not
WebKit
-
Add IdeWebkitPage to libide/webkit/ -
Rewrite html-preview to use IdeWebkitPage -
Extract sphinx from html-preview into new plugin -
Extract markdown preview from html-preview into new plugin
Terminal
-
Finish porting terminal settings into src/plugins/terminal/
API Review
-
Remove all Since:
gtk-doc entries -
Change all availability macros to IDE_AVAILABLE_IN_ALL
Stretch Goals
These are things that'd be nice to have in the GTK 4 port, but can wait until after merging or until a later release of Builder.
-
Make Flatpak plugin export a .flatpak
by usingflatpak-builder
for the entire build so that it matches what would be built on a build server like Flathub. Make sure this doesn't break deploy-to-device features or make them unbearably slow. -
Implement IdeBuildManager:pause
property so that we can auto-fail new builds. -
Add IdeDependencyProvider
and implement it for Flatpak and possibly Meson subprojects. -
Add IdeDependency
with basic API to update it. -
Add dialog for updating dependencies and wire it to the build menu. -
toolchain editing -
Make multiple cursors work again (probably disable them from Vim mode though?) -
Export extension, see if we can get things to use that -
Ship typescript things as a plugin w/ flathub and get out of core build -
Review libpanel API, there is some unfortunate naming there that could really use cleanup -
Make sure that we can rotate through message carousel in omni-bar -
Inhibit user logout while documents are modified -
Implement drag-n-drop for files within project tree (copy and move)
Edited by Christian Hergert