{
rec = xmalloc (sizeof *rec);
rec->seat = g_object_ref (seat);
- rec->device = GDK_DEVICE (t1->data);
- snprintf (printbuf, 1026, "%u:%s",
- gdk_device_get_source (rec->device),
- gdk_device_get_name (rec->device));
+ if (t1->data)
+ {
+ rec->device = GDK_DEVICE (t1->data);
+ snprintf (printbuf, 1026, "%u:%s",
+ gdk_device_get_source (rec->device),
+ gdk_device_get_name (rec->device));
+
+ rec->name = build_string (printbuf);
+ }
+ else
+ {
+ /* GTK bug 7737 results in GDK seats being initialized
+ with NULL devices in some cirumstances. As events will
+ presumably also be delivered with their device fields
+ set to NULL, insert a ersatz device record associated
+ with NULL. (bug#76239) */
+ rec->device = NULL;
+ rec->name = build_string ("0:unknown device");
+ }
- rec->name = build_string (printbuf);
rec->next = dpyinfo->devices;
dpyinfo->devices = rec;
}