Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
33eb82a5f5 | ||
![]() |
68d1832075 | ||
![]() |
83bc703744 | ||
![]() |
5b6380d394 | ||
![]() |
7f0ed14f02 | ||
![]() |
7bdd69892b | ||
![]() |
c99da71e96 | ||
![]() |
f7e243108d | ||
![]() |
0d6420df51 |
17
NEWS
17
NEWS
@@ -1,3 +1,20 @@
|
|||||||
|
3.16.2
|
||||||
|
======
|
||||||
|
* Fix scroll button setting [Ondrej; #747967]
|
||||||
|
* Don't reset idle time for non-hardware events [Rui; #748541]
|
||||||
|
* Honor default value for click method setting [Rui; #746290]
|
||||||
|
* Misc. bug fixes [Rui; #748478]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Carlos Garnacho, Ondrej Holy, Rui Matos
|
||||||
|
|
||||||
|
3.16.1.1
|
||||||
|
========
|
||||||
|
* Prevent a crash when switching VTs or adding input devices [Carlos; #747886]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Carlos Garnacho
|
||||||
|
|
||||||
3.16.1
|
3.16.1
|
||||||
======
|
======
|
||||||
* Add function to refresh all background instances [Rui; #739178]
|
* Add function to refresh all background instances [Rui; #739178]
|
||||||
|
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
|||||||
|
|
||||||
m4_define([mutter_major_version], [3])
|
m4_define([mutter_major_version], [3])
|
||||||
m4_define([mutter_minor_version], [16])
|
m4_define([mutter_minor_version], [16])
|
||||||
m4_define([mutter_micro_version], [1])
|
m4_define([mutter_micro_version], [2])
|
||||||
|
|
||||||
m4_define([mutter_version],
|
m4_define([mutter_version],
|
||||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||||
|
@@ -209,6 +209,10 @@ update_touchpad_left_handed (MetaInputSettings *input_settings,
|
|||||||
MetaInputSettingsPrivate *priv;
|
MetaInputSettingsPrivate *priv;
|
||||||
gboolean enabled = FALSE;
|
gboolean enabled = FALSE;
|
||||||
|
|
||||||
|
if (device &&
|
||||||
|
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE)
|
||||||
|
return;
|
||||||
|
|
||||||
priv = meta_input_settings_get_instance_private (input_settings);
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
handedness = g_settings_get_enum (priv->touchpad_settings, "left-handed");
|
handedness = g_settings_get_enum (priv->touchpad_settings, "left-handed");
|
||||||
@@ -230,7 +234,6 @@ update_touchpad_left_handed (MetaInputSettings *input_settings,
|
|||||||
|
|
||||||
if (device)
|
if (device)
|
||||||
{
|
{
|
||||||
g_assert (clutter_input_device_get_device_type (device) == CLUTTER_TOUCHPAD_DEVICE);
|
|
||||||
settings_device_set_bool_setting (input_settings, device,
|
settings_device_set_bool_setting (input_settings, device,
|
||||||
input_settings_class->set_left_handed,
|
input_settings_class->set_left_handed,
|
||||||
enabled);
|
enabled);
|
||||||
@@ -251,13 +254,16 @@ update_mouse_left_handed (MetaInputSettings *input_settings,
|
|||||||
MetaInputSettingsPrivate *priv;
|
MetaInputSettingsPrivate *priv;
|
||||||
gboolean enabled;
|
gboolean enabled;
|
||||||
|
|
||||||
|
if (device &&
|
||||||
|
clutter_input_device_get_device_type (device) != CLUTTER_POINTER_DEVICE)
|
||||||
|
return;
|
||||||
|
|
||||||
priv = meta_input_settings_get_instance_private (input_settings);
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
enabled = g_settings_get_boolean (priv->mouse_settings, "left-handed");
|
enabled = g_settings_get_boolean (priv->mouse_settings, "left-handed");
|
||||||
|
|
||||||
if (device)
|
if (device)
|
||||||
{
|
{
|
||||||
g_assert (clutter_input_device_get_device_type (device) == CLUTTER_POINTER_DEVICE);
|
|
||||||
settings_device_set_bool_setting (input_settings, device,
|
settings_device_set_bool_setting (input_settings, device,
|
||||||
input_settings_class->set_left_handed,
|
input_settings_class->set_left_handed,
|
||||||
enabled);
|
enabled);
|
||||||
@@ -366,6 +372,10 @@ update_touchpad_tap_enabled (MetaInputSettings *input_settings,
|
|||||||
MetaInputSettingsPrivate *priv;
|
MetaInputSettingsPrivate *priv;
|
||||||
gboolean enabled;
|
gboolean enabled;
|
||||||
|
|
||||||
|
if (device &&
|
||||||
|
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE)
|
||||||
|
return;
|
||||||
|
|
||||||
priv = meta_input_settings_get_instance_private (input_settings);
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
enabled = g_settings_get_boolean (priv->touchpad_settings, "tap-to-click");
|
enabled = g_settings_get_boolean (priv->touchpad_settings, "tap-to-click");
|
||||||
@@ -392,6 +402,10 @@ update_touchpad_scroll_method (MetaInputSettings *input_settings,
|
|||||||
GDesktopTouchpadScrollMethod method;
|
GDesktopTouchpadScrollMethod method;
|
||||||
MetaInputSettingsPrivate *priv;
|
MetaInputSettingsPrivate *priv;
|
||||||
|
|
||||||
|
if (device &&
|
||||||
|
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE)
|
||||||
|
return;
|
||||||
|
|
||||||
priv = meta_input_settings_get_instance_private (input_settings);
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
method = g_settings_get_enum (priv->touchpad_settings, "scroll-method");
|
method = g_settings_get_enum (priv->touchpad_settings, "scroll-method");
|
||||||
@@ -418,6 +432,10 @@ update_touchpad_click_method (MetaInputSettings *input_settings,
|
|||||||
GDesktopTouchpadScrollMethod method;
|
GDesktopTouchpadScrollMethod method;
|
||||||
MetaInputSettingsPrivate *priv;
|
MetaInputSettingsPrivate *priv;
|
||||||
|
|
||||||
|
if (device &&
|
||||||
|
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE)
|
||||||
|
return;
|
||||||
|
|
||||||
priv = meta_input_settings_get_instance_private (input_settings);
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
method = g_settings_get_enum (priv->touchpad_settings, "click-method");
|
method = g_settings_get_enum (priv->touchpad_settings, "click-method");
|
||||||
@@ -444,6 +462,10 @@ update_touchpad_send_events (MetaInputSettings *input_settings,
|
|||||||
MetaInputSettingsPrivate *priv;
|
MetaInputSettingsPrivate *priv;
|
||||||
GDesktopDeviceSendEvents mode;
|
GDesktopDeviceSendEvents mode;
|
||||||
|
|
||||||
|
if (device &&
|
||||||
|
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE)
|
||||||
|
return;
|
||||||
|
|
||||||
priv = meta_input_settings_get_instance_private (input_settings);
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
mode = g_settings_get_enum (priv->touchpad_settings, "send-events");
|
mode = g_settings_get_enum (priv->touchpad_settings, "send-events");
|
||||||
@@ -486,13 +508,16 @@ update_trackball_scroll_button (MetaInputSettings *input_settings,
|
|||||||
MetaInputSettingsPrivate *priv;
|
MetaInputSettingsPrivate *priv;
|
||||||
guint button;
|
guint button;
|
||||||
|
|
||||||
|
if (device && !device_is_trackball (device))
|
||||||
|
return;
|
||||||
|
|
||||||
priv = meta_input_settings_get_instance_private (input_settings);
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
|
||||||
/* This key is 'i' in the schema but it also specifies a minimum
|
/* This key is 'i' in the schema but it also specifies a minimum
|
||||||
* range of 0 so the cast here is safe. */
|
* range of 0 so the cast here is safe. */
|
||||||
button = (guint) g_settings_get_int (priv->trackball_settings, "scroll-wheel-emulation-button");
|
button = (guint) g_settings_get_int (priv->trackball_settings, "scroll-wheel-emulation-button");
|
||||||
|
|
||||||
if (device && device_is_trackball (device))
|
if (device)
|
||||||
{
|
{
|
||||||
input_settings_class->set_scroll_button (input_settings, device, button);
|
input_settings_class->set_scroll_button (input_settings, device, button);
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
#include "meta-backend-x11.h"
|
#include "meta-backend-x11.h"
|
||||||
#include "meta-input-settings-x11.h"
|
#include "meta-input-settings-x11.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
#include <X11/extensions/XInput2.h>
|
#include <X11/extensions/XInput2.h>
|
||||||
@@ -35,6 +36,38 @@
|
|||||||
|
|
||||||
G_DEFINE_TYPE (MetaInputSettingsX11, meta_input_settings_x11, META_TYPE_INPUT_SETTINGS)
|
G_DEFINE_TYPE (MetaInputSettingsX11, meta_input_settings_x11, META_TYPE_INPUT_SETTINGS)
|
||||||
|
|
||||||
|
static void *
|
||||||
|
get_property (ClutterInputDevice *device,
|
||||||
|
const gchar *property,
|
||||||
|
Atom type,
|
||||||
|
int format,
|
||||||
|
gulong nitems)
|
||||||
|
{
|
||||||
|
MetaBackend *backend = meta_get_backend ();
|
||||||
|
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||||
|
gulong nitems_ret, bytes_after_ret;
|
||||||
|
int rc, device_id, format_ret;
|
||||||
|
Atom property_atom, type_ret;
|
||||||
|
guchar *data_ret = NULL;
|
||||||
|
|
||||||
|
property_atom = XInternAtom (xdisplay, property, False);
|
||||||
|
device_id = clutter_input_device_get_device_id (device);
|
||||||
|
|
||||||
|
rc = XIGetProperty (xdisplay, device_id, property_atom,
|
||||||
|
0, 10, False, type, &type_ret, &format_ret,
|
||||||
|
&nitems_ret, &bytes_after_ret, &data_ret);
|
||||||
|
if (rc == Success && type_ret == type && format_ret == format && nitems_ret >= nitems)
|
||||||
|
{
|
||||||
|
if (nitems_ret > nitems)
|
||||||
|
g_warning ("Property '%s' for device '%s' returned %lu items, expected %lu",
|
||||||
|
property, clutter_input_device_get_device_name (device), nitems_ret, nitems);
|
||||||
|
return data_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
meta_XFree (data_ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
change_property (ClutterInputDevice *device,
|
change_property (ClutterInputDevice *device,
|
||||||
const gchar *property,
|
const gchar *property,
|
||||||
@@ -45,23 +78,20 @@ change_property (ClutterInputDevice *device,
|
|||||||
{
|
{
|
||||||
MetaBackend *backend = meta_get_backend ();
|
MetaBackend *backend = meta_get_backend ();
|
||||||
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||||
gulong nitems_ret, bytes_after_ret;
|
int device_id;
|
||||||
int rc, device_id, format_ret;
|
Atom property_atom;
|
||||||
Atom property_atom, type_ret;
|
|
||||||
guchar *data_ret;
|
guchar *data_ret;
|
||||||
|
|
||||||
property_atom = XInternAtom (xdisplay, property, False);
|
property_atom = XInternAtom (xdisplay, property, False);
|
||||||
device_id = clutter_input_device_get_device_id (device);
|
device_id = clutter_input_device_get_device_id (device);
|
||||||
|
|
||||||
rc = XIGetProperty (xdisplay, device_id, property_atom,
|
data_ret = get_property (device, property, type, format, nitems);
|
||||||
0, 0, False, type, &type_ret, &format_ret,
|
if (!data_ret)
|
||||||
&nitems_ret, &bytes_after_ret, &data_ret);
|
return;
|
||||||
|
|
||||||
|
XIChangeProperty (xdisplay, device_id, property_atom, type,
|
||||||
|
format, XIPropModeReplace, data, nitems);
|
||||||
meta_XFree (data_ret);
|
meta_XFree (data_ret);
|
||||||
|
|
||||||
if (rc == Success && type_ret == type && format_ret == format)
|
|
||||||
XIChangeProperty (xdisplay, device_id, property_atom, type,
|
|
||||||
format, XIPropModeReplace, data, nitems);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -180,7 +210,7 @@ meta_input_settings_x11_set_scroll_button (MetaInputSettings *settings,
|
|||||||
ClutterInputDevice *device,
|
ClutterInputDevice *device,
|
||||||
guint button)
|
guint button)
|
||||||
{
|
{
|
||||||
change_property (device, "libinput Scroll Method Enabled",
|
change_property (device, "libinput Button Scrolling Button",
|
||||||
XA_INTEGER, 32, &button, 1);
|
XA_INTEGER, 32, &button, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,16 +220,23 @@ meta_input_settings_x11_set_click_method (MetaInputSettings *settings,
|
|||||||
GDesktopTouchpadClickMethod mode)
|
GDesktopTouchpadClickMethod mode)
|
||||||
{
|
{
|
||||||
guchar values[2] = { 0 }; /* buttonareas, clickfinger */
|
guchar values[2] = { 0 }; /* buttonareas, clickfinger */
|
||||||
|
guchar *defaults;
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
|
case G_DESKTOP_TOUCHPAD_CLICK_METHOD_DEFAULT:
|
||||||
|
defaults = get_property (device, "libinput Click Method Enabled Default",
|
||||||
|
XA_INTEGER, 8, 2);
|
||||||
|
if (!defaults)
|
||||||
|
break;
|
||||||
|
memcpy (values, defaults, 2);
|
||||||
|
meta_XFree (defaults);
|
||||||
|
break;
|
||||||
case G_DESKTOP_TOUCHPAD_CLICK_METHOD_NONE:
|
case G_DESKTOP_TOUCHPAD_CLICK_METHOD_NONE:
|
||||||
break;
|
break;
|
||||||
case G_DESKTOP_TOUCHPAD_CLICK_METHOD_AREAS:
|
case G_DESKTOP_TOUCHPAD_CLICK_METHOD_AREAS:
|
||||||
values[0] = 1;
|
values[0] = 1;
|
||||||
break;
|
break;
|
||||||
case G_DESKTOP_TOUCHPAD_CLICK_METHOD_DEFAULT:
|
|
||||||
/* XXX: We can't be much smarter yet, x11 doesn't expose default settings */
|
|
||||||
case G_DESKTOP_TOUCHPAD_CLICK_METHOD_FINGERS:
|
case G_DESKTOP_TOUCHPAD_CLICK_METHOD_FINGERS:
|
||||||
values[1] = 1;
|
values[1] = 1;
|
||||||
break;
|
break;
|
||||||
|
@@ -93,6 +93,15 @@ handle_idletime_for_event (const ClutterEvent *event)
|
|||||||
if (device == NULL)
|
if (device == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (event->any.flags & CLUTTER_EVENT_FLAG_SYNTHETIC ||
|
||||||
|
event->type == CLUTTER_ENTER ||
|
||||||
|
event->type == CLUTTER_LEAVE ||
|
||||||
|
event->type == CLUTTER_STAGE_STATE ||
|
||||||
|
event->type == CLUTTER_DESTROY_NOTIFY ||
|
||||||
|
event->type == CLUTTER_CLIENT_MESSAGE ||
|
||||||
|
event->type == CLUTTER_DELETE)
|
||||||
|
return;
|
||||||
|
|
||||||
device_id = clutter_input_device_get_device_id (device);
|
device_id = clutter_input_device_get_device_id (device);
|
||||||
|
|
||||||
core_monitor = meta_idle_monitor_get_core ();
|
core_monitor = meta_idle_monitor_get_core ();
|
||||||
@@ -192,6 +201,7 @@ meta_display_handle_event (MetaDisplay *display,
|
|||||||
{
|
{
|
||||||
MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (NULL);
|
MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (NULL);
|
||||||
meta_cursor_tracker_update_position (tracker, event->motion.x, event->motion.y);
|
meta_cursor_tracker_update_position (tracker, event->motion.x, event->motion.y);
|
||||||
|
display->monitor_cache_invalidated = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_idletime_for_event (event);
|
handle_idletime_for_event (event);
|
||||||
|
@@ -371,7 +371,7 @@ static void
|
|||||||
destroy_data_device_icon (struct wl_listener *listener, void *data)
|
destroy_data_device_icon (struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
MetaWaylandDragGrab *drag_grab =
|
MetaWaylandDragGrab *drag_grab =
|
||||||
wl_container_of (listener, drag_grab, drag_data_source_listener);
|
wl_container_of (listener, drag_grab, drag_icon_listener);
|
||||||
|
|
||||||
drag_grab->drag_surface = NULL;
|
drag_grab->drag_surface = NULL;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user