Hello community, here is the log from the commit of package libmanette for openSUSE:Factory checked in at 2018-03-14 19:37:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libmanette (Old) and /work/SRC/openSUSE:Factory/.libmanette.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libmanette" Wed Mar 14 19:37:12 2018 rev:2 rq:584984 version:0.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libmanette/libmanette.changes 2017-11-24 10:53:58.337377009 +0100 +++ /work/SRC/openSUSE:Factory/.libmanette.new/libmanette.changes 2018-03-14 19:37:13.969048970 +0100 @@ -1,0 +2,35 @@ +Tue Mar 6 17:48:22 UTC 2018 - bjorn....@gmail.com + +- Update to version 2.0.0: + + Device: Add rumble support. + + Make the devices rumble in manette-test if they support it. + + Mapping: + - Initialize the bindings to 0 before using them, avoiding + improper values in non used fields. + - Ensures the binding value inversion is disabled by default, + avoiding an unexpected state. + - Clear errno before using it to avoid string to uint16 + convertions to fail on valid inputs. + - Silently skip the 'platform' mapping key as it is neither + useful nor erroneous. + + Monitor: + - Fix the 'device-disconnected' signal marshaller. + - Fix the devices hash table hash and comparison functions. + + Build system change: + - Make manette-test properly depend on libmanette. + - Change the package name from libmanette to manette. + - Change the soname from liblibmanette.so to libmanette.so. + - Fix the soname version. + + Fix the license header of manette-version.h.in, which was + accidentaly not matching the one of the library. +- Following upstream changes and fixes, rename liblibmanette-0_2 + subpackage to libmanette-0_2-0, change where applicable, set + package_version define to 0_2-0. +- Tweak spec, use autosetup macro. + +------------------------------------------------------------------- +Wed Feb 28 16:35:32 UTC 2018 - dims...@opensuse.org + +- Modernize spec-file by calling spec-cleaner + +------------------------------------------------------------------- Old: ---- libmanette-0.1.2.tar.xz New: ---- libmanette-0.2.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libmanette.spec ++++++ --- /var/tmp/diff_new_pack.ZG8amb/_old 2018-03-14 19:37:14.769020556 +0100 +++ /var/tmp/diff_new_pack.ZG8amb/_new 2018-03-14 19:37:14.773020414 +0100 @@ -1,7 +1,7 @@ # # spec file for package libmanette # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 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 @@ -15,33 +15,35 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # + %define binary_version 0.2 -%define package_version 0_2 +%define package_version 0_2-0 Name: libmanette -Version: 0.1.2 +Version: 0.2.0 Release: 0 Summary: A simple GObject game controller library -License: LGPL-2.1+ +License: LGPL-2.1-or-later Group: System/Libraries -Url: https://gitlab.gnome.org/aplazas/libmanette/ -Source: http://download.gnome.org/sources/libmanette/0.1/%{name}-%{version}.tar.xz +URL: https://gitlab.gnome.org/aplazas/libmanette/ +Source: http://download.gnome.org/sources/libmanette/0.2/%{name}-%{version}.tar.xz + BuildRequires: gcc BuildRequires: gobject-introspection-devel >= 0.6.7 BuildRequires: meson >= 0.43.0 +BuildRequires: pkgconfig BuildRequires: pkgconfig(gudev-1.0) >= 1.0 BuildRequires: pkgconfig(libevdev) >= 1.4.5 BuildRequires: pkgconfig(vapigen) -BuildRoot: %{_tmppath}/%{name}-%{version}-build %description libmanette allows easy access to game controllers. -%package -n liblibmanette-%{package_version} +%package -n libmanette-%{package_version} Summary: A simple GObject game controller library Group: System/Libraries -%description -n liblibmanette-%{package_version} +%description -n libmanette-%{package_version} libmanette allows easy access to game controllers. %package -n typelib-1_0-Manette-%{package_version} @@ -56,13 +58,13 @@ %package devel Summary: Development files for the libmanette library Group: Development/Languages/C and C++ -Requires: liblibmanette-%{package_version} = %{version} +Requires: libmanette-%{package_version} = %{version} %description devel libmanette allows easy access to game controllers. %prep -%setup -q +%autosetup %build %meson @@ -71,28 +73,25 @@ %install %meson_install -%post -n liblibmanette-%{package_version} -p /sbin/ldconfig - -%postun -n liblibmanette-%{package_version} -p /sbin/ldconfig +%post -n libmanette-%{package_version} -p /sbin/ldconfig +%postun -n libmanette-%{package_version} -p /sbin/ldconfig -%files -n liblibmanette-%{package_version} -%defattr(-, root, root) -%doc COPYING -%{_libdir}/liblibmanette-%{binary_version}.so* +%files -n libmanette-%{package_version} +%license COPYING +%{_libdir}/libmanette-%{binary_version}.so.* %files -n typelib-1_0-Manette-%{package_version} -%defattr(-,root,root) %{_libdir}/girepository-1.0/Manette-%{binary_version}.typelib %files devel -%defattr(-,root,root) %{_bindir}/manette-test %{_datadir}/gir-1.0/Manette-%{binary_version}.gir %dir %{_datadir}/vala/ %dir %{_datadir}/vala/vapi/ -%{_datadir}/vala/vapi/libmanette-%{binary_version}.deps -%{_datadir}/vala/vapi/libmanette-%{binary_version}.vapi -%{_libdir}/pkgconfig/libmanette-%{binary_version}.pc +%{_datadir}/vala/vapi/manette-%{binary_version}.deps +%{_datadir}/vala/vapi/manette-%{binary_version}.vapi %{_includedir}/libmanette/ +%{_libdir}/libmanette-%{binary_version}.so +%{_libdir}/pkgconfig/manette-%{binary_version}.pc %changelog ++++++ libmanette-0.1.2.tar.xz -> libmanette-0.2.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/NEWS new/libmanette-0.2.0/NEWS --- old/libmanette-0.1.2/NEWS 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/NEWS 2018-03-01 16:16:56.000000000 +0100 @@ -1,4 +1,38 @@ ============= +Version 0.2.0 +============= + +* Device: Add rumble support. +* Make the devices rumble in manette-test if they support it. +* Mapping: + - Initialize the bindings to 0 before using them, avoiding improper + values in non used fields. + - Ensures the binding value inversion is disabled by default, avoiding + an unexpected state. + - Clear errno before using it to avoid string to uint16 convertions to + fail on valid inputs. + - Silently skip the 'platform' mapping key as it is neither useful nor + erroneous. +* Monitor: + - Fix the 'device-disconnected' signal marshaller. + - Fix the devices hash table hash and comparison functions. +* Build system change: + - Make manette-test properly depend on libmanette. + - Change the package name from libmanette to manette. + - Change the soname from liblibmanette.so to libmanette.so. + - Fix the soname version. +* Fix the license header of manette-version.h.in, which was accidentaly + not matching the one of the library. + +* Bugs fixes: + - https://gitlab.gnome.org/aplazas/libmanette/issues/1 + - https://gitlab.gnome.org/aplazas/libmanette/issues/2 + - https://gitlab.gnome.org/aplazas/libmanette/issues/3 + - https://gitlab.gnome.org/aplazas/libmanette/issues/4 + - https://gitlab.gnome.org/aplazas/libmanette/issues/5 + - https://gitlab.gnome.org/aplazas/libmanette/issues/6 + +============= Version 0.1.2 ============= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/demos/manette-test/manette-test.c new/libmanette-0.2.0/demos/manette-test/manette-test.c --- old/libmanette-0.1.2/demos/manette-test/manette-test.c 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/demos/manette-test/manette-test.c 2018-03-01 16:16:56.000000000 +0100 @@ -181,9 +181,45 @@ g_printf ("%s: Unknown hat axis %u moved to %d\n", device_name, hat_axis, value); } +#define PHASES 4 + +typedef struct { + ManetteDevice *device; + guint8 phase; +} RumbleData; + +typedef struct { + guint16 strong_magnitude; + guint16 weak_magnitude; + guint16 duration_ms; + guint16 wait_ms; +} RumblePhase; + +gboolean +rumble (RumbleData *data) +{ + static const RumblePhase phases[] = { + { G_MAXUINT16/16, G_MAXUINT16/2, 200, 300 }, + { G_MAXUINT16/16, G_MAXUINT16/2, 200, 1300 }, + { G_MAXUINT16/8, G_MAXUINT16/16, 200, 300 }, + { G_MAXUINT16/8, G_MAXUINT16/16, 200, 1800 }, + }; + + manette_device_rumble (data->device, + phases[data->phase].strong_magnitude, + phases[data->phase].weak_magnitude, + phases[data->phase].duration_ms); + g_timeout_add (phases[data->phase].wait_ms, (GSourceFunc) rumble, data); + data->phase = (data->phase + 1) % PHASES; + + return FALSE; +} + static void listen_to_device (ManetteDevice *device) { + RumbleData *rumble_data; + g_printf ("%s: connected\n", manette_device_get_name (device)); g_signal_connect_object (G_OBJECT (device), "disconnected", @@ -210,6 +246,11 @@ (GCallback) on_hat_axis_event, NULL, 0); + if (manette_device_has_rumble (device)) { + rumble_data = g_new0 (RumbleData, 1); + rumble_data->device = g_object_ref (device); + rumble (rumble_data); + } } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/demos/manette-test/meson.build new/libmanette-0.2.0/demos/manette-test/meson.build --- old/libmanette-0.1.2/demos/manette-test/meson.build 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/demos/manette-test/meson.build 2018-03-01 16:16:56.000000000 +0100 @@ -1,7 +1,6 @@ executable('manette-test', 'manette-test.c', - dependencies: libmanette_deps, - link_with: libmanette_lib, + dependencies: libmanette_dep, include_directories: [ confinc, srcinc ], gui_app: false, install: true) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/meson.build new/libmanette-0.2.0/meson.build --- old/libmanette-0.1.2/meson.build 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/meson.build 2018-03-01 16:16:56.000000000 +0100 @@ -1,5 +1,5 @@ project('libmanette','c', - version: '0.1.2', + version: '0.2.0', meson_version: '>= 0.43.0', ) @@ -25,10 +25,6 @@ configuration: config_h, ) -add_project_arguments([ - '-I' + meson.build_root(), -], language: 'c') - subdir('src') subdir('tests') subdir('demos') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/src/manette-device.c new/libmanette-0.2.0/src/manette-device.c --- old/libmanette-0.1.2/src/manette-device.c 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/src/manette-device.c 2018-03-01 16:16:56.000000000 +0100 @@ -41,6 +41,9 @@ gchar *guid; ManetteMapping *mapping; + + struct ff_effect rumble_effect; + gint16 force_feedback_id; }; G_DEFINE_TYPE (ManetteDevice, manette_device, G_TYPE_OBJECT) @@ -484,6 +487,8 @@ manette_device_init (ManetteDevice *self) { self->event_source_id = -1; + self->rumble_effect.type = FF_RUMBLE; + self->rumble_effect.id = -1; } static gchar @@ -673,7 +678,7 @@ self = g_object_new (MANETTE_TYPE_DEVICE, NULL); - self->fd = open (filename, O_RDONLY | O_NONBLOCK, (mode_t) 0); + self->fd = open (filename, O_RDWR | O_NONBLOCK, (mode_t) 0); if (self->fd < 0) { g_set_error (error, G_FILE_ERROR, @@ -964,3 +969,53 @@ manette_mapping_manager_delete_mapping (mapping_manager, guid); g_object_unref (mapping_manager); } + +gboolean +manette_device_has_rumble (ManetteDevice *self) +{ + gulong features[4]; + + g_return_val_if_fail (MANETTE_IS_DEVICE (self), FALSE); + + if (ioctl (self->fd, EVIOCGBIT (EV_FF, sizeof (gulong) * 4), features) == -1) + return FALSE; + + if (!((features[FF_RUMBLE / (sizeof (glong) * 8)] >> FF_RUMBLE % (sizeof (glong) * 8)) & 1)) + return FALSE; + + return TRUE; +} + +gboolean +manette_device_rumble (ManetteDevice *self, + guint16 strong_magnitude, + guint16 weak_magnitude, + guint16 milliseconds) +{ + struct input_event event; + + g_return_val_if_fail (MANETTE_IS_DEVICE (self), FALSE); + + self->rumble_effect.u.rumble.strong_magnitude = strong_magnitude; + self->rumble_effect.u.rumble.weak_magnitude = weak_magnitude; + self->rumble_effect.replay.length = milliseconds; + + if (ioctl (self->fd, EVIOCSFF, &self->rumble_effect) == -1) { + g_debug ("Failed to upload the rumble effect."); + + return FALSE; + } + + event.type = EV_FF; + event.code = self->rumble_effect.id; + /* 1 to play the event, 0 to stop it. */ + event.value = 1; + + if (write (self->fd, (const void*) &event, sizeof (event)) == -1) { + g_debug ("Failed to start the rumble effect."); + + return FALSE; + } + + return TRUE; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/src/manette-device.h new/libmanette-0.2.0/src/manette-device.h --- old/libmanette-0.1.2/src/manette-device.h 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/src/manette-device.h 2018-03-01 16:16:56.000000000 +0100 @@ -39,6 +39,11 @@ void manette_device_save_user_mapping (ManetteDevice *self, const gchar *mapping_string); void manette_device_remove_user_mapping (ManetteDevice *self); +gboolean manette_device_has_rumble (ManetteDevice *self); +gboolean manette_device_rumble (ManetteDevice *self, + guint16 strong_magnitude, + guint16 weak_magnitude, + guint16 milliseconds); G_END_DECLS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/src/manette-mapping.c new/libmanette-0.2.0/src/manette-mapping.c --- old/libmanette-0.1.2/src/manette-mapping.c 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/src/manette-mapping.c 2018-03-01 16:16:56.000000000 +0100 @@ -103,15 +103,10 @@ g_return_val_if_fail (end != NULL, FALSE); g_return_val_if_fail (result != NULL, FALSE); + errno = 0; *result = strtol (start, end, 10); - switch (errno) { - case EINVAL: - case ERANGE: - return FALSE; - default: - return TRUE; - } + return errno == 0; } static gboolean @@ -168,6 +163,8 @@ return TRUE; default: + *invert = FALSE; + return TRUE; } } @@ -426,7 +423,7 @@ gchar **splitted_mapping; gchar *destination_string; gchar *source_string; - ManetteMappingBinding binding; + ManetteMappingBinding binding = {}; mappings = g_strsplit (mapping_string, ",", 0); mappings_length = g_strv_length (mappings); @@ -443,6 +440,13 @@ destination_string = splitted_mapping[0]; source_string = splitted_mapping[1]; + /* Skip the platform key. */ + if (g_strcmp0 ("platform", splitted_mapping[0]) == 0) { + g_strfreev (splitted_mapping); + + continue; + } + if (!parse_mapping_destination (destination_string, &binding)) { g_critical ("Invalid mapping destination: %s", splitted_mapping[0]); g_strfreev (splitted_mapping); @@ -451,9 +455,7 @@ } if (binding.destination.type == EV_MAX) { - if (g_strcmp0 (destination_string, "platform") != 0) - g_debug ("Invalid token: %s", destination_string); - + g_debug ("Invalid token: %s", destination_string); g_strfreev (splitted_mapping); continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/src/manette-monitor.c new/libmanette-0.2.0/src/manette-monitor.c --- old/libmanette-0.1.2/src/manette-monitor.c 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/src/manette-monitor.c 2018-03-01 16:16:56.000000000 +0100 @@ -279,7 +279,7 @@ ManetteMonitor *self = NULL; self = (ManetteMonitor*) g_object_new (MANETTE_TYPE_MONITOR, NULL); - self->devices = g_hash_table_new_full (g_direct_hash, g_direct_equal, + self->devices = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); self->mapping_manager = manette_mapping_manager_new (); @@ -353,7 +353,7 @@ MANETTE_TYPE_MONITOR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, + g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MANETTE_TYPE_DEVICE); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/src/manette-version.h.in new/libmanette-0.2.0/src/manette-version.h.in --- old/libmanette-0.1.2/src/manette-version.h.in 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/src/manette-version.h.in 2018-03-01 16:16:56.000000000 +0100 @@ -1,18 +1,18 @@ /* libmanette-version.h.in * - * Copyright (C) 2017 Adrien Plazas + * Copyright (C) 2017 Adrien Plazas <kekun.pla...@laposte.net> * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * This file is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public License + * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/src/meson.build new/libmanette-0.2.0/src/meson.build --- old/libmanette-0.1.2/src/meson.build 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/src/meson.build 2018-03-01 16:16:56.000000000 +0100 @@ -1,6 +1,6 @@ api_version = '0.2' -libmanette_module = 'libmanette-' + api_version +libmanette_module = 'manette-' + api_version libmanette_resources = gnome.compile_resources( 'manette_resources', @@ -71,7 +71,9 @@ libmanette_sources, c_args: libmanette_c_args, dependencies: libmanette_deps, + include_directories: confinc, install: true, + soversion: 0, ) libmanette_gir_args = [ @@ -117,6 +119,13 @@ sources: libmanette_gir[0], ) +libmanette_dep = declare_dependency( + link_with: libmanette_lib, + sources: libmanette_gir, + include_directories: confinc, + dependencies: libmanette_deps, +) + install_headers(libmanette_headers, subdir: 'libmanette') pkg = import('pkgconfig') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libmanette-0.1.2/tests/meson.build new/libmanette-0.2.0/tests/meson.build --- old/libmanette-0.1.2/tests/meson.build 2017-11-12 09:35:55.000000000 +0100 +++ new/libmanette-0.2.0/tests/meson.build 2018-03-01 16:16:56.000000000 +0100 @@ -10,8 +10,8 @@ test_exe = executable(test_display_name, test_srcs, c_args: libmanette_c_args, - dependencies: libmanette_deps, - link_with: libmanette_lib) + dependencies: libmanette_dep, + ) test('@0@ test'.format(test_display_name), test_exe) endforeach