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:
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user