| 
						
					 | 
					 | 
					@@ -293,13 +293,6 @@ on_device_added (ClutterDeviceManager *device_manager,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  create_device_monitor (backend, device_id);
 | 
					 | 
					 | 
					 | 
					  create_device_monitor (backend, device_id);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static inline gboolean
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					device_is_slave_touchscreen (ClutterInputDevice *device)
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return (clutter_input_device_get_device_mode (device) != CLUTTER_INPUT_MODE_MASTER &&
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          clutter_input_device_get_device_type (device) == CLUTTER_TOUCHSCREEN_DEVICE);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static inline gboolean
 | 
					 | 
					 | 
					 | 
					static inline gboolean
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					check_has_pointing_device (ClutterDeviceManager *manager)
 | 
					 | 
					 | 
					 | 
					check_has_pointing_device (ClutterDeviceManager *manager)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{
 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -316,6 +309,9 @@ check_has_pointing_device (ClutterDeviceManager *manager)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (clutter_input_device_get_device_type (device) == CLUTTER_TOUCHSCREEN_DEVICE ||
 | 
					 | 
					 | 
					 | 
					      if (clutter_input_device_get_device_type (device) == CLUTTER_TOUCHSCREEN_DEVICE ||
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          clutter_input_device_get_device_type (device) == CLUTTER_KEYBOARD_DEVICE)
 | 
					 | 
					 | 
					 | 
					          clutter_input_device_get_device_type (device) == CLUTTER_KEYBOARD_DEVICE)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        continue;
 | 
					 | 
					 | 
					 | 
					        continue;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if (clutter_input_device_get_device_type (device) == CLUTTER_TABLET_DEVICE &&
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          meta_is_wayland_compositor ())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        continue;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      return TRUE;
 | 
					 | 
					 | 
					 | 
					      return TRUE;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -324,9 +320,10 @@ check_has_pointing_device (ClutterDeviceManager *manager)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static inline gboolean
 | 
					 | 
					 | 
					 | 
					static inline gboolean
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					check_has_slave_touchscreen (ClutterDeviceManager *manager)
 | 
					 | 
					 | 
					 | 
					check_pointer_visibility (ClutterDeviceManager *manager)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{
 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const GSList *devices;
 | 
					 | 
					 | 
					 | 
					  const GSList *devices;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  gboolean pointer_visible = TRUE;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  devices = clutter_device_manager_peek_devices (manager);
 | 
					 | 
					 | 
					 | 
					  devices = clutter_device_manager_peek_devices (manager);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -334,12 +331,19 @@ check_has_slave_touchscreen (ClutterDeviceManager *manager)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    {
 | 
					 | 
					 | 
					 | 
					    {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ClutterInputDevice *device = devices->data;
 | 
					 | 
					 | 
					 | 
					      ClutterInputDevice *device = devices->data;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (clutter_input_device_get_device_mode (device) != CLUTTER_INPUT_MODE_MASTER &&
 | 
					 | 
					 | 
					 | 
					      if (clutter_input_device_get_device_mode (device) != CLUTTER_INPUT_MODE_SLAVE)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          clutter_input_device_get_device_type (device) == CLUTTER_TOUCHSCREEN_DEVICE)
 | 
					 | 
					 | 
					 | 
					        continue;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return TRUE;
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if (clutter_input_device_get_device_type (device) == CLUTTER_TOUCHSCREEN_DEVICE ||
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          (clutter_input_device_get_device_type (device) == CLUTTER_TABLET_DEVICE &&
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					           meta_is_wayland_compositor ()))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          pointer_visible = FALSE;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          break;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return FALSE;
 | 
					 | 
					 | 
					 | 
					  return pointer_visible;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void
 | 
					 | 
					 | 
					 | 
					static void
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -359,26 +363,16 @@ on_device_removed (ClutterDeviceManager *device_manager,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (priv->current_device_id == device_id)
 | 
					 | 
					 | 
					 | 
					  if (priv->current_device_id == device_id)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    {
 | 
					 | 
					 | 
					 | 
					    {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      MetaCursorTracker *cursor_tracker = priv->cursor_tracker;
 | 
					 | 
					 | 
					 | 
					      MetaCursorTracker *cursor_tracker = priv->cursor_tracker;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      gboolean has_touchscreen, has_pointing_device;
 | 
					 | 
					 | 
					 | 
					      gboolean pointer_hidden, has_pointing_device;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ClutterInputDeviceType device_type;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      priv->current_device_id = 0;
 | 
					 | 
					 | 
					 | 
					      priv->current_device_id = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      device_type = clutter_input_device_get_device_type (device);
 | 
					 | 
					 | 
					 | 
					      pointer_hidden = !check_pointer_visibility (device_manager);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      has_touchscreen = check_has_slave_touchscreen (device_manager);
 | 
					 | 
					 | 
					 | 
					      has_pointing_device = check_has_pointing_device (device_manager);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (device_type == CLUTTER_TOUCHSCREEN_DEVICE && has_touchscreen)
 | 
					 | 
					 | 
					 | 
					      meta_cursor_tracker_set_pointer_visible (cursor_tracker,
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        {
 | 
					 | 
					 | 
					 | 
					                                               has_pointing_device &&
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          /* There's more touchscreens left, keep the pointer hidden */
 | 
					 | 
					 | 
					 | 
					                                               !pointer_hidden);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          meta_cursor_tracker_set_pointer_visible (cursor_tracker, FALSE);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      else if (device_type != CLUTTER_KEYBOARD_DEVICE)
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          has_pointing_device = check_has_pointing_device (device_manager);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          meta_cursor_tracker_set_pointer_visible (cursor_tracker,
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                   has_pointing_device &&
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                   !has_touchscreen);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -405,20 +399,11 @@ set_initial_pointer_visibility (MetaBackend          *backend,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                ClutterDeviceManager *device_manager)
 | 
					 | 
					 | 
					 | 
					                                ClutterDeviceManager *device_manager)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{
 | 
					 | 
					 | 
					 | 
					{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
 | 
					 | 
					 | 
					 | 
					  MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const GSList *devices;
 | 
					 | 
					 | 
					 | 
					  gboolean pointer_visible;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const GSList *l;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  gboolean has_touchscreen = FALSE;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  devices = clutter_device_manager_peek_devices (device_manager);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for (l = devices; l; l = l->next)
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ClutterInputDevice *device = l->data;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      has_touchscreen |= device_is_slave_touchscreen (device);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  pointer_visible = check_pointer_visibility (device_manager);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  meta_cursor_tracker_set_pointer_visible (priv->cursor_tracker,
 | 
					 | 
					 | 
					 | 
					  meta_cursor_tracker_set_pointer_visible (priv->cursor_tracker,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                           !has_touchscreen);
 | 
					 | 
					 | 
					 | 
					                                           pointer_visible);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static MetaInputSettings *
 | 
					 | 
					 | 
					 | 
					static MetaInputSettings *
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					@@ -1054,6 +1039,12 @@ update_last_device (MetaBackend *backend)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    {
 | 
					 | 
					 | 
					 | 
					    {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    case CLUTTER_KEYBOARD_DEVICE:
 | 
					 | 
					 | 
					 | 
					    case CLUTTER_KEYBOARD_DEVICE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      break;
 | 
					 | 
					 | 
					 | 
					      break;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    case CLUTTER_TABLET_DEVICE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if (meta_is_wayland_compositor ())
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        meta_cursor_tracker_set_pointer_visible (cursor_tracker, FALSE);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      else
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        meta_cursor_tracker_set_pointer_visible (cursor_tracker, TRUE);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      break;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    case CLUTTER_TOUCHSCREEN_DEVICE:
 | 
					 | 
					 | 
					 | 
					    case CLUTTER_TOUCHSCREEN_DEVICE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      meta_cursor_tracker_set_pointer_visible (cursor_tracker, FALSE);
 | 
					 | 
					 | 
					 | 
					      meta_cursor_tracker_set_pointer_visible (cursor_tracker, FALSE);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      break;
 | 
					 | 
					 | 
					 | 
					      break;
 | 
				
			
			
		
	
	
		
		
			
				
					
					| 
						
					 | 
					 | 
					 
 |