[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35457] trunk/blender/intern/ghost/intern: Fix [#26446] Quick extrude (Ctrl+LMB) works only one time
Ralf Hölzemer
r.hoelzemer at googlemail.com
Fri Mar 11 15:04:17 CET 2011
Hi Nathan,
this commit broke building with WinSDK/Nmake/JOM on Win7.
Here's the error message:
[ 80%] Building CXX object
intern/ghost/CMakeFiles/bf_intern_ghost.dir/intern/GHOST_SystemWin32.cpp.obj
GHOST_SystemWin32.cpp
W:\ralf\Stuff\b\blender\intern\ghost\intern\GHOST_SystemWin32.cpp(473)
: error C2220: warning treated as error - no 'object' file generated
W:\ralf\Stuff\b\blender\intern\ghost\intern\GHOST_SystemWin32.cpp(473)
: warning C4805: '!=' : unsafe mix of type 'bool' and type 'int' in
operation
W:\ralf\Stuff\b\blender\intern\ghost\intern\GHOST_SystemWin32.cpp(479)
: warning C4805: '!=' : unsafe mix of type 'bool' and type 'int' in
operation
W:\ralf\Stuff\b\blender\intern\ghost\intern\GHOST_SystemWin32.cpp(485)
: warning C4805: '!=' : unsafe mix of type 'bool' and type 'int' in
operation
W:\ralf\Stuff\b\blender\intern\ghost\intern\GHOST_SystemWin32.cpp(491)
: warning C4805: '!=' : unsafe mix of type 'bool' and type 'int' in
operation
W:\ralf\Stuff\b\blender\intern\ghost\intern\GHOST_SystemWin32.cpp(497)
: warning C4805: '!=' : unsafe mix of type 'bool' and type 'int' in
operation
W:\ralf\Stuff\b\blender\intern\ghost\intern\GHOST_SystemWin32.cpp(503)
: warning C4805: '!=' : unsafe mix of type 'bool' and type 'int' in
operation
NMAKE : fatal error U1077: '"C:\PROGRA~2\Microsoft Visual Studio
9.0\VC\bin\amd64\cl.exe"' : return code '0x2'
The patch at http://www.pasteall.org/19830/diff fixed the issue for me.
2011/3/10 Nathan Letwory <nathan at letworyinteractive.com>:
> Revision: 35457
> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35457
> Author: jesterking
> Date: 2011-03-10 18:56:19 +0000 (Thu, 10 Mar 2011)
> Log Message:
> -----------
> Fix [#26446] Quick extrude (Ctrl+LMB) works only one time
> Reported by Michael R
>
> This was one thing I didn't test when accepting patch [#26364]. It is important to not
> send repeats of modifier keys.
>
> Modified Paths:
> --------------
> trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp
> trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h
>
> Modified: trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp
> ===================================================================
> --- trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp 2011-03-10 18:17:20 UTC (rev 35456)
> +++ trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp 2011-03-10 18:56:19 UTC (rev 35457)
> @@ -454,8 +454,71 @@
>
> if (ri.header.dwType == RIM_TYPEKEYBOARD)
> {
> + GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem();
> +
> + GHOST_ModifierKeys modifiers;
> + system->retrieveModifierKeys(modifiers);
> +
> *keyDown = !(ri.data.keyboard.Flags & RI_KEY_BREAK);
> key = this->convertKey(window, ri.data.keyboard.VKey, ri.data.keyboard.MakeCode, (ri.data.keyboard.Flags&(RI_KEY_E1|RI_KEY_E0)));
> +
> + // extra handling of modifier keys: don't send repeats out from GHOST
> + if(key >= GHOST_kKeyLeftShift && key <= GHOST_kKeyRightAlt)
> + {
> + bool changed = false;
> + GHOST_TModifierKeyMask modifier;
> + switch(key) {
> + case GHOST_kKeyLeftShift:
> + {
> + changed = (modifiers.get(GHOST_kModifierKeyLeftShift) != *keyDown);
> + modifier = GHOST_kModifierKeyLeftShift;
> + }
> + break;
> + case GHOST_kKeyRightShift:
> + {
> + changed = (modifiers.get(GHOST_kModifierKeyRightShift) != *keyDown);
> + modifier = GHOST_kModifierKeyRightShift;
> + }
> + break;
> + case GHOST_kKeyLeftControl:
> + {
> + changed = (modifiers.get(GHOST_kModifierKeyLeftControl) != *keyDown);
> + modifier = GHOST_kModifierKeyLeftControl;
> + }
> + break;
> + case GHOST_kKeyRightControl:
> + {
> + changed = (modifiers.get(GHOST_kModifierKeyRightControl) != *keyDown);
> + modifier = GHOST_kModifierKeyRightControl;
> + }
> + break;
> + case GHOST_kKeyLeftAlt:
> + {
> + changed = (modifiers.get(GHOST_kModifierKeyLeftAlt) != *keyDown);
> + modifier = GHOST_kModifierKeyLeftAlt;
> + }
> + break;
> + case GHOST_kKeyRightAlt:
> + {
> + changed = (modifiers.get(GHOST_kModifierKeyRightAlt) != *keyDown);
> + modifier = GHOST_kModifierKeyRightAlt;
> + }
> + break;
> + default: break;
> + }
> +
> + if(changed)
> + {
> + modifiers.set(modifier, *keyDown);
> + system->storeModifierKeys(modifiers);
> + }
> + else
> + {
> + key = GHOST_kKeyUnknown;
> + }
> + }
> +
> +
> if(vk) *vk = ri.data.keyboard.VKey;
> };
>
> @@ -586,6 +649,7 @@
> break;
> }
> }
> +
> return key;
> }
>
>
> Modified: trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h
> ===================================================================
> --- trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h 2011-03-10 18:17:20 UTC (rev 35456)
> +++ trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h 2011-03-10 18:56:19 UTC (rev 35457)
> @@ -322,6 +322,14 @@
> */
> virtual GHOST_TKey hardKey(GHOST_IWindow *window, WPARAM wParam, LPARAM lParam, int * keyDown, char * vk);
>
> + /**
> + * Creates modifier key event(s) and updates the key data stored locally (m_modifierKeys).
> + * With the modifier keys, we want to distinguish left and right keys.
> + * Sometimes this is not possible (Windows ME for instance). Then, we want
> + * events generated for both keys.
> + * @param window The window receiving the event (the active window).
> + */
> + GHOST_EventKey* processModifierKeys(GHOST_IWindow *window);
>
> /**
> * Creates mouse button event.
> @@ -381,6 +389,19 @@
> static void processMinMaxInfo(MINMAXINFO * minmax);
>
> /**
> + * Returns the local state of the modifier keys (from the message queue).
> + * @param keys The state of the keys.
> + */
> + inline virtual void retrieveModifierKeys(GHOST_ModifierKeys& keys) const;
> +
> + /**
> + * Stores the state of the modifier keys locally.
> + * For internal use only!
> + * @param keys The new state of the modifier keys.
> + */
> + inline virtual void storeModifierKeys(const GHOST_ModifierKeys& keys);
> +
> + /**
> * Check current key layout for AltGr
> */
> inline virtual void handleKeyboardChange(void);
> @@ -394,7 +415,9 @@
> * Initiates WM_INPUT messages from keyboard
> */
> GHOST_TInt32 initKeyboardRawInput(void);
> -
> +
> + /** The current state of the modifier keys. */
> + GHOST_ModifierKeys m_modifierKeys;
> /** State variable set at initialization. */
> bool m_hasPerformanceCounter;
> /** High frequency timer variable. */
> @@ -418,6 +441,16 @@
> #endif
> };
>
> +inline void GHOST_SystemWin32::retrieveModifierKeys(GHOST_ModifierKeys& keys) const
> +{
> + keys = m_modifierKeys;
> +}
> +
> +inline void GHOST_SystemWin32::storeModifierKeys(const GHOST_ModifierKeys& keys)
> +{
> + m_modifierKeys = keys;
> +}
> +
> inline void GHOST_SystemWin32::handleKeyboardChange(void)
> {
> m_keylayout = GetKeyboardLayout(0); // get keylayout for current thread
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
More information about the Bf-committers
mailing list