Move the _gdk_win32_pointer_input_api global variable into GdkWin32Display

This commit is contained in:
Luca Bacci 2021-08-19 16:29:45 +02:00
parent 58e65ae7dd
commit c02bae9e08
No known key found for this signature in database
GPG Key ID: 8E3C8D989C98883D
6 changed files with 51 additions and 40 deletions

View File

@ -31,6 +31,7 @@
#include "gdkdevice-wintab.h" #include "gdkdevice-wintab.h"
#include "gdkinput-winpointer.h" #include "gdkinput-winpointer.h"
#include "gdkdisplayprivate.h" #include "gdkdisplayprivate.h"
#include "gdkdisplay-win32.h"
#include "gdkseatdefaultprivate.h" #include "gdkseatdefaultprivate.h"
#define WINTAB32_DLL "Wintab32.dll" #define WINTAB32_DLL "Wintab32.dll"
@ -682,12 +683,13 @@ wintab_default_display_notify_cb (GdkDisplayManager *display_manager)
static void static void
gdk_device_manager_win32_constructed (GObject *object) gdk_device_manager_win32_constructed (GObject *object)
{ {
GdkWin32Display *display_win32;
GdkDeviceManagerWin32 *device_manager; GdkDeviceManagerWin32 *device_manager;
GdkSeat *seat; GdkSeat *seat;
GdkDisplayManager *display_manager = NULL; const char *api_preference = NULL;
GdkDisplay *default_display = NULL; gboolean have_api_preference = TRUE;
const char *tablet_input_api_user_preference = NULL;
gboolean have_tablet_input_api_preference = FALSE; display_win32 = GDK_WIN32_DISPLAY (_gdk_display);
device_manager = GDK_DEVICE_MANAGER_WIN32 (object); device_manager = GDK_DEVICE_MANAGER_WIN32 (object);
device_manager->core_pointer = device_manager->core_pointer =
@ -730,35 +732,44 @@ gdk_device_manager_win32_constructed (GObject *object)
_gdk_device_manager = device_manager; _gdk_device_manager = device_manager;
tablet_input_api_user_preference = g_getenv ("GDK_WIN32_TABLET_INPUT_API"); api_preference = g_getenv ("GDK_WIN32_TABLET_INPUT_API");
if (g_strcmp0 (tablet_input_api_user_preference, "none") == 0) if (g_strcmp0 (api_preference, "none") == 0)
{ {
have_tablet_input_api_preference = TRUE; display_win32->tablet_input_api = GDK_WIN32_TABLET_INPUT_API_NONE;
_gdk_win32_tablet_input_api = GDK_WIN32_TABLET_INPUT_API_NONE;
} }
else if (g_strcmp0 (tablet_input_api_user_preference, "wintab") == 0) else if (g_strcmp0 (api_preference, "wintab") == 0)
{ {
have_tablet_input_api_preference = TRUE; display_win32->tablet_input_api = GDK_WIN32_TABLET_INPUT_API_WINTAB;
_gdk_win32_tablet_input_api = GDK_WIN32_TABLET_INPUT_API_WINTAB;
} }
else if (g_strcmp0 (tablet_input_api_user_preference, "winpointer") == 0) else if (g_strcmp0 (api_preference, "winpointer") == 0)
{ {
have_tablet_input_api_preference = TRUE; display_win32->tablet_input_api = GDK_WIN32_TABLET_INPUT_API_WINPOINTER;
_gdk_win32_tablet_input_api = GDK_WIN32_TABLET_INPUT_API_WINPOINTER;
} }
else else
{ {
have_tablet_input_api_preference = FALSE; /* No user preference, default to WinPointer. If unsuccessful,
_gdk_win32_tablet_input_api = GDK_WIN32_TABLET_INPUT_API_WINPOINTER; * try to initialize other API's in sequence until one succeeds.
*/
display_win32->tablet_input_api = GDK_WIN32_TABLET_INPUT_API_WINPOINTER;
have_api_preference = FALSE;
} }
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER) if (display_win32->tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER)
{ {
if (!gdk_winpointer_initialize () && !have_tablet_input_api_preference) gboolean init_successful = gdk_winpointer_initialize ();
_gdk_win32_tablet_input_api = GDK_WIN32_TABLET_INPUT_API_WINTAB;
if (!init_successful && !have_api_preference)
{
/* Try Wintab */
display_win32->tablet_input_api = GDK_WIN32_TABLET_INPUT_API_WINTAB;
}
} }
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINTAB)
if (display_win32->tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINTAB)
{ {
GdkDisplayManager *display_manager = NULL;
GdkDisplay *default_display = NULL;
/* Only call Wintab init stuff after the default display /* Only call Wintab init stuff after the default display
* is globally known and accessible through the display manager * is globally known and accessible through the display manager
* singleton. Approach lifted from gtkmodules.c. * singleton. Approach lifted from gtkmodules.c.

View File

@ -99,6 +99,12 @@ typedef struct _GdkWin32User32DPIFuncs
funcADACE areDACEqual; funcADACE areDACEqual;
} GdkWin32User32DPIFuncs; } GdkWin32User32DPIFuncs;
typedef enum {
GDK_WIN32_TABLET_INPUT_API_NONE,
GDK_WIN32_TABLET_INPUT_API_WINTAB,
GDK_WIN32_TABLET_INPUT_API_WINPOINTER
} GdkWin32TabletInputAPI;
/* Detect running architecture */ /* Detect running architecture */
typedef BOOL (WINAPI *funcIsWow64Process2) (HANDLE, USHORT *, USHORT *); typedef BOOL (WINAPI *funcIsWow64Process2) (HANDLE, USHORT *, USHORT *);
typedef struct _GdkWin32KernelCPUFuncs typedef struct _GdkWin32KernelCPUFuncs
@ -159,7 +165,9 @@ struct _GdkWin32Display
GdkWin32ShcoreFuncs shcore_funcs; GdkWin32ShcoreFuncs shcore_funcs;
GdkWin32User32DPIFuncs user32_dpi_funcs; GdkWin32User32DPIFuncs user32_dpi_funcs;
GdkWin32TabletInputAPI tablet_input_api;
/* Cursor Items (GdkCursor->GdkWin32HCursor) */ /* Cursor Items (GdkCursor->GdkWin32HCursor) */
GHashTable *cursors; GHashTable *cursors;
/* The cursor that is used by current grab (if any) */ /* The cursor that is used by current grab (if any) */

View File

@ -2345,7 +2345,7 @@ gdk_event_translate (MSG *msg,
* https://devblogs.microsoft.com/oldnewthing/20031001-00/?p=42343 * https://devblogs.microsoft.com/oldnewthing/20031001-00/?p=42343
* *
*/ */
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER && if (win32_display->tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER &&
( (msg->time - last_digitizer_time) < 200 || ( (msg->time - last_digitizer_time) < 200 ||
-(msg->time - last_digitizer_time) < 200 )) -(msg->time - last_digitizer_time) < 200 ))
break; break;
@ -2496,7 +2496,7 @@ gdk_event_translate (MSG *msg,
break; break;
case WM_POINTERDOWN: case WM_POINTERDOWN:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER || if (win32_display->tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg)) gdk_winpointer_should_forward_message (msg))
{ {
return_val = FALSE; return_val = FALSE;
@ -2526,7 +2526,7 @@ gdk_event_translate (MSG *msg,
break; break;
case WM_POINTERUP: case WM_POINTERUP:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER || if (win32_display->tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg)) gdk_winpointer_should_forward_message (msg))
{ {
return_val = FALSE; return_val = FALSE;
@ -2559,7 +2559,7 @@ gdk_event_translate (MSG *msg,
break; break;
case WM_POINTERUPDATE: case WM_POINTERUPDATE:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER || if (win32_display->tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg)) gdk_winpointer_should_forward_message (msg))
{ {
return_val = FALSE; return_val = FALSE;
@ -2598,7 +2598,7 @@ gdk_event_translate (MSG *msg,
break; break;
case WM_NCPOINTERUPDATE: case WM_NCPOINTERUPDATE:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER || if (win32_display->tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg)) gdk_winpointer_should_forward_message (msg))
{ {
return_val = FALSE; return_val = FALSE;
@ -2633,7 +2633,7 @@ gdk_event_translate (MSG *msg,
break; break;
case WM_POINTERENTER: case WM_POINTERENTER:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER || if (win32_display->tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg)) gdk_winpointer_should_forward_message (msg))
{ {
return_val = FALSE; return_val = FALSE;
@ -2663,7 +2663,7 @@ gdk_event_translate (MSG *msg,
break; break;
case WM_POINTERLEAVE: case WM_POINTERLEAVE:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER || if (win32_display->tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg)) gdk_winpointer_should_forward_message (msg))
{ {
return_val = FALSE; return_val = FALSE;
@ -3219,7 +3219,7 @@ gdk_event_translate (MSG *msg,
break; break;
case WM_DESTROY: case WM_DESTROY:
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER) if (win32_display->tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER)
gdk_winpointer_finalize_surface (window); gdk_winpointer_finalize_surface (window);
return_val = FALSE; return_val = FALSE;
@ -3305,7 +3305,7 @@ gdk_event_translate (MSG *msg,
{ {
gdk_synthesize_surface_state (window, 0, GDK_TOPLEVEL_STATE_FOCUSED); gdk_synthesize_surface_state (window, 0, GDK_TOPLEVEL_STATE_FOCUSED);
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINTAB) if (win32_display->tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINTAB)
{ {
/* Bring any tablet contexts to the top of the overlap order when /* Bring any tablet contexts to the top of the overlap order when
* one of our windows is activated. * one of our windows is activated.
@ -3362,7 +3362,7 @@ gdk_event_translate (MSG *msg,
/* Fall through */ /* Fall through */
wintab: wintab:
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINTAB) if (win32_display->tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINTAB)
{ {
event = gdk_wintab_make_event (display, msg, window); event = gdk_wintab_make_event (display, msg, window);
if (event) if (event)

View File

@ -37,7 +37,6 @@ HINSTANCE _gdk_dll_hinstance;
HINSTANCE _gdk_app_hmodule; HINSTANCE _gdk_app_hmodule;
int _gdk_input_ignore_core; int _gdk_input_ignore_core;
GdkWin32TabletInputAPI _gdk_win32_tablet_input_api;
HKL _gdk_input_locale; HKL _gdk_input_locale;
gboolean _gdk_input_locale_is_ime = FALSE; gboolean _gdk_input_locale_is_ime = FALSE;

View File

@ -147,12 +147,6 @@ typedef enum
GDK_DRAG_PROTO_OLE2, GDK_DRAG_PROTO_OLE2,
} GdkDragProtocol; } GdkDragProtocol;
typedef enum {
GDK_WIN32_TABLET_INPUT_API_NONE = 0,
GDK_WIN32_TABLET_INPUT_API_WINTAB,
GDK_WIN32_TABLET_INPUT_API_WINPOINTER
} GdkWin32TabletInputAPI;
GType _gdk_gc_win32_get_type (void); GType _gdk_gc_win32_get_type (void);
gulong _gdk_win32_get_next_tick (gulong suggested_tick); gulong _gdk_win32_get_next_tick (gulong suggested_tick);
@ -277,7 +271,6 @@ extern HINSTANCE _gdk_dll_hinstance;
extern HINSTANCE _gdk_app_hmodule; extern HINSTANCE _gdk_app_hmodule;
extern int _gdk_input_ignore_core; extern int _gdk_input_ignore_core;
extern GdkWin32TabletInputAPI _gdk_win32_tablet_input_api;
/* These are thread specific, but GDK/win32 works OK only when invoked /* These are thread specific, but GDK/win32 works OK only when invoked
* from a single thread anyway. * from a single thread anyway.

View File

@ -646,7 +646,7 @@ _gdk_win32_display_create_surface (GdkDisplay *display,
return NULL; return NULL;
} }
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER) if (display_win32->tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER)
gdk_winpointer_initialize_surface (surface); gdk_winpointer_initialize_surface (surface);
_gdk_win32_surface_enable_transparency (surface); _gdk_win32_surface_enable_transparency (surface);