Code

Extensions. Add option to choose dxf output units
[inkscape.git] / src / device-manager.cpp
index 29e15b05a23c4d25fc4c4b9e20cecbffa1685e44..2b44a8d5166722d7ca02ea099ddededc530edc87 100644 (file)
@@ -260,10 +260,10 @@ public:
 
     virtual std::list<Glib::RefPtr<InputDevice const> > getDevices();
 
-    virtual sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalDeviceChanged();
-    virtual sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalAxesChanged();
-    virtual sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalButtonsChanged();
-    virtual sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalLinkChanged();
+    virtual sigc::signal<void, Glib::RefPtr<InputDevice const> > signalDeviceChanged();
+    virtual sigc::signal<void, Glib::RefPtr<InputDevice const> > signalAxesChanged();
+    virtual sigc::signal<void, Glib::RefPtr<InputDevice const> > signalButtonsChanged();
+    virtual sigc::signal<void, Glib::RefPtr<InputDevice const> > signalLinkChanged();
 
     virtual void addAxis(Glib::ustring const & id, gint axis);
     virtual void addButton(Glib::ustring const & id, gint button);
@@ -276,10 +276,10 @@ public:
 protected:
     std::list<Glib::RefPtr<InputDeviceImpl> > devices;
 
-    sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalDeviceChangedPriv;
-    sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalAxesChangedPriv;
-    sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalButtonsChangedPriv;
-    sigc::signal<void, const Glib::RefPtr<InputDevice>& > signalLinkChangedPriv;
+    sigc::signal<void, Glib::RefPtr<InputDevice const> > signalDeviceChangedPriv;
+    sigc::signal<void, Glib::RefPtr<InputDevice const> > signalAxesChangedPriv;
+    sigc::signal<void, Glib::RefPtr<InputDevice const> > signalButtonsChangedPriv;
+    sigc::signal<void, Glib::RefPtr<InputDevice const> > signalLinkChangedPriv;
 };
 
 
@@ -403,10 +403,9 @@ void DeviceManagerImpl::setMode( Glib::ustring const & id, Gdk::InputMode mode )
 {
     std::list<Glib::RefPtr<InputDeviceImpl> >::iterator it = std::find_if(devices.begin(), devices.end(), IdMatcher(id));
     if ( it != devices.end() ) {
-        if (isValidDevice((*it)->getDevice())) {
+        if (isValidDevice((*it)->getDevice()) && ((*it)->getMode() != mode) ) {
             bool success = gdk_device_set_mode((*it)->getDevice(), static_cast<GdkInputMode>(mode));
             if (success) {
-                //(*it)->setMode(mode);
                 signalDeviceChangedPriv.emit(*it);
             } else {
                 g_warning("Unable to set mode on extended input device [%s]", (*it)->getId().c_str());
@@ -420,8 +419,14 @@ void DeviceManagerImpl::setAxisUse( Glib::ustring const & id, guint index, Gdk::
     std::list<Glib::RefPtr<InputDeviceImpl> >::iterator it = std::find_if(devices.begin(), devices.end(), IdMatcher(id));
     if ( it != devices.end() ) {
         if (isValidDevice((*it)->getDevice())) {
-            gdk_device_set_axis_use((*it)->getDevice(), index, static_cast<GdkAxisUse>(use));
-            signalDeviceChangedPriv.emit(*it);
+            if (static_cast<gint>(index) <= (*it)->getNumAxes()) {
+                if ((*it)->getDevice()->axes[index].use != static_cast<GdkAxisUse>(use)) {
+                    gdk_device_set_axis_use((*it)->getDevice(), index, static_cast<GdkAxisUse>(use));
+                    signalDeviceChangedPriv.emit(*it);
+                }
+            } else {
+                g_warning("Invalid device axis number %d on extended input device [%s]", index, (*it)->getId().c_str());
+            }
         }
     }
 }
@@ -440,22 +445,22 @@ void DeviceManagerImpl::setKey( Glib::ustring const & id, guint index, guint key
     }
 }
 
-sigc::signal<void, const Glib::RefPtr<InputDevice>& > DeviceManagerImpl::signalDeviceChanged()
+sigc::signal<void, Glib::RefPtr<InputDevice const> > DeviceManagerImpl::signalDeviceChanged()
 {
     return signalDeviceChangedPriv;
 }
 
-sigc::signal<void, const Glib::RefPtr<InputDevice>& > DeviceManagerImpl::signalAxesChanged()
+sigc::signal<void, Glib::RefPtr<InputDevice const> > DeviceManagerImpl::signalAxesChanged()
 {
     return signalAxesChangedPriv;
 }
 
-sigc::signal<void, const Glib::RefPtr<InputDevice>& > DeviceManagerImpl::signalButtonsChanged()
+sigc::signal<void, Glib::RefPtr<InputDevice const> > DeviceManagerImpl::signalButtonsChanged()
 {
     return signalButtonsChangedPriv;
 }
 
-sigc::signal<void, const Glib::RefPtr<InputDevice>& > DeviceManagerImpl::signalLinkChanged()
+sigc::signal<void, Glib::RefPtr<InputDevice const> > DeviceManagerImpl::signalLinkChanged()
 {
     return signalLinkChangedPriv;
 }
@@ -685,4 +690,4 @@ static void createFakeList() {
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :