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


Reply via email to