1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
%%
%% wings_io.erl --
%%
%% This module contains most of the low-level GUI for Wings.
%%
-module(wings_io).
-export([get_matching_events/1]).
-define(EVENT_QUEUE, wings_io_event_queue).
%%%
%%% Input.
%%%
get_matching_events(Filter) ->
Eq = get(?EVENT_QUEUE),
get_matching_events_1(Filter, Eq, [], []).
get_matching_events_1(Filter, Eq0, Match, NoMatch) ->
case queue:out(Eq0) of
{{value,Ev},Eq} ->
case Filter(Ev) of
false ->
get_matching_events_1(Filter, Eq, Match, [Ev|NoMatch]);
true ->
get_matching_events_1(Filter, Eq, [Ev|Match], NoMatch)
end;
{empty,{In,Out}} ->
case Match of
[] -> [];
_ ->
put(?EVENT_QUEUE, {In, lists:reverse(NoMatch, Out)}),
Match
end
end.
|