From b7bd2fc715113ad3be77c99d4760cd35912f7fde Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 31 Oct 2025 09:42:10 +0100 Subject: [PATCH] Setup Repository for GitHub Copilot Currently the Repository is not setup for copilot and could make it quite hard for the tool to give useful results because of the special setup. This now is a first attempt to make it more valuable for that case let it be helping with analysis of core dumps or migrating GTK4 by improve the setup for at least the GTK case: - creating general copilot instructions file - creating a specialized GTK instructions file - adding workflow setup that prepares the environment - add a document to track current GTK4 deprecation warnings --- .github/copilot-instructions.md | 158 +++++ .github/instructions/GTK.instructions.md | 10 + .github/workflows/copilot-setup-steps.yml | 44 ++ .gitignore | 1 + docs/GTK4_DEPRECATION_STATUS.md | 741 ++++++++++++++++++++++ 5 files changed, 954 insertions(+) create mode 100644 .github/copilot-instructions.md create mode 100644 .github/instructions/GTK.instructions.md create mode 100644 .github/workflows/copilot-setup-steps.yml create mode 100644 docs/GTK4_DEPRECATION_STATUS.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 00000000000..2bb79371ed0 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,158 @@ +# GitHub Copilot Instructions for Eclipse Platform SWT + +## Project Overview + +This is the **Eclipse Platform SWT** (Standard Widget Toolkit) repository - a cross-platform GUI library for JVM-based desktop applications. SWT is the foundation for the Eclipse IDE and many other desktop applications. + +## Architecture + +SWT consists of two main parts: +1. **Java code** - Platform-independent widget implementations and APIs +2. **Native code (C)** - Platform-specific implementations using native windowing systems + +### Platform Support +- **Linux**: GTK3 (stable) and GTK4 (experimental) +- **Windows**: Win32 API +- **macOS**: Cocoa + +### Key Components +- `bundles/org.eclipse.swt` - Main SWT bundle with Java and native code +- `bundles/org.eclipse.swt.svg` - SVG support +- `bundles/org.eclipse.swt.tools` - Build and development tools +- `binaries/` - Platform-specific binary fragments +- `examples/` - Example code and snippets +- `tests/` - JUnit tests + +## Build System + +### Technology Stack +- **Build Tool**: Maven with Tycho plugin +- **Java Version**: Java 17 (compiler target), Java 21 (build/runtime in CI) +- **Supported Architectures**: x86_64, aarch64, loongarch64, ppc64le, riscv64 + +### Build Commands +```bash +# Build the entire project +mvn clean verify + +# Build specific platform binary +mvn clean verify -Dnative=gtk.linux.x86_64 + +# Skip tests +mvn clean verify -DskipTests +``` + +### Building Natives +To rebuild native libraries: +1. Ensure the appropriate binary project is imported in your workspace (e.g., `binaries/org.eclipse.swt.gtk.linux.x86_64`) +2. Native build scripts are platform-specific and located in the binary fragments +3. For GTK on Linux: See `docs/gtk-dev-guide.md` for detailed instructions + +## Coding Standards + +### Java Code +- **Indentation**: Tabs (as per Eclipse project conventions) +- **Line Length**: Keep lines reasonably short, no strict limit +- **Naming**: Follow standard Java conventions (camelCase for methods/variables, PascalCase for classes) +- **Comments**: Use JavaDoc for public APIs; inline comments where needed for clarity +- **Assertions**: Use assertions for runtime checks (enabled in tests, disabled in production) + +### Native Code (C) +- **Platform-specific**: Code goes in platform folders (gtk/, win32/, cocoa/) +- **JNI**: Communication between Java and native code uses JNI +- **OS.java**: Central file for native method declarations +- Do not commit binaries! They will be build and comitted by the CI. + +### Code Organization +- Platform-independent code: `bundles/org.eclipse.swt/Eclipse SWT/common/` +- Platform-specific code: `bundles/org.eclipse.swt/Eclipse SWT/{gtk,win32,cocoa}/` +- Emulated widgets: `bundles/org.eclipse.swt/Eclipse SWT/emulated/` + +## Testing + +### Running Tests +```bash +# Run all tests +mvn clean verify + +# Run specific test class +mvn test -Dtest=ClassName +``` + +### Test Location +- Main tests: `tests/org.eclipse.swt.tests/` +- Tests automatically run with assertions enabled + +### Writing Tests +- Follow existing test patterns in the repository +- Platform-specific tests should be in appropriate fragments +- Use JUnit for all tests + +## Development Workflow + +### Making Changes + +1. **Java-only changes**: Can be tested without rebuilding natives +2. **Native changes**: Require rebuilding the platform-specific binary fragment +3. **Cross-platform changes**: Test on all affected platforms + +### Pull Request Guidelines +- Sign the Eclipse Foundation Contributor License Agreement (CLA) +- Ensure all tests pass +- Follow the contribution guidelines in CONTRIBUTING.md +- Reference related GitHub issues + +### CI/CD +- GitHub Actions runs builds on Linux, Windows, and macOS +- Matrix builds test with Java 21 on all platforms +- All tests must pass before merge + +## Important Files and Patterns + +### Key Files +- `OS.java` - Central native method declarations for platform integration +- `Display.java` - Main event loop and display management +- `Widget.java` - Base class for all widgets +- `Control.java` - Base class for all controls + +### Common Patterns +- **Resource Management**: Always dispose of SWT resources (Display, Shell, Image, etc.) +- **Threading**: UI operations must run on the UI thread (use `Display.asyncExec()` or `Display.syncExec()`) +- **Event Handling**: Use listeners (typed or untyped) for event handling +- **Layout Management**: Use layout managers (GridLayout, FillLayout, etc.) instead of absolute positioning + +## Platform-Specific Considerations + +### GTK (Linux) +- Communication from Java to C happens through `OS.java` +- GTK3 is stable; GTK4 is experimental +- Can be toggled using `SWT_GTK4` environment variable +- See `docs/gtk-dev-guide.md` for comprehensive GTK development guide + +### Windows +- Uses Win32 API +- WebView2 support available (see `Readme.WebView2.md`) +- Platform-specific code in `win32/` directories + +### macOS +- Uses Cocoa framework +- Supports both x86_64 and aarch64 (Apple Silicon) +- Platform-specific code in `cocoa/` directories + +## Resources + +- **Main README**: [`README.md`](../README.md) +- **Contributing Guide**: [`CONTRIBUTING.md`](../CONTRIBUTING.md) +- **GTK Development Guide**: [`docs/gtk-dev-guide.md`](../docs/gtk-dev-guide.md) +- **GitHub Discussions**: Use for questions and general discussions +- **GitHub Issues**: Use for bug reports and feature requests + +## Tips for Copilot + +- When generating SWT code, always include proper resource disposal +- Remember that SWT is not thread-safe - UI operations need Display.syncExec/asyncExec +- Platform-specific code should go in the appropriate platform directory +- When adding native methods, declare them in `OS.java` first +- Follow existing code patterns in the repository for consistency +- Use snippets in `examples/org.eclipse.swt.snippets/` as reference examples +- Consider cross-platform compatibility when making changes diff --git a/.github/instructions/GTK.instructions.md b/.github/instructions/GTK.instructions.md new file mode 100644 index 00000000000..91b7b907fca --- /dev/null +++ b/.github/instructions/GTK.instructions.md @@ -0,0 +1,10 @@ +--- +applyTo: "bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/*.c,bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/*.h" +--- + +- Due to the copilot environment setup in copilot-setup-steps.yml we always use x86_64 architecture +- Always carefully investigate exsiting GTK functions the gtk-dev files are installed in the system +- The GTK docs can be found here https://www.gtk.org/docs/ +- Be carefull between the difference of GTK3 and GTK4 we need to check for specific versions in some places already +- The GTK3 > GTK4 migration guide can be found here https://docs.gtk.org/gtk4/migrating-3to4.html +- You will find a shell script ./build_gtk.sh that must be used to compile the code for testing changes diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 00000000000..33113ac3028 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,44 @@ +name: "Copilot Setup Steps" + +# Automatically run the setup steps when they are changed to allow for easy validation, and +# allow manual testing through the repository's "Actions" tab +on: + workflow_dispatch: + pull_request: + paths: + - .github/workflows/copilot-setup-steps.yml + +jobs: + # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot. + copilot-setup-steps: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + lfs: false + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + cache: 'maven' + + - name: Set up Maven + uses: stCarolas/setup-maven@v5 + with: + maven-version: '3.9.11' + - name: Prepare Linux Build + run: | + sudo apt-get update -qq + sudo apt-get install -qq -y libgtk-3-dev libgtk-4-dev freeglut3-dev webkit2gtk-driver + mkdir -p /home/runner/build/gtk && mkdir -p /home/runner/build/tmp + + echo "cd $GITHUB_WORKSPACE/bundles/org.eclipse.swt && java -Dws=gtk -Darch=x86_64 build-scripts/CollectSources.java -nativeSources '/home/runner/build/gtk'" >> $GITHUB_WORKSPACE/build_gtk.sh + echo "cd /home/runner/build/gtk && SWT_JAVA_HOME=${JAVA_HOME} MODEL=x86_64 OUTPUT_DIR=/home/runner/build/tmp ./build.sh install clean" >> $GITHUB_WORKSPACE/build_gtk.sh + echo "cd $GITHUB_WORKSPACE" >> $GITHUB_WORKSPACE/build_gtk.sh + chmod +x $GITHUB_WORKSPACE/build_gtk.sh + diff --git a/.gitignore b/.gitignore index b8efd10adef..687859ea784 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ pom.tycho /binaries/org.eclipse.swt.*/src/ tmpdir/ +‎build_gtk.sh diff --git a/docs/GTK4_DEPRECATION_STATUS.md b/docs/GTK4_DEPRECATION_STATUS.md new file mode 100644 index 00000000000..564e662785f --- /dev/null +++ b/docs/GTK4_DEPRECATION_STATUS.md @@ -0,0 +1,741 @@ +# GTK4 Deprecation Status Report + +**Generated:** 2025-10-31 11:26:36 UTC +**Build Command:** `./build_gtk.sh` + +## Executive Summary + +- **Total Deprecation Warnings:** 159 +- **Unique Deprecated Functions:** 149 +- **Affected Categories:** 23 + +### Warnings by Category + +| Category | Functions | Warnings | Migration Target | +|----------|-----------|----------|------------------| +| Gtk Tree View | 55 | 55 | GtkColumnView and GtkColumnViewColumn, GtkListView | +| Gtk Tree Store | 9 | 13 | GtkTreeListModel | +| Gtk Combo Box | 11 | 11 | GtkDropDown, GtkDropDown and GtkStringList | +| Gtk List Store | 7 | 11 | GListStore | +| Gtk Tree Model | 10 | 11 | GListModel | +| Gtk Tree Path | 10 | 11 | GListModel | +| Gtk Style Context | 10 | 10 | TBD | +| Gtk Tree Selection | 10 | 10 | TBD | +| Gtk Cell Renderer | 8 | 8 | TBD | +| Gtk Cell Layout | 4 | 4 | TBD | +| Gtk Message Dialog | 2 | 2 | TBD | +| Gtk Widget Get | 2 | 2 | gtk_widget_compute_bounds | +| Gdk Display Put | 1 | 1 | TBD | +| Gdk Surface Create | 1 | 1 | TBD | +| Gtk Cell View | 1 | 1 | TBD | +| ... and 8 more | ... | ... | ... | + +## Detailed Analysis by Category + +### Gtk Tree View + +**Status:** 55 functions deprecated, 55 total warnings + +**GTK4 Migration Target(s):** GtkColumnView and GtkColumnViewColumn, GtkListView + +
+Show 55 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_tree_view_collapse_row` | 1 | `os.c:8280` | +| `gtk_tree_view_column_add_attribute` | 1 | `os.c:8293` | +| `gtk_tree_view_column_cell_get_position` | 1 | `os.c:8310` | +| `gtk_tree_view_column_cell_get_size` | 1 | `gtk4.c:2418` | +| `gtk_tree_view_column_cell_set_cell_data` | 1 | `os.c:8324` | +| `gtk_tree_view_column_clear` | 1 | `os.c:8334` | +| `gtk_tree_view_column_get_button` | 1 | `os.c:8345` | +| `gtk_tree_view_column_get_fixed_width` | 1 | `os.c:8357` | +| `gtk_tree_view_column_get_reorderable` | 1 | `os.c:8369` | +| `gtk_tree_view_column_get_resizable` | 1 | `os.c:8381` | +| `gtk_tree_view_column_get_visible` | 1 | `os.c:8393` | +| `gtk_tree_view_column_get_width` | 1 | `os.c:8405` | +| `gtk_tree_view_column_new` | 1 | `os.c:8417` | +| `gtk_tree_view_column_pack_end` | 1 | `os.c:8428` | +| `gtk_tree_view_column_pack_start` | 1 | `os.c:8438` | +| `gtk_tree_view_column_set_alignment` | 1 | `os.c:8448` | +| `gtk_tree_view_column_set_cell_data_func` | 1 | `os.c:8458` | +| `gtk_tree_view_column_set_clickable` | 1 | `os.c:8468` | +| `gtk_tree_view_column_set_fixed_width` | 1 | `os.c:8478` | +| `gtk_tree_view_column_set_min_width` | 1 | `os.c:8488` | +| `gtk_tree_view_column_set_reorderable` | 1 | `os.c:8498` | +| `gtk_tree_view_column_set_resizable` | 1 | `os.c:8508` | +| `gtk_tree_view_column_set_sizing` | 1 | `os.c:8518` | +| `gtk_tree_view_column_set_sort_indicator` | 1 | `os.c:8528` | +| `gtk_tree_view_column_set_sort_order` | 1 | `os.c:8538` | +| `gtk_tree_view_column_set_visible` | 1 | `os.c:8548` | +| `gtk_tree_view_column_set_widget` | 1 | `os.c:8558` | +| `gtk_tree_view_convert_bin_window_to_tree_coords` | 1 | `os.c:8572` | +| `gtk_tree_view_convert_bin_window_to_widget_coords` | 1 | `os.c:8589` | +| `gtk_tree_view_create_row_drag_icon` | 1 | `os.c:8603` | +| `gtk_tree_view_expand_row` | 1 | `os.c:8615` | +| `gtk_tree_view_get_background_area` | 1 | `os.c:8628` | +| `gtk_tree_view_get_cell_area` | 1 | `os.c:8642` | +| `gtk_tree_view_get_column` | 1 | `os.c:8655` | +| `gtk_tree_view_get_columns` | 1 | `os.c:8667` | +| `gtk_tree_view_get_cursor` | 1 | `os.c:8682` | +| `gtk_tree_view_get_expander_column` | 1 | `os.c:8696` | +| `gtk_tree_view_get_grid_lines` | 1 | `os.c:8708` | +| `gtk_tree_view_get_headers_visible` | 1 | `os.c:8720` | +| `gtk_tree_view_get_path_at_pos` | 1 | `os.c:8740` | +| `gtk_tree_view_get_selection` | 1 | `os.c:8757` | +| `gtk_tree_view_get_visible_rect` | 1 | `os.c:8770` | +| `gtk_tree_view_insert_column` | 1 | `os.c:8783` | +| `gtk_tree_view_move_column_after` | 1 | `os.c:8794` | +| `gtk_tree_view_new_with_model` | 1 | `os.c:8805` | +| `gtk_tree_view_remove_column` | 1 | `os.c:8816` | +| `gtk_tree_view_row_expanded` | 1 | `os.c:8827` | +| `gtk_tree_view_scroll_to_cell` | 1 | `os.c:8838` | +| `gtk_tree_view_scroll_to_point` | 1 | `os.c:8848` | +| `gtk_tree_view_set_cursor` | 1 | `os.c:8858` | +| `gtk_tree_view_set_drag_dest_row` | 1 | `os.c:8868` | +| `gtk_tree_view_set_grid_lines` | 1 | `os.c:8878` | +| `gtk_tree_view_set_headers_visible` | 1 | `os.c:8888` | +| `gtk_tree_view_set_model` | 1 | `os.c:8898` | +| `gtk_tree_view_set_search_column` | 1 | `os.c:8908` | + +
+ +### Gtk Tree Store + +**Status:** 9 functions deprecated, 13 total warnings + +**GTK4 Migration Target(s):** GtkTreeListModel + +
+Show 9 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_tree_store_append` | 1 | `os.c:8136` | +| `gtk_tree_store_clear` | 1 | `os.c:8146` | +| `gtk_tree_store_insert` | 1 | `os.c:8156` | +| `gtk_tree_store_insert_after` | 1 | `os.c:8166` | +| `gtk_tree_store_newv` | 1 | `os.c:8179` | +| `gtk_tree_store_prepend` | 1 | `os.c:8192` | +| `gtk_tree_store_remove` | 1 | `os.c:8202` | +| `gtk_tree_store_set` | 5 | `os.c:8212` | +| `gtk_tree_store_set_value` | 1 | `os.c:8269` | + +
+ +### Gtk Combo Box + +**Status:** 11 functions deprecated, 11 total warnings + +**GTK4 Migration Target(s):** GtkDropDown, GtkDropDown and GtkStringList + +
+Show 11 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_combo_box_get_active` | 1 | `os.c:4165` | +| `gtk_combo_box_get_child` | 1 | `gtk4.c:1017` | +| `gtk_combo_box_get_model` | 1 | `os.c:4177` | +| `gtk_combo_box_popdown` | 1 | `os.c:4188` | +| `gtk_combo_box_popup` | 1 | `os.c:4198` | +| `gtk_combo_box_set_active` | 1 | `os.c:4208` | +| `gtk_combo_box_text_insert` | 1 | `os.c:4222` | +| `gtk_combo_box_text_new` | 1 | `os.c:4236` | +| `gtk_combo_box_text_new_with_entry` | 1 | `os.c:4248` | +| `gtk_combo_box_text_remove` | 1 | `os.c:4259` | +| `gtk_combo_box_text_remove_all` | 1 | `os.c:4269` | + +
+ +### Gtk List Store + +**Status:** 7 functions deprecated, 11 total warnings + +**GTK4 Migration Target(s):** GListStore + +
+Show 7 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_list_store_append` | 1 | `os.c:5430` | +| `gtk_list_store_clear` | 1 | `os.c:5440` | +| `gtk_list_store_insert` | 1 | `os.c:5450` | +| `gtk_list_store_newv` | 1 | `os.c:5463` | +| `gtk_list_store_remove` | 1 | `os.c:5476` | +| `gtk_list_store_set` | 5 | `os.c:5486` | +| `gtk_list_store_set_value` | 1 | `os.c:5543` | + +
+ +### Gtk Tree Model + +**Status:** 10 functions deprecated, 11 total warnings + +**GTK4 Migration Target(s):** GListModel + +
+Show 10 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_tree_model_get` | 2 | `os.c:7752` | +| `gtk_tree_model_get_iter` | 1 | `os.c:7779` | +| `gtk_tree_model_get_iter_first` | 1 | `os.c:7791` | +| `gtk_tree_model_get_n_columns` | 1 | `os.c:7803` | +| `gtk_tree_model_get_path` | 1 | `os.c:7815` | +| `gtk_tree_model_get_value` | 1 | `os.c:7838` | +| `gtk_tree_model_iter_children` | 1 | `os.c:7849` | +| `gtk_tree_model_iter_n_children` | 1 | `os.c:7861` | +| `gtk_tree_model_iter_next` | 1 | `os.c:7873` | +| `gtk_tree_model_iter_nth_child` | 1 | `os.c:7885` | + +
+ +### Gtk Tree Path + +**Status:** 10 functions deprecated, 11 total warnings + +**GTK4 Migration Target(s):** GListModel + +
+Show 10 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_tree_path_append_index` | 1 | `os.c:7896` | +| `gtk_tree_path_compare` | 1 | `os.c:7907` | +| `gtk_tree_path_free` | 1 | `os.c:7918` | +| `gtk_tree_path_get_depth` | 1 | `os.c:7929` | +| `gtk_tree_path_get_indices` | 1 | `os.c:7941` | +| `gtk_tree_path_new` | 1 | `os.c:7953` | +| `gtk_tree_path_new_from_string` | 2 | `os.c:7965` | +| `gtk_tree_path_next` | 1 | `os.c:7992` | +| `gtk_tree_path_prev` | 1 | `os.c:8003` | +| `gtk_tree_path_up` | 1 | `os.c:8015` | + +
+ +### Gtk Style Context + +**Status:** 10 functions deprecated, 10 total warnings + +
+Show 10 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_style_context_add_class` | 1 | `os.c:7078` | +| `gtk_style_context_add_provider` | 1 | `os.c:7090` | +| `gtk_style_context_get_border` | 1 | `gtk4.c:2310` | +| `gtk_style_context_get_color` | 1 | `gtk4.c:2324` | +| `gtk_style_context_get_margin` | 1 | `gtk4.c:2338` | +| `gtk_style_context_get_padding` | 1 | `gtk4.c:2352` | +| `gtk_style_context_remove_class` | 1 | `os.c:7102` | +| `gtk_style_context_restore` | 1 | `os.c:7114` | +| `gtk_style_context_save` | 1 | `os.c:7124` | +| `gtk_style_context_set_state` | 1 | `os.c:7134` | + +
+ +### Gtk Tree Selection + +**Status:** 10 functions deprecated, 10 total warnings + +
+Show 10 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_tree_selection_count_selected_rows` | 1 | `os.c:8027` | +| `gtk_tree_selection_get_selected_rows` | 1 | `os.c:8041` | +| `gtk_tree_selection_path_is_selected` | 1 | `os.c:8055` | +| `gtk_tree_selection_select_all` | 1 | `os.c:8066` | +| `gtk_tree_selection_select_iter` | 1 | `os.c:8076` | +| `gtk_tree_selection_set_mode` | 1 | `os.c:8086` | +| `gtk_tree_selection_set_select_function` | 1 | `os.c:8096` | +| `gtk_tree_selection_unselect_all` | 1 | `os.c:8106` | +| `gtk_tree_selection_unselect_iter` | 1 | `os.c:8116` | +| `gtk_tree_selection_unselect_path` | 1 | `os.c:8126` | + +
+ +### Gtk Cell Renderer + +**Status:** 8 functions deprecated, 8 total warnings + +
+Show 8 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_cell_renderer_get_fixed_size` | 1 | `os.c:3932` | +| `gtk_cell_renderer_get_padding` | 1 | `os.c:3949` | +| `gtk_cell_renderer_get_preferred_height_for_width` | 1 | `os.c:3966` | +| `gtk_cell_renderer_get_preferred_size` | 1 | `os.c:3983` | +| `gtk_cell_renderer_pixbuf_new` | 1 | `os.c:3997` | +| `gtk_cell_renderer_set_fixed_size` | 1 | `os.c:4008` | +| `gtk_cell_renderer_text_new` | 1 | `os.c:4019` | +| `gtk_cell_renderer_toggle_new` | 1 | `os.c:4031` | + +
+ +### Gtk Cell Layout + +**Status:** 4 functions deprecated, 4 total warnings + +
+Show 4 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_cell_layout_clear` | 1 | `os.c:3882` | +| `gtk_cell_layout_get_cells` | 1 | `os.c:3893` | +| `gtk_cell_layout_pack_start` | 1 | `os.c:3904` | +| `gtk_cell_layout_set_attributes` | 1 | `os.c:3916` | + +
+ +### Gtk Message Dialog + +**Status:** 2 functions deprecated, 2 total warnings + +
+Show 2 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_message_dialog_format_secondary_text` | 1 | `os.c:5569` | +| `gtk_message_dialog_new` | 1 | `os.c:5587` | + +
+ +### Gtk Widget Get + +**Status:** 2 functions deprecated, 2 total warnings + +**GTK4 Migration Target(s):** gtk_widget_compute_bounds + +
+Show 2 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_widget_get_allocation` | 1 | `os.c:9014` | +| `gtk_widget_get_style_context` | 1 | `os.c:9309` | + +
+ +### Gdk Display Put + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gdk_display_put_event` | 1 | `os.c:758` | + +
+ +### Gdk Surface Create + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gdk_surface_create_similar_surface` | 1 | `os.c:2278` | + +
+ +### Gtk Cell View + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_cell_view_set_fit_model` | 1 | `os.c:4042` | + +
+ +### Gtk Dialog Add + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_dialog_add_button` | 1 | `os.c:4306` | + +
+ +### Gtk Render Background + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_render_background` | 1 | `os.c:6697` | + +
+ +### Gtk Render Focus + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_render_focus` | 1 | `os.c:6707` | + +
+ +### Gtk Render Frame + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_render_frame` | 1 | `os.c:6717` | + +
+ +### Gtk Render Handle + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_render_handle` | 1 | `os.c:6727` | + +
+ +### Gtk Css Provider + +**Status:** 1 functions deprecated, 1 total warnings + +**GTK4 Migration Target(s):** gtk_css_provider_load_from_string + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_css_provider_load_from_data` | 1 | `gtk4.c:1030` | + +
+ +### Gtk Gesture Set + +**Status:** 1 functions deprecated, 1 total warnings + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_gesture_set_sequence_state` | 1 | `gtk4.c:1829` | + +
+ +### Gtk Widget Translate + +**Status:** 1 functions deprecated, 1 total warnings + +**GTK4 Migration Target(s):** gtk_widget_compute_point + +
+Show 1 deprecated functions + +| Function | Usage Count | Source Location | +|----------|-------------|-----------------| +| `gtk_widget_translate_coordinates` | 1 | `gtk4.c:2719` | + +
+ +## GTK4 Migration Guide References + +The following deprecations are documented in the [GTK 3 to GTK 4 Migration Guide](https://docs.gtk.org/gtk4/migrating-3to4.html): + +### GtkTreeView, GtkTreeModel and Cell Renderers + +**Affected:** 55 functions, 55 warnings + +**Migration:** GtkTreeView and related widgets are deprecated. Use GtkListView, GtkColumnView with GListModel. + +**Complexity:** High - Major API redesign + +**Reference:** [GtkTreeView, GtkTreeModel and Cell Renderers](https://docs.gtk.org/gtk4/migrating-3to4.html#stop-using-gtktreeview) + +### GtkComboBox and GtkComboBoxText + +**Affected:** 11 functions, 11 warnings + +**Migration:** Replace with GtkDropDown and GtkStringList. + +**Complexity:** Medium - Different API pattern + +**Reference:** [GtkComboBox and GtkComboBoxText](https://docs.gtk.org/gtk4/migrating-3to4.html#stop-using-gtkcombobox) + +### Cell Renderers + +**Affected:** 13 functions, 13 warnings + +**Migration:** Cell renderers are replaced by list item factories in GTK4. + +**Complexity:** High - Complete redesign + +**Reference:** [Cell Renderers](https://docs.gtk.org/gtk4/migrating-3to4.html#stop-using-gtktreeview) + +### List and Tree Models + +**Affected:** 7 functions, 11 warnings + +**Migration:** Replace with GListModel interface and implementations like GListStore. + +**Complexity:** Medium - API differences + +**Reference:** [List and Tree Models](https://docs.gtk.org/gtk4/migrating-3to4.html#stop-using-gtktreeview) + +### Tree Models + +**Affected:** 9 functions, 13 warnings + +**Migration:** Replace with GtkTreeListModel for hierarchical data. + +**Complexity:** High - Different approach to hierarchy + +**Reference:** [Tree Models](https://docs.gtk.org/gtk4/migrating-3to4.html#stop-using-gtktreeview) + +### Rendering Functions + +**Affected:** 4 functions, 4 warnings + +**Migration:** GtkSnapshot replaces context-based rendering. + +**Complexity:** High - New rendering model + +**Reference:** [Rendering Functions](https://docs.gtk.org/gtk4/migrating-3to4.html#stop-using-gtkstylecontext) + +### Style Context + +**Affected:** 10 functions, 10 warnings + +**Migration:** Many style context functions are deprecated. Use widget-specific APIs. + +**Complexity:** Medium - Use widget methods instead + +**Reference:** [Style Context](https://docs.gtk.org/gtk4/migrating-3to4.html#stop-using-gtkstylecontext) + +## Recommended Migration Plan + +This section outlines a strategic approach to addressing GTK4 deprecations, ordered from simplest to most complex. + +### Phase 1: Simple Replacements (Low Effort) + +These deprecations have direct 1:1 replacements and can be automated or done quickly. + +#### 1.1 Direct Function Replacements +**Complexity:** Low | **Automation Potential:** High + +Functions with simple name changes or parameter updates: + +| Deprecated Function | Replacement | Occurrences | +|---------------------|-------------|-------------| +| `gtk_widget_get_allocation` | `gtk_widget_compute_bounds` | 1 | +| `gtk_css_provider_load_from_data` | `gtk_css_provider_load_from_string` | 1 | +| `gtk_widget_translate_coordinates` | `gtk_widget_compute_point` | 1 | + +**Action Items:** +- [ ] Use search & replace with careful review +- [ ] Test each replacement in snippets +- [ ] Can be partially automated with AI-assisted refactoring + +#### 1.2 Message Dialogs +**Complexity:** Low | **Automation Potential:** Medium + +GtkMessageDialog deprecations can be replaced with GtkAlertDialog. + +**Action Items:** +- [ ] Review 2 message dialog functions +- [ ] Create wrapper functions if needed +- [ ] Update all call sites + +### Phase 2: Style and Rendering (Medium Effort) + +**Complexity:** Medium | **Automation Potential:** Low + +#### 2.1 Style Context Functions +**Affected:** 10 functions + +Many style context methods are deprecated. Migration strategies: +- Use widget-specific methods when available +- For styling, use CSS through GtkCssProvider +- For measurements, use widget geometry methods + +**Action Items:** +- [ ] Audit each style context usage +- [ ] Replace with widget-specific APIs where possible +- [ ] Consider CSS-based alternatives for styling + +#### 2.2 Rendering Functions +**Affected:** ~12 functions + +GTK4 uses GtkSnapshot instead of cairo context rendering. + +**Action Items:** +- [ ] Study GtkSnapshot API +- [ ] Rewrite render functions using snapshot +- [ ] Test rendering in various themes + +### Phase 3: ComboBox Migration (Medium-High Effort) + +**Complexity:** Medium-High | **Automation Potential:** Low + +**Affected:** 11 functions + +GtkComboBox → GtkDropDown migration requires API redesign. + +**Action Items:** +- [ ] Create abstraction layer for combo box functionality +- [ ] Implement using GtkDropDown + GtkStringList +- [ ] Update all combo box usage in SWT +- [ ] Thorough testing of selection, events, data binding + +### Phase 4: TreeView/ListView Migration (High Effort) + +**Complexity:** High | **Automation Potential:** Very Low + +**Affected:** ~114 functions + +This is the largest and most complex migration. + +#### 4.1 Data Model Migration +- GtkListStore → GListStore +- GtkTreeStore → GtkTreeListModel + +#### 4.2 View Migration +- GtkTreeView → GtkListView / GtkColumnView +- Cell renderers → List item factories +- GtkTreeSelection → Selection models (GtkSingleSelection, GtkMultiSelection) + +**Action Items:** +- [ ] Design new list/tree abstraction for SWT +- [ ] Implement GListModel-based data models +- [ ] Create list item factory infrastructure +- [ ] Migrate table widgets +- [ ] Migrate tree widgets +- [ ] Implement selection handling +- [ ] Test all SWT list/tree/table functionality +- [ ] Performance testing with large datasets + +## Automation Recommendations + +### What Can Be Automated (with AI/Copilot) + +1. **Simple Function Replacements** (High Success Rate) + - Direct 1:1 function name changes + - Parameter reordering with same semantics + - Example: `gtk_css_provider_load_from_data` → `gtk_css_provider_load_from_string` + +2. **Pattern-Based Replacements** (Medium Success Rate) + - Converting simple style context usage to widget methods + - Basic message dialog conversions + - Requires: Good test coverage to validate + +3. **Code Generation Assistance** (Medium Success Rate) + - Generating boilerplate for new APIs (list item factories) + - Creating wrapper functions + - Documentation and migration guides + +### What Should Be Manual (Human Required) + +1. **Architectural Changes** (Manual Only) + - TreeView → ListView/ColumnView migration + - Render function → Snapshot conversion + - Selection model redesign + +2. **Complex Logic** (Manual with AI Assistance) + - Custom cell renderer logic → Item factory conversion + - ComboBox with complex models → DropDown migration + - Event handling changes + +3. **Testing and Validation** (Manual Required) + - Visual regression testing + - Performance benchmarking + - Edge case validation + +## Suggested AI-Assisted Workflow + +1. **Phase 1**: Use Copilot for simple replacements + - Generate a list of simple 1:1 replacements + - Review and apply with tests + +2. **Phase 2**: AI-assisted pattern migration + - Provide examples of GTK4 patterns to AI + - Have AI suggest conversions + - Manual review and testing + +3. **Phase 3-4**: Manual with AI research assistance + - Use AI to research GTK4 best practices + - Design architecture manually + - Use AI for boilerplate generation + - Thorough manual testing + +## Priority Recommendations + +**Immediate (Next Sprint):** +- [ ] Phase 1.1: Simple function replacements +- [ ] Set up GTK4 testing environment + +**Short Term (1-2 Months):** +- [ ] Phase 1.2: Message dialogs +- [ ] Phase 2.1: Style context (partial) + +**Medium Term (3-6 Months):** +- [ ] Phase 2.2: Rendering functions +- [ ] Phase 3: ComboBox migration + +**Long Term (6-12 Months):** +- [ ] Phase 4: TreeView/ListView migration (major undertaking) + +## Next Steps + +1. **Review this document** with the team +2. **Prioritize** which phases to tackle first based on GTK4 timeline +3. **Set up GTK4 CI** to track deprecation warnings over time +4. **Create feature branch** for GTK4 migration work +5. **Start with Phase 1** simple replacements to gain momentum + +## Resources + +- [GTK 4 Migration Guide](https://docs.gtk.org/gtk4/migrating-3to4.html) +- [GTK 4 API Reference](https://docs.gtk.org/gtk4/) +- [GListModel Tutorial](https://docs.gtk.org/gio/iface.ListModel.html) +- [GTK 4 List Widgets Guide](https://docs.gtk.org/gtk4/section-list-widget.html) + +--- + +*This document was generated automatically by analyzing build output from `./build_gtk.sh` on 2025-10-31.* \ No newline at end of file