Building, Bundling, and Integrating
Building, Bundling, and Integrating GTK+ on MacOSX is now consolidated at http://gtk-osx.sourceforge.net, where you'll find up-to-date downloads, information and support. There is a forum, a mailing list, and a tracker there. The development of the quartz backend to GTK+ remains in the GTK+ project.
Some additional notes:
The download link at Gtk+ Downloads points to Gtk-OSX.org which in turn points to a download at Imendio.com which will go stale when Imendio's ISP gets around to taking down their site (Imendio AB is no longer in business). Furthermore, the package is quite old and contains stale links.
The Quartz backend to GTK+ is being quietly maintained. For a lot of applications it works, but it is not feature complete. A to do list follows below.
List of quartz backend bugs (with patches)
To do list
This is a tentative list of items to be done, with varying difficulty. A good way to get started with GTK+ OS X hacking is to just compile your favorite application and try to make it work better. The code does contain a fair amount of "FIXME" comments. Note that a couple of those are for either deprecated functionality (that will be removed in the future and is only really needed by legacy applications) or for things that are very X11-specific and will not work natively on the Mac. 97% of the FIXME comments are incorporated in this list.
Core
Now that GTK+ master contains client side windows (CSW), we can get rid of GdkQuartzView. This might result in a nice speedup for applications that use a lot of subwindows.
- Look into simplifying gdk_window_quartz_show().
- Fix gdk_window_quartz_reparent().
Properly implement GdkColormap.
- Complete mouse cursor support: implement gdk_cursor_new_from_name(), gdk_cursor_get_image().
- Window groups: gdk_window_set_group(), gdk_window_get_group(), gdk_display_get_default_group().
- Support for shaped windows (gdk_display_supports_shapes(), gdk_display_support_input_shapes(), gdk_window_quartz_shape_combine_region(), gdk_window_quartz_input_shape_combine_region(), _gdk_windowing_get_shape_for_mask(), _gdk_windowing_window_get_shape(), _gdk_windowing_window_get_input_shape())
- Composite support (gdk_display_supports_composite())
- Resync the keyboard handling with the code in xserver xquartz. Check whether gdk_keymap_have_bidi_layouts() is implementable. Implement gdk_keymap_lookup_key().
- Implement gdk_keymap_get_caps_lock_state().
- In gdk_quartz_draw_drawable(), check whether the moving areas on the same drawable hack actually works; also support source with depth 1.
- Implement _gdk_pixmap_create_from_data().
- Should we support foreign pixmaps?
- Implement gdk_screen_get_monitor_plug_name().
- Improve implementation of gdk_quartz_draw_arc().
- Check if gdk_quartz_draw_image() works with 32-bit images.
- Guard for unallocated events in gdk_quartz_get_event?
- Don't update focus window when grabbed?
- Fill focus and button state in crossing events?
- Is the visual byte order correct for Intel Macs? (create_standard_visual()).
- Implement gdk_window_quartz_set_background(), gdk_window_quartz_set_back_pixmap().
- Implement gdk_window_set_override_redirect().
- Implement gdk_window_quartz_set_static_gravities().
- Support anti-exposes (_gdk_windowing_window_queue_antiexpose).
Selection, properties, clipboard and drag and drop
- Complete the implementation of drag and drop (gdk_drag_motion(), gdk_drag_get_protocol_for_display(), gdk_drag_find_window_for_screen(), gdk_drag_drop(), gdk_drag_abort(), gdk_drag_status(), gdk_drop_reply(), gdk_drop_finish(), gdk_window_register_dnd(), gdk_drag_get_selection (), gdk_drag_drop_succeeded()).
- Clipboard support (gdk_display_supports_selection_notification(), gdk_display_request_selection_notification(), gdk_display_supports_clipboard_persistence(), gdk_display_store_clipboard()).
- gdk_property_delete(), gdk_property_get(), gdk_property_change() are currently not implemented.
- Implement gdk_selection_owner_set_for_display(), gdk_selection_owner_get_for_display(), gdk_selection_convert(), gdk_selection_property_get(), gdk_selection_send_notify_for_display(), gdk_text_property_to_text_list_for_display(), gdk_string_to_compound_text_for_display(), gdk_free_compound_text(), gdk_utf8_to_string_target(), gdk_utf8_to_compound_text_for_display().
Pango
- Add support for getting real font coverage
The font enumeration has been updated to use CoreText (CGFontRef), but in such a way that Pango no longer builds on pre-Leopard machines. (CoreText is not available in any release before Leopard). This must be fixed, for example by putting back the old ATSU API. (Kris already has a patch for this, only needs to add configure.in foo and test on a Leopard machine).
Write a real CoreText backend. (That should live in addition to the ATSUI backend and should become the default for machines running Leopard and later).
Tablets
- There is API in Cocoa to support tablets - gdkevents-quartz.c will need changing to add the updated event fields (axis for example). fill_button_event(), fill_motion_event(), generate_motion_event() should then fill in the axes field.
- Fixup gdk_input_set_extension_events().
- Implement gdk_device_set_key(), gdk_device_get_axis().
Input methods
- Not implemented. There is a Cocoa API for using input methods which could be used.
Integration
- Work on native theme engine (available in svn.gnome.org/svn/gtk-quartz-engine)
- Look into possibility of using the native filechooser
Add support for more GtkSettings. (gdk_screen_get_setting()).
- Should the first window created by the application be moved to front?
- Start up notification: implement gdk_notify_startup_complete(), gdk_notify_startup_complete_with_id(), gdk_window_set_startup_id().
- Implement gdk_window_quartz_restack_toplevel().
- Implement gdk_window_set_urgency_hint().
- Implement gdk_window_set_geometry_hints().
- Implement gdk_window_set_hints().
- Implement gdk_window_set_role().
- Implement gdk_window_set_icon(), gdk_window_set_icon_name(), gdk_window_set_icon_list().
- Implement gdk_window_set_modal_hint(),
- Implement gdk_window_set_skip_taskbar_hint(), gdk_window_set_skip_pager_hint(). (For as far possible/applicable on Mac).
- Complete gdk_window_[sg]et_decorations().
- Implement gdk_window_set_functions().
- Support sticky windows (gdk_window_stick(), gdk_window_unstick()).
- Integrate with the Mac OS X a11y framework? Is this possible at all?
Unit testing
- Is it possible to implement gdk_test_render_sync() on Quartz?
- Implement gdk_test_simulate_key(), gdk_test_simulate_button().
Deprecated, unimplemented functions
Implementation of these functions might be needed to get legacy applications to run. For modern applications, it is not required to implement these.
- Implement gdk_quartz_draw_text(), gdk_quartz_draw_text_wc().
- Implement gdk_event_get_graphics_expose().
- Implement gdk_font_load_for_display(), gdk_font_description_for_display(), gdk_fontset_load_for_display(), gdk_fontset_load(), gdk_text_width(), gdk_text_extents(), gdk_text_width_wc(), gdk_text_extents_wc(), _gdk_font_destroy(), _gdk_font_strlen(), gdk_font_id(), gdk_font_equal(), gdk_font_get_display().
- Support font parameter of GC. (gdk_quartz_gc_set_values()).
