diff options
author | Robert Ögren <gtk@roboros.com> | 2005-07-13 13:00:22 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2005-07-13 13:00:22 +0000 |
commit | 13596ab6bd33dd876a3a51bc03c988605d7dc6c3 (patch) | |
tree | 4801067bc57b343413e562101c459e1eda6b7ab9 | |
parent | 216f923f701d75860decd629e63add195b82be33 (diff) | |
download | gdk-pixbuf-13596ab6bd33dd876a3a51bc03c988605d7dc6c3.tar.gz |
Fix handling of Aiptek and Aiptek-like graphical tablets such as Trust on
2005-07-13 Robert Ögren <gtk@roboros.com>
Fix handling of Aiptek and Aiptek-like graphical tablets such as Trust
on Windows. (#167004, thanks to "pnohant" for testing)
Code cleanup: Remove the unused and unmaintained code for using a
non-system tablet context (USE_SYSCONTEXT ifdef:s), suggested
by Tor Lillqvist.
* gdk/win32/gdkinput-win32.c (_gdk_input_wintab_init_check): Handle
tablet drivers that don't support WTI_DDCTXS/WTI_DSCTXS gracefully.
Sligthly reorganize and simplify the code to support this.
(_gdk_input_wintab_init_check, _gdk_input_other_event): Remove
USE_SYSCONTEXT ifdef:s and the code for the case it was not defined.
(gdk_input_window_find_within): Removed.
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 16 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 16 | ||||
-rw-r--r-- | gdk/win32/gdkinput-win32.c | 164 |
4 files changed, 82 insertions, 130 deletions
@@ -1,3 +1,19 @@ +2005-07-13 Robert Ögren <gtk@roboros.com> + + Fix handling of Aiptek and Aiptek-like graphical tablets such as Trust + on Windows. (#167004, thanks to "pnohant" for testing) + + Code cleanup: Remove the unused and unmaintained code for using a + non-system tablet context (USE_SYSCONTEXT ifdef:s), suggested + by Tor Lillqvist. + + * gdk/win32/gdkinput-win32.c (_gdk_input_wintab_init_check): Handle + tablet drivers that don't support WTI_DDCTXS/WTI_DSCTXS gracefully. + Sligthly reorganize and simplify the code to support this. + (_gdk_input_wintab_init_check, _gdk_input_other_event): Remove + USE_SYSCONTEXT ifdef:s and the code for the case it was not defined. + (gdk_input_window_find_within): Removed. + 2005-07-13 Matthias Clasen <mclasen@redhat.com> * gdk/win32/bdfcursor.c: Add Copyright/License information. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index c126abf85..589627a7c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,19 @@ +2005-07-13 Robert Ögren <gtk@roboros.com> + + Fix handling of Aiptek and Aiptek-like graphical tablets such as Trust + on Windows. (#167004, thanks to "pnohant" for testing) + + Code cleanup: Remove the unused and unmaintained code for using a + non-system tablet context (USE_SYSCONTEXT ifdef:s), suggested + by Tor Lillqvist. + + * gdk/win32/gdkinput-win32.c (_gdk_input_wintab_init_check): Handle + tablet drivers that don't support WTI_DDCTXS/WTI_DSCTXS gracefully. + Sligthly reorganize and simplify the code to support this. + (_gdk_input_wintab_init_check, _gdk_input_other_event): Remove + USE_SYSCONTEXT ifdef:s and the code for the case it was not defined. + (gdk_input_window_find_within): Removed. + 2005-07-13 Matthias Clasen <mclasen@redhat.com> * gdk/win32/bdfcursor.c: Add Copyright/License information. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index c126abf85..589627a7c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,19 @@ +2005-07-13 Robert Ögren <gtk@roboros.com> + + Fix handling of Aiptek and Aiptek-like graphical tablets such as Trust + on Windows. (#167004, thanks to "pnohant" for testing) + + Code cleanup: Remove the unused and unmaintained code for using a + non-system tablet context (USE_SYSCONTEXT ifdef:s), suggested + by Tor Lillqvist. + + * gdk/win32/gdkinput-win32.c (_gdk_input_wintab_init_check): Handle + tablet drivers that don't support WTI_DDCTXS/WTI_DSCTXS gracefully. + Sligthly reorganize and simplify the code to support this. + (_gdk_input_wintab_init_check, _gdk_input_other_event): Remove + USE_SYSCONTEXT ifdef:s and the code for the case it was not defined. + (gdk_input_window_find_within): Removed. + 2005-07-13 Matthias Clasen <mclasen@redhat.com> * gdk/win32/bdfcursor.c: Add Copyright/License information. diff --git a/gdk/win32/gdkinput-win32.c b/gdk/win32/gdkinput-win32.c index 10249e420..25c4fd77b 100644 --- a/gdk/win32/gdkinput-win32.c +++ b/gdk/win32/gdkinput-win32.c @@ -43,14 +43,6 @@ #define PACKETMODE (PK_BUTTONS) #include <pktdef.h> -/* If USE_SYSCONTEXT is on, we open the Wintab device (hmm, what if - * there are several?) as a system pointing device, i.e. it controls - * the normal Windows cursor. This seems much more natural. - */ -#define USE_SYSCONTEXT 1 /* The code for the other choice is not - * good at all. - */ - #define DEBUG_WINTAB 1 /* Verbose debug messages enabled */ #endif @@ -63,10 +55,6 @@ /* Forward declarations */ -#if !USE_SYSCONTEXT -static GdkInputWindow *gdk_input_window_find_within (GdkWindow *window); -#endif - #ifdef HAVE_WINTAB static GdkDevicePrivate *gdk_input_find_dev_from_ctx (HCTX hctx, @@ -211,7 +199,6 @@ _gdk_input_wintab_init_check (void) GdkDevicePrivate *gdkdev; GdkWindowAttr wa; WORD specversion; - LOGCONTEXT defcontext; HCTX *hctx; UINT ndevices, ncursors, ncsrtypes, firstcsr, hardware; BOOL active; @@ -219,6 +206,7 @@ _gdk_input_wintab_init_check (void) int i, k; int devix, cursorix; char devname[100], csrname[100]; + BOOL defcontext_done; if (wintab_initialized) return; @@ -233,17 +221,6 @@ _gdk_input_wintab_init_check (void) WTInfo (WTI_INTERFACE, IFC_SPECVERSION, &specversion); GDK_NOTE (INPUT, g_print ("Wintab interface version %d.%d\n", HIBYTE (specversion), LOBYTE (specversion))); -#if USE_SYSCONTEXT - WTInfo (WTI_DEFSYSCTX, 0, &defcontext); -#if DEBUG_WINTAB - GDK_NOTE (INPUT, (g_print("DEFSYSCTX:\n"), print_lc(&defcontext))); -#endif -#else - WTInfo (WTI_DEFCONTEXT, 0, &defcontext); -#if DEBUG_WINTAB - GDK_NOTE (INPUT, (g_print("DEFCONTEXT:\n"), print_lc(&defcontext))); -#endif -#endif WTInfo (WTI_INTERFACE, IFC_NDEVICES, &ndevices); WTInfo (WTI_INTERFACE, IFC_NCURSORS, &ncursors); #if DEBUG_WINTAB @@ -268,6 +245,11 @@ _gdk_input_wintab_init_check (void) for (devix = 0; devix < ndevices; devix++) { LOGCONTEXT lc; + + /* We open the Wintab device (hmm, what if there are several?) as a + * system pointing device, i.e. it controls the normal Windows + * cursor. This seems much more natural. + */ WTInfo (WTI_DEVICES + devix, DVC_NAME, devname); @@ -279,65 +261,39 @@ _gdk_input_wintab_init_check (void) WTInfo (WTI_DEVICES + devix, DVC_NPRESSURE, &axis_npressure); WTInfo (WTI_DEVICES + devix, DVC_ORIENTATION, axis_or); + defcontext_done = FALSE; if (HIBYTE (specversion) > 1 || LOBYTE (specversion) >= 1) { - WTInfo (WTI_DDCTXS + devix, CTX_NAME, lc.lcName); - WTInfo (WTI_DDCTXS + devix, CTX_OPTIONS, &lc.lcOptions); - lc.lcOptions |= CXO_MESSAGES; -#if USE_SYSCONTEXT - lc.lcOptions |= CXO_SYSTEM; + /* Try to get device-specific default context */ + /* Some drivers, e.g. Aiptek, don't provide this info */ + if (WTInfo (WTI_DSCTXS + devix, 0, &lc) > 0) + defcontext_done = TRUE; +#if DEBUG_WINTAB + if (defcontext_done) + GDK_NOTE (INPUT, (g_print("Using device-specific default context\n"))); + else + GDK_NOTE (INPUT, (g_print("Note: Driver did not provide device specific default context info despite claiming to support version 1.1\n"))); #endif - lc.lcStatus = 0; - WTInfo (WTI_DDCTXS + devix, CTX_LOCKS, &lc.lcLocks); - lc.lcMsgBase = WT_DEFBASE; - lc.lcDevice = devix; - lc.lcPktRate = 50; - lc.lcPktData = PACKETDATA; - lc.lcPktMode = PK_BUTTONS; /* We want buttons in relative mode */ - lc.lcMoveMask = PACKETDATA; - lc.lcBtnDnMask = lc.lcBtnUpMask = ~0; - WTInfo (WTI_DDCTXS + devix, CTX_INORGX, &lc.lcInOrgX); - WTInfo (WTI_DDCTXS + devix, CTX_INORGY, &lc.lcInOrgY); - WTInfo (WTI_DDCTXS + devix, CTX_INORGZ, &lc.lcInOrgZ); - WTInfo (WTI_DDCTXS + devix, CTX_INEXTX, &lc.lcInExtX); - WTInfo (WTI_DDCTXS + devix, CTX_INEXTY, &lc.lcInExtY); - WTInfo (WTI_DDCTXS + devix, CTX_INEXTZ, &lc.lcInExtZ); - lc.lcOutOrgX = axis_x.axMin; - lc.lcOutOrgY = axis_y.axMin; - lc.lcOutExtX = axis_x.axMax - axis_x.axMin; - lc.lcOutExtY = axis_y.axMax - axis_y.axMin; - lc.lcOutExtY = -lc.lcOutExtY; /* We want Y growing downward */ - WTInfo (WTI_DDCTXS + devix, CTX_SENSX, &lc.lcSensX); - WTInfo (WTI_DDCTXS + devix, CTX_SENSY, &lc.lcSensY); - WTInfo (WTI_DDCTXS + devix, CTX_SENSZ, &lc.lcSensZ); - WTInfo (WTI_DDCTXS + devix, CTX_SYSMODE, &lc.lcSysMode); - WTInfo (WTI_DDCTXS + devix, CTX_SYSORGX, &lc.lcSysOrgX); - WTInfo (WTI_DDCTXS + devix, CTX_SYSORGY, &lc.lcSysOrgY); - WTInfo (WTI_DDCTXS + devix, CTX_SYSEXTX, &lc.lcSysExtX); - WTInfo (WTI_DDCTXS + devix, CTX_SYSEXTY, &lc.lcSysExtY); - WTInfo (WTI_DDCTXS + devix, CTX_SYSSENSX, &lc.lcSysSensX); - WTInfo (WTI_DDCTXS + devix, CTX_SYSSENSY, &lc.lcSysSensY); } - else - { - lc = defcontext; - lc.lcOptions |= CXO_MESSAGES; - lc.lcMsgBase = WT_DEFBASE; - lc.lcPktRate = 50; - lc.lcPktData = PACKETDATA; - lc.lcPktMode = PACKETMODE; - lc.lcMoveMask = PACKETDATA; - lc.lcBtnUpMask = lc.lcBtnDnMask = ~0; -#if 0 - lc.lcOutExtY = -lc.lcOutExtY; /* Y grows downward */ -#else - lc.lcOutOrgX = axis_x.axMin; - lc.lcOutOrgY = axis_y.axMin; - lc.lcOutExtX = axis_x.axMax - axis_x.axMin; - lc.lcOutExtY = axis_y.axMax - axis_y.axMin; - lc.lcOutExtY = -lc.lcOutExtY; /* We want Y growing downward */ + + if (!defcontext_done) + WTInfo (WTI_DEFSYSCTX, 0, &lc); +#if DEBUG_WINTAB + GDK_NOTE (INPUT, (g_print("Default context:\n"), print_lc(&lc))); #endif - } + lc.lcOptions |= CXO_MESSAGES; + lc.lcStatus = 0; + lc.lcMsgBase = WT_DEFBASE; + lc.lcPktRate = 50; + lc.lcPktData = PACKETDATA; + lc.lcPktMode = PACKETMODE; + lc.lcMoveMask = PACKETDATA; + lc.lcBtnUpMask = lc.lcBtnDnMask = ~0; + lc.lcOutOrgX = axis_x.axMin; + lc.lcOutOrgY = axis_y.axMin; + lc.lcOutExtX = axis_x.axMax - axis_x.axMin; + lc.lcOutExtY = axis_y.axMax - axis_y.axMin; + lc.lcOutExtY = -lc.lcOutExtY; /* We want Y growing downward */ #if DEBUG_WINTAB GDK_NOTE (INPUT, (g_print("context for device %d:\n", devix), print_lc(&lc))); @@ -386,11 +342,7 @@ _gdk_input_wintab_init_check (void) gdkdev->info.name = g_strconcat (devname, " ", csrname, NULL); gdkdev->info.source = GDK_SOURCE_PEN; gdkdev->info.mode = GDK_MODE_SCREEN; -#if USE_SYSCONTEXT gdkdev->info.has_cursor = TRUE; -#else - gdkdev->info.has_cursor = FALSE; -#endif gdkdev->hctx = *hctx; gdkdev->cursor = cursorix; WTInfo (WTI_CURSORS + cursorix, CSR_PKTDATA, &gdkdev->pktdata); @@ -527,32 +479,6 @@ decode_tilt (gint *axis_data, axis_data[1] = sin (az) * cos (el) * 1000; } -#if !USE_SYSCONTEXT - -static GdkInputWindow * -gdk_input_window_find_within (GdkWindow *window) -{ - GList *list; - GdkWindow *tmpw; - GdkInputWindow *candidate = NULL; - - for (list = _gdk_input_windows; list != NULL; list = list->next) - { - tmpw = ((GdkInputWindow *) (tmp_list->data))->window; - if (tmpw == window - || IsChild (GDK_WINDOW_HWND (window), GDK_WINDOW_HWND (tmpw))) - { - if (candidate) - return NULL; /* Multiple hits */ - candidate = (GdkInputWindow *) (list->data); - } - } - - return candidate; -} - -#endif /* USE_SYSCONTEXT */ - #endif /* HAVE_WINTAB */ static void @@ -732,9 +658,6 @@ _gdk_input_other_event (GdkEvent *event, GdkWindow *window) { #ifdef HAVE_WINTAB -#if !USE_SYSCONTEXT - GdkWindow *current_window; -#endif GdkDisplay *display; GdkWindowObject *obj, *grab_obj; GdkInputWindow *input_window; @@ -753,7 +676,6 @@ _gdk_input_other_event (GdkEvent *event, return FALSE; } -#if USE_SYSCONTEXT window = gdk_window_at_pointer (&x, &y); if (window == NULL) window = _gdk_root; @@ -765,17 +687,6 @@ _gdk_input_other_event (GdkEvent *event, g_print ("gdk_input_win32_other_event: window=%p %+d%+d\n", GDK_WINDOW_HWND (window), x, y)); -#else - /* ??? This code is pretty bogus */ - current_window = gdk_win32_handle_table_lookup (GetActiveWindow ()); - if (current_window == NULL) - return FALSE; - - input_window = gdk_input_window_find_within (current_window); - if (input_window == NULL) - return FALSE; -#endif - if (msg->message == WT_PACKET) { if (!WTPacket ((HCTX) msg->lParam, msg->wParam, &packet)) @@ -925,13 +836,6 @@ _gdk_input_other_event (GdkEvent *event, event->button.time = _gdk_win32_get_next_tick (msg->time); event->button.device = &gdkdev->info; -#if 0 -#if USE_SYSCONTEXT - /* Buttons 1 to 3 will come in as WM_[LMR]BUTTON{DOWN,UP} */ - if (event->button.button <= 3) - return FALSE; -#endif -#endif event->button.axes = g_new(gdouble, gdkdev->info.num_axes); gdk_input_translate_coordinates (gdkdev, input_window, |