Version: 1.4.2 (using KDE KDE 3.4.0) Installed from: Compiled From Sources Compiler: GCC 3.4.3 Gnu ld OS: Linux Since Umbrello 1.4.2, activity diagram associations have snap precedence to boxes/partitions/swimlanes before any other objects in box region and unable to select other actions. The result is any box must be removed from the region where actions are present before it is possible to make an associate from any item outside the box. If the box is not moved clear of the actions concerned the association will snap to the box. Hence, any item the pointer is over for an action within a box region will not set the association endpoint to that action. This is a recent change in behaviour and degrades the usability of Umbrello activity diagrams with swimlanes/partitions substantially.
SVN commit 456928 by okellogg: BUG:112017 - setSelectedWidget(): First check associations, then messages, then other widgets. M +1 -1 ChangeLog M +31 -32 umbrello/toolbarstate.cpp --- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #456927:456928 @@ -11,7 +11,7 @@ * Bugs fixed / wishes implemented (see http://bugs.kde.org) 57588 58809 66461 67719 72016 79433 87252 88117 97162 105564 108223 109591 109636 110216 110231 110379 111088 111470 111502 111759 -111768 +111768 112017 Version 1.4.2 (maintenance release) --- branches/KDE/3.5/kdesdk/umbrello/umbrello/toolbarstate.cpp #456927:456928 @@ -169,9 +169,38 @@ UMLWidget* backup = 0; UMLWidget* boxBackup = 0; + // Check associations. + AssociationWidgetListIt assoc_it(m_pUMLView->getAssociationList()); + AssociationWidget* assocwidget = 0; + while ((assocwidget = assoc_it.current()) != NULL) { + if (assocwidget->onAssociation( me->pos() )) + { + // TODO: Fix this. It makes a callback to the association mousePressEvent function. + assocwidget->mousePressEvent(me); + m_pUMLView->setMoveAssoc(assocwidget); + m_bWidgetSelected = true; + return true; + } + ++assoc_it; + } + m_pUMLView->setMoveAssoc(NULL); + + // Check messages. + MessageWidgetListIt mit( m_pUMLView->getMessageList() ); + UMLWidget *obj = 0; + while ((obj = (UMLWidget*)mit.current()) != 0) { + if (obj->isVisible() && obj->onWidget(me->pos())) { + m_pUMLView->setOnWidget( obj ); + obj -> mousePressEvent( me ); + m_bWidgetSelected = true; + return true; + } + ++mit; + } + // Check widgets. UMLWidgetListIt it( m_pUMLView->getWidgetList() ); - UMLWidget* obj = 0; + obj = 0; while ( (obj = it.current()) != 0 ) { ++it; if( !obj->isVisible() || !obj->onWidget(me->pos()) ) @@ -192,7 +221,7 @@ } else { backup = obj; } - }//end while + } //if backup is set then let it have the event if(backup) { backup -> mousePressEvent( me ); @@ -201,20 +230,6 @@ m_bWidgetSelected = true; return true; } - - // Check messages. - MessageWidgetListIt mit( m_pUMLView->getMessageList() ); - obj = 0; - while ((obj = (UMLWidget*)mit.current()) != 0) { - if (obj->isVisible() && obj->onWidget(me->pos())) { - m_pUMLView->setOnWidget( obj ); - obj -> mousePressEvent( me ); - m_bWidgetSelected = true; - return true; - } - ++mit; - } - // Boxes have lower priority. if (boxBackup) { boxBackup -> mousePressEvent( me ); @@ -224,22 +239,6 @@ return true; } - // Check associations. - AssociationWidgetListIt assoc_it(m_pUMLView->getAssociationList()); - AssociationWidget* assocwidget = 0; - while((assocwidget=assoc_it.current())) { - if( assocwidget -> onAssociation( me -> pos() )) - { - // TODO: Fix this. It makes a callback to the association mousePressEvent function. - assocwidget->mousePressEvent(me); - m_pUMLView->setMoveAssoc(assocwidget); - - m_bWidgetSelected = true; - return true; - } - ++assoc_it; - } - m_pUMLView->setMoveAssoc(NULL); m_pUMLView->setOnWidget(NULL); m_bWidgetSelected = false;
*** Bug 82405 has been marked as a duplicate of this bug. ***