backends: Allow integrated tablet devices to cycle outputs
The work at https://gitlab.gnome.org/GNOME/gnome-control-center/issues/239 intended to make integrated devices optionally mappable to other outputs (in order to allow fix mishandling from our heuristics, or to quickly reach things in other monitor without changing devices). This was missed in that plan, we do allow cycling outputs, but we still did prevent it from doing anything for integrated devices. Fix that, and change output cycling so we don't allow a "NULL" EDID for integrated devices, this makes those go through the MetaInputMapper (resulting in one output listed twice), instead of mapping to the full stage. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1186 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1201
This commit is contained in:
parent
9e0f501914
commit
766d5299d3
1 changed files with 9 additions and 5 deletions
|
@ -2246,6 +2246,7 @@ meta_input_settings_get_pad_button_action (MetaInputSettings *input_settings,
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
cycle_logical_monitors (MetaInputSettings *settings,
|
cycle_logical_monitors (MetaInputSettings *settings,
|
||||||
|
gboolean skip_all_monitors,
|
||||||
MetaLogicalMonitor *current_logical_monitor,
|
MetaLogicalMonitor *current_logical_monitor,
|
||||||
MetaLogicalMonitor **next_logical_monitor)
|
MetaLogicalMonitor **next_logical_monitor)
|
||||||
{
|
{
|
||||||
|
@ -2255,7 +2256,8 @@ cycle_logical_monitors (MetaInputSettings *settings,
|
||||||
GList *logical_monitors;
|
GList *logical_monitors;
|
||||||
|
|
||||||
/* We cycle between:
|
/* We cycle between:
|
||||||
* - the span of all monitors (current_output = NULL)
|
* - the span of all monitors (current_logical_monitor = NULL), only for
|
||||||
|
* non-integrated devices.
|
||||||
* - each monitor individually.
|
* - each monitor individually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -2273,6 +2275,8 @@ cycle_logical_monitors (MetaInputSettings *settings,
|
||||||
l = g_list_find (logical_monitors, current_logical_monitor);
|
l = g_list_find (logical_monitors, current_logical_monitor);
|
||||||
if (l->next)
|
if (l->next)
|
||||||
*next_logical_monitor = l->next->data;
|
*next_logical_monitor = l->next->data;
|
||||||
|
else if (skip_all_monitors)
|
||||||
|
*next_logical_monitor = logical_monitors->data;
|
||||||
else
|
else
|
||||||
*next_logical_monitor = NULL;
|
*next_logical_monitor = NULL;
|
||||||
}
|
}
|
||||||
|
@ -2288,6 +2292,7 @@ meta_input_settings_cycle_tablet_output (MetaInputSettings *input_settings,
|
||||||
DeviceMappingInfo *info;
|
DeviceMappingInfo *info;
|
||||||
MetaLogicalMonitor *logical_monitor = NULL;
|
MetaLogicalMonitor *logical_monitor = NULL;
|
||||||
const gchar *edid[4] = { 0 }, *pretty_name = NULL;
|
const gchar *edid[4] = { 0 }, *pretty_name = NULL;
|
||||||
|
gboolean is_integrated_device = FALSE;
|
||||||
#ifdef HAVE_LIBWACOM
|
#ifdef HAVE_LIBWACOM
|
||||||
WacomDevice *wacom_device;
|
WacomDevice *wacom_device;
|
||||||
#endif
|
#endif
|
||||||
|
@ -2306,11 +2311,9 @@ meta_input_settings_cycle_tablet_output (MetaInputSettings *input_settings,
|
||||||
|
|
||||||
if (wacom_device)
|
if (wacom_device)
|
||||||
{
|
{
|
||||||
/* Output rotation only makes sense on external tablets */
|
|
||||||
if (libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
pretty_name = libwacom_get_name (wacom_device);
|
pretty_name = libwacom_get_name (wacom_device);
|
||||||
|
is_integrated_device =
|
||||||
|
libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2318,6 +2321,7 @@ meta_input_settings_cycle_tablet_output (MetaInputSettings *input_settings,
|
||||||
NULL, &logical_monitor);
|
NULL, &logical_monitor);
|
||||||
|
|
||||||
if (!cycle_logical_monitors (input_settings,
|
if (!cycle_logical_monitors (input_settings,
|
||||||
|
is_integrated_device,
|
||||||
logical_monitor,
|
logical_monitor,
|
||||||
&logical_monitor))
|
&logical_monitor))
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue