compositor-drm: ignore hotplug-events from other devices

If we have multiple video devices on the system (card0, card1), we should
ignore hotplug events for cards that we do not use. This avoids calling
update_outputs() if the event was not generated by our device so we avoid
refreshing the DRM information if it didn't change.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 67fa500..27d4512 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -50,6 +50,7 @@
 	struct wl_event_source *udev_drm_source;
 
 	struct {
+		int id;
 		int fd;
 	} drm;
 	struct gbm_device *gbm;
@@ -759,13 +760,21 @@
 init_egl(struct drm_compositor *ec, struct udev_device *device)
 {
 	EGLint major, minor;
-	const char *extensions, *filename;
+	const char *extensions, *filename, *sysnum;
 	int fd;
 	static const EGLint context_attribs[] = {
 		EGL_CONTEXT_CLIENT_VERSION, 2,
 		EGL_NONE
 	};
 
+	sysnum = udev_device_get_sysnum(device);
+	if (sysnum)
+		ec->drm.id = atoi(sysnum);
+	if (!sysnum || ec->drm.id < 0) {
+		fprintf(stderr, "cannot get device sysnum\n");
+		return -1;
+	}
+
 	filename = udev_device_get_devnode(device);
 	fd = open(filename, O_RDWR | O_CLOEXEC);
 	if (fd < 0) {
@@ -1385,9 +1394,14 @@
 }
 
 static int
-udev_event_is_hotplug(struct udev_device *device)
+udev_event_is_hotplug(struct drm_compositor *ec, struct udev_device *device)
 {
 	struct udev_list_entry *list, *hotplug_entry;
+	const char *sysnum;
+
+	sysnum = udev_device_get_sysnum(device);
+	if (!sysnum || atoi(sysnum) != ec->drm.id)
+		return 0;
 
 	list = udev_device_get_properties_list_entry(device);
 
@@ -1406,7 +1420,7 @@
 
 	event = udev_monitor_receive_device(ec->udev_monitor);
 
-	if (udev_event_is_hotplug(event))
+	if (udev_event_is_hotplug(ec, event))
 		update_outputs(ec, event);
 
 	udev_device_unref(event);