Code

Warning cleanup.
[inkscape.git] / src / device-manager.cpp
index dcf86edb706f53a0d3290ac6d3886b4b5ff055c5..09fd7cb5f788cc7970ada63da52cfcd018d361ba 100644 (file)
@@ -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));
             }
         }
     }
@@ -345,7 +357,7 @@ GdkDeviceAxis coreAxes[] = {{GDK_AXIS_X, 0.0, 0.0},
 
 static void createFakeList() {
     if ( !fakeList ) {
-        fakeout[0].name = "pad";
+        fakeout[0].name = g_strdup("pad");
         fakeout[0].source = GDK_SOURCE_PEN;
         fakeout[0].mode = GDK_MODE_SCREEN;
         fakeout[0].has_cursor = TRUE;
@@ -354,7 +366,7 @@ static void createFakeList() {
         fakeout[0].num_keys = 8;
         fakeout[0].keys = padKeys;
 
-        fakeout[1].name = "eraser";
+        fakeout[1].name = g_strdup("eraser");
         fakeout[1].source = GDK_SOURCE_ERASER;
         fakeout[1].mode = GDK_MODE_SCREEN;
         fakeout[1].has_cursor = TRUE;
@@ -363,7 +375,7 @@ static void createFakeList() {
         fakeout[1].num_keys = 7;
         fakeout[1].keys = eraserKeys;
 
-        fakeout[2].name = "cursor";
+        fakeout[2].name = g_strdup("cursor");
         fakeout[2].source = GDK_SOURCE_CURSOR;
         fakeout[2].mode = GDK_MODE_SCREEN;
         fakeout[2].has_cursor = TRUE;
@@ -372,7 +384,7 @@ static void createFakeList() {
         fakeout[2].num_keys = 7;
         fakeout[2].keys = cursorKeys;
 
-        fakeout[3].name = "stylus";
+        fakeout[3].name = g_strdup("stylus");
         fakeout[3].source = GDK_SOURCE_PEN;
         fakeout[3].mode = GDK_MODE_SCREEN;
         fakeout[3].has_cursor = TRUE;
@@ -389,7 +401,7 @@ static void createFakeList() {
         if ( devList && devList->data ) {
             fakeout[4] = *((GdkDevice*)devList->data);
         } else {
-            fakeout[4].name = "Core Pointer";
+            fakeout[4].name = g_strdup("Core Pointer");
             fakeout[4].source = GDK_SOURCE_MOUSE;
             fakeout[4].mode = GDK_MODE_SCREEN;
             fakeout[4].has_cursor = TRUE;