From 6ca6f87c16b65f1f31bc9ef2be8ebfef9e591a89 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 13 Jun 2023 21:38:49 +0200 Subject: [PATCH] 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. --- app/widgets/gimpdevicemanager.c | 25 +++++++++++++++++++++++++ app/widgets/gimpdevicemanager.h | 3 +++ app/widgets/gimpdevices.c | 1 + 3 files changed, 29 insertions(+) diff --git a/app/widgets/gimpdevicemanager.c b/app/widgets/gimpdevicemanager.c index ab454fbb63..b99e2ce26b 100644 --- a/app/widgets/gimpdevicemanager.c +++ b/app/widgets/gimpdevicemanager.c @@ -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); +} diff --git a/app/widgets/gimpdevicemanager.h b/app/widgets/gimpdevicemanager.h index 19a28662ed..5d1bc152ba 100644 --- a/app/widgets/gimpdevicemanager.h +++ b/app/widgets/gimpdevicemanager.h @@ -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__ */ diff --git a/app/widgets/gimpdevices.c b/app/widgets/gimpdevices.c index 3145272ea9..e6c98ffac0 100644 --- a/app/widgets/gimpdevices.c +++ b/app/widgets/gimpdevices.c @@ -197,6 +197,7 @@ gimp_devices_save (Gimp *gimp, g_object_unref (file); devicerc_deleted = FALSE; + gimp_device_manager_reconfigure_pads (manager); } gboolean