summaryrefslogtreecommitdiffstats
path: root/src/device-manager.cpp
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2008-03-24 05:19:52 +0000
committerjoncruz <joncruz@users.sourceforge.net>2008-03-24 05:19:52 +0000
commit29303e4d7a1cb36c3beceedd139ee34850df5f1e (patch)
tree0d47ec99c47d2b0e5bd635bcf110d94f04ceb65e /src/device-manager.cpp
parentCorrected initialization order (diff)
downloadinkscape-29303e4d7a1cb36c3beceedd139ee34850df5f1e.tar.gz
inkscape-29303e4d7a1cb36c3beceedd139ee34850df5f1e.zip
Fixed unlinking of devices
(bzr r5186)
Diffstat (limited to 'src/device-manager.cpp')
-rw-r--r--src/device-manager.cpp50
1 files changed, 31 insertions, 19 deletions
diff --git a/src/device-manager.cpp b/src/device-manager.cpp
index dcf86edb7..a9a8844ab 100644
--- a/src/device-manager.cpp
+++ b/src/device-manager.cpp
@@ -240,34 +240,46 @@ void DeviceManagerImpl::setLinkedTo(Glib::ustring const & id, Glib::ustring cons
std::list<InputDeviceImpl*>::iterator it = std::find_if(devices.begin(), devices.end(), IdMatcher(id));
if ( it != devices.end() ) {
InputDeviceImpl* dev = *it;
- // Need to be sure the target of the link exists
- it = std::find_if(devices.begin(), devices.end(), IdMatcher(link));
- if ( it != devices.end() ) {
- InputDeviceImpl* targetDev = *it;
- if ( (dev->getLink() != link) || (targetDev->getLink() != id) ) {
- // only muck about if they aren't already linked
- std::list<InputDeviceImpl*> changedItems;
- // Is something else already using that link?
+
+ InputDeviceImpl* targetDev = 0;
+ if ( !link.empty() ) {
+ // Need to be sure the target of the link exists
+ it = std::find_if(devices.begin(), devices.end(), IdMatcher(link));
+ if ( it != devices.end() ) {
+ targetDev = *it;
+ }
+ }
+
+
+ if ( (link.empty() && !dev->getLink().empty())
+ || (targetDev && (targetDev->getLink() != id)) ) {
+ // only muck about if they aren't already linked
+ std::list<InputDeviceImpl*> changedItems;
+
+ if ( targetDev ) {
+ // Is something else already using that link?
it = std::find_if(devices.begin(), devices.end(), LinkMatcher(link));
if ( it != devices.end() ) {
(*it)->setLink("");
changedItems.push_back(*it);
}
- it = std::find_if(devices.begin(), devices.end(), LinkMatcher(id));
- if ( it != devices.end() ) {
- (*it)->setLink("");
- changedItems.push_back(*it);
- }
- dev->setLink(link);
+ }
+ it = std::find_if(devices.begin(), devices.end(), LinkMatcher(id));
+ if ( it != devices.end() ) {
+ (*it)->setLink("");
+ changedItems.push_back(*it);
+ }
+ if ( targetDev ) {
targetDev->setLink(id);
changedItems.push_back(targetDev);
- changedItems.push_back(dev);
+ }
+ dev->setLink(link);
+ changedItems.push_back(dev);
- for ( std::list<InputDeviceImpl*>::const_iterator iter = changedItems.begin(); iter != changedItems.end(); ++iter ) {
- (*iter)->reference();
- signalLinkChangedPriv.emit(Glib::RefPtr<InputDevice>(*iter));
- }
+ for ( std::list<InputDeviceImpl*>::const_iterator iter = changedItems.begin(); iter != changedItems.end(); ++iter ) {
+ (*iter)->reference();
+ signalLinkChangedPriv.emit(Glib::RefPtr<InputDevice>(*iter));
}
}
}