Beispiel #1
0
static void s_video_helper_kbd_atexit (void)
{
	if (s_video_helper_keybd.fd < 0) {
		return;
	}
	if (s_video_helper_keybd.pid == getpid()) {
		s_video_helper_kbd_uninit();
		s_server_quit(xynth_server->window);
	}
}
Beispiel #2
0
static void s_video_helper_kbd_signal_handler (int v)
{
	int i;

	s_video_helper_kbd_uninit();
	s_server_quit(xynth_server->window);

	debugf(DSER, "Signal %d: %s received %s", v, strsignal(v), (v == SIGINT) ? "(ctrl-alt-backspace or ctrl-c pressed)" : "");

	for (i = 0; i < sizeof(s_video_helper_keybd_sig2catch); i++) {
		if (s_video_helper_keybd_sig2catch[i] == v) {
			sigaction(v, s_video_helper_keybd.old_signal_handler + i, NULL);
			raise(v);
			break;
		}
	}
	if (i >= sizeof(s_video_helper_keybd_sig2catch)) {
		debugf(DSER, "Illegal call to signal_handler, raising segfault");
		raise(SIGSEGV);
	}
}
Beispiel #3
0
LRESULT CALLBACK MainWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        int k = 0;
        int m = 0;
	s_rect_t coor;
	BYTE chars[2];
        BYTE keystate[256];
	s_video_gdi_data_t *priv = (s_video_gdi_data_t *) xynth_server->driver->driver_data;

	switch (message) {
		case WM_DESTROY:
			s_server_quit(xynth_server->window);
			PostQuitMessage(0);
                        break;
		case WM_CREATE:
                        ShowCursor(FALSE);
		case WM_PAINT:
		case WM_DISPLAYCHANGE:
			coor.x = 0;
			coor.y = 0;
			coor.w = xynth_server->window->surface->width;
			coor.h = xynth_server->window->surface->height;
			s_video_gdi_server_surface_update(&coor);
			break;
		case WM_LBUTTONDOWN:
                        priv->mouse.buttons |= MOUSE_BUTTON_LEFT;
                        goto mouse_event;
		case WM_LBUTTONUP:
                        priv->mouse.buttons &= ~MOUSE_BUTTON_LEFT;
                        goto mouse_event;
		case WM_RBUTTONDOWN:
                        priv->mouse.buttons |= MOUSE_BUTTON_RIGHT;
                        goto mouse_event;
		case WM_RBUTTONUP:
                        priv->mouse.buttons &= ~MOUSE_BUTTON_RIGHT;
                        goto mouse_event;
                case WM_MOUSEMOVE:
mouse_event:            priv->mouse.x = (((int) lParam) & 0xFFFF);
                        priv->mouse.y = ((((int) lParam) >> 16) & 0xFFFF);
			if (priv->mouse_fd[1] != -1) {
				s_pipe_api_write(priv->mouse_fd[1], &m, sizeof(int));
			}
                        break;
                case WM_KEYUP:
                case WM_SYSKEYUP:
                        priv->keybd.state = EVENT_TYPE_KEYBOARD_RELEASED;
                        goto keybd_event;
                case WM_KEYDOWN:
                case WM_SYSKEYDOWN:
                        priv->keybd.state = EVENT_TYPE_KEYBOARD_PRESSED;
keybd_event:            GetKeyboardState(keystate);
                        priv->keybd.scancode = (((unsigned int) lParam) >> 16) & 0xFF;
                        priv->keybd.button = priv->keymap[priv->keybd.scancode];
                        priv->keybd.keycode = priv->keymap[priv->keybd.scancode];
                        priv->keybd.ascii = wParam;
                        if (ToAscii(wParam, lParam, keystate, (WORD *) chars, 0) == 1) {
                                priv->keybd.ascii = chars[0];
                        }
			if (priv->keybd_fd[1] != -1) {
	         		s_pipe_api_write(priv->keybd_fd[1], &k, sizeof(int));
          		}
                        break;
//		default:
//      		printf("%d\n", message);
	}

	return DefWindowProc(hwnd, message, wParam, lParam);
}