Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
33eb82a5f5 | ||
![]() |
68d1832075 | ||
![]() |
83bc703744 | ||
![]() |
5b6380d394 | ||
![]() |
7f0ed14f02 | ||
![]() |
7bdd69892b | ||
![]() |
c99da71e96 |
10
NEWS
10
NEWS
@@ -1,3 +1,13 @@
|
|||||||
|
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
|
3.16.1.1
|
||||||
========
|
========
|
||||||
* Prevent a crash when switching VTs or adding input devices [Carlos; #747886]
|
* Prevent a crash when switching VTs or adding input devices [Carlos; #747886]
|
||||||
|
@@ -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.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])
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
meta_XFree (data_ret);
|
|
||||||
|
|
||||||
if (rc == Success && type_ret == type && format_ret == format)
|
|
||||||
XIChangeProperty (xdisplay, device_id, property_atom, type,
|
XIChangeProperty (xdisplay, device_id, property_atom, type,
|
||||||
format, XIPropModeReplace, data, nitems);
|
format, XIPropModeReplace, data, nitems);
|
||||||
|
meta_XFree (data_ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
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