Merge remote-tracking branch 'whot/for-keith'

This commit is contained in:
Keith Packard 2011-05-25 09:40:51 -06:00
commit 4725d6b0db
16 changed files with 94 additions and 31 deletions

View File

@ -1360,15 +1360,6 @@ InitPointerAccelerationScheme(DeviceIntPtr dev,
return TRUE;
}
Bool
InitAbsoluteClassDeviceStruct(DeviceIntPtr dev)
{
/* This is an API-preserving noop. Instructions: Kill when no more drivers
* call it. The infrastructure behind hasn't really been used, so any calls
* are likely just a declaration that the device is absolute. */
return FALSE;
}
Bool
InitFocusClassDeviceStruct(DeviceIntPtr dev)
{

View File

@ -112,6 +112,7 @@ Equipment Corporation.
#include <X11/Xproto.h>
#include "windowstr.h"
#include "inputstr.h"
#include "inpututils.h"
#include "scrnintstr.h"
#include "cursorstr.h"
@ -2195,7 +2196,7 @@ DeliverEventsToWindow(DeviceIntPtr pDev, WindowPtr pWin, xEvent
*/
if (!grab && ActivateImplicitGrab(pDev, client, pWin, pEvents, deliveryMask))
/* grab activated */;
else if ((type == MotionNotify))
else if (type == MotionNotify)
pDev->valuator->motionHintWindow = pWin;
else if (type == DeviceMotionNotify || type == DeviceButtonPress)
CheckDeviceGrabAndHintWindow (pWin, type,
@ -2832,7 +2833,7 @@ CheckMotion(DeviceEvent *ev, DeviceIntPtr pDev)
WindowPtr prevSpriteWin, newSpriteWin;
SpritePtr pSprite = pDev->spriteInfo->sprite;
verify_internal_event(ev);
verify_internal_event((InternalEvent *)ev);
prevSpriteWin = pSprite->win;
@ -5906,7 +5907,7 @@ PickPointer(ClientPtr client)
if (!client->clientPtr)
{
DeviceIntPtr it = inputInfo.devices;
it = inputInfo.devices;
while (it)
{
if (IsMaster(it) && it->spriteInfo->spriteOwner)

View File

@ -574,7 +574,7 @@ void verify_internal_event(const InternalEvent *ev)
for (i = 0; i < sizeof(xEvent); i++, data++)
{
ErrorF("%02hx ", *data);
ErrorF("%02hhx ", *data);
if ((i % 8) == 7)
ErrorF("\n");

View File

@ -52,6 +52,7 @@ Bool ephyrNoDRI=FALSE ;
Bool ephyrNoXV=FALSE ;
static int mouseState = 0;
static Rotation ephyrRandr = RR_Rotate_0;
typedef struct _EphyrInputPrivate {
Bool enabled;
@ -249,7 +250,11 @@ ephyrMapFramebuffer (KdScreenInfo *screen)
EPHYR_LOG("screen->width: %d, screen->height: %d index=%d",
screen->width, screen->height, screen->mynum);
KdComputePointerMatrix (&m, scrpriv->randr, screen->width, screen->height);
/*
* Use the rotation last applied to ourselves (in the Xephyr case the fb
* coordinate system moves independently of the pointer coordiante system).
*/
KdComputePointerMatrix (&m, ephyrRandr, screen->width, screen->height);
KdSetPointerMatrix (&m);
priv->bytes_per_line = ((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2;
@ -530,7 +535,15 @@ ephyrRandRSetConfig (ScreenPtr pScreen,
* Set new configuration
*/
scrpriv->randr = KdAddRotation (screen->randr, randr);
/*
* We need to store the rotation value for pointer coords transformation;
* though initially the pointer and fb rotation are identical, when we map
* the fb, the screen will be reinitialized and return into an unrotated
* state (presumably the HW is taking care of the rotation of the fb), but the
* pointer still needs to be transformed.
*/
ephyrRandr = KdAddRotation (screen->randr, randr);
scrpriv->randr = ephyrRandr;
ephyrUnmapFramebuffer (screen);
@ -1058,6 +1071,14 @@ MouseInit (KdPointerInfo *pi)
pi->nButtons = 32;
free(pi->name);
pi->name = strdup("Xephyr virtual mouse");
/*
* Must transform pointer coords since the pointer position
* relative to the Xephyr window is controlled by the host server and
* remains constant regardless of any rotation applied to the Xephyr screen.
*/
pi->transformCoordinates = TRUE;
ephyrMouse = pi;
return Success;
}

View File

@ -358,13 +358,18 @@ ephyrDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
return TRUE;
}
static void
ephyrDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
{
}
miPointerSpriteFuncRec EphyrPointerSpriteFuncs = {
ephyrRealizeCursor,
ephyrUnrealizeCursor,
ephyrSetCursor,
ephyrMoveCursor,
ephyrDeviceCursorInitialize,
NULL
ephyrDeviceCursorCleanup
};

View File

@ -83,7 +83,7 @@ typedef enum {
*/
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4)
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(11, 0)
#define ABI_XINPUT_VERSION SET_ABI_VERSION(12, 2)
#define ABI_XINPUT_VERSION SET_ABI_VERSION(13, 0)
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(5, 0)
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 6)

View File

@ -469,6 +469,20 @@ match_path_pattern(const char *attr, const char *pattern)
#define match_path_pattern match_substring
#endif
/*
* If no Layout section is found, xf86ServerLayout.id becomes "(implicit)"
* It is convenient that "" in patterns means "no explicit layout"
*/
static int
match_string_implicit(const char *attr, const char *pattern)
{
if (strlen(pattern)) {
return strcmp(attr, pattern);
} else {
return strcmp(attr,"(implicit)");
}
}
/*
* Match an attribute against a list of NULL terminated arrays of patterns.
* If a pattern in each list entry is matched, return TRUE.
@ -564,6 +578,13 @@ InputClassMatches(const XF86ConfInputClassPtr iclass, const InputInfoPtr idev,
return FALSE;
}
/* MatchLayout string */
if (!list_is_empty(&iclass->match_layout)) {
if (!MatchAttrToken(xf86ConfigLayout.id,
&iclass->match_layout, match_string_implicit))
return FALSE;
}
/* MatchIs* booleans */
if (iclass->is_keyboard.set &&
iclass->is_keyboard.val != !!(attrs->flags & ATTR_KEYBOARD))

View File

@ -1140,6 +1140,16 @@ matches the
pattern. A match is found if at least one of the tags given in
.RI \*q matchtag \*q
matches at least one of the tags assigned by the backend.
.TP 7
.BI "MatchLayout \*q" matchlayout \*q
Check the case-sensitive string
.RI \*q matchlayout \*q
against the currently active
.B ServerLayout
section. The empty string "" matches an implicit layout which appears
if no named
.B ServerLayout
sections have been found.
.PP
The second type of entry is used to match device types. These entries take a
boolean argument similar to

View File

@ -52,6 +52,7 @@ xf86ConfigSymTabRec InputClassTab[] =
{MATCH_USBID, "matchusbid"},
{MATCH_DRIVER, "matchdriver"},
{MATCH_TAG, "matchtag"},
{MATCH_LAYOUT, "matchlayout"},
{MATCH_IS_KEYBOARD, "matchiskeyboard"},
{MATCH_IS_POINTER, "matchispointer"},
{MATCH_IS_JOYSTICK, "matchisjoystick"},
@ -94,6 +95,7 @@ xf86parseInputClassSection(void)
list_init(&ptr->match_usbid);
list_init(&ptr->match_driver);
list_init(&ptr->match_tag);
list_init(&ptr->match_layout);
while ((token = xf86getToken(InputClassTab)) != ENDSECTION) {
switch (token) {
@ -169,6 +171,12 @@ xf86parseInputClassSection(void)
add_group_entry(&ptr->match_tag,
xstrtokenize(val.str, TOKEN_SEP));
break;
case MATCH_LAYOUT:
if (xf86getSubToken(&(ptr->comment)) != STRING)
Error(QUOTE_MSG, "MatchLayout");
add_group_entry(&ptr->match_layout,
xstrtokenize(val.str, TOKEN_SEP));
break;
case MATCH_IS_KEYBOARD:
if (xf86getSubToken(&(ptr->comment)) != STRING)
Error(QUOTE_MSG, "MatchIsKeyboard");
@ -307,6 +315,13 @@ xf86printInputClassSection (FILE * cf, XF86ConfInputClassPtr ptr)
*cur);
fprintf(cf, "\"\n");
}
list_for_each_entry(group, &ptr->match_layout, entry) {
fprintf(cf, "\tMatchLayout \"");
for (cur = group->values; *cur; cur++)
fprintf(cf, "%s%s", cur == group->values ? "" : TOKEN_SEP,
*cur);
fprintf(cf, "\"\n");
}
if (ptr->is_keyboard.set)
fprintf(cf, "\tIsKeyboard \"%s\"\n",
@ -392,6 +407,12 @@ xf86freeInputClassList (XF86ConfInputClassPtr ptr)
free(*list);
free(group);
}
list_for_each_entry_safe(group, next, &ptr->match_layout, entry) {
list_del(&group->entry);
for (list = group->values; *list; list++)
free(*list);
free(group);
}
TestFree(ptr->comment);
xf86optionListFree(ptr->option_lst);

View File

@ -358,6 +358,7 @@ typedef struct
struct list match_usbid;
struct list match_driver;
struct list match_tag;
struct list match_layout;
xf86TriState is_keyboard;
xf86TriState is_pointer;
xf86TriState is_joystick;

View File

@ -282,6 +282,7 @@ typedef enum {
MATCH_USBID,
MATCH_DRIVER,
MATCH_TAG,
MATCH_LAYOUT,
MATCH_IS_KEYBOARD,
MATCH_IS_POINTER,
MATCH_IS_JOYSTICK,

View File

@ -472,8 +472,6 @@ winKeybdReleaseKeys (void)
void
winSendKeyEvent (DWORD dwKey, Bool fDown)
{
InternalEvent* events;
/*
* When alt-tabing between screens we can get phantom key up messages
* Here we only pass them through it we think we should!
@ -485,8 +483,8 @@ winSendKeyEvent (DWORD dwKey, Bool fDown)
QueueKeyboardEvents(g_pwinKeyboard, fDown ? KeyPress : KeyRelease, dwKey + MIN_KEYCODE, NULL);
winDebug("winSendKeyEvent: dwKey: %d, fDown: %d, nEvents %d\n",
dwKey, fDown, nevents);
winDebug("winSendKeyEvent: dwKey: %d, fDown: %d\n",
dwKey, fDown);
}
BOOL winCheckKeyPressed(WPARAM wParam, LPARAM lParam)

View File

@ -244,8 +244,8 @@ winMouseButtonsSendEvent (int iEventType, int iButton)
POINTER_RELATIVE, &mask);
#if CYGDEBUG
ErrorF("winMouseButtonsSendEvent: iEventType: %d, iButton: %d, nEvents %d\n",
iEventType, iButton, nevents);
ErrorF("winMouseButtonsSendEvent: iEventType: %d, iButton: %d\n",
iEventType, iButton);
#endif
}

View File

@ -305,12 +305,6 @@ extern _X_EXPORT Bool InitPointerAccelerationScheme(
DeviceIntPtr /*dev*/,
int /*scheme*/);
/**
* This is not implemented and just returns FALSE.
*/
extern _X_EXPORT _X_DEPRECATED Bool InitAbsoluteClassDeviceStruct(
DeviceIntPtr /*device*/);
extern _X_EXPORT Bool InitFocusClassDeviceStruct(
DeviceIntPtr /*device*/);

View File

@ -371,7 +371,6 @@ typedef struct _ClassesRec {
ButtonClassPtr button;
FocusClassPtr focus;
ProximityClassPtr proximity;
void* _pad0; /* keep ABI during AbsoluteClass removal */
KbdFeedbackPtr kbdfeed;
PtrFeedbackPtr ptrfeed;
IntegerFeedbackPtr intfeed;
@ -496,7 +495,6 @@ typedef struct _DeviceIntRec {
ButtonClassPtr button;
FocusClassPtr focus;
ProximityClassPtr proximity;
void* _pad0; /* keep ABI, was pointer to abs class */
KbdFeedbackPtr kbdfeed;
PtrFeedbackPtr ptrfeed;
IntegerFeedbackPtr intfeed;

View File

@ -43,6 +43,7 @@ in this Software without prior written authorization from The Open Group.
# include "windowstr.h"
# include "pixmapstr.h"
# include "inputstr.h"
# include "inpututils.h"
# include "mi.h"
# include "mipointer.h"
# include "scrnintstr.h"