widgets: Hook ::configure-pad signal emission to configuration changes

If a pad device configuration gets changed, or reset, we should trigger
the creation of new pad controllers for the existing toplevels.

Add the plumbing so that saving/resetting a device configuration will
result in the same ::configure-pad signal, and trigger it from the
relevant places.
This commit is contained in:
Carlos Garnacho 2023-06-13 21:38:49 +02:00 committed by Jehan
parent 46d38827dd
commit 6ca6f87c16
3 changed files with 29 additions and 0 deletions

View File

@ -106,6 +106,9 @@ static void gimp_device_manager_device_defaults (GdkSeat *seat,
GdkDevice *device,
GimpDeviceManager *manager);
static void gimp_device_manager_reconfigure_pad_foreach (GimpDeviceInfo *info,
GimpDeviceManager *manager);
G_DEFINE_TYPE_WITH_PRIVATE (GimpDeviceManager, gimp_device_manager,
GIMP_TYPE_LIST)
@ -379,6 +382,16 @@ gimp_device_manager_reset (GimpDeviceManager *manager)
}
g_slist_free (displays);
gimp_device_manager_reconfigure_pads (manager);
}
void
gimp_device_manager_reconfigure_pads (GimpDeviceManager *manager)
{
gimp_container_foreach (GIMP_CONTAINER (manager),
(GFunc) gimp_device_manager_reconfigure_pad_foreach,
manager);
}
@ -742,3 +755,15 @@ gimp_device_manager_device_defaults (GdkSeat *seat,
}
}
}
static void
gimp_device_manager_reconfigure_pad_foreach (GimpDeviceInfo *info,
GimpDeviceManager *manager)
{
if (gimp_device_info_get_device (info, NULL) == NULL)
return;
if (gimp_device_info_get_source (info) != GDK_SOURCE_TABLET_PAD)
return;
g_signal_emit (manager, device_manager_signals[CONFIGURE_PAD], 0, info);
}

View File

@ -62,6 +62,9 @@ void gimp_device_manager_set_current_device (GimpDeviceManager *m
void gimp_device_manager_reset (GimpDeviceManager *manager);
void gimp_device_manager_reconfigure_pads (GimpDeviceManager *manager);
G_END_DECLS
#endif /* __GIMP_DEVICE_MANAGER_H__ */

View File

@ -197,6 +197,7 @@ gimp_devices_save (Gimp *gimp,
g_object_unref (file);
devicerc_deleted = FALSE;
gimp_device_manager_reconfigure_pads (manager);
}
gboolean