Sticky key not being sticky
-
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