[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.platform.swt] Re: SWT and UI Thread block

Tried this (but with the ! Sign -- if (!c.getDisplay().readAndDis....; works
on MAC and Linux, but now breaks the Windows side.

I even added a flag that requires the read the first time through (while
first || (....)).  No avail.


On 6/13/08 12:03 PM, in article g2u5m7$cj8$1@xxxxxxxxxxxxxxxxx, "Roland
Tepp" <roland@xxxxxxxxxxxx> wrote:

> Try this:
> 
> Control c = Display.getCurrent().getFocusControl();
> if (c != null) {
>       Menu old = c.getMenu();
>       MenuManager mm = new MenuManager();
>       for (String s : cats) {
> 
>         mm.add(new _Action(s, isSource));
> 
>       }
> 
>       final Menu m = mm.createContextMenu(c);
>       c.setMenu(m);
>       m.setVisible(true);
>       while (isExternalTaskFinished()) {
>          if (c.getDisplay().readAndDispatch()) c.getDisplay().sleep();
>       }
>       c.setMenu(old);
>       m.dispose();
> }
> 
> 
> Mark Ingerman kirjutas mulle  midagi seesugust:
>> I have a problem where I want the current UI execution to stop, and perform
>> some other ui (not a dialog box), and wait until that task is finished
>> before returning to the previous spot.
>> 
>> I have code that is running inside GEF that wants to put up a menu when the
>> end connection (mouse down) event is run.  I tried the following trick; it
>> works on the MAC and under windows, but not under Linux.  I wonder if there
>> is a better way.
>> 
>> Here is the code:
>> 
>>   do some code....
>> 
>>   Control c = Display.getCurrent().getFocusControl();
>>   if (c != null) {
>>     Menu old = c.getMenu();
>>     MenuManager mm = new MenuManager();
>>     for (String s : cats) {
>> 
>>       mm.add(new _Action(s, isSource));
>> 
>>     }
>> 
>>     final Menu m = mm.createContextMenu(c);
>>     c.setMenu(m);
>>     m.setVisible(true);
>>     c.getDisplay().readAndDispatch();
>>     c.setMenu(old);
>> 
>>  }
>> 
>> 
>>  finish the code....
>> 
>> 
>> With the c.getDisplay().readAndDispatch() code in, the menu comes up, and
>> until either one of the menu items are selected or ESC is pressed, the
>> c.setMenu(old) statement and the following statements don't execute.
>> 
>> Under Linux, however, it falls through, processes the rest of the event, and
>> then allows for the firing of the menu.
>> 
>> Is there a better way to do this?

-- 
Mark M. Ingerman
Senior Architect
Metatomix
www.metatomix.com
781 907-6746