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.
This commit is contained in:
Jehan
2020-06-13 20:33:33 +02:00
parent cef7ecca27
commit 4def457c63
3 changed files with 160 additions and 53 deletions

View File

@ -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:

View File

@ -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);
}
}
}

View File

@ -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