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

The problem on the Windows box seemed to be with the processing of the mouse
up button before the processing of the connection, so I have found a hack
and have moved the question to the GEF site.  Thank you all for the help.


On 6/13/08 6:16 PM, in article C47869E7.4E8A%mingerman@xxxxxxxxxxxxx,
"Ingerman Mark" <mingerman@xxxxxxxxxxxxx> wrote:

> 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