[osx] Fix shortcuts for Edit actions when a native file dialog is displayed

Fixes #2719, related to #3615
This commit is contained in:
David Capello 2022-12-09 13:55:44 -03:00
parent c68fcb7da5
commit c25649d865
5 changed files with 19 additions and 4 deletions

View File

@ -697,7 +697,7 @@
<separator group="file_app" />
<item command="Exit" text="@.file_exit" />
</menu>
<menu text="@.edit" id="edit_menu">
<menu text="@.edit" id="edit_menu" standard="edit">
<item command="Undo" text="@.edit_undo" />
<item command="Redo" text="@.edit_redo" />
<item command="UndoHistory" text="@.edit_undo_history" group="edit_undo" />

2
laf

@ -1 +1 @@
Subproject commit 1b057f8f19be19ffc5aaa87d32312d3c0bcba86e
Subproject commit 63aa609864108d12dad979a2701c19bee58d4283

View File

@ -696,6 +696,7 @@ Widget* AppMenus::convertXmlelemToMenuitem(TiXmlElement* elem)
{
const char* id = elem->Attribute("id");
const char* group = elem->Attribute("group");
const char* standard = elem->Attribute("standard");
// is it a <separator>?
if (strcmp(elem->Value(), "separator") == 0) {
@ -745,6 +746,9 @@ Widget* AppMenus::convertXmlelemToMenuitem(TiXmlElement* elem)
if (group)
m_groups[group].end = menuitem;
if (standard && strcmp(standard, "edit") == 0)
menuitem->setStandardEditMenu();
// Has it a ID?
if (id) {
if (std::strcmp(id, "help_menu") == 0) {
@ -985,6 +989,10 @@ void AppMenus::createNativeSubmenus(os::Menu* osMenu,
if (appMenuItem) {
native.menuItem = osItem;
appMenuItem->setNative(native);
// Set this menu item as the standard "Edit" item for macOS
if (appMenuItem->isStandardEditMenu())
osItem->setAsStandardEditMenuItem();
}
if (child->type() == ui::kMenuItemWidget &&

View File

@ -42,7 +42,6 @@ AppMenuItem::AppMenuItem(const std::string& text,
, m_key(nullptr)
, m_commandId(commandId)
, m_params(params)
, m_isRecentFileItem(false)
, m_native(nullptr)
{
}

View File

@ -52,6 +52,13 @@ namespace app {
void disposeNative();
void syncNativeMenuItemKeyShortcut();
// Indicates if this is the standard "Edit" menu, used for macOS
// which requires a standard "Edit" menu when the native file
// dialog is displayed, so Command+C/X/V/A, etc. shortcuts start
// working as expected.
bool isStandardEditMenu() const { return m_isStandardEditMenu; }
void setStandardEditMenu() { m_isStandardEditMenu = true; }
static void setContextParams(const Params& params);
protected:
@ -64,7 +71,8 @@ namespace app {
KeyPtr m_key;
std::string m_commandId;
Params m_params;
bool m_isRecentFileItem;
bool m_isRecentFileItem = false;
bool m_isStandardEditMenu = false;
std::unique_ptr<Native> m_native;
static Params s_contextParams;