Skip to content

Commit b8173ae

Browse files
committed
Remove programmatic menu item triggering API
Eliminates the ability to programmatically trigger menu item events via the Trigger API in both C and C++ interfaces. Updates documentation, examples, and platform-specific implementations to reflect that events can now only be triggered through actual user interaction. Refactors Windows event handling to emit events directly from menu item click callbacks.
1 parent 2745a4e commit b8173ae

File tree

8 files changed

+125
-149
lines changed

8 files changed

+125
-149
lines changed

examples/menu_c_example/main.c

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -151,23 +151,11 @@ int main() {
151151

152152
printf("Added submenu with %zu items\n", native_menu_get_item_count(submenu));
153153

154-
// Demonstrate programmatic triggering
155-
printf("\n=== Testing Programmatic Event Triggering ===\n");
156-
157-
printf("Triggering file item...\n");
158-
native_menu_item_trigger(file_item);
159-
160-
printf("Triggering checkbox item...\n");
161-
native_menu_item_trigger(checkbox_item);
162-
163-
printf("Triggering checkbox item again...\n");
164-
native_menu_item_trigger(checkbox_item);
165-
166-
printf("Switching radio button...\n");
167-
native_menu_item_trigger(radio_item2);
168-
169-
printf("Triggering exit item...\n");
170-
native_menu_item_trigger(exit_item);
154+
// Note: Programmatic event triggering is no longer available via trigger API.
155+
// Events can only be triggered through actual user interaction.
156+
printf("\n=== Programmatic Event Triggering Removed ===\n");
157+
printf("Note: The trigger API has been removed. Events are now only "
158+
"triggered through user interaction.\n");
171159

172160
// Demonstrate listener removal
173161
printf("\n=== Testing Listener Removal ===\n");
@@ -179,8 +167,8 @@ int main() {
179167
printf("Failed to remove checkbox click listener\n");
180168
}
181169

182-
printf("Triggering checkbox item after removing click listener...\n");
183-
native_menu_item_trigger(checkbox_item);
170+
printf("Checkbox item listener removed. Events will now only be triggered "
171+
"through user interaction.\n");
184172

185173
// Open menu as context menu (this may not work in console applications)
186174
printf("\n=== Attempting to Open Context Menu ===\n");
@@ -207,13 +195,11 @@ int main() {
207195
on_menu_item_clicked, (void*)"Additional Test 2");
208196

209197
printf("Added multiple listeners for the same event\n");
210-
printf("Triggering item with multiple listeners...\n");
211-
native_menu_item_trigger(additional_item);
198+
printf("Multiple listeners can be registered for the same event type.\n");
212199

213200
// Remove one listener
214201
native_menu_item_remove_listener(additional_item, additional_listener1);
215-
printf("Removed first listener, triggering again...\n");
216-
native_menu_item_trigger(additional_item);
202+
printf("Removed first listener. Remaining listener will receive events.\n");
217203

218204
native_menu_item_destroy(additional_item);
219205

@@ -228,11 +214,10 @@ int main() {
228214
printf(
229215
"5. Handling NATIVE_MENU_ITEM_EVENT_SUBMENU_OPENED and "
230216
"NATIVE_MENU_ITEM_EVENT_SUBMENU_CLOSED\n");
231-
printf("6. Programmatic event triggering\n");
232-
printf("7. Event listener removal with native_menu_item_remove_listener()\n");
233-
printf("8. Multiple listeners for the same event type\n");
234-
printf("9. Manual state management for checkbox and radio items\n");
235-
printf("10. Submenu support with event handling\n");
217+
printf("6. Event listener removal with native_menu_item_remove_listener()\n");
218+
printf("7. Multiple listeners for the same event type\n");
219+
printf("8. Manual state management for checkbox and radio items\n");
220+
printf("9. Submenu support with event handling\n");
236221

237222
// Cleanup
238223
native_menu_item_destroy(file_item);

examples/menu_example/main.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,23 +83,23 @@ int main() {
8383

8484
std::cout << "Menu created with " << menu->GetItemCount() << " items" << std::endl;
8585

86-
// Demonstrate programmatic triggering
86+
// Demonstrate programmatic triggering by emitting events directly
8787
std::cout << "\n=== Testing Programmatic Event Triggering ===" << std::endl;
8888

8989
std::cout << "Triggering file item..." << std::endl;
90-
file_item->Trigger();
90+
file_item->Emit(MenuItemClickedEvent(file_item->GetId()));
9191

9292
std::cout << "Triggering checkbox item..." << std::endl;
93-
checkbox_item->Trigger();
93+
checkbox_item->Emit(MenuItemClickedEvent(checkbox_item->GetId()));
9494

9595
std::cout << "Triggering checkbox item again..." << std::endl;
96-
checkbox_item->Trigger();
96+
checkbox_item->Emit(MenuItemClickedEvent(checkbox_item->GetId()));
9797

9898
std::cout << "Switching radio button..." << std::endl;
99-
radio_item2->Trigger();
99+
radio_item2->Emit(MenuItemClickedEvent(radio_item2->GetId()));
100100

101101
std::cout << "Triggering exit item..." << std::endl;
102-
exit_item->Trigger();
102+
exit_item->Emit(MenuItemClickedEvent(exit_item->GetId()));
103103

104104
// Open menu as context menu (this may not work in console applications)
105105
std::cout << "\n=== Attempting to Open Context Menu ===" << std::endl;
@@ -149,8 +149,8 @@ int main() {
149149

150150
// Test submenu items
151151
std::cout << "Triggering submenu items..." << std::endl;
152-
submenu_item1->Trigger();
153-
submenu_item2->Trigger();
152+
submenu_item1->Emit(MenuItemClickedEvent(submenu_item1->GetId()));
153+
submenu_item2->Emit(MenuItemClickedEvent(submenu_item2->GetId()));
154154

155155
std::cout << "\n=== Event System Demo Complete ===" << std::endl;
156156
std::cout << "This example demonstrates:" << std::endl;
@@ -161,7 +161,7 @@ int main() {
161161
std::cout << "5. Handling MenuItemSubmenuOpenedEvent and "
162162
"MenuItemSubmenuClosedEvent"
163163
<< std::endl;
164-
std::cout << "6. Programmatic event triggering" << std::endl;
164+
std::cout << "6. Programmatic event emission using Emit()" << std::endl;
165165
std::cout << "7. Submenu support with event propagation" << std::endl;
166166

167167
} catch (const std::exception& e) {

src/capi/menu_c.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -596,18 +596,6 @@ bool native_menu_item_remove_listener(native_menu_item_t item, int listener_id)
596596
}
597597
}
598598

599-
bool native_menu_item_trigger(native_menu_item_t item) {
600-
if (!item)
601-
return false;
602-
603-
try {
604-
auto menu_item = static_cast<MenuItem*>(item);
605-
return menu_item->Trigger();
606-
} catch (...) {
607-
return false;
608-
}
609-
}
610-
611599
// Menu C API Implementation
612600

613601
native_menu_t native_menu_create(void) {

src/capi/menu_c.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -346,14 +346,6 @@ int native_menu_item_add_listener(native_menu_item_t item,
346346
FFI_PLUGIN_EXPORT
347347
bool native_menu_item_remove_listener(native_menu_item_t item, int listener_id);
348348

349-
/**
350-
* Programmatically trigger a menu item
351-
* @param item The menu item
352-
* @return true if triggered successfully, false otherwise
353-
*/
354-
FFI_PLUGIN_EXPORT
355-
bool native_menu_item_trigger(native_menu_item_t item);
356-
357349
/**
358350
* Menu operations
359351
*/

src/menu.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -416,16 +416,6 @@ class MenuItem : public EventEmitter<MenuEvent>, public NativeObjectProvider {
416416
*/
417417
void RemoveSubmenu();
418418

419-
/**
420-
* @brief Programmatically trigger this menu item.
421-
*
422-
* Simulates a user click on the menu item, firing the appropriate
423-
* events and callbacks.
424-
*
425-
* @return true if the item was successfully triggered, false otherwise
426-
*/
427-
bool Trigger();
428-
429419
protected:
430420
/**
431421
* @brief Internal method to get the platform-specific native menu item object.

src/platform/linux/menu_linux.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -260,16 +260,6 @@ void MenuItem::RemoveSubmenu() {
260260
}
261261
}
262262

263-
bool MenuItem::Trigger() {
264-
if (!IsEnabled())
265-
return false;
266-
if (pimpl_->gtk_menu_item_) {
267-
g_signal_emit_by_name(pimpl_->gtk_menu_item_, "activate");
268-
return true;
269-
}
270-
return false;
271-
}
272-
273263
void* MenuItem::GetNativeObjectInternal() const {
274264
return (void*)pimpl_->gtk_menu_item_;
275265
}

src/platform/macos/menu_macos.mm

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -524,17 +524,6 @@ - (void)menuDidClose:(NSMenu*)menu {
524524
[pimpl_->ns_menu_item_ setSubmenu:nil];
525525
}
526526

527-
bool MenuItem::Trigger() {
528-
if (!IsEnabled())
529-
return false;
530-
531-
// Call the block directly instead of going through target-action
532-
if (pimpl_->ns_menu_item_target_.clickedBlock) {
533-
pimpl_->ns_menu_item_target_.clickedBlock(pimpl_->id_);
534-
}
535-
return true;
536-
}
537-
538527
void* MenuItem::GetNativeObjectInternal() const {
539528
return (__bridge void*)pimpl_->ns_menu_item_;
540529
}

0 commit comments

Comments
 (0)