+
+void
+DeviceTracker::save_preferences()
+{
+ GList * device_list = gdk_devices_list();
+ for (GList * itr = device_list; itr; itr = g_list_next(itr))
+ {
+ GdkDevice * gdk_device = reinterpret_cast<GdkDevice*>(itr->data);
+
+ InputDevice::Handle synfig_device = synfigapp::Main::find_input_device(gdk_device->name);
+ if (synfig_device == NULL)
+ continue;
+
+ synfig_device->set_mode(InputDevice::Mode(gdk_device->mode));
+ if (gdk_device->num_axes > 0) {
+ vector<synfigapp::InputDevice::AxisUse> axes;
+ axes.resize(gdk_device->num_axes);
+ for (int i = 0; i < gdk_device->num_axes; i++)
+ axes[i] = InputDevice::AxisUse(gdk_device->axes[i].use);
+ synfig_device->set_axes(axes);
+ }
+
+ if (gdk_device->num_keys > 0) {
+ vector<synfigapp::InputDevice::DeviceKey> keys;
+ keys.resize(gdk_device->num_keys);
+ for (int i = 0; i < gdk_device->num_keys; i++) {
+ keys[i].keyval = gdk_device->keys[i].keyval;
+ keys[i].modifiers = gdk_device->keys[i].modifiers;
+ }
+ synfig_device->set_keys(keys);
+ }
+ }
+}
+
+void
+DeviceTracker::load_preferences()
+{
+ GList * device_list = gdk_devices_list();
+ for (GList * itr = device_list; itr; itr = g_list_next(itr))
+ {
+ GdkDevice * gdk_device = reinterpret_cast<GdkDevice*>(itr->data);
+
+ InputDevice::Handle synfig_device = synfigapp::Main::find_input_device(gdk_device->name);
+ if (synfig_device == NULL)
+ continue;
+
+ gdk_device_set_mode(gdk_device, GdkInputMode(synfig_device->get_mode()));
+
+ const std::vector<synfigapp::InputDevice::AxisUse> axes = synfig_device->get_axes();
+ for (int axis = 0; axis < (int) axes.size(); axis++)
+ gdk_device_set_axis_use(gdk_device, axis, GdkAxisUse(axes[axis]));
+
+ const std::vector<synfigapp::InputDevice::DeviceKey> keys = synfig_device->get_keys();
+ for (int key = 0; key < (int) keys.size(); key++)
+ gdk_device_set_key(gdk_device, key, keys[key].keyval,
+ GdkModifierType(keys[key].modifiers));
+ }
+}