From: Philippe O. <pom...@ne...> - 2005-07-23 18:20:17
|
Tim wall wrote: > So the question is this: > Given a composite containing an embedded AWT frame (sic -- let's be > careful with terms here), can you tell programmatically that > it has an AWT component inside it? > If not, I'd file a bug report against the SWT/AWT bridge component > (although SWT will likely consider it an RFE). That is exactly my point. Thanks for expressing it so well. ! You cannot 'discover' programmatically an AWT frame, unless you use the horrible kludge below (using reflection on anonymous inner classes!) on all composites you introspect, because the SWT_AWT creates some listeners that keeps of ref to the AWT frame. One the of the listener will have a ref to the Frame, but this is more of a side-effect. So that's why I entered the bug : https://bugs.eclipse.org/bugs/show_bug.cgi?id=104301 This assumes that control is some composite, and should be wrapped in the proper exceptions: Widget wid = (Widget) control; final Field field = Widget.class.getDeclaredField("eventTable"); field.setAccessible(true); EventTable et = (EventTable) field.get(wid); Listener[] list = et.listeners; for (int k = 0; k < list.length; k++) { Listener listener = list[k]; final Field valframe = listener.getClass().getDeclaredField("val$frame"); valframe.setAccessible(true); Object fr = valframe.get(listener); if (fr instanceof Frame) { Frame foundFrame = (Frame) fr; System.out.println("Yehaa we have an embedded AWT frame !" + foundFrame); } } I'd rather rely on less kludgy code for that ;-) -- Cheers Philippe philippe ombredanne | nexB - Open by Design (tm) 1 650 799 0949 | pombredanne at nexb.com http://www.nexb.com http://sf.net/projects/easyeclipse http://eclipse.techforge.com |