diff --git a/blender-2.74-reg.patch b/blender-2.74-reg.patch new file mode 100644 index 0000000..5200205 --- /dev/null +++ b/blender-2.74-reg.patch @@ -0,0 +1,153 @@ +diff --git a/intern/ghost/intern/GHOST_NDOFManagerX11.cpp b/intern/ghost/intern/GHOST_NDOFManagerX11.cpp +index de44b36..75e476c 100644 +--- a/intern/ghost/intern/GHOST_NDOFManagerX11.cpp ++++ b/intern/ghost/intern/GHOST_NDOFManagerX11.cpp +@@ -1,147 +1,147 @@ + /* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): + * Mike Erwin + * + * ***** END GPL LICENSE BLOCK ***** + */ + + #ifdef WITH_INPUT_NDOF + + #include "GHOST_NDOFManagerX11.h" + #include "GHOST_SystemX11.h" + #include + #include + + + GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys) + : GHOST_NDOFManager(sys), + m_available(false) + { + setDeadZone(0.1f); /* how to calibrate on Linux? throw away slight motion! */ + + if (spnav_open() != -1) { + m_available = true; + + /* determine exactly which device (if any) is plugged in */ + + #define MAX_LINE_LENGTH 100 + + /* look for USB devices with Logitech or 3Dconnexion's vendor ID */ +- FILE *command_output = popen("lsusb | grep '046d:\|256f:'", "r"); ++ FILE *command_output = popen("lsusb | grep '046d:\\|256f:'", "r"); + if (command_output) { + char line[MAX_LINE_LENGTH] = {0}; + while (fgets(line, MAX_LINE_LENGTH, command_output)) { + unsigned short vendor_id = 0, product_id = 0; + if (sscanf(line, "Bus %*d Device %*d: ID %hx:%hx", &vendor_id, &product_id) == 2) + if (setDevice(vendor_id, product_id)) { + break; /* stop looking once the first 3D mouse is found */ + } + } + pclose(command_output); + } + } + else { + #ifdef DEBUG + /* annoying for official builds, just adds noise and most people don't own these */ + puts("ndof: spacenavd not found"); + /* This isn't a hard error, just means the user doesn't have a 3D mouse. */ + #endif + } + } + + GHOST_NDOFManagerX11::~GHOST_NDOFManagerX11() + { + if (m_available) + spnav_close(); + } + + bool GHOST_NDOFManagerX11::available() + { + return m_available; + } + + /* + * Workaround for a problem where we don't enter the 'GHOST_kFinished' state, + * this causes any proceeding event to have a very high 'dt' (time delta), + * many seconds for eg, causing the view to jump. + * + * this workaround expects continuous events, if we miss a motion event, + * immediately send a dummy event with no motion to ensure the finished state is reached. + */ + #define USE_FINISH_GLITCH_WORKAROUND + /* TODO: make this available on all platforms */ + + #ifdef USE_FINISH_GLITCH_WORKAROUND + static bool motion_test_prev = false; + #endif + + bool GHOST_NDOFManagerX11::processEvents() + { + bool anyProcessed = false; + + if (m_available) { + spnav_event e; + + #ifdef USE_FINISH_GLITCH_WORKAROUND + bool motion_test = false; + #endif + + while (spnav_poll_event(&e)) { + switch (e.type) { + case SPNAV_EVENT_MOTION: + { + /* convert to blender view coords */ + GHOST_TUns64 now = m_system.getMilliSeconds(); + const short t[3] = {(short)e.motion.x, (short)e.motion.y, (short)-e.motion.z}; + const short r[3] = {(short)-e.motion.rx, (short)-e.motion.ry, (short)e.motion.rz}; + + updateTranslation(t, now); + updateRotation(r, now); + #ifdef USE_FINISH_GLITCH_WORKAROUND + motion_test = true; + #endif + break; + } + case SPNAV_EVENT_BUTTON: + GHOST_TUns64 now = m_system.getMilliSeconds(); + updateButton(e.button.bnum, e.button.press, now); + break; + } + anyProcessed = true; + } + + #ifdef USE_FINISH_GLITCH_WORKAROUND + if (motion_test_prev == true && motion_test == false) { + GHOST_TUns64 now = m_system.getMilliSeconds(); + const short v[3] = {0, 0, 0}; + + updateTranslation(v, now); + updateRotation(v, now); + + anyProcessed = true; + } + motion_test_prev = motion_test; + #endif + + } + + return anyProcessed; + } + + #endif /* WITH_INPUT_NDOF */ diff --git a/blender.spec b/blender.spec index 52d5bdb..22687f3 100644 --- a/blender.spec +++ b/blender.spec @@ -22,7 +22,7 @@ Name: blender Epoch: 1 Version: %{blender_api} -Release: 3%{?dist} +Release: 4%{?dist} Summary: 3D modeling, animation, rendering and post-production @@ -30,6 +30,7 @@ Group: Applications/Multimedia License: GPLv2 URL: http://www.blender.org + Source0: http://download.blender.org/source/blender-%{version}.tar.gz Source1: blenderplayer.1 Source5: blender.xml @@ -38,6 +39,9 @@ Source10: macros.blender Patch2: blender-2.73-droid.patch +# Regression patch taken from upstream +Patch100: blender-2.74-reg.patch + BuildRequires: desktop-file-utils BuildRequires: gettext BuildRequires: libtool @@ -149,6 +153,8 @@ sets. %patch2 -p1 -b .droid +%patch100 -p1 + find -name '.svn' -print | xargs rm -rf %build @@ -351,6 +357,9 @@ fi %doc release/datafiles/LICENSE-bmonofont-i18n.ttf.txt %changelog +* Tue May 5 2015 Jochen Schmitt - 1:2.74-4 +- Fix regression for 3D mice support + * Mon May 4 2015 Jochen Schmitt - 1:2.74-3 - Enable 3D mice support