Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 01/07/2018 at 09:59, xxxxxxxx wrote:
User Information: Cinema 4D Version: R19 Platform: Windows ; Language(s) : C++ ;
--------- Hi,
I was experimenting with a CommandData plugin and shortcuts (as sequel on previous question).
Registering a CommandData using the PLUGINFLAG_COMMAND_STICKY, according to the documentation I should be able to detect the user pressing the shortcut key, and releasing it. In both cases CommandData::Execute would be called.
This, however, is only the case when the user keeps the shortcut pressed long enough. If the shortcut is pressed shortly and released, only a single Execute is performed on the "down-stroke". The "up-stroke" (release) is never detected.
#include "c4d.h" // Dummy IDs - for demonstration purposes only #define COMMAND_PLUGIN_ID 1999999 Bool gShowWidget = FALSE; class MyCommand : public CommandData { INSTANCEOF(MyCommand, CommandData) public: virtual Bool Execute(BaseDocument* doc); }; Bool MyCommand::Execute(BaseDocument* doc) { gShowWidget = !gShowWidget; String txt = gShowWidget ? "On" : "Off"; GePrint("Widget is " + txt); return TRUE; } Bool RegisterMyCommand(void) { return RegisterCommandPlugin(COMMAND_PLUGIN_ID, "Testing", PLUGINFLAG_COMMAND_STICKY, AutoBitmap("icon.png"), "Test", NewObjClear(MyCommand)); } // ==================================== // Plugin Main // ==================================== Bool PluginStart(void) { RegisterMyCommand(); return TRUE; } void PluginEnd(void) { } Bool PluginMessage(Int32 id, void * data) { switch (id) { case C4DPL_INIT_SYS: if (!resource.Init()) return FALSE; return TRUE; case C4DMSG_PRIORITY: return TRUE; case C4DPL_BUILDMENU: break; case C4DPL_ENDACTIVITY: return TRUE; } return FALSE; }
On 03/07/2018 at 00:46, xxxxxxxx wrote:
Hi C4D,
thanks for making us aware.
I filled a bug report.
On 03/07/2018 at 09:45, xxxxxxxx wrote:
Thanks for confirming.
I suppose there's no workaround other than to use a SceneHook and check for keystrokes in KeyboardInput ... as has been mentioned by Andreas here
On 04/07/2018 at 00:27, xxxxxxxx wrote:
Hi C4DS,
You are right, SceneHook or a ToolData depending on the context is the way to go. But as you already discover they got some limitation.
Hope it's a working workaround for you. Cheers, Maxime