TwinView is a video driver feature that, quite frankly, screws everyone. It exposes only a single ScreenRec but we need to pretend we have 2 when it's activated. It exposes only a single protocol screen but we need to pretend that there's two. We can't get the dimensions of the screen and rely on the user to set it, hoping that everything works in spite of that.
For single ScreenRec setups (including RandR multiscreen), we can use the Coordinate Transformation Matrix property to achieve tablet-to-screen mappings (see commit 239822f9f4 "xsetwacom: add "MapToOutput" parameters.") Signed-off-by: Peter Hutterer <[email protected]> --- man/wacom.man | 18 ----- src/wcmCommon.c | 110 ------------------------------- src/wcmConfig.c | 1 - src/wcmValidateDevice.c | 48 +------------- src/wcmXCommand.c | 79 +---------------------- src/xf86Wacom.c | 27 ++------ src/xf86WacomDefs.h | 4 - tools/xsetwacom.c | 166 ----------------------------------------------- 8 files changed, 9 insertions(+), 444 deletions(-) diff --git a/man/wacom.man b/man/wacom.man index 4b4a90f..f4e4715 100644 --- a/man/wacom.man +++ b/man/wacom.man @@ -138,24 +138,6 @@ A Rspeed greater than 1.0 will speed up the cursor's relative movement. A Rspee less than 1.0 but greater than 0 will slow down the cursor's relative movement. A Rspeed too close to 0 is not recommanded. .TP 4 -.B Option \fI"Twinview"\fP \fI"horizontal"|"vertical"|"leftof"|"aboveof"|"xinerama"|"none"\fP -sets the orientation of TwinView to map the tablet to one screen and to be able -to move the screen cursor from one screen to the other when tool reaches the -edge of the tablet. The cursor can be constrained in a specific screen if -"ScreenNo" option is added. If you want to map the tablet to the whole desktop, -you should NOT add this option. The default is "none". Note: due to historic -reason, "horizontal" represents the "RightOf" and "vertical" represents the -"BelowOf" in acutal TwinView setup. -.TP 4 -.B Option \fI"TVResolution"\fP \fI"res0,res1"\fP -specifies different resolutions for the two screens in TwinView setup. For example, -if the resolution of screen 0 (res0) is 1024x768 and screen 1 (res1) is 1280x1024, -the option will be set to: - Option "TVResolution" "1024x768,1280x1024" - -This option is used only when TwinView option is not none. It is unnecessary to add -this option if your screens are displaying in the same resolutions. -.TP 4 .B Option \fI"ScreenNo"\fP \fI"n"\fP In a multi-monitor environment, specifies the screen number in which the cursor can move. .TP 4 diff --git a/src/wcmCommon.c b/src/wcmCommon.c index 4e5f69e..ed35f66 100644 --- a/src/wcmCommon.c +++ b/src/wcmCommon.c @@ -1450,109 +1450,6 @@ static void transPressureCurve(WacomDevicePtr pDev, WacomDeviceStatePtr pState) } /***************************************************************************** - * wcmInitialTVScreens - ****************************************************************************/ - -static void wcmInitialTVScreens(InputInfoPtr pInfo) -{ - WacomDevicePtr priv = (WacomDevicePtr)pInfo->private; - - if (priv->twinview == TV_NONE) - return; - - if ((priv->twinview == TV_LEFT_RIGHT) || (priv->twinview == TV_RIGHT_LEFT)) - { - /* it does not need the offset if always map to a specific screen */ - if (priv->screen_no == -1) - { - priv->tvoffsetX = 60; - priv->tvoffsetY = 0; - } - - /* default resolution */ - if(!priv->tvResolution[0]) - { - priv->tvResolution[0] = screenInfo.screens[0]->width/2; - priv->tvResolution[1] = screenInfo.screens[0]->height; - priv->tvResolution[2] = priv->tvResolution[0]; - priv->tvResolution[3] = priv->tvResolution[1]; - } - } - else if ((priv->twinview == TV_ABOVE_BELOW) || (priv->twinview == TV_BELOW_ABOVE)) - { - /* it does not need the offset if always map to a specific screen */ - if (priv->screen_no == -1) - { - priv->tvoffsetX = 0; - priv->tvoffsetY = 60; - } - - /* default resolution */ - if(!priv->tvResolution[0]) - { - priv->tvResolution[0] = screenInfo.screens[0]->width; - priv->tvResolution[1] = screenInfo.screens[0]->height/2; - priv->tvResolution[2] = priv->tvResolution[0]; - priv->tvResolution[3] = priv->tvResolution[1]; - } - } - - /* initial screen info */ - if (priv->twinview == TV_ABOVE_BELOW) - { - priv->screenTopX[0] = 0; - priv->screenTopY[0] = 0; - priv->screenBottomX[0] = priv->tvResolution[0]; - priv->screenBottomY[0] = priv->tvResolution[1]; - priv->screenTopX[1] = 0; - priv->screenTopY[1] = priv->tvResolution[1]; - priv->screenBottomX[1] = priv->tvResolution[2]; - priv->screenBottomY[1] = priv->tvResolution[1] + priv->tvResolution[3]; - } - if (priv->twinview == TV_LEFT_RIGHT) - { - priv->screenTopX[0] = 0; - priv->screenTopY[0] = 0; - priv->screenBottomX[0] = priv->tvResolution[0]; - priv->screenBottomY[0] = priv->tvResolution[1]; - priv->screenTopX[1] = priv->tvResolution[0]; - priv->screenTopY[1] = 0; - priv->screenBottomX[1] = priv->tvResolution[0] + priv->tvResolution[2]; - priv->screenBottomY[1] = priv->tvResolution[3]; - } - if (priv->twinview == TV_BELOW_ABOVE) - { - priv->screenTopX[0] = 0; - priv->screenTopY[0] = priv->tvResolution[1]; - priv->screenBottomX[0] = priv->tvResolution[2]; - priv->screenBottomY[0] = priv->tvResolution[1] + priv->tvResolution[3]; - priv->screenTopX[1] = 0; - priv->screenTopY[1] = 0; - priv->screenBottomX[1] = priv->tvResolution[0]; - priv->screenBottomY[1] = priv->tvResolution[1]; - } - if (priv->twinview == TV_RIGHT_LEFT) - { - priv->screenTopX[0] = priv->tvResolution[0]; - priv->screenTopY[0] = 0; - priv->screenBottomX[0] = priv->tvResolution[0] + priv->tvResolution[2]; - priv->screenBottomY[0] = priv->tvResolution[3]; - priv->screenTopX[1] = 0; - priv->screenTopY[1] = 0; - priv->screenBottomX[1] = priv->tvResolution[0]; - priv->screenBottomY[1] = priv->tvResolution[1]; - } - - DBG(10, priv, - "topX0=%d topY0=%d bottomX0=%d bottomY0=%d " - "topX1=%d topY1=%d bottomX1=%d bottomY1=%d \n", - priv->screenTopX[0], priv->screenTopY[0], - priv->screenBottomX[0], priv->screenBottomY[0], - priv->screenTopX[1], priv->screenTopY[1], - priv->screenBottomX[1], priv->screenBottomY[1]); -} - -/***************************************************************************** * wcmInitialScreens ****************************************************************************/ @@ -1562,13 +1459,6 @@ void wcmInitialScreens(InputInfoPtr pInfo) int i; DBG(2, priv, "number of screen=%d \n", screenInfo.numScreens); - priv->tvoffsetX = 0; - priv->tvoffsetY = 0; - if (priv->twinview != TV_NONE) - { - wcmInitialTVScreens(pInfo); - return; - } /* initial screen info */ priv->numScreen = screenInfo.numScreens; diff --git a/src/wcmConfig.c b/src/wcmConfig.c index 163f150..90a0ff6 100644 --- a/src/wcmConfig.c +++ b/src/wcmConfig.c @@ -96,7 +96,6 @@ static int wcmAllocate(InputInfoPtr pInfo) priv->naxes = 6; /* Default number of axes */ priv->numScreen = screenInfo.numScreens; /* configured screens count */ priv->currentScreen = -1; /* current screen in display */ - priv->twinview = TV_NONE; /* not using twinview gfx */ priv->wcmMMonitor = 1; /* enabled (=1) to support multi-monitor desktop. */ /* disabled (=0) when user doesn't want to move the */ /* cursor from one screen to another screen */ diff --git a/src/wcmValidateDevice.c b/src/wcmValidateDevice.c index 0a21a89..a669c11 100644 --- a/src/wcmValidateDevice.c +++ b/src/wcmValidateDevice.c @@ -515,28 +515,6 @@ int wcmParseOptions(InputInfoPtr pInfo, int hotplugged) pInfo->name, common->wcmCursorProxoutDist); } - /* Configure Monitors' resoluiton in TwinView setup. - * The value is in the form of "1024x768,1280x1024" - * for a desktop of monitor 1 at 1024x768 and - * monitor 2 at 1280x1024 - */ - s = xf86SetStrOption(pInfo->options, "TVResolution", NULL); - if (s) - { - int a,b,c,d; - if ((sscanf(s,"%dx%d,%dx%d",&a,&b,&c,&d) != 4) || - (a <= 0) || (b <= 0) || (c <= 0) || (d <= 0)) - xf86Msg(X_CONFIG, "%s: TVResolution not valid\n", - pInfo->name); - else - { - priv->tvResolution[0] = a; - priv->tvResolution[1] = b; - priv->tvResolution[2] = c; - priv->tvResolution[3] = d; - } - } - priv->screen_no = xf86SetIntOption(pInfo->options, "ScreenNo", -1); if (xf86SetBoolOption(pInfo->options, "KeepShape", 0)) @@ -687,31 +665,7 @@ int wcmParseOptions(InputInfoPtr pInfo, int hotplugged) priv->button[i] = xf86SetIntOption(pInfo->options, b, priv->button[i]); } - s = xf86SetStrOption(pInfo->options, "Twinview", NULL); - if (s && xf86NameCmp(s, "none") == 0) - priv->twinview = TV_NONE; - else if ((s && xf86NameCmp(s, "horizontal") == 0) || - (s && xf86NameCmp(s, "rightof") == 0)) - priv->twinview = TV_LEFT_RIGHT; - else if ((s && xf86NameCmp(s, "vertical") == 0) || - (s && xf86NameCmp(s, "belowof") == 0)) - priv->twinview = TV_ABOVE_BELOW; - else if (s && xf86NameCmp(s, "leftof") == 0) - priv->twinview = TV_RIGHT_LEFT; - else if (s && xf86NameCmp(s, "aboveof") == 0) - priv->twinview = TV_BELOW_ABOVE; - else if (s) - { - xf86Msg(X_ERROR, "%s: invalid Twinview (should be none, vertical (belowof), " - "horizontal (rightof), aboveof, or leftof). Using none.\n", - pInfo->name); - priv->twinview = TV_NONE; - } - - if (s && priv->twinview != TV_NONE) - priv->numScreen = 2; - else - priv->numScreen = screenInfo.numScreens; + priv->numScreen = screenInfo.numScreens; /* Now parse class-specific options */ if (common->wcmDevCls->ParseOptions && diff --git a/src/wcmXCommand.c b/src/wcmXCommand.c index 30e6a4d..87669ea 100644 --- a/src/wcmXCommand.c +++ b/src/wcmXCommand.c @@ -197,15 +197,9 @@ void InitWcmDeviceProperties(InputInfoPtr pInfo) prop_wheel_buttons = InitWcmAtom(pInfo->dev, WACOM_PROP_WHEELBUTTONS, 8, 4, values); } - values[0] = priv->tvResolution[0]; - values[1] = priv->tvResolution[1]; - values[2] = priv->tvResolution[2]; - values[3] = priv->tvResolution[3]; - prop_tv_resolutions = InitWcmAtom(pInfo->dev, WACOM_PROP_TWINVIEW_RES, 32, 4, values); - values[0] = priv->screen_no; - values[1] = priv->twinview; + values[1] = 0; values[2] = priv->wcmMMonitor; prop_display = InitWcmAtom(pInfo->dev, WACOM_PROP_DISPLAY_OPTS, 8, 3, values); @@ -701,9 +695,6 @@ int wcmSetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop, if (values[0] < -1 || values[0] >= priv->numScreen) return BadValue; - if (values[1] < TV_NONE || values[1] > TV_MAX) - return BadValue; - if ((values[2] != 0) && (values[2] != 1)) return BadValue; @@ -712,23 +703,6 @@ int wcmSetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop, if (priv->screen_no != values[0]) wcmChangeScreen(pInfo, values[0]); priv->screen_no = values[0]; - - if (priv->twinview != values[1]) - { - int screen = priv->screen_no; - priv->twinview = values[1]; - - /* Can not restrict the cursor to a particular screen */ - if (!values[1] && (screenInfo.numScreens == 1)) - { - screen = -1; - priv->currentScreen = 0; - DBG(10, priv, "TwinView sets to " - "TV_NONE: can't change screen_no. \n"); - } - wcmChangeScreen(pInfo, screen); - } - priv->wcmMMonitor = values[2]; } } else if (property == prop_cursorprox) @@ -831,57 +805,6 @@ int wcmSetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop, if (!checkonly && common->wcmTPCButton != !values[0]) common->wcmTPCButton = !values[0]; - } else if (property == prop_tv_resolutions) - { - CARD32 *values; - int width, height; - - if (prop->size != 4 || prop->format != 32) - return BadValue; - - values = (CARD32*)prop->data; - - width = screenInfo.screens[0]->width; - height = screenInfo.screens[0]->height; - - /* non-TwinView settings can not set TwinView RESOLUTION */ - switch(priv->twinview) - { - case TV_NONE: - if (values[0] || values[1] || - values[2] || values[3]) - return BadValue; - break; - case TV_ABOVE_BELOW: - case TV_BELOW_ABOVE: - if ((values[1] + values[3]) != height) - return BadValue; - if (values[0] != width && values[2] != width) - return BadValue; - if (values[0] > width || values[2] > width) - return BadValue; - break; - case TV_LEFT_RIGHT: - case TV_RIGHT_LEFT: - if ((values[0] + values[2]) != width) - return BadValue; - if (values[1] != height && values[3] != height) - return BadValue; - if (values[1] > height || values[3] > height) - return BadValue; - break; - } - - if (!checkonly) - { - priv->tvResolution[0] = values[0]; - priv->tvResolution[1] = values[1]; - priv->tvResolution[2] = values[2]; - priv->tvResolution[3] = values[3]; - - /* reset screen info */ - wcmChangeScreen(pInfo, priv->screen_no); - } #ifdef DEBUG } else if (property == prop_debuglevels) { diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c index cb05adb..c7d5d61 100644 --- a/src/xf86Wacom.c +++ b/src/xf86Wacom.c @@ -146,7 +146,7 @@ static int wcmInitArea(InputInfoPtr pInfo) if (priv->screen_no != -1 && (priv->screen_no >= priv->numScreen || priv->screen_no < 0)) { - if (priv->twinview == TV_NONE || priv->screen_no != 1) + if (priv->screen_no != 1) { xf86Msg(X_ERROR, "%s: invalid screen number %d, resetting to default (-1) \n", pInfo->name, priv->screen_no); @@ -242,12 +242,12 @@ void wcmVirtualTabletPadding(InputInfoPtr pInfo) if (!is_absolute(pInfo)) return; - if ((priv->screen_no != -1) || (priv->twinview != TV_NONE) || (!priv->wcmMMonitor)) + if ((priv->screen_no != -1) || (!priv->wcmMMonitor)) { i = priv->currentScreen; - priv->leftPadding = priv->bottomX - priv->topX -priv->tvoffsetX; - priv->topPadding = priv->bottomY - priv->topY - priv->tvoffsetY; + priv->leftPadding = priv->bottomX - priv->topX; + priv->topPadding = priv->bottomY - priv->topY; priv->leftPadding = (int)(((double)priv->screenTopX[i] * priv->leftPadding ) / ((double)(priv->screenBottomX[i] - priv->screenTopX[i])) + 0.5); @@ -275,10 +275,10 @@ void wcmVirtualTabletSize(InputInfoPtr pInfo) return; } - priv->sizeX = priv->bottomX - priv->topX - priv->tvoffsetX; - priv->sizeY = priv->bottomY - priv->topY - priv->tvoffsetY; + priv->sizeX = priv->bottomX - priv->topX; + priv->sizeY = priv->bottomY - priv->topY; - if ((priv->screen_no != -1) || (priv->twinview != TV_NONE) || (!priv->wcmMMonitor)) + if ((priv->screen_no != -1) || (!priv->wcmMMonitor)) { i = priv->currentScreen; @@ -316,19 +316,6 @@ void wcmInitialCoordinates(InputInfoPtr pInfo, int axis) topy = priv->topY; bottomx = priv->sizeX + priv->topX; bottomy = priv->sizeY + priv->topY; - - if (priv->twinview != TV_NONE) - { - if (priv->currentScreen == 1) - { - topx += priv->tvoffsetX; - topy += priv->tvoffsetY; - } else if (priv->currentScreen == 0) - { - bottomx -= priv->tvoffsetX; - bottomy -= priv->tvoffsetY; - } - } } resolution_x = priv->resolX; resolution_y = priv->resolY; diff --git a/src/xf86WacomDefs.h b/src/xf86WacomDefs.h index dcd21fc..d39fcb1 100644 --- a/src/xf86WacomDefs.h +++ b/src/xf86WacomDefs.h @@ -241,10 +241,6 @@ struct _WacomDeviceRec int devReverseCount; /* Relative ReverseConvert called twice each movement*/ int numScreen; /* number of configured screens */ int currentScreen; /* current screen in display */ - int twinview; /* using twinview mode of gfx card */ - int tvoffsetX; /* X edge offset for TwinView setup */ - int tvoffsetY; /* Y edge offset for TwinView setup */ - int tvResolution[4]; /* twinview screens' resultion */ int wcmMMonitor; /* disable/enable moving across screens in multi-monitor desktop */ /* JEJ - throttle */ diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c index 25d4df1..fb6556e 100644 --- a/tools/xsetwacom.c +++ b/tools/xsetwacom.c @@ -103,8 +103,6 @@ static void get_presscurve(Display *dpy, XDevice *dev, param_t *param, int argc, static void get_button(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv); static void set_rotate(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv); static void get_rotate(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv); -static void set_twinview(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv); -static void get_twinview(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv); static void set_xydefault(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv); static void get_all(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv); static void get_param(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv); @@ -380,16 +378,6 @@ static param_t parameters[] = .get_func = get_presscurve, }, { - .name = "TwinView", - .desc = "Sets the mapping to TwinView horizontal/vertical/none. " - "Values = none, vertical, horizontal (default is none).", - .prop_name = WACOM_PROP_DISPLAY_OPTS, - .prop_format = 8, - .prop_offset = 1, - .get_func = get_twinview, - .set_func = set_twinview, - }, - { .name = "Mode", .desc = "Switches cursor movement mode (default is absolute/on). ", .set_func = set_mode, @@ -537,14 +525,6 @@ static param_t parameters[] = .set_func = map_wheels, }, { - .name = "TVResolution", - .desc = "Sets MetaModes option for TwinView. ", - .prop_name = WACOM_PROP_TWINVIEW_RES, - .prop_format = 32, - .prop_offset = 0, - .prop_extra = 3, - }, - { .name = "RawFilter", .desc = "Enables and disables filtering of raw data, " "default is true/on.", @@ -1865,108 +1845,6 @@ error: return; } -static void set_twinview(Display *dpy, XDevice *dev, param_t* param, int argc, char **argv) -{ - int twinview = 0; - Atom prop, type; - int format; - unsigned char* data; - unsigned long nitems, bytes_after; - unsigned long *tvdata; - - if (argc != 1) - goto error; - - TRACE("TwinView '%s' for device %ld.\n", argv[0], dev->device_id); - - if (strcasecmp(argv[0], "none") == 0) - twinview = TV_NONE; - else if (strcasecmp(argv[0], "horizontal") == 0) - twinview = TV_LEFT_RIGHT; - else if (strcasecmp(argv[0], "vertical") == 0) - twinview = TV_ABOVE_BELOW; - else if (strcasecmp(argv[0], "belowof") == 0) - twinview = TV_ABOVE_BELOW; - else if (strcasecmp(argv[0], "aboveof") == 0) - twinview = TV_BELOW_ABOVE; - else if (strcasecmp(argv[0], "rightof") == 0) - twinview = TV_LEFT_RIGHT; - else if (strcasecmp(argv[0], "leftof") == 0) - twinview = TV_RIGHT_LEFT; - else - goto error; - - prop = XInternAtom(dpy, param->prop_name, True); - if (!prop) - { - fprintf(stderr, "Property for '%s' not available.\n", - param->name); - return; - } - - XGetDeviceProperty(dpy, dev, prop, 0, 1000, False, AnyPropertyType, - &type, &format, &nitems, &bytes_after, &data); - - if (nitems == 0 || format != 8) - { - fprintf(stderr, "Property for '%s' has no or wrong value - this is a bug.\n", - param->name); - return; - } - - data[param->prop_offset] = twinview; - XChangeDeviceProperty(dpy, dev, prop, type, format, - PropModeReplace, data, nitems); - - /* set the TVResolution to some sane defaults */ - prop = XInternAtom(dpy, WACOM_PROP_TWINVIEW_RES, True); - XGetDeviceProperty(dpy, dev, prop, 0, 1000, False, AnyPropertyType, - &type, &format, &nitems, &bytes_after, &data); - if (nitems != 4 || format != 32) - { - fprintf(stderr, "Property for '%s' has no or wrong value - this is a bug.\n", - WACOM_PROP_TWINVIEW_RES); - return; - } - - tvdata = (unsigned long*)data; - switch(twinview) { - case TV_NONE: - tvdata[0] = 0; - tvdata[1] = 0; - tvdata[2] = 0; - tvdata[3] = 0; - break; - case TV_LEFT_RIGHT: - case TV_RIGHT_LEFT: - tvdata[0] = DisplayWidth(dpy, 0)/2; - tvdata[1] = DisplayHeight(dpy, 0); - tvdata[2] = tvdata[0]; - tvdata[3] = tvdata[1]; - break; - case TV_ABOVE_BELOW: - case TV_BELOW_ABOVE: - tvdata[0] = DisplayWidth(dpy, 0); - tvdata[1] = DisplayHeight(dpy, 0)/2; - tvdata[2] = tvdata[0]; - tvdata[3] = tvdata[1]; - break; - } - - XChangeDeviceProperty(dpy, dev, prop, type, format, - PropModeReplace, data, nitems); - - XFlush(dpy); - - return; - -error: - fprintf(stderr, "Usage: xsetwacom <device name> TwinView [<value>]\n"); - fprintf(stderr, "Values: none, horizontal, vertical, belowof," - "aboveof, leftof, rightof\n"); - return; -} - static int convert_value_from_user(param_t *param, char *value) { int val; @@ -2171,50 +2049,6 @@ static void get_rotate(Display *dpy, XDevice *dev, param_t* param, int argc, cha return; } -static void get_twinview(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv) -{ - char *twinview = NULL; - Atom prop, type; - int format; - unsigned char* data; - unsigned long nitems, bytes_after; - - prop = XInternAtom(dpy, param->prop_name, True); - if (!prop) - { - fprintf(stderr, "Property for '%s' not available.\n", - param->name); - return; - } - - TRACE("Getting twinview setting for device %ld.\n", dev->device_id); - - XGetDeviceProperty(dpy, dev, prop, 0, 1000, False, AnyPropertyType, - &type, &format, &nitems, &bytes_after, &data); - - if (nitems == 0 || format != 8) - { - fprintf(stderr, "Property for '%s' has no or wrong value - this is a bug.\n", - param->name); - return; - } - - switch(data[param->prop_offset]) - { - case TV_NONE: twinview = "none"; break; - case TV_ABOVE_BELOW: twinview = "vertical"; break; - case TV_LEFT_RIGHT: twinview = "horizontal"; break; - case TV_RIGHT_LEFT: twinview = "leftof"; break; - case TV_BELOW_ABOVE: twinview = "aboveof"; break; - default: - break; - } - - print_value(param, "%s", twinview); - - return; -} - static void get_presscurve(Display *dpy, XDevice *dev, param_t *param, int argc, char **argv) { -- 1.7.2.2 ------------------------------------------------------------------------------ This SF.net Dev2Dev email is sponsored by: Show off your parallel programming skills. Enter the Intel(R) Threading Challenge 2010. http://p.sf.net/sfu/intel-thread-sfd _______________________________________________ Linuxwacom-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
