Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 421128

Summary: Exception occurs when setting an accelerator on menus
Product: [RT] RAP Reporter: Matthias Nick <Matthias.Nick>
Component: RWTAssignee: Project Inbox <rap-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: hiromu.hota, ivan
Version: 2.2   
Target Milestone: 2.2 M3   
Hardware: PC   
OS: Windows 7   
Whiteboard:
Attachments:
Description Flags
Demo class to reproduce the bug
none
Demo class with F11 none

Description Matthias Nick CLA 2013-11-06 02:33:18 EST
Created attachment 237224 [details]
Demo class to reproduce the bug

Hi, 

when I set an accelerator on a menu (e.g. F11), I get an exception:
fileSaveItem.setText("&Save\tF11");
fileSaveItem.setAccelerator(SWT.F11);


java.lang.IllegalArgumentException: Empty key sequence definition found
	at org.eclipse.rap.rwt.internal.util.ActiveKeysUtil.translateKeySequence(ActiveKeysUtil.java:278)
	at org.eclipse.rap.rwt.internal.util.ActiveKeysUtil.translateKeySequences(ActiveKeysUtil.java:267)
	at org.eclipse.rap.rwt.internal.util.ActiveKeysUtil.renderActiveKeys(ActiveKeysUtil.java:131)
	at org.eclipse.swt.internal.widgets.displaykit.DisplayLCA.render(DisplayLCA.java:124)
	at org.eclipse.rap.rwt.internal.lifecycle.Render.execute(Render.java:29)
	at org.eclipse.rap.rwt.internal.lifecycle.PhaseExecutor.execute(PhaseExecutor.java:35)
	at org.eclipse.rap.rwt.internal.lifecycle.SimpleLifeCycle.execute(SimpleLifeCycle.java:51)
	at org.eclipse.rap.rwt.internal.service.LifeCycleServiceHandler.runLifeCycle(LifeCycleServiceHandler.java:139)
	at org.eclipse.rap.rwt.internal.service.LifeCycleServiceHandler.handlePostRequest(LifeCycleServiceHandler.java:125)
	at org.eclipse.rap.rwt.internal.service.LifeCycleServiceHandler.synchronizedService(LifeCycleServiceHandler.java:76)
	at org.eclipse.rap.rwt.internal.service.LifeCycleServiceHandler.service(LifeCycleServiceHandler.java:67)
	at org.eclipse.rap.rwt.engine.RWTServlet.handleValidRequest(RWTServlet.java:119)
	at org.eclipse.rap.rwt.engine.RWTServlet.handleRequest(RWTServlet.java:106)
	at org.eclipse.rap.rwt.engine.RWTServlet.doPost(RWTServlet.java:99)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:457)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
	at org.eclipse.jetty.server.Server.handle(Server.java:368)
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
	at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
	at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953)
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
	at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
	at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
	at java.lang.Thread.run(Unknown Source)


However, when I use "ALT+T" as accelerator it works as expected:
fileSaveItem.setText("&Save\tALT+T");
fileSaveItem.setAccelerator(SWT.ALT + 'T');

Having F11 accelerator in SWT works as expected. I also attached a demo class to reproduce the bug. (Related forum post: http://www.eclipse.org/forums/index.php/m/1171605/#msg_1171605)
Comment 1 Matthias Nick CLA 2013-11-06 02:40:28 EST
Created attachment 237225 [details]
Demo class with F11
Comment 2 Ivan Furnadjiev CLA 2013-11-06 02:56:51 EST
The special (non letters - F1-F12) keys are not converted to string correctly - see AcceleratorBinding#acceleratorAsString.
Comment 3 Matthias Nick CLA 2013-11-06 03:01:21 EST
So what should I in order to get F1 to F12 working in RAP?
Comment 4 Ivan Furnadjiev CLA 2013-11-06 03:07:09 EST
(In reply to Matthias Nick from comment #3)
> So what should I in order to get F1 to F12 working in RAP?
I'm working on a fix :-).
Comment 5 Matthias Nick CLA 2013-11-06 03:08:32 EST
Great :-) Let me know when you're done.
Comment 6 Ivan Furnadjiev CLA 2013-11-06 07:29:01 EST
Fixed in master with commit 7da14b9045e8ece9fb509e584dd3f48d3c707f6b.
Comment 7 Hiromu Hota CLA 2017-12-01 19:45:14 EST
I have a menu with accelerator of F4.
The issue is that this menu is invoked even when Enter (CR) key is pressed-down.

I found that when these keys are pressed-down the following KeyEvent is issued:
F4 (event.type=SWT.KeyDown, event.character='' (0), event.keyCode=16777229 (0x100000D), stateMask=0)
Enter=CR (event.type=SWT.KeyDown, event.character='\r', event.keyCode=13 (0xD), stateMask=0)

F4(0x100000D) can be (char) casted to 0xD, then matches Enter (CR).

I hope you could take a look.
Comment 8 Ivan Furnadjiev CLA 2017-12-04 02:32:10 EST
If this is reproducible with latest RAP 3.3 relase please open a new bugzilla.