casting in fbdev
[winnie] / libwinnie / src / fbdev / event.cc
1 /*
2 winnie - an experimental window system
3
4 Copyright (C) 2013 Eleni Maria Stea
5
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19 Author: Eleni Maria Stea <elene.mst@gmail.com>
20 */
21
22 #ifdef WINNIE_FBDEV
23 #include <stdio.h>
24
25 #include <errno.h>
26 #include <unistd.h>
27 #include <sys/select.h>
28
29 #include "event.h"
30 #include "wm.h"
31 #include "keyboard.h"
32 #include "mouse.h"
33
34 void process_events()
35 {
36         int keyb_fd = get_keyboard_fd();
37         int mouse_fd = get_mouse_fd();
38
39         for(;;) {
40                 wm->process_windows();
41
42                 fd_set read_set;
43
44                 FD_ZERO(&read_set);
45                 FD_SET(keyb_fd, &read_set);
46                 FD_SET(mouse_fd, &read_set);
47
48                 int maxfd = keyb_fd > mouse_fd ? keyb_fd : mouse_fd;
49
50                 while(select(maxfd + 1, &read_set, 0, 0, 0) == -1 && errno == EINTR);
51
52                 if(FD_ISSET(keyb_fd, &read_set)) {
53                         process_keyboard_event();
54                 }
55                 if(FD_ISSET(mouse_fd, &read_set)) {
56                         process_mouse_event();
57                 }
58         }
59 }
60 #endif // WINNIE_FBDEV