Building, Bundling, and Integrating

Source Code

Quartz GTK+ backend

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.

GTK+

With patches

All Quartz bugs

Reviewed

Needs-work

Unreviewed

Blocker

Reviewed

Needs-work

Unreviewed

Critical

Reviewed

Needs-work

Unreviewed

Pango

With patches

All MacOS bugs

all

Glib

With patches

All MacOS bugs

all

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

  • 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(). (See http://developer.apple.com/mac/library/qa/qa2007/qa1519.html.)

  • Implement _gdk_pixmap_create_from_data().
  • Should we support foreign pixmaps? (Most probably not).
  • Implement gdk_screen_get_monitor_plug_name().
  • 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

  • Supported at a high level in gtkclipboard-quartz.h and gtkdnd-quartz.h, but the following need implementing:
    • gtk_clipboard_request_rich_text(), gtk_clipboard_wait_for_rich_text(), _gtk_clipboard_handle_event(), gtk_clipboard_set_can_store(), gtk_clipboard_store(), _gtk_clipboard_store_all()
  • Lower-level selection support is largely missing from GDK-quartz (and GTK selection is implemented via GDK selection).
    • gdk_property_delete(), gdk_property_get(), gdk_property_change()
    • 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()
  • Isn't compound text largely obsolete in a Unicode world?
    • gdk_string_to_compound_text_for_display(), gdk_free_compound_text(), gdk_utf8_to_compound_text_for_display(), gdk_text_property_to_text_list_for_display(), gdk_utf8_to_string_target().
  • Other low-level clipboard & dnd functions in GDK may be superfluous in light of the direct implementation in GTK (or should the functionality be pushed down to GDK from the current GTK implementation?):

    • D&D Support: (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()).

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

  • Bridged to native input methods with imquartz, but it breaks all text entry on Leopard.

Integration

  • Work on native theme engine (available in git.gnome.org/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. Also lists legacy GDK functionality that will be removed in 3.0. This will greatly simplify backend maintenance.

  • In gdk_quartz_draw_drawable(), check whether the moving areas on the same drawable hack actually works; also support source with depth 1.
  • Improve implementation of gdk_quartz_draw_arc().
  • Check if gdk_quartz_draw_image() works with 32-bit images.

Projects/GTK+/OSX (last edited 2013-11-23 15:29:33 by jralls)