Skip to content

NSFontManager doesn't set a delegate; doesn't call changeFont: callback #368

@sgharms

Description

@sgharms

Per: https://www.gnustep.org/resources/OpenStepSpec/ApplicationKit/Classes/NSFontManager.html

NSFontManager accepts messages from font conversion user-interface objects such as the Font menu or the Font panel (see NSFontPanel for more details) and appropriately converts the current font in the selection by sending a changeFont: message up the responder chain.

Based on experimentation:

2025-09-30 04:36:17.583 TextEdit[80363:100990] Begin responder enumeration:
2025-09-30 04:36:17.584 TextEdit[80363:100990] NSPanel responds to changeFont:: NO
2025-09-30 04:36:17.584 TextEdit[80363:100990] NSApplication responds to changeFont:: NO

No responder is found that could possibly respond to this message.

It's notable that there's a FIXME note at

https://github.com/gnustep/libs-gui/blob/master/Source/NSFontManager.m#L1031-L1034

In application code that invokes the panel, there is also an implementation of changeFont: implying that the original author expected the invoking object to be part of the responder chain.

  1. Should the invoking object be part of the responder chain "for free"

or

  1. Should the invoking object be required to set itself as the delegate and a code change in NSFontManager is required to try the delegate first before spray-n-praying to the responder chain?

I'm very unpracticed at ObjC/GS development, so I don't know whether the caller should be rolled into the responding chain automatically. That'd be ergonomic, but it's Magic ™️ . The latter is unmagical, reqiures one more line in application code, but is traceable and very unsurprising. It would require a small code change.

If 2 is viable, I'd be happy to submit the patch I'm using which Works for Me ™️

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions