Skip to content

Instantly share code, notes, and snippets.

@hungtatai
Created March 1, 2013 17:17
Show Gist options
  • Save hungtatai/5066196 to your computer and use it in GitHub Desktop.
Save hungtatai/5066196 to your computer and use it in GitHub Desktop.

SWT on OSX (SWT.Selection / SWT.MenuDetect)

一般來說SWT.Selection是點擊滑鼠左鍵的事件,SWT.MenuDetect是點擊滑鼠右鍵的事件

不過在OSX中SystemTray偵測點擊事件如果用SWT.Selection會噴出可怕的錯誤。

雖然用起來感覺不出有問題,但總是不太舒服。他的行為跟預期的也不一樣,menu會在點擊icon的位置上出現。(預期是切齊狀態列)

錯誤訊息會長的像這樣

Mar  1 01:04:51 Dais-MacBook-Air.local java[20437] <Error>: Failed to create window context device
Mar  1 01:04:51 Dais-MacBook-Air.local java[20437] <Error>: CGWindowContextCreate: failed to create window context delegate.
2013-03-01 01:04:51.236 java[20437:270f] _initWithWindowNumber: error creating graphics ctxt object for ctxt:0x2450f, window:0xffffffff

另外SWT.MenuDetect在OSX中,左鍵點擊或右鍵點擊都會有這個Event。SWT.Selection則是左鍵點擊。

正確作法如下:

TrayItem  system_tray;
system_tray = new TrayItem(display.getSystemTray(), SWT.NONE);
system_tray.setImage(create_image("icon.png"));
system_tray.setText("SwtBot - Test");
system_tray.addListener(SWT.MenuDetect, new Listener() {
	@Override
	public void handleEvent(Event arg0) {
		menu.setVisible(true);
	}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment