static GdkDevicePrivate *gdk_input_find_dev_from_ctx (HCTX hctx,
UINT id);
-static GList *wintab_contexts;
+static GList *wintab_contexts = NULL;
-static GdkWindow *wintab_window;
+static GdkWindow *wintab_window = NULL;
#endif /* HAVE_WINTAB */
#endif
-static void
-gdk_input_wintab_init (void)
+void
+_gdk_input_wintab_init_check (void)
{
+ static gboolean wintab_initialized = FALSE;
GdkDevicePrivate *gdkdev;
GdkWindowAttr wa;
WORD specversion;
int devix, cursorix;
char devname[100], csrname[100];
- _gdk_input_devices = NULL;
+ if (wintab_initialized)
+ return;
+
+ wintab_initialized = TRUE;
+
wintab_contexts = NULL;
if (!_gdk_input_ignore_wintab &&
gdkdev->info.num_axes));
for (i = 0; i < gdkdev->info.num_axes; i++)
GDK_NOTE (INPUT,
- g_print ("...axis %d: %d--%d@%d (%d--%d@%d)\n",
+ g_print ("... axis %d: %d--%d@%d (%d--%d@%d)\n",
i,
gdkdev->axes[i].xmin_value,
gdkdev->axes[i].xmax_value,
display = gdk_drawable_get_display (window);
GDK_NOTE (EVENTS_OR_INPUT,
- g_print ("gdk_input_win32_other_event: window=%p (%d,%d)\n",
+ g_print ("gdk_input_win32_other_event: window=%p %+d%+d\n",
GDK_WINDOW_HWND (window), x, y));
#else
* moved or resized, see bug #151090. */
if (_sizemove_in_progress)
{
- GDK_NOTE (EVENTS_OR_INPUT, g_print ("...ignored when moving/sizing\n"));
+ GDK_NOTE (EVENTS_OR_INPUT, g_print ("... ignored when moving/sizing\n"));
return FALSE;
}
if (window == _gdk_parent_root && x_grab_window == NULL)
{
- GDK_NOTE (EVENTS_OR_INPUT, g_print ("...is root\n"));
+ GDK_NOTE (EVENTS_OR_INPUT, g_print ("... is root\n"));
return FALSE;
}
|| !(x_grab_mask && masktest))
{
GDK_NOTE (EVENTS_OR_INPUT,
- g_print ("...grabber doesn't want it\n"));
+ g_print ("... grabber doesn't want it\n"));
return FALSE;
}
- GDK_NOTE (EVENTS_OR_INPUT, g_print ("...to grabber\n"));
+ GDK_NOTE (EVENTS_OR_INPUT, g_print ("... to grabber\n"));
g_object_ref(x_grab_window);
g_object_unref(window);
if (!GDK_WINDOW_IMPL_WIN32 (obj->impl)->extension_events_selected
|| !(obj->extension_events & masktest))
{
- GDK_NOTE (EVENTS_OR_INPUT, g_print ("...not selected\n"));
+ GDK_NOTE (EVENTS_OR_INPUT, g_print ("... not selected\n"));
if (obj->parent == GDK_WINDOW_OBJECT (_gdk_parent_root))
return FALSE;
if (obj->event_mask & masktest)
{
GDK_NOTE (EVENTS_OR_INPUT,
- g_print ("...wants ordinary event, ignoring this\n"));
+ g_print ("... wants ordinary event, ignoring this\n"));
return FALSE;
}
ScreenToClient (GDK_WINDOW_HWND (window), &pt);
x = pt.x;
y = pt.y;
- GDK_NOTE (EVENTS_OR_INPUT, g_print ("...propagating to %p (%d,%d)\n",
+ GDK_NOTE (EVENTS_OR_INPUT, g_print ("... propagating to %p %+d%+d\n",
GDK_WINDOW_HWND (window), x, y));
goto dijkstra;
}
}
}
+#ifdef HAVE_WINTAB
+void
+_gdk_input_set_tablet_active (void)
+{
+ GList *tmp_list;
+ HCTX *hctx;
+
+ /* Bring the contexts to the top of the overlap order when one of the
+ * application's windows is activated */
+
+ if (!wintab_contexts)
+ return; /* No tablet devices found, or Wintab not initialized yet */
+
+ GDK_NOTE (INPUT, g_print ("_gdk_input_set_tablet_active: "
+ "Bringing Wintab contexts to the top of the overlap order\n"));
+
+ tmp_list = wintab_contexts;
+ while (tmp_list)
+ {
+ hctx = (HCTX *) (tmp_list->data);
+ WTOverlap (*hctx, TRUE);
+ tmp_list = tmp_list->next;
+ }
+}
+#endif /* HAVE_WINTAB */
+
void
_gdk_input_init (GdkDisplay *display)
{
_gdk_init_input_core (display);
#ifdef HAVE_WINTAB
- gdk_input_wintab_init ();
+#ifdef WINTAB_NO_LAZY_INIT
+ /* Normally, Wintab is only initialized when the application performs
+ * an action that requires it, such as enabling extended input events
+ * for a window or enumerating the devices.
+ */
+ _gdk_input_wintab_init_check ();
+#endif /* WINTAB_NO_LAZY_INIT */
#endif /* HAVE_WINTAB */
_gdk_input_devices = g_list_append (_gdk_input_devices, display->core_pointer);