Beispiel #1
0
LOCAL void rfb_passevent_keyboard(struct rfb_Display *mod, TIMSG *msg)
{
	/* pass keyboard events to focused window, else to the
	** hovered window (also setting the focus): */
	if (!rfb_passevent_to_focus(mod, msg))
		rfb_passevent_by_mousexy(mod, msg, TTRUE);
}
Beispiel #2
0
LOCAL void rfb_passevent_mousebutton(struct rfb_Display *mod, TIMSG *msg)
{
	TBOOL down = msg->timsg_Code & (TMBCODE_LEFTDOWN |
		TMBCODE_RIGHTDOWN | TMBCODE_MIDDLEDOWN);
	struct rfb_Window *v = rfb_passevent_by_mousexy(mod, msg, down);

	if (!down && v != mod->rfb_FocusWindow)
		rfb_passevent_to_focus(mod, msg);
}
Beispiel #3
0
static void rfb_processevent(RFBDISPLAY *mod)
{
	TAPTR TExecBase = TGetExecBase(mod);
	TIMSG *msg;
	
	if (mod->rfb_RndIMsgPort == TNULL)
		return;

	while ((msg = TGetMsg(mod->rfb_RndIMsgPort)))
	{
		/*RFBWINDOW *v = (RFBWINDOW *) msg->timsg_Instance;*/
		TIMSG *imsg;
		
		switch (msg->timsg_Type)
		{
			case TITYPE_INTERVAL:
				TDBPRINTF(TDB_WARN,("unhandled event: INTERVAL\n"));
				break;
			case TITYPE_REFRESH:
			{
				TINT drect[4];
				drect[0] = msg->timsg_X;
				drect[1] = msg->timsg_Y;
				drect[2] = msg->timsg_X + msg->timsg_Width - 1;
				drect[3] = msg->timsg_Y + msg->timsg_Height - 1;
				rfb_damage(mod, drect, TNULL);
				break;
			}
			case TITYPE_NEWSIZE:
				TDBPRINTF(TDB_WARN,("unhandled event: NEWSIZE\n"));
				break;
				
			case TITYPE_CLOSE:
			{
				/* send to root window */
				TLock(mod->rfb_InstanceLock);
				RFBWINDOW *v = (RFBWINDOW *) TLASTNODE(&mod->rfb_VisualList);
				if (rfb_getimsg(mod, v, &imsg, TITYPE_CLOSE))
					TPutMsg(v->rfbw_IMsgPort, TNULL, imsg);
				TUnlock(mod->rfb_InstanceLock);
				break;
			}
			case TITYPE_FOCUS:
				TDBPRINTF(TDB_INFO,("unhandled event: FOCUS\n"));
				break;
			case TITYPE_MOUSEOVER:
				TDBPRINTF(TDB_INFO,("unhandled event: MOUSEOVER\n"));
				break;
				
			case TITYPE_KEYUP:
			case TITYPE_KEYDOWN:
				/* pass keyboard events to focused window, else to the
				 * hovered window (also setting the focus): */
				if (!rfb_passevent_to_focus(mod, msg))
					rfb_passevent_by_mousexy(mod, msg, TTRUE);
				break;

			case TITYPE_MOUSEMOVE:
				/* pass mouse movements to focused and hovered window: */
				if (rfb_passevent_by_mousexy(mod, msg, TFALSE) != 
					mod->rfb_FocusWindow)
					rfb_passevent_to_focus(mod, msg);
				break;
				
			case TITYPE_MOUSEBUTTON:
			{
				/* set focus on mousebutton down */
				TBOOL focus = msg->timsg_Code & (TMBCODE_LEFTDOWN | 
					TMBCODE_RIGHTDOWN | TMBCODE_MIDDLEDOWN);
				rfb_passevent_by_mousexy(mod, msg, focus);
				break;
			}
		}
		TReplyMsg(msg);
	}
}
Beispiel #4
0
LOCAL void rfb_passevent_mousemove(struct rfb_Display *mod, TIMSG *msg)
{
	/* pass mouse movements to focused and hovered window: */
	if (rfb_passevent_by_mousexy(mod, msg, TFALSE) != mod->rfb_FocusWindow)
		rfb_passevent_to_focus(mod, msg);
}