TIP 517: Add -activerelief Configuration Option to the menu widget

Login
Author:         Francois Vogel <fvogelnew1@free.fr>
State:          Final
Type:           Project
Vote:           Done
Created:        13-Sept-2018
Post-History:
Keywords:       tk menu
Tcl-Version:    8.7
Tk-Branch:      tip-517

Abstract

This TIP proposes to get rid of the motif-style rendering that is still how the active menu entry is rendered on Linux.

Rationale

On Linux, the active entry of menues is rendered with a TK_RELIEF_RAISED relief. This is hardcoded in unix/tkUnixMenu.c which prevents users from having, say, a flat rendering which is usually praised as more modern.

This issue originally surfaced in bug 43b596451e.

Proposal

It is proposed to add an -activerelief configuration option to the menu widget, to make the relief of the active entry configurable. Acceptable values are raised, sunken, flat, ridge, solid, and groove.

For backwards compatibility reasons, this new option will have its defaults such that the rendering is unchanged compared to the current state of affairs, i.e. it will be raised on Linux, and flat on other platforms.

This new option will be accepted on all platforms, however on macOS it will be silently ignored since the native menues are used on this platform (TkpDrawMenuEntry is an empty procedure on macOS).

Implementation

An implementation of this TIP can be found in the tip-517 branch.

Alternatives

Alternatively, instead of adding a new -activerelief menu option, the issue raised in bug 43b596451e could be resolved by changing the rendering of the active entry in Linux menues to become TK_RELIEF_FLAT, and keep the current TK_RELIEF_RAISED only if tk_strictMotif is set. The drawback is that this would constitute a backwards incompatible change - However in turn this could be deemed acceptable in the current alpha state of 8.7.

An implementation for this alternate proposal can be found in branch tip-517-alt.

Having balanced the pros and cons between the two approaches, I'd prefer to add -activerelief, which in addition to be a backwards compatible change, has the merit of introducing additional configuration flexibility.

Copyright

This document has been placed in the public domain.