[gimp] app: Input Devices "Reset" button should actually reset to defaults.
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: Input Devices "Reset" button should actually reset to defaults.
- Date: Sat, 13 Jun 2020 18:38:51 +0000 (UTC)
commit 4def457c6379b698d42826a14f263f079a95fdf1
Author: Jehan <jehan girinstud io>
Date: Sat Jun 13 20:33:33 2020 +0200
app: Input Devices "Reset" button should actually reset to defaults.
In other dialogs, it is not a revert to how it was before opening the
dialog, but a reset to default settings.
To just revert to dialog opening values, we can just use "Cancel" and
reopen the dialog (a bit cumbersome, but not something done often
anyway).
Currently what "Reset" does is to set back the device mode and any
customized axe curve. It doesn't touch customized keys, but these will
disappear anyway in a further commit.
app/dialogs/input-devices-dialog.c | 36 +++++++-
app/widgets/gimpdevicemanager.c | 176 ++++++++++++++++++++++++++-----------
app/widgets/gimpdevicemanager.h | 1 +
3 files changed, 160 insertions(+), 53 deletions(-)
---
diff --git a/app/dialogs/input-devices-dialog.c b/app/dialogs/input-devices-dialog.c
index 135edb28df..d47177f7e2 100644
--- a/app/dialogs/input-devices-dialog.c
+++ b/app/dialogs/input-devices-dialog.c
@@ -27,8 +27,11 @@
#include "core/gimp.h"
#include "widgets/gimpdeviceeditor.h"
+#include "widgets/gimpdevicemanager.h"
#include "widgets/gimpdevices.h"
#include "widgets/gimphelp-ids.h"
+#include "widgets/gimpmessagebox.h"
+#include "widgets/gimpmessagedialog.h"
#include "input-devices-dialog.h"
@@ -105,7 +108,38 @@ input_devices_dialog_response (GtkWidget *dialog,
break;
case GTK_RESPONSE_REJECT:
- gimp_devices_restore (gimp);
+ {
+ GtkWidget *confirm;
+
+ confirm = gimp_message_dialog_new (_("Reset Input Device Configuration"),
+ GIMP_ICON_DIALOG_QUESTION,
+ dialog,
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ gimp_standard_help_func, NULL,
+
+ _("_Cancel"), GTK_RESPONSE_CANCEL,
+ _("_Reset"), GTK_RESPONSE_OK,
+
+ NULL);
+
+ gimp_dialog_set_alternative_button_order (GTK_DIALOG (confirm),
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ -1);
+
+ gimp_message_box_set_primary_text (GIMP_MESSAGE_DIALOG (confirm)->box,
+ _("Do you really want to reset all "
+ "input devices to default configuration?"));
+
+ if (gimp_dialog_run (GIMP_DIALOG (confirm)) == GTK_RESPONSE_OK)
+ {
+ gimp_device_manager_reset (gimp_devices_get_manager (gimp));
+ gimp_devices_save (gimp, TRUE);
+ gimp_devices_restore (gimp);
+ }
+ gtk_widget_destroy (confirm);
+ }
return;
default:
diff --git a/app/widgets/gimpdevicemanager.c b/app/widgets/gimpdevicemanager.c
index bc07ff4ff0..00b2758f28 100644
--- a/app/widgets/gimpdevicemanager.c
+++ b/app/widgets/gimpdevicemanager.c
@@ -32,6 +32,7 @@
#include "core/gimp.h"
#include "core/gimpcontext.h"
+#include "core/gimpcurve.h"
#include "core/gimpmarshal.h"
#include "core/gimptoolinfo.h"
@@ -96,6 +97,10 @@ static void gimp_device_manager_tool_changed (GimpContext *user_conte
static void gimp_device_manager_connect_tool (GimpDeviceManager *manager);
static void gimp_device_manager_disconnect_tool (GimpDeviceManager *manager);
+static void gimp_device_manager_device_defaults (GdkSeat *seat,
+ GdkDevice *device,
+ GimpDeviceManager *manager);
+
G_DEFINE_TYPE_WITH_PRIVATE (GimpDeviceManager, gimp_device_manager,
GIMP_TYPE_LIST)
@@ -330,6 +335,37 @@ gimp_device_manager_set_current_device (GimpDeviceManager *manager,
g_object_notify (G_OBJECT (manager), "current-device");
}
+void
+gimp_device_manager_reset (GimpDeviceManager *manager)
+{
+ GdkDisplayManager *disp_manager;
+ GSList *displays;
+ GSList *list;
+
+ disp_manager = gdk_display_manager_get ();
+ displays = gdk_display_manager_list_displays (disp_manager);
+
+ for (list = displays; list; list = g_slist_next (list))
+ {
+ GdkDisplay *display = list->data;
+ GdkSeat *seat;
+ GList *devices;
+ GList *iter;
+
+ seat = gdk_display_get_default_seat (display);
+ devices = gdk_seat_get_slaves (seat, GDK_SEAT_CAPABILITY_ALL_POINTING);
+
+ for (iter = devices; iter; iter = g_list_next (iter))
+ {
+ GdkDevice *device = iter->data;
+
+ gimp_device_manager_device_defaults (seat, device, manager);
+ }
+ }
+
+ g_slist_free (displays);
+}
+
/* private functions */
@@ -455,58 +491,7 @@ gimp_device_manager_device_added (GdkSeat *seat,
if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
return;
- if (device == gdk_seat_get_pointer (seat))
- {
- gdk_device_set_mode (device, GDK_MODE_SCREEN);
- }
- else if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_MASTER)
- {
- return;
- }
- else /* slave or floating device */
- {
- /* default to enabling all devices */
- GdkInputMode mode = GDK_MODE_SCREEN;
-
- switch (gdk_device_get_source (device))
- {
- case GDK_SOURCE_MOUSE:
- mode = GDK_MODE_DISABLED;
- break;
-
- case GDK_SOURCE_PEN:
- case GDK_SOURCE_ERASER:
- case GDK_SOURCE_CURSOR:
- break;
-
- case GDK_SOURCE_TOUCHSCREEN:
- case GDK_SOURCE_TOUCHPAD:
- case GDK_SOURCE_TRACKPOINT:
- mode = GDK_MODE_DISABLED;
- break;
-
- case GDK_SOURCE_TABLET_PAD:
- break;
-
- default:
- break;
- }
-
- if (gdk_device_set_mode (device, mode))
- {
- g_printerr ("set device '%s' to mode: %s\n",
- gdk_device_get_name (device),
- g_enum_get_value (g_type_class_peek (GDK_TYPE_INPUT_MODE),
- mode)->value_nick);
- }
- else
- {
- g_printerr ("failed to set device '%s' to mode: %s\n",
- gdk_device_get_name (device),
- g_enum_get_value (g_type_class_peek (GDK_TYPE_INPUT_MODE),
- mode)->value_nick);
- }
- }
+ gimp_device_manager_device_defaults (seat, device, manager);
display = gdk_seat_get_display (seat);
@@ -649,3 +634,90 @@ gimp_device_manager_disconnect_tool (GimpDeviceManager *manager)
G_OBJECT (preset->tool_options));
}
}
+
+static void
+gimp_device_manager_device_defaults (GdkSeat *seat,
+ GdkDevice *device,
+ GimpDeviceManager *manager)
+{
+ GimpDeviceInfo *info;
+ gint i;
+
+ if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
+ return;
+
+ /* Set default mode for this device. */
+
+ if (device == gdk_seat_get_pointer (seat))
+ {
+ gdk_device_set_mode (device, GDK_MODE_SCREEN);
+ }
+ else if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_MASTER)
+ {
+ return;
+ }
+ else /* slave or floating device */
+ {
+ /* default to enabling all devices */
+ GdkInputMode mode = GDK_MODE_SCREEN;
+
+ switch (gdk_device_get_source (device))
+ {
+ case GDK_SOURCE_MOUSE:
+ mode = GDK_MODE_DISABLED;
+ break;
+
+ case GDK_SOURCE_PEN:
+ case GDK_SOURCE_ERASER:
+ case GDK_SOURCE_CURSOR:
+ break;
+
+ case GDK_SOURCE_TOUCHSCREEN:
+ case GDK_SOURCE_TOUCHPAD:
+ case GDK_SOURCE_TRACKPOINT:
+ mode = GDK_MODE_DISABLED;
+ break;
+
+ case GDK_SOURCE_TABLET_PAD:
+ break;
+
+ default:
+ break;
+ }
+
+ if (gdk_device_set_mode (device, mode))
+ {
+ g_printerr ("set device '%s' to mode: %s\n",
+ gdk_device_get_name (device),
+ g_enum_get_value (g_type_class_peek (GDK_TYPE_INPUT_MODE),
+ mode)->value_nick);
+ }
+ else
+ {
+ g_printerr ("failed to set device '%s' to mode: %s\n",
+ gdk_device_get_name (device),
+ g_enum_get_value (g_type_class_peek (GDK_TYPE_INPUT_MODE),
+ mode)->value_nick);
+ }
+ }
+
+ /* Reset curve for this device. */
+
+ info =
+ GIMP_DEVICE_INFO (gimp_container_get_child_by_name (GIMP_CONTAINER (manager),
+ gdk_device_get_name (device)));
+ if (info)
+ {
+ for (i = 0; i < gimp_device_info_get_n_axes (info); i++)
+ {
+ GimpCurve *curve;
+ GdkAxisUse use;
+
+ use = gimp_device_info_get_axis_use (info, i);
+ curve = gimp_device_info_get_curve (info, use);
+
+ if (curve)
+ gimp_curve_reset (curve, TRUE);
+ }
+ }
+}
diff --git a/app/widgets/gimpdevicemanager.h b/app/widgets/gimpdevicemanager.h
index 23953ed449..19a28662ed 100644
--- a/app/widgets/gimpdevicemanager.h
+++ b/app/widgets/gimpdevicemanager.h
@@ -60,6 +60,7 @@ GimpDeviceInfo * gimp_device_manager_get_current_device (GimpDeviceManager *m
void gimp_device_manager_set_current_device (GimpDeviceManager *manager,
GimpDeviceInfo *info);
+void gimp_device_manager_reset (GimpDeviceManager *manager);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]