Hello community, here is the log from the commit of package mutter for openSUSE:Factory checked in at 2017-02-20 14:28:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mutter (Old) and /work/SRC/openSUSE:Factory/.mutter.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mutter" Changes: -------- --- /work/SRC/openSUSE:Factory/mutter/mutter.changes 2016-12-04 15:05:36.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.mutter.new/mutter.changes 2017-02-20 14:28:50.716883205 +0100 @@ -1,0 +2,24 @@ +Thu Feb 16 23:02:12 UTC 2017 - [email protected] + +- Update to version 3.22.3: + + Fix switching between two finger- and edge scrolling on wayland + (bgo#771744). + + Fix frequent freezes in multihead setups on wayland + (bgo#774557). + + Preserve root window mask on XSelectionRequest (bgo#776128). + + Fix window menu placement with HiDPI (bgo#776055). + + Fix HiDPI detection on vertical monitor layouts (bgo#777687). + + Fix erroneous key event repeats (bgo#774989). + + Fix "ghost" cursors in multi-monitor setups (bgo#771056). + + Use eglGetPlatformDisplay (bgo#772422). + + Fix erratic raise_or_lower behavior (bgo#705200). + + Extend tablet device checks (bgo#773779). + + Set right scale for tablet tool cursors on HiDPI (bgo#778474). + + Allow edge-scrolling without 2fg-scroll capable devices + (bgo#778554). + + Misc. bug fixes: bgo#771297, bgo#774135, bgo#775986, + bgo#777691, bgo#777470, bgo#778262, bgo#776919. + + Updated translations. +- Drop mutter-x11-meta.patch: Fixed upstream. + +------------------------------------------------------------------- Old: ---- mutter-3.22.2.tar.xz mutter-x11-meta.patch New: ---- mutter-3.22.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mutter.spec ++++++ --- /var/tmp/diff_new_pack.azU0yT/_old 2017-02-20 14:28:51.832725750 +0100 +++ /var/tmp/diff_new_pack.azU0yT/_new 2017-02-20 14:28:51.836725186 +0100 @@ -1,7 +1,7 @@ # # spec file for package mutter # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -25,7 +25,7 @@ %global __provides_exclude_from ^%{_libdir}/mutter/.*.typelib$ Name: mutter -Version: 3.22.2 +Version: 3.22.3 Release: 0 Summary: Window and compositing manager based on Clutter License: GPL-2.0+ @@ -40,8 +40,6 @@ Patch3: mutter-bsc984738-grab-display.patch # PATCH-FIX-UPSTREAM mutter-fix-startup.patch bgo#768531 [email protected] -- Fix slow startup notification on wayland Patch6: mutter-fix-startup.patch -# PATCH-FIX-UPSTREAM mutter-x11-meta.patch bgo#775337 bgo#771744 boo#1011356 [email protected] -- meta-input-settings-x11: Don't try setting unavailable scroll methods -Patch7: mutter-x11-meta.patch BuildRequires: fdupes BuildRequires: gobject-introspection-devel >= 0.9.5 BuildRequires: libSM-devel @@ -141,7 +139,6 @@ %patch3 -p1 %endif %patch6 -p1 -%patch7 -p1 %build %configure \ ++++++ mutter-3.22.2.tar.xz -> mutter-3.22.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/NEWS new/mutter-3.22.3/NEWS --- old/mutter-3.22.2/NEWS 2016-11-10 15:11:28.000000000 +0100 +++ new/mutter-3.22.3/NEWS 2017-02-16 18:11:49.000000000 +0100 @@ -1,3 +1,27 @@ +3.22.3 +====== +* Fix switching between two finger- and edge scrolling on wayland [Rui; #771744] +* Fix frequent freezes in multihead setups on wayland [Rui; #774557] +* Preserve root window mask on XSelectionRequest [Olivier; #776128] +* Fix window menu placement with HiDPI [Jonas; #776055] +* Fix HiDPI detection on vertical monitor layouts [Carlos; #777687] +* Fix erroneous key event repeats [Rui; #774989] +* Fix "ghost" cursors in multi-monitor setups [Jonas; #771056] +* Use eglGetPlatformDisplay [Adam; #772422] +* Fix erratic raise_or_lower behavior [Jose; #705200] +* Extend tablet device checks [Carlos; #773779] +* Set right scale for tablet tool cursors on HiDPI [Carlos; #778474] +* Allow edge-scrolling without 2fg-scroll capable devices [Rui; #778554] +* Misc. bug fixes [Jonas, Rui, Carlos, Peter; #771297, #774135, #775986, + #777691, #777470, #778262, #776919] + +Contributors: + Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Peter Hutterer, Adam Jackson, + Jose Marino, Rui Matos + +Translations: + Mandy Wang [zh_CN] + 3.22.2 ====== * Really fix framebuffer capture origin offset [Rui; #771502] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/clutter/build/Makefile.in new/mutter-3.22.3/clutter/build/Makefile.in --- old/mutter-3.22.2/clutter/build/Makefile.in 2016-11-10 15:12:03.000000000 +0100 +++ new/mutter-3.22.3/clutter/build/Makefile.in 2017-02-16 17:43:31.000000000 +0100 @@ -162,7 +162,7 @@ CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in compile config.guess \ - config.sub depcomp install-sh ltmain.sh missing + config.sub install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/clutter/clutter/evdev/clutter-device-manager-evdev.c new/mutter-3.22.3/clutter/clutter/evdev/clutter-device-manager-evdev.c --- old/mutter-3.22.2/clutter/clutter/evdev/clutter-device-manager-evdev.c 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/clutter/clutter/evdev/clutter-device-manager-evdev.c 2017-02-16 17:24:02.000000000 +0100 @@ -2261,6 +2261,12 @@ return next_id; } +void +_clutter_device_manager_evdev_dispatch (ClutterDeviceManagerEvdev *manager_evdev) +{ + dispatch_libinput (manager_evdev); +} + static int compare_ids (gconstpointer a, gconstpointer b) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/clutter/clutter/evdev/clutter-device-manager-evdev.h new/mutter-3.22.3/clutter/clutter/evdev/clutter-device-manager-evdev.h --- old/mutter-3.22.2/clutter/clutter/evdev/clutter-device-manager-evdev.h 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/clutter/clutter/evdev/clutter-device-manager-evdev.h 2017-02-16 17:24:02.000000000 +0100 @@ -76,6 +76,8 @@ float *new_x, float *new_y); +void _clutter_device_manager_evdev_dispatch (ClutterDeviceManagerEvdev *manager_evdev); + static inline guint64 us (guint64 us) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/clutter/clutter/evdev/clutter-seat-evdev.c new/mutter-3.22.3/clutter/clutter/evdev/clutter-seat-evdev.c --- old/mutter-3.22.2/clutter/clutter/evdev/clutter-seat-evdev.c 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/clutter/clutter/evdev/clutter-seat-evdev.c 2017-02-16 17:24:02.000000000 +0100 @@ -185,15 +185,19 @@ { ClutterSeatEvdev *seat = data; GSource *source; - guint32 time_ms; + + /* There might be events queued in libinput that could cancel the + repeat timer. */ + _clutter_device_manager_evdev_dispatch (seat->manager_evdev); + if (!seat->repeat_timer) + return G_SOURCE_REMOVE; g_return_val_if_fail (seat->repeat_device != NULL, G_SOURCE_REMOVE); source = g_main_context_find_source_by_id (NULL, seat->repeat_timer); - time_ms = g_source_get_time (source) / 1000; clutter_seat_evdev_notify_key (seat, seat->repeat_device, - ms2us (time_ms), + g_source_get_time (source), seat->repeat_key, AUTOREPEAT_VALUE, FALSE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/cogl/cogl/winsys/cogl-winsys-egl-x11.c new/mutter-3.22.3/cogl/cogl/winsys/cogl-winsys-egl-x11.c --- old/mutter-3.22.2/cogl/cogl/winsys/cogl-winsys-egl-x11.c 2016-10-19 16:54:40.000000000 +0200 +++ new/mutter-3.22.3/cogl/cogl/winsys/cogl-winsys-egl-x11.c 2017-02-16 17:24:00.000000000 +0100 @@ -261,6 +261,39 @@ g_slice_free (CoglRendererEGL, egl_renderer); } +static EGLDisplay +_cogl_winsys_egl_get_display (void *native) +{ + EGLDisplay dpy = NULL; + const char *client_exts = eglQueryString (NULL, EGL_EXTENSIONS); + + if (g_strstr_len (client_exts, -1, "EGL_KHR_platform_base")) + { + PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = + (void *) eglGetProcAddress ("eglGetPlatformDisplay"); + + if (get_platform_display) + dpy = get_platform_display (EGL_PLATFORM_X11_KHR, native, NULL); + + if (dpy) + return dpy; + } + + if (g_strstr_len (client_exts, -1, "EGL_EXT_platform_base")) + { + PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = + (void *) eglGetProcAddress ("eglGetPlatformDisplayEXT"); + + if (get_platform_display) + dpy = get_platform_display (EGL_PLATFORM_X11_KHR, native, NULL); + + if (dpy) + return dpy; + } + + return eglGetDisplay ((EGLNativeDisplayType) native); +} + static CoglBool _cogl_winsys_renderer_connect (CoglRenderer *renderer, CoglError **error) @@ -277,8 +310,7 @@ if (!_cogl_xlib_renderer_connect (renderer, error)) goto error; - egl_renderer->edpy = - eglGetDisplay ((EGLNativeDisplayType) xlib_renderer->xdpy); + egl_renderer->edpy = _cogl_winsys_egl_get_display (xlib_renderer->xdpy); if (!_cogl_winsys_egl_renderer_connect_common (renderer, error)) goto error; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/configure new/mutter-3.22.3/configure --- old/mutter-3.22.2/configure 2016-11-10 15:11:53.000000000 +0100 +++ new/mutter-3.22.3/configure 2017-02-16 18:12:12.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for mutter 3.22.2. +# Generated by GNU Autoconf 2.69 for mutter 3.22.3. # # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=mutter>. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='mutter' PACKAGE_TARNAME='mutter' -PACKAGE_VERSION='3.22.2' -PACKAGE_STRING='mutter 3.22.2' +PACKAGE_VERSION='3.22.3' +PACKAGE_STRING='mutter 3.22.3' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=mutter' PACKAGE_URL='' @@ -1428,7 +1428,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures mutter 3.22.2 to adapt to many kinds of systems. +\`configure' configures mutter 3.22.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1502,7 +1502,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of mutter 3.22.2:";; + short | recursive ) echo "Configuration of mutter 3.22.3:";; esac cat <<\_ACEOF @@ -1670,7 +1670,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -mutter configure 3.22.2 +mutter configure 3.22.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2085,7 +2085,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by mutter $as_me 3.22.2, which was +It was created by mutter $as_me 3.22.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2959,7 +2959,7 @@ # Define the identity of the package. PACKAGE='mutter' - VERSION='3.22.2' + VERSION='3.22.3' cat >>confdefs.h <<_ACEOF @@ -4733,7 +4733,7 @@ MUTTER_MAJOR_VERSION=3 MUTTER_MINOR_VERSION=22 -MUTTER_MICRO_VERSION=2 +MUTTER_MICRO_VERSION=3 MUTTER_PLUGIN_API_VERSION=3 @@ -18786,7 +18786,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mutter $as_me 3.22.2, which was +This file was extended by mutter $as_me 3.22.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18852,7 +18852,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mutter config.status 3.22.2 +mutter config.status 3.22.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/configure.ac new/mutter-3.22.3/configure.ac --- old/mutter-3.22.2/configure.ac 2016-11-10 15:11:37.000000000 +0100 +++ new/mutter-3.22.3/configure.ac 2017-02-16 18:11:49.000000000 +0100 @@ -2,7 +2,7 @@ m4_define([mutter_major_version], [3]) m4_define([mutter_minor_version], [22]) -m4_define([mutter_micro_version], [2]) +m4_define([mutter_micro_version], [3]) m4_define([mutter_version], [mutter_major_version.mutter_minor_version.mutter_micro_version]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/data/50-mutter-navigation.xml new/mutter-3.22.3/data/50-mutter-navigation.xml --- old/mutter-3.22.2/data/50-mutter-navigation.xml 2016-08-19 23:20:03.000000000 +0200 +++ new/mutter-3.22.3/data/50-mutter-navigation.xml 2016-11-22 16:27:46.000000000 +0100 @@ -1,78 +1,140 @@ -<?xml version="1.0" encoding="UTF-8"?> -<KeyListEntries wm_name="Mutter" schema="org.gnome.desktop.wm.keybindings" package="mutter" group="system" name="Navigation"> +<?xml version="1.0" encoding="UTF-8" ?> +<KeyListEntries schema="org.gnome.desktop.wm.keybindings" + group="system" + name="Navigation" + wm_name="Mutter" + package="mutter"> - <KeyListEntry name="move-to-workspace-1" description="Move window to workspace 1"></KeyListEntry> + <KeyListEntry name="move-to-workspace-1" + description="Move window to workspace 1" /> - <KeyListEntry name="move-to-workspace-2" description="Move window to workspace 2"></KeyListEntry> + <KeyListEntry name="move-to-workspace-2" + description="Move window to workspace 2" /> - <KeyListEntry name="move-to-workspace-3" description="Move window to workspace 3"></KeyListEntry> + <KeyListEntry name="move-to-workspace-3" + description="Move window to workspace 3" /> - <KeyListEntry name="move-to-workspace-4" description="Move window to workspace 4"></KeyListEntry> + <KeyListEntry name="move-to-workspace-4" + description="Move window to workspace 4" /> - <KeyListEntry name="move-to-workspace-last" description="Move window to last workspace"></KeyListEntry> + <KeyListEntry name="move-to-workspace-last" + description="Move window to last workspace" /> - <KeyListEntry name="move-to-workspace-left" description="Move window one workspace to the left"></KeyListEntry> + <KeyListEntry name="move-to-workspace-left" + description="Move window one workspace to the left" /> - <KeyListEntry name="move-to-workspace-right" description="Move window one workspace to the right"></KeyListEntry> + <KeyListEntry name="move-to-workspace-right" + description="Move window one workspace to the right" /> - <KeyListEntry name="move-to-workspace-up" description="Move window one workspace up"></KeyListEntry> + <KeyListEntry name="move-to-workspace-up" + description="Move window one workspace up" /> - <KeyListEntry name="move-to-workspace-down" description="Move window one workspace down"></KeyListEntry> + <KeyListEntry name="move-to-workspace-down" + description="Move window one workspace down" /> - <KeyListEntry name="move-to-monitor-left" description="Move window one monitor to the left"></KeyListEntry> + <KeyListEntry name="move-to-monitor-left" + description="Move window one monitor to the left" /> - <KeyListEntry name="move-to-monitor-right" description="Move window one monitor to the right"></KeyListEntry> + <KeyListEntry name="move-to-monitor-right" + description="Move window one monitor to the right" /> - <KeyListEntry name="move-to-monitor-up" description="Move window one monitor up"></KeyListEntry> + <KeyListEntry name="move-to-monitor-up" + description="Move window one monitor up" /> - <KeyListEntry name="move-to-monitor-down" description="Move window one monitor down"></KeyListEntry> + <KeyListEntry name="move-to-monitor-down" + description="Move window one monitor down" /> - <KeyListEntry reverse-entry="switch-applications-backward" name="switch-applications" description="Switch applications"></KeyListEntry> + <KeyListEntry name="switch-applications" + reverse-entry="switch-applications-backward" + description="Switch applications"/> - <KeyListEntry reverse-entry="switch-applications" name="switch-applications-backward" hidden="true" description="Switch to previous application"></KeyListEntry> + <KeyListEntry name="switch-applications-backward" + reverse-entry="switch-applications" + hidden="true" + description="Switch to previous application"/> - <KeyListEntry reverse-entry="switch-windows-backward" name="switch-windows" description="Switch windows"></KeyListEntry> + <KeyListEntry name="switch-windows" + reverse-entry="switch-windows-backward" + description="Switch windows"/> - <KeyListEntry reverse-entry="switch-windows" name="switch-windows-backward" hidden="true" description="Switch to previous window"></KeyListEntry> + <KeyListEntry name="switch-windows-backward" + reverse-entry="switch-windows" + hidden="true" + description="Switch to previous window"/> - <KeyListEntry reverse-entry="switch-group-backward" name="switch-group" description="Switch windows of an application"></KeyListEntry> + <KeyListEntry name="switch-group" + reverse-entry="switch-group-backward" + description="Switch windows of an application"/> - <KeyListEntry reverse-entry="switch-group" name="switch-group-backward" hidden="true" description="Switch to previous window of an application"></KeyListEntry> + <KeyListEntry name="switch-group-backward" + reverse-entry="switch-group" + hidden="true" + description="Switch to previous window of an application"/> - <KeyListEntry reverse-entry="switch-panels-backward" name="switch-panels" description="Switch system controls"></KeyListEntry> + <KeyListEntry name="switch-panels" + reverse-entry="switch-panels-backward" + description="Switch system controls"/> - <KeyListEntry reverse-entry="switch-panels" name="switch-panels-backward" hidden="true" description="Switch to previous system control"></KeyListEntry> + <KeyListEntry name="switch-panels-backward" + reverse-entry="switch-panels" + hidden="true" + description="Switch to previous system control"/> - <KeyListEntry reverse-entry="cycle-windows-backward" name="cycle-windows" description="Switch windows directly"></KeyListEntry> + <KeyListEntry name="cycle-windows" + reverse-entry="cycle-windows-backward" + description="Switch windows directly"/> - <KeyListEntry reverse-entry="cycle-windows" name="cycle-windows-backward" hidden="true" description="Switch directly to previous window"></KeyListEntry> + <KeyListEntry name="cycle-windows-backward" + reverse-entry="cycle-windows" + hidden="true" + description="Switch directly to previous window"/> - <KeyListEntry reverse-entry="cycle-group-backward" name="cycle-group" description="Switch windows of an app directly"></KeyListEntry> + <KeyListEntry name="cycle-group" + reverse-entry="cycle-group-backward" + description="Switch windows of an app directly"/> - <KeyListEntry reverse-entry="cycle-group" name="cycle-group-backward" hidden="true" description="Switch directly to previous window of an app"></KeyListEntry> + <KeyListEntry name="cycle-group-backward" + reverse-entry="cycle-group" + hidden="true" + description="Switch directly to previous window of an app"/> - <KeyListEntry reverse-entry="cycle-panels-backward" name="cycle-panels" description="Switch system controls directly"></KeyListEntry> + <KeyListEntry name="cycle-panels" + reverse-entry="cycle-panels-backward" + description="Switch system controls directly"/> - <KeyListEntry reverse-entry="cycle-panels" name="cycle-panels-backward" hidden="true" description="Switch directly to previous system control"></KeyListEntry> + <KeyListEntry name="cycle-panels-backward" + reverse-entry="cycle-panels" + hidden="true" + description="Switch directly to previous system control"/> - <KeyListEntry name="show-desktop" description="Hide all normal windows"></KeyListEntry> + <KeyListEntry name="show-desktop" + description="Hide all normal windows"/> - <KeyListEntry name="switch-to-workspace-1" description="Switch to workspace 1"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-1" + description="Switch to workspace 1" /> - <KeyListEntry name="switch-to-workspace-2" description="Switch to workspace 2"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-2" + description="Switch to workspace 2" /> - <KeyListEntry name="switch-to-workspace-3" description="Switch to workspace 3"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-3" + description="Switch to workspace 3" /> - <KeyListEntry name="switch-to-workspace-4" description="Switch to workspace 4"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-4" + description="Switch to workspace 4" /> - <KeyListEntry name="switch-to-workspace-last" description="Switch to last workspace"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-last" + description="Switch to last workspace" /> - <KeyListEntry name="switch-to-workspace-left" description="Move to workspace left"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-left" + description="Move to workspace left" /> - <KeyListEntry name="switch-to-workspace-right" description="Move to workspace right"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-right" + description="Move to workspace right" /> - <KeyListEntry name="switch-to-workspace-up" description="Move to workspace above"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-up" + description="Move to workspace above" /> - <KeyListEntry name="switch-to-workspace-down" description="Move to workspace below"></KeyListEntry> + <KeyListEntry name="switch-to-workspace-down" + description="Move to workspace below" /> -</KeyListEntries> \ No newline at end of file +</KeyListEntries> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/data/50-mutter-system.xml new/mutter-3.22.3/data/50-mutter-system.xml --- old/mutter-3.22.2/data/50-mutter-system.xml 2016-08-19 23:20:03.000000000 +0200 +++ new/mutter-3.22.3/data/50-mutter-system.xml 2016-11-22 16:27:46.000000000 +0100 @@ -1,8 +1,13 @@ -<?xml version="1.0" encoding="UTF-8"?> -<KeyListEntries wm_name="Mutter" schema="org.gnome.desktop.wm.keybindings" package="mutter" group="system" name="System"> +<?xml version="1.0" encoding="UTF-8" ?> +<KeyListEntries schema="org.gnome.desktop.wm.keybindings" + group="system" + name="System" + wm_name="Mutter" + package="mutter"> - <KeyListEntry name="panel-run-dialog" description="Show the run command prompt"></KeyListEntry> + <KeyListEntry name="panel-run-dialog" description="Show the run command prompt"/> - <KeyListEntry name="panel-main-menu" description="Show the activities overview"></KeyListEntry> + <KeyListEntry name="panel-main-menu" description="Show the activities overview"/> + +</KeyListEntries> -</KeyListEntries> \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/data/50-mutter-windows.xml new/mutter-3.22.3/data/50-mutter-windows.xml --- old/mutter-3.22.2/data/50-mutter-windows.xml 2016-08-19 23:20:03.000000000 +0200 +++ new/mutter-3.22.3/data/50-mutter-windows.xml 2016-11-22 16:27:46.000000000 +0100 @@ -1,40 +1,50 @@ -<?xml version="1.0" encoding="UTF-8"?> -<KeyListEntries wm_name="Mutter" schema="org.gnome.desktop.wm.keybindings" package="mutter" group="system" name="Windows"> +<?xml version="1.0" encoding="UTF-8" ?> +<KeyListEntries schema="org.gnome.desktop.wm.keybindings" + group="system" + name="Windows" + wm_name="Mutter" + package="mutter"> - <KeyListEntry name="activate-window-menu" description="Activate the window menu"></KeyListEntry> + <KeyListEntry name="activate-window-menu" description="Activate the window menu"/> - <KeyListEntry name="toggle-fullscreen" description="Toggle fullscreen mode"></KeyListEntry> + <KeyListEntry name="toggle-fullscreen" description="Toggle fullscreen mode"/> - <KeyListEntry name="toggle-maximized" description="Toggle maximization state"></KeyListEntry> + <KeyListEntry name="toggle-maximized" description="Toggle maximization state"/> - <KeyListEntry name="maximize" description="Maximize window"></KeyListEntry> + <KeyListEntry name="maximize" description="Maximize window"/> - <KeyListEntry name="unmaximize" description="Restore window"></KeyListEntry> + <KeyListEntry name="unmaximize" description="Restore window"/> - <KeyListEntry name="toggle-shaded" description="Toggle shaded state"></KeyListEntry> + <KeyListEntry name="toggle-shaded" description="Toggle shaded state"/> - <KeyListEntry name="close" description="Close window"></KeyListEntry> + <KeyListEntry name="close" description="Close window"/> - <KeyListEntry name="minimize" description="Hide window"></KeyListEntry> + <KeyListEntry name="minimize" description="Hide window"/> - <KeyListEntry name="begin-move" description="Move window"></KeyListEntry> + <KeyListEntry name="begin-move" description="Move window"/> - <KeyListEntry name="begin-resize" description="Resize window"></KeyListEntry> + <KeyListEntry name="begin-resize" description="Resize window"/> - <KeyListEntry name="toggle-on-all-workspaces" description="Toggle window on all workspaces or one"></KeyListEntry> + <KeyListEntry name="toggle-on-all-workspaces" + description="Toggle window on all workspaces or one"/> - <KeyListEntry name="raise-or-lower" description="Raise window if covered, otherwise lower it"></KeyListEntry> + <KeyListEntry name="raise-or-lower" description="Raise window if covered, otherwise lower it"/> - <KeyListEntry name="raise" description="Raise window above other windows"></KeyListEntry> + <KeyListEntry name="raise" description="Raise window above other windows"/> - <KeyListEntry name="lower" description="Lower window below other windows"></KeyListEntry> + <KeyListEntry name="lower" description="Lower window below other windows"/> - <KeyListEntry name="maximize-vertically" description="Maximize window vertically"></KeyListEntry> + <KeyListEntry name="maximize-vertically" description="Maximize window vertically"/> - <KeyListEntry name="maximize-horizontally" description="Maximize window horizontally"></KeyListEntry> + <KeyListEntry name="maximize-horizontally" description="Maximize window horizontally"/> - <KeyListEntry schema="org.gnome.mutter.keybindings" name="toggle-tiled-left" description="View split on left"></KeyListEntry> + <KeyListEntry name="toggle-tiled-left" + schema="org.gnome.mutter.keybindings" + description="View split on left"/> - <KeyListEntry schema="org.gnome.mutter.keybindings" name="toggle-tiled-right" description="View split on right"></KeyListEntry> + <KeyListEntry name="toggle-tiled-right" + schema="org.gnome.mutter.keybindings" + description="View split on right"/> + +</KeyListEntries> -</KeyListEntries> \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/po/mutter.pot new/mutter-3.22.3/po/mutter.pot --- old/mutter-3.22.2/po/mutter.pot 2016-08-19 22:39:44.000000000 +0200 +++ new/mutter-3.22.3/po/mutter.pot 2016-11-22 17:24:06.000000000 +0100 @@ -6,10 +6,10 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: mutter 3.21.90\n" +"Project-Id-Version: mutter 3.23.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=mutter&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-08-19 22:39+0200\n" +"POT-Creation-Date: 2016-11-22 17:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <[email protected]>\n" @@ -424,11 +424,14 @@ msgid "Switch to VT 12" msgstr "" -#: src/backends/meta-input-settings.c:1707 +#. TRANSLATORS: This string refers to an action, cycles drawing tablets' +#. * mapping through the available outputs. +#. +#: src/backends/meta-input-settings.c:1739 msgid "Switch monitor" msgstr "" -#: src/backends/meta-input-settings.c:1709 +#: src/backends/meta-input-settings.c:1741 msgid "Show on-screen help" msgstr "" @@ -452,7 +455,9 @@ msgid "%s %s" msgstr "" -#: src/compositor/compositor.c:463 +#. This probably means that a non-WM compositor like xcompmgr is running; +#. * we have no way to get it to exit +#: src/compositor/compositor.c:471 #, c-format msgid "" "Another compositing manager is already running on screen %i on display \"%s" @@ -479,11 +484,11 @@ msgstr "" #: src/core/delete.c:141 -msgid "_Wait" +msgid "_Force Quit" msgstr "" #: src/core/delete.c:141 -msgid "_Force Quit" +msgid "_Wait" msgstr "" #: src/core/display.c:590 @@ -566,7 +571,7 @@ msgid "Mutter was compiled without support for verbose mode\n" msgstr "" -#: src/wayland/meta-wayland-tablet-pad.c:595 +#: src/wayland/meta-wayland-tablet-pad.c:563 #, c-format msgid "Mode Switch: Mode %d" msgstr "" @@ -577,7 +582,7 @@ "be restarted manually next time you log in." msgstr "" -#: src/x11/window-props.c:548 +#: src/x11/window-props.c:559 #, c-format msgid "%s (on %s)" msgstr "" Binary files old/mutter-3.22.2/po/zh_CN.gmo and new/mutter-3.22.3/po/zh_CN.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/po/zh_CN.po new/mutter-3.22.3/po/zh_CN.po --- old/mutter-3.22.2/po/zh_CN.po 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/po/zh_CN.po 2017-02-16 17:24:02.000000000 +0100 @@ -17,8 +17,8 @@ "Project-Id-Version: mutter master\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=mutter&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2016-10-27 15:28+0000\n" -"PO-Revision-Date: 2016-10-30 02:33+0800\n" +"POT-Creation-Date: 2017-02-03 10:06+0000\n" +"PO-Revision-Date: 2017-01-04 21:52+0800\n" "Last-Translator: Mandy Wang <[email protected]>\n" "Language-Team: Chinese (simplified) <[email protected]>\n" "Language: zh_CN\n" @@ -26,7 +26,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.8.11\n" +"X-Generator: Poedit 1.8.7.1\n" #: data/50-mutter-navigation.xml:6 msgid "Navigation" @@ -450,38 +450,37 @@ #. TRANSLATORS: This string refers to an action, cycles drawing tablets' #. * mapping through the available outputs. #. -#: src/backends/meta-input-settings.c:1847 +#: src/backends/meta-input-settings.c:1861 msgid "Switch monitor" msgstr "切换显示器" -#: src/backends/meta-input-settings.c:1849 -#, fuzzy +#: src/backends/meta-input-settings.c:1863 msgid "Show on-screen help" msgstr "显示在屏帮助" -#: src/backends/meta-monitor-manager.c:514 +#: src/backends/meta-monitor-manager.c:515 msgid "Built-in display" msgstr "内置显示器" -#: src/backends/meta-monitor-manager.c:537 +#: src/backends/meta-monitor-manager.c:538 msgid "Unknown" msgstr "未知" -#: src/backends/meta-monitor-manager.c:539 +#: src/backends/meta-monitor-manager.c:540 msgid "Unknown Display" -msgstr "未知的显示器" +msgstr "未知的 Display" #. TRANSLATORS: this is a monitor vendor name, followed by a #. * size in inches, like 'Dell 15"' #. -#: src/backends/meta-monitor-manager.c:547 +#: src/backends/meta-monitor-manager.c:548 #, c-format msgid "%s %s" msgstr "%s %s" #. This probably means that a non-WM compositor like xcompmgr is running; #. * we have no way to get it to exit -#: src/compositor/compositor.c:463 +#: src/compositor/compositor.c:471 #, c-format msgid "" "Another compositing manager is already running on screen %i on display \"%s" @@ -534,7 +533,7 @@ #: src/core/main.c:199 msgid "X Display to use" -msgstr "要使用的 X 显示器" +msgstr "要使用的 X Display" #: src/core/main.c:205 msgid "Initialize session from savefile" @@ -589,7 +588,7 @@ "Display \"%s\" already has a window manager; try using the --replace option " "to replace the current window manager." msgstr "" -"显示器“%s”已经有一个窗口管理器;请尝试使用 --replace 选项替换当前的窗口管理" +"Display“%s”已经有一个窗口管理器;请尝试使用 --replace 选项替换当前的窗口管理" "器。" #: src/core/screen.c:606 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/meta-input-settings-private.h new/mutter-3.22.3/src/backends/meta-input-settings-private.h --- old/mutter-3.22.2/src/backends/meta-input-settings-private.h 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/src/backends/meta-input-settings-private.h 2017-02-16 17:24:02.000000000 +0100 @@ -107,6 +107,9 @@ void (* set_trackball_accel_profile) (MetaInputSettings *settings, ClutterInputDevice *device, GDesktopPointerAccelProfile profile); + + gboolean (* has_two_finger_scroll) (MetaInputSettings *settings, + ClutterInputDevice *device); }; GType meta_input_settings_get_type (void) G_GNUC_CONST; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/meta-input-settings.c new/mutter-3.22.3/src/backends/meta-input-settings.c --- old/mutter-3.22.2/src/backends/meta-input-settings.c 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/src/backends/meta-input-settings.c 2017-02-16 17:24:02.000000000 +0100 @@ -83,6 +83,8 @@ #ifdef HAVE_LIBWACOM WacomDeviceDatabase *wacom_db; #endif + + GHashTable *two_finger_devices; }; typedef void (*ConfigBoolFunc) (MetaInputSettings *input_settings, @@ -148,6 +150,8 @@ libwacom_database_destroy (priv->wacom_db); #endif + g_clear_pointer (&priv->two_finger_devices, g_hash_table_destroy); + G_OBJECT_CLASS (meta_input_settings_parent_class)->dispose (object); } @@ -484,6 +488,7 @@ MetaInputSettingsClass *input_settings_class; gboolean edge_scroll_enabled; gboolean two_finger_scroll_enabled; + gboolean two_finger_scroll_available; MetaInputSettingsPrivate *priv; if (device && @@ -494,9 +499,10 @@ input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings); edge_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "edge-scrolling-enabled"); two_finger_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "two-finger-scrolling-enabled"); + two_finger_scroll_available = g_hash_table_size (priv->two_finger_devices) > 0; /* If both are enabled we prefer two finger. */ - if (edge_scroll_enabled && two_finger_scroll_enabled) + if (edge_scroll_enabled && two_finger_scroll_enabled && two_finger_scroll_available) edge_scroll_enabled = FALSE; if (device) @@ -679,6 +685,9 @@ delay = g_settings_get_uint (priv->keyboard_settings, "delay"); interval = g_settings_get_uint (priv->keyboard_settings, "repeat-interval"); + delay = MAX (1, delay); + interval = MAX (1, interval); + input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings); input_settings_class->set_keyboard_repeat (input_settings, repeat, delay, interval); @@ -744,7 +753,9 @@ MetaOutput *output = NULL; gboolean keep_aspect; - if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE) + if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE) return; #ifdef HAVE_LIBWACOM @@ -792,6 +803,8 @@ MetaOutput *output; if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE && clutter_input_device_get_device_type (device) != CLUTTER_TOUCHSCREEN_DEVICE) return; @@ -825,7 +838,9 @@ GDesktopTabletMapping mapping; DeviceMappingInfo *info; - if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE) + if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE) return; #ifdef HAVE_LIBWACOM @@ -866,7 +881,9 @@ const guint32 *area; gsize n_elems; - if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE) + if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE) return; #ifdef HAVE_LIBWACOM @@ -905,7 +922,10 @@ MetaInputSettingsClass *input_settings_class; gboolean enabled; - if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE) + if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE && + clutter_input_device_get_device_type (device) != CLUTTER_PAD_DEVICE) return; #ifdef HAVE_LIBWACOM @@ -1399,6 +1419,23 @@ } static void +evaluate_two_finger_scrolling (MetaInputSettings *input_settings, + ClutterInputDevice *device) +{ + MetaInputSettingsClass *klass; + MetaInputSettingsPrivate *priv; + + if (clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) + return; + + klass = META_INPUT_SETTINGS_GET_CLASS (input_settings); + priv = meta_input_settings_get_instance_private (input_settings); + + if (klass->has_two_finger_scroll (input_settings, device)) + g_hash_table_add (priv->two_finger_devices, device); +} + +static void meta_input_settings_device_added (ClutterDeviceManager *device_manager, ClutterInputDevice *device, MetaInputSettings *input_settings) @@ -1406,6 +1443,8 @@ if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_MASTER) return; + evaluate_two_finger_scrolling (input_settings, device); + apply_device_settings (input_settings, device); check_add_mappable_device (input_settings, device); } @@ -1419,6 +1458,10 @@ priv = meta_input_settings_get_instance_private (input_settings); g_hash_table_remove (priv->mappable_devices, device); + + if (g_hash_table_remove (priv->two_finger_devices, device) && + g_hash_table_size (priv->two_finger_devices) == 0) + apply_device_settings (input_settings, NULL); } static void @@ -1445,6 +1488,13 @@ meta_input_settings_constructed (GObject *object) { MetaInputSettings *input_settings = META_INPUT_SETTINGS (object); + GSList *devices, *d; + + devices = meta_input_settings_get_devices (input_settings, CLUTTER_TOUCHPAD_DEVICE); + for (d = devices; d; d = d->next) + evaluate_two_finger_scrolling (input_settings, d->data); + + g_slist_free (devices); apply_device_settings (input_settings, NULL); update_keyboard_repeat (input_settings); @@ -1506,6 +1556,8 @@ "expect tablets to misbehave"); } #endif + + priv->two_finger_devices = g_hash_table_new (NULL, NULL); } MetaInputSettings * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/meta-monitor-config.c new/mutter-3.22.3/src/backends/meta-monitor-config.c --- old/mutter-3.22.2/src/backends/meta-monitor-config.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/backends/meta-monitor-config.c 2017-02-16 17:24:00.000000000 +0100 @@ -454,7 +454,7 @@ { if (strcmp (element_name, "configuration") == 0 && parser->unknown_count == 0) { - MetaConfiguration *config = g_slice_new (MetaConfiguration); + MetaConfiguration *config = config_new (); g_assert (parser->key_array->len == parser->output_array->len); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/meta-monitor-manager.c new/mutter-3.22.3/src/backends/meta-monitor-manager.c --- old/mutter-3.22.2/src/backends/meta-monitor-manager.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/backends/meta-monitor-manager.c 2017-02-16 17:24:02.000000000 +0100 @@ -135,6 +135,7 @@ info.width_mm = output->width_mm; info.height_mm = output->height_mm; info.winsys_id = output->winsys_id; + info.scale = output->scale; } /* hack */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/native/meta-cursor-renderer-native.c new/mutter-3.22.3/src/backends/native/meta-cursor-renderer-native.c --- old/mutter-3.22.2/src/backends/native/meta-cursor-renderer-native.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/backends/native/meta-cursor-renderer-native.c 2017-02-16 17:24:02.000000000 +0100 @@ -63,6 +63,7 @@ struct _MetaCursorRendererNativePrivate { + gboolean hw_state_invalidated; gboolean has_hw_cursor; MetaCursorSprite *last_cursor; @@ -159,8 +160,7 @@ static void set_crtc_cursor (MetaCursorRendererNative *native, MetaCRTC *crtc, - MetaCursorSprite *cursor_sprite, - gboolean force) + MetaCursorSprite *cursor_sprite) { MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native); @@ -177,7 +177,7 @@ else bo = get_active_cursor_sprite_gbm_bo (cursor_sprite); - if (!force && bo == crtc->cursor_renderer_private) + if (!priv->hw_state_invalidated && bo == crtc->cursor_renderer_private) return; crtc->cursor_renderer_private = bo; @@ -197,7 +197,7 @@ } else { - if (force || crtc->cursor_renderer_private != NULL) + if (priv->hw_state_invalidated || crtc->cursor_renderer_private != NULL) { drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, 0, 0, 0, 0, 0); crtc->cursor_renderer_private = NULL; @@ -207,8 +207,7 @@ static void update_hw_cursor (MetaCursorRendererNative *native, - MetaCursorSprite *cursor_sprite, - gboolean force) + MetaCursorSprite *cursor_sprite) { MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native); MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native); @@ -241,7 +240,7 @@ else crtc_cursor = NULL; - set_crtc_cursor (native, &crtcs[i], crtc_cursor, force); + set_crtc_cursor (native, &crtcs[i], crtc_cursor); if (crtc_cursor) { @@ -252,6 +251,8 @@ } } + priv->hw_state_invalidated = FALSE; + if (painted) meta_cursor_renderer_emit_painted (renderer, cursor_sprite); } @@ -394,7 +395,7 @@ meta_cursor_renderer_native_trigger_frame (native, cursor_sprite); priv->has_hw_cursor = should_have_hw_cursor (renderer, cursor_sprite); - update_hw_cursor (native, cursor_sprite, FALSE); + update_hw_cursor (native, cursor_sprite); return priv->has_hw_cursor; } @@ -648,8 +649,11 @@ force_update_hw_cursor (MetaCursorRendererNative *native) { MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native); + MetaCursorRendererNativePrivate *priv = + meta_cursor_renderer_native_get_instance_private (native); - update_hw_cursor (native, meta_cursor_renderer_get_cursor (renderer), TRUE); + priv->hw_state_invalidated = TRUE; + update_hw_cursor (native, meta_cursor_renderer_get_cursor (renderer)); } static void @@ -670,6 +674,8 @@ g_signal_connect_object (monitors, "monitors-changed", G_CALLBACK (on_monitors_changed), native, 0); + priv->hw_state_invalidated = TRUE; + #if defined(CLUTTER_WINDOWING_EGL) if (clutter_check_windowing_backend (CLUTTER_WINDOWING_EGL)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/native/meta-input-settings-native.c new/mutter-3.22.3/src/backends/native/meta-input-settings-native.c --- old/mutter-3.22.2/src/backends/native/meta-input-settings-native.c 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/src/backends/native/meta-input-settings-native.c 2017-02-16 17:24:02.000000000 +0100 @@ -189,6 +189,19 @@ device_set_scroll_method (libinput_device, current | method); } +static gboolean +meta_input_settings_native_has_two_finger_scroll (MetaInputSettings *settings, + ClutterInputDevice *device) +{ + struct libinput_device *libinput_device; + + libinput_device = clutter_evdev_input_device_get_libinput_device (device); + if (!libinput_device) + return FALSE; + + return libinput_device_config_scroll_get_methods (libinput_device) & LIBINPUT_CONFIG_SCROLL_2FG; +} + static void meta_input_settings_native_set_scroll_button (MetaInputSettings *settings, ClutterInputDevice *device, @@ -418,6 +431,8 @@ input_settings_class->set_mouse_accel_profile = meta_input_settings_native_set_mouse_accel_profile; input_settings_class->set_trackball_accel_profile = meta_input_settings_native_set_trackball_accel_profile; + + input_settings_class->has_two_finger_scroll = meta_input_settings_native_has_two_finger_scroll; } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/native/meta-monitor-manager-kms.c new/mutter-3.22.3/src/backends/native/meta-monitor-manager-kms.c --- old/mutter-3.22.2/src/backends/native/meta-monitor-manager-kms.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/backends/native/meta-monitor-manager-kms.c 2017-02-16 17:24:02.000000000 +0100 @@ -475,18 +475,31 @@ static int compute_scale (MetaOutput *output) { - int scale = 1; + int scale = 1, width, height; if (!output->crtc) goto out; + width = output->crtc->rect.width; + height = output->crtc->rect.height; + + /* Swap values on rotated transforms, so pixel and mm sizes + * from the same axes is compared. + */ + if (meta_monitor_transform_is_rotated (output->crtc->transform)) + { + int tmp = width; + width = height; + height = tmp; + } + /* Scaling makes no sense */ - if (output->crtc->rect.width < HIDPI_MIN_HEIGHT) + if (height < HIDPI_MIN_HEIGHT) goto out; /* 4K TV */ if (output->name != NULL && strstr(output->name, "HDMI") != NULL && - output->crtc->rect.width >= SMALLEST_4K_WIDTH) + width >= SMALLEST_4K_WIDTH) goto out; /* Somebody encoded the aspect ratio (16/9 or 16/10) @@ -500,8 +513,9 @@ if (output->width_mm > 0 && output->height_mm > 0) { double dpi_x, dpi_y; - dpi_x = (double)output->crtc->rect.width / (output->width_mm / 25.4); - dpi_y = (double)output->crtc->rect.height / (output->height_mm / 25.4); + + dpi_x = (double)width / (output->width_mm / 25.4); + dpi_y = (double)height / (output->height_mm / 25.4); /* We don't completely trust these values so both must be high, and never pick higher ratio than 2 automatically */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/native/meta-renderer-native.c new/mutter-3.22.3/src/backends/native/meta-renderer-native.c --- old/mutter-3.22.2/src/backends/native/meta-renderer-native.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/backends/native/meta-renderer-native.c 2017-02-16 17:24:02.000000000 +0100 @@ -73,6 +73,9 @@ gboolean pending_set_crtc; + int64_t pending_queue_swap_notify_frame_count; + int64_t pending_swap_notify_frame_count; + MetaRendererView *view; int pending_flips; } MetaOnscreenNative; @@ -124,16 +127,19 @@ if (onscreen_native->pending_swap_notify) { - CoglFrameInfo *info = - g_queue_pop_head (&onscreen->pending_frame_infos); + CoglFrameInfo *info; - _cogl_onscreen_notify_frame_sync (onscreen, info); - _cogl_onscreen_notify_complete (onscreen, info); + while ((info = g_queue_peek_head (&onscreen->pending_frame_infos)) && + info->global_frame_counter <= onscreen_native->pending_swap_notify_frame_count) + { + _cogl_onscreen_notify_frame_sync (onscreen, info); + _cogl_onscreen_notify_complete (onscreen, info); + cogl_object_unref (info); + g_queue_pop_head (&onscreen->pending_frame_infos); + } onscreen_native->pending_swap_notify = FALSE; cogl_object_unref (onscreen); - - cogl_object_unref (info); } } } @@ -200,6 +206,9 @@ CoglRendererEGL *egl_renderer = cogl_renderer->winsys; MetaRendererNative *renderer_native = egl_renderer->platform; + onscreen_native->pending_swap_notify_frame_count = + onscreen_native->pending_queue_swap_notify_frame_count; + /* We only want to notify that the swap is complete when the * application calls cogl_context_dispatch so instead of * immediately notifying we queue an idle callback */ @@ -222,6 +231,39 @@ onscreen_native->pending_swap_notify = TRUE; } +static EGLDisplay +meta_egl_get_display (void *native) +{ + EGLDisplay dpy = NULL; + const char *client_exts = eglQueryString (NULL, EGL_EXTENSIONS); + + if (g_strstr_len (client_exts, -1, "EGL_KHR_platform_base")) + { + PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = + (void *) eglGetProcAddress ("eglGetPlatformDisplay"); + + if (get_platform_display) + dpy = get_platform_display (EGL_PLATFORM_GBM_MESA, native, NULL); + + if (dpy) + return dpy; + } + + if (g_strstr_len (client_exts, -1, "EGL_EXT_platform_base")) + { + PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = + (void *) eglGetProcAddress ("eglGetPlatformDisplayEXT"); + + if (get_platform_display) + dpy = get_platform_display (EGL_PLATFORM_GBM_MESA, native, NULL); + + if (dpy) + return dpy; + } + + return eglGetDisplay ((EGLNativeDisplayType) native); +} + static CoglBool meta_renderer_native_connect (CoglRenderer *cogl_renderer, CoglError **error) @@ -246,8 +288,7 @@ goto fail; } - egl_renderer->edpy = - eglGetDisplay ((EGLNativeDisplayType) renderer_native->gbm); + egl_renderer->edpy = meta_egl_get_display (renderer_native->gbm); if (egl_renderer->edpy == EGL_NO_DISPLAY) { _cogl_set_error (error, COGL_WINSYS_ERROR, @@ -640,6 +681,7 @@ onscreen_native->pending_set_crtc = FALSE; } + onscreen_native->pending_queue_swap_notify_frame_count = renderer_native->frame_counter; meta_onscreen_native_flip_crtcs (onscreen); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/backends/x11/meta-input-settings-x11.c new/mutter-3.22.3/src/backends/x11/meta-input-settings-x11.c --- old/mutter-3.22.2/src/backends/x11/meta-input-settings-x11.c 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/src/backends/x11/meta-input-settings-x11.c 2017-02-16 17:24:02.000000000 +0100 @@ -222,19 +222,27 @@ gboolean edge_scroll_enabled) { guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */ - guchar *current; + guchar *current = NULL; + guchar *available = NULL; + + available = get_property (device, "libinput Scroll Methods Available", + XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS); + if (!available || !available[SCROLL_METHOD_FIELD_EDGE]) + goto out; current = get_property (device, "libinput Scroll Method Enabled", XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS); if (!current) - return; + goto out; memcpy (values, current, SCROLL_METHOD_NUM_FIELDS); values[SCROLL_METHOD_FIELD_EDGE] = !!edge_scroll_enabled; change_property (device, "libinput Scroll Method Enabled", XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS); + out: meta_XFree (current); + meta_XFree (available); } static void @@ -243,19 +251,43 @@ gboolean two_finger_scroll_enabled) { guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */ - guchar *current; + guchar *current = NULL; + guchar *available = NULL; + + available = get_property (device, "libinput Scroll Methods Available", + XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS); + if (!available || !available[SCROLL_METHOD_FIELD_2FG]) + goto out; current = get_property (device, "libinput Scroll Method Enabled", XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS); if (!current) - return; + goto out; memcpy (values, current, SCROLL_METHOD_NUM_FIELDS); values[SCROLL_METHOD_FIELD_2FG] = !!two_finger_scroll_enabled; change_property (device, "libinput Scroll Method Enabled", XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS); + out: meta_XFree (current); + meta_XFree (available); +} + +static gboolean +meta_input_settings_x11_has_two_finger_scroll (MetaInputSettings *settings, + ClutterInputDevice *device) +{ + guchar *available = NULL; + gboolean has_two_finger = TRUE; + + available = get_property (device, "libinput Scroll Methods Available", + XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS); + if (!available || !available[SCROLL_METHOD_FIELD_2FG]) + has_two_finger = FALSE; + + meta_XFree (available); + return has_two_finger; } static void @@ -527,6 +559,8 @@ input_settings_class->set_mouse_accel_profile = meta_input_settings_x11_set_mouse_accel_profile; input_settings_class->set_trackball_accel_profile = meta_input_settings_x11_set_trackball_accel_profile; + + input_settings_class->has_two_finger_scroll = meta_input_settings_x11_has_two_finger_scroll; } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/compositor/meta-window-actor.c new/mutter-3.22.3/src/compositor/meta-window-actor.c --- old/mutter-3.22.2/src/compositor/meta-window-actor.c 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/src/compositor/meta-window-actor.c 2017-02-16 17:24:02.000000000 +0100 @@ -1129,6 +1129,7 @@ MetaPluginEffect event) { MetaWindowActorPrivate *priv = self->priv; + gboolean inconsistent = FALSE; /* NB: Keep in mind that when effects get completed it possible * that the corresponding MetaWindow may have be been destroyed. @@ -1145,6 +1146,7 @@ { g_warning ("Error in minimize accounting."); priv->minimize_in_progress = 0; + inconsistent = TRUE; } } break; @@ -1155,6 +1157,7 @@ { g_warning ("Error in unminimize accounting."); priv->unminimize_in_progress = 0; + inconsistent = TRUE; } } break; @@ -1169,6 +1172,7 @@ { g_warning ("Error in map accounting."); priv->map_in_progress = 0; + inconsistent = TRUE; } break; case META_PLUGIN_DESTROY: @@ -1178,6 +1182,7 @@ { g_warning ("Error in destroy accounting."); priv->destroy_in_progress = 0; + inconsistent = TRUE; } break; case META_PLUGIN_SIZE_CHANGE: @@ -1186,6 +1191,7 @@ { g_warning ("Error in size change accounting."); priv->size_change_in_progress = 0; + inconsistent = TRUE; } break; case META_PLUGIN_SWITCH_WORKSPACE: @@ -1193,7 +1199,7 @@ break; } - if (is_freeze_thaw_effect (event)) + if (is_freeze_thaw_effect (event) && !inconsistent) meta_window_actor_thaw (self); if (!meta_window_actor_effect_in_progress (self)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/core/constraints.c new/mutter-3.22.3/src/core/constraints.c --- old/mutter-3.22.2/src/core/constraints.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/core/constraints.c 2017-02-16 17:24:00.000000000 +0100 @@ -784,10 +784,6 @@ if (!placement_rule) return TRUE; - if (!meta_rectangle_could_fit_rect (&info->work_area_monitor, - &info->current)) - return TRUE; - meta_rectangle_intersect (&info->current, &info->work_area_monitor, &intersection); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/core/keybindings.c new/mutter-3.22.3/src/core/keybindings.c --- old/mutter-3.22.2/src/core/keybindings.c 2016-10-19 16:54:40.000000000 +0200 +++ new/mutter-3.22.3/src/core/keybindings.c 2017-02-16 17:24:02.000000000 +0100 @@ -3205,7 +3205,7 @@ { MetaRectangle tmp, win_rect, above_rect; - if (above->mapped) + if (above->mapped && meta_window_should_be_showing (above)) { meta_window_get_frame_rect (window, &win_rect); meta_window_get_frame_rect (above, &above_rect); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/wayland/meta-wayland-keyboard.c new/mutter-3.22.3/src/wayland/meta-wayland-keyboard.c --- old/mutter-3.22.2/src/wayland/meta-wayland-keyboard.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/wayland/meta-wayland-keyboard.c 2017-02-16 17:24:02.000000000 +0100 @@ -514,7 +514,11 @@ interval = g_settings_get_uint (keyboard->settings, "repeat-interval"); /* Our setting is in the milliseconds between keys. "rate" is the number * of keys per second. */ - rate = (1000 / interval); + if (interval > 0) + rate = (1000 / interval); + else + rate = 0; + delay = g_settings_get_uint (keyboard->settings, "delay"); } else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/wayland/meta-wayland-tablet-pad-ring.c new/mutter-3.22.3/src/wayland/meta-wayland-tablet-pad-ring.c --- old/mutter-3.22.2/src/wayland/meta-wayland-tablet-pad-ring.c 2016-10-19 16:54:40.000000000 +0200 +++ new/mutter-3.22.3/src/wayland/meta-wayland-tablet-pad-ring.c 2017-02-16 17:24:02.000000000 +0100 @@ -62,7 +62,6 @@ wl_resource_for_each_safe (resource, next, &ring->resource_list) { - zwp_tablet_tool_v2_send_removed (resource); wl_list_remove (wl_resource_get_link (resource)); wl_list_init (wl_resource_get_link (resource)); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/wayland/meta-wayland-tablet-pad-strip.c new/mutter-3.22.3/src/wayland/meta-wayland-tablet-pad-strip.c --- old/mutter-3.22.2/src/wayland/meta-wayland-tablet-pad-strip.c 2016-10-19 16:54:40.000000000 +0200 +++ new/mutter-3.22.3/src/wayland/meta-wayland-tablet-pad-strip.c 2017-02-16 17:24:02.000000000 +0100 @@ -62,7 +62,6 @@ wl_resource_for_each_safe (resource, next, &strip->resource_list) { - zwp_tablet_tool_v2_send_removed (resource); wl_list_remove (wl_resource_get_link (resource)); wl_list_init (wl_resource_get_link (resource)); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/wayland/meta-wayland-tablet-tool.c new/mutter-3.22.3/src/wayland/meta-wayland-tablet-tool.c --- old/mutter-3.22.2/src/wayland/meta-wayland-tablet-tool.c 2016-11-10 14:53:11.000000000 +0100 +++ new/mutter-3.22.3/src/wayland/meta-wayland-tablet-tool.c 2017-02-16 18:11:49.000000000 +0100 @@ -98,7 +98,7 @@ cursor = NULL; } else if (tool->current_tablet) - cursor = meta_cursor_sprite_from_theme (META_CURSOR_CROSSHAIR); + cursor = tool->default_sprite; else cursor = NULL; @@ -380,6 +380,22 @@ meta_wayland_tablet_tool_set_cursor_surface (tool, NULL); } +static void +tool_cursor_prepare_at (MetaCursorSprite *cursor_sprite, + int x, + int y, + MetaWaylandTabletTool *tool) +{ + MetaDisplay *display = meta_get_display (); + const MetaMonitorInfo *monitor; + + monitor = meta_screen_get_monitor_for_point (display->screen, x, y); + + /* Reload the cursor texture if the scale has changed. */ + if (monitor) + meta_cursor_sprite_set_theme_scale (cursor_sprite, monitor->scale); +} + MetaWaylandTabletTool * meta_wayland_tablet_tool_new (MetaWaylandTabletSeat *seat, ClutterInputDevice *device, @@ -397,6 +413,11 @@ tool->focus_surface_destroy_listener.notify = tablet_tool_handle_focus_surface_destroy; tool->cursor_surface_destroy_listener.notify = tablet_tool_handle_cursor_surface_destroy; + tool->default_sprite = meta_cursor_sprite_from_theme (META_CURSOR_CROSSHAIR); + tool->prepare_at_signal_id = + g_signal_connect (tool->default_sprite, "prepare-at", + G_CALLBACK (tool_cursor_prepare_at), tool); + return tool; } @@ -416,6 +437,9 @@ wl_list_init (wl_resource_get_link (resource)); } + g_signal_handler_disconnect (tool->default_sprite, tool->prepare_at_signal_id); + g_object_unref (tool->default_sprite); + g_slice_free (MetaWaylandTabletTool, tool); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/wayland/meta-wayland-tablet-tool.h new/mutter-3.22.3/src/wayland/meta-wayland-tablet-tool.h --- old/mutter-3.22.2/src/wayland/meta-wayland-tablet-tool.h 2016-08-30 00:17:55.000000000 +0200 +++ new/mutter-3.22.3/src/wayland/meta-wayland-tablet-tool.h 2017-02-16 17:24:02.000000000 +0100 @@ -43,6 +43,8 @@ MetaWaylandSurface *cursor_surface; struct wl_listener cursor_surface_destroy_listener; MetaCursorRenderer *cursor_renderer; + MetaCursorSprite *default_sprite; + guint prepare_at_signal_id; MetaWaylandSurface *current; guint32 pressed_buttons; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/wayland/meta-wayland-xdg-shell.c new/mutter-3.22.3/src/wayland/meta-wayland-xdg-shell.c --- old/mutter-3.22.2/src/wayland/meta-wayland-xdg-shell.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/wayland/meta-wayland-xdg-shell.c 2017-02-16 17:24:02.000000000 +0100 @@ -227,13 +227,15 @@ { MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource); MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource); + int monitor_scale; if (!meta_wayland_seat_get_grab_info (seat, surface, serial, FALSE, NULL, NULL)) return; + monitor_scale = surface->window->monitor->scale; meta_window_show_menu (surface->window, META_WINDOW_MENU_WM, - surface->window->buffer_rect.x + x, - surface->window->buffer_rect.y + y); + surface->window->buffer_rect.x + (x * monitor_scale), + surface->window->buffer_rect.y + (y * monitor_scale)); } static void @@ -839,6 +841,17 @@ xdg_popup->popup = popup; } + else + { + /* The keyboard focus semantics for non-grabbing zxdg_shell_v6 popups + * is pretty undefined. Same applies for subsurfaces, but in practice, + * subsurfaces never receive keyboard focus, so it makes sense to + * do the same for non-grabbing popups. + * + * See https://bugzilla.gnome.org/show_bug.cgi?id=771694#c24 + */ + window->input = FALSE; + } } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/wayland/meta-window-wayland.c new/mutter-3.22.3/src/wayland/meta-window-wayland.c --- old/mutter-3.22.2/src/wayland/meta-window-wayland.c 2016-10-30 21:27:09.000000000 +0100 +++ new/mutter-3.22.3/src/wayland/meta-window-wayland.c 2017-02-16 17:24:02.000000000 +0100 @@ -117,24 +117,11 @@ meta_window_wayland_focus (MetaWindow *window, guint32 timestamp) { - MetaWaylandSurface *surface = window->surface; - MetaWaylandSurfaceRoleShellSurface *shell_surface_role = - META_WAYLAND_SURFACE_ROLE_SHELL_SURFACE (surface->role); - - /* The keyboard focus semantics for non-grabbing zxdg_shell_v6 popups - * is pretty undefined. Same applies for subsurfaces, but in practice, - * subsurfaces never receive keyboard focus, so it makes sense to - * do the same for non-grabbing popups. - * - * See https://bugzilla.gnome.org/show_bug.cgi?id=771694#c24 - */ - if (META_IS_WAYLAND_XDG_POPUP (shell_surface_role)) - return; - - meta_display_set_input_focus_window (window->display, - window, - FALSE, - timestamp); + if (window->input) + meta_display_set_input_focus_window (window->display, + window, + FALSE, + timestamp); } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.22.2/src/wayland/meta-xwayland-selection.c new/mutter-3.22.3/src/wayland/meta-xwayland-selection.c --- old/mutter-3.22.2/src/wayland/meta-xwayland-selection.c 2016-10-27 14:27:30.000000000 +0200 +++ new/mutter-3.22.3/src/wayland/meta-xwayland-selection.c 2017-02-16 17:24:02.000000000 +0100 @@ -546,6 +546,8 @@ wayland_selection_data_new (XSelectionRequestEvent *request_event, MetaWaylandCompositor *compositor) { + MetaDisplay *display = meta_get_display (); + MetaScreen *screen = display->screen; MetaWaylandDataDevice *data_device; MetaWaylandDataSource *wayland_source; MetaSelectionBridge *selection; @@ -595,7 +597,8 @@ data->window = meta_display_lookup_x_window (meta_get_display (), data->request_event.requestor); - if (!data->window) + /* Do *not* change the event mask on the root window, bugger! */ + if (!data->window && data->request_event.requestor != screen->xroot) { /* Not a managed window, set the PropertyChangeMask * for INCR deletion notifications. @@ -629,10 +632,12 @@ static void wayland_selection_data_free (WaylandSelectionData *data) { - if (!data->window) - { - MetaDisplay *display = meta_get_display (); + MetaDisplay *display = meta_get_display (); + MetaScreen *screen = display->screen; + /* Do *not* change the event mask on the root window, bugger! */ + if (!data->window && data->request_event.requestor != screen->xroot) + { meta_error_trap_push (display); XSelectInput (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), data->request_event.requestor, NoEventMask);
