[Uml-devel] branches/work/soc-umbrello/umbrello/widgets

Gopala Krishna A krishna.ggk at gmail.com
Tue Aug 18 08:26:15 UTC 2009


SVN commit 1012845 by gopala:

WidgetBase::contextMenuEvent, AssociationWidget::contextMenuEvent and
FloatingTextWidget::contextMenuEvent:

* Fix the inability to apply widget attributes through context menu due to the
  widget being not selected.

* Also clear the selection if no modifier is used and right clicked on
  unselected widget.



 M  +10 -2     associationwidget.cpp  
 M  +9 -1      floatingtextwidget.cpp  
 M  +8 -0      widgetbase.cpp  


--- branches/work/soc-umbrello/umbrello/widgets/associationwidget.cpp #1012844:1012845
@@ -1604,11 +1604,19 @@
         menuType = ListPopupMenu::mt_Association_Selected;
     }
 
+    UMLScene *scene = umlScene();
     QWidget *parent = 0;
-    if (umlScene()) {
-        parent = umlScene()->activeView();
+    if (scene) {
+        parent = scene->activeView();
     }
 
+    if (!isSelected() && scene && !scene->selectedItems().isEmpty()) {
+        Qt::KeyboardModifiers forSelection = (Qt::ControlModifier | Qt::ShiftModifier);
+        if ((event->modifiers() & forSelection) == 0) {
+            scene->clearSelection();
+        }
+    }
+    setSelected(true);
     QPointer<ListPopupMenu> menu = new ListPopupMenu(parent, menuType, this);
     QAction *triggered = menu->exec(event->screenPos());
     ListPopupMenu *parentMenu = ListPopupMenu::menuFromAction(triggered);
--- branches/work/soc-umbrello/umbrello/widgets/floatingtextwidget.cpp #1012844:1012845
@@ -530,7 +530,8 @@
 {
     AssociationWidget *assoc = dynamic_cast<AssociationWidget*>(m_linkWidget);
 
-    UMLView *view = umlScene() ? umlScene()->activeView() : 0;
+    UMLScene *scene = umlScene();
+    UMLView *view = scene ? scene->activeView() : 0;
     ListPopupMenu::Menu_Type menuType = ListPopupMenu::mt_Undefined;
 
     if (assoc) {
@@ -541,6 +542,13 @@
         }
     }
 
+    if (!isSelected() && scene && !scene->selectedItems().isEmpty()) {
+        Qt::KeyboardModifiers forSelection = (Qt::ControlModifier | Qt::ShiftModifier);
+        if ((event->modifiers() & forSelection) == 0) {
+            scene->clearSelection();
+        }
+    }
+    setSelected(true);
     if (menuType != ListPopupMenu::mt_Undefined) {
         QPointer<ListPopupMenu> menu = new ListPopupMenu(view, menuType);
         QAction *triggered = menu->exec(event->screenPos());
--- branches/work/soc-umbrello/umbrello/widgets/widgetbase.cpp #1012844:1012845
@@ -854,6 +854,14 @@
 {
     event->accept();
 
+    UMLScene *scene = umlScene();
+    if (!isSelected() && scene && !scene->selectedItems().isEmpty()) {
+        Qt::KeyboardModifiers forSelection = (Qt::ControlModifier | Qt::ShiftModifier);
+        if ((event->modifiers() & forSelection) == 0) {
+            scene->clearSelection();
+        }
+    }
+    setSelected(true);
     QPointer<ListPopupMenu> menu = new ListPopupMenu(0, this, false, false);
     QAction *triggered = menu->exec(event->screenPos());
     ListPopupMenu *parentMenu = ListPopupMenu::menuFromAction(triggered);




More information about the umbrello-devel mailing list