summaryrefslogtreecommitdiff
path: root/panels/keyboard/cc-keyboard-item.c
diff options
context:
space:
mode:
Diffstat (limited to 'panels/keyboard/cc-keyboard-item.c')
-rw-r--r--panels/keyboard/cc-keyboard-item.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/panels/keyboard/cc-keyboard-item.c b/panels/keyboard/cc-keyboard-item.c
index 887bdc6fd..1b8f6ce2c 100644
--- a/panels/keyboard/cc-keyboard-item.c
+++ b/panels/keyboard/cc-keyboard-item.c
@@ -50,6 +50,7 @@ enum {
PROP_BINDING,
PROP_EDITABLE,
PROP_TYPE,
+ PROP_IS_VALUE_DEFAULT,
PROP_COMMAND
};
@@ -155,6 +156,8 @@ _set_binding (CcKeyboardItem *item,
return;
settings_set_binding (item->settings, item->key, item->priv->binding);
+
+ g_object_notify (G_OBJECT (item), "is-value-default");
}
static void
@@ -232,6 +235,9 @@ cc_keyboard_item_get_property (GObject *object,
case PROP_COMMAND:
g_value_set_string (value, self->command);
break;
+ case PROP_IS_VALUE_DEFAULT:
+ g_value_set_boolean (value, cc_keyboard_item_is_value_default (self));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -304,6 +310,14 @@ cc_keyboard_item_class_init (CcKeyboardItemClass *klass)
NULL,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_IS_VALUE_DEFAULT,
+ g_param_spec_boolean ("is-value-default",
+ "is value default",
+ "is value default",
+ TRUE,
+ G_PARAM_READABLE));
+
g_type_class_add_private (klass, sizeof (CcKeyboardItemPrivate));
}
@@ -508,6 +522,54 @@ cc_keyboard_item_is_hidden (CcKeyboardItem *item)
{
return item->priv->hidden;
}
+
+/**
+ * cc_keyboard_item_is_value_default:
+ * @self: a #CcKeyboardItem
+ *
+ * Retrieves whether the shortcut is the default value or not.
+ *
+ * Returns: %TRUE if the shortcut is the default value, %FALSE otherwise.
+ */
+gboolean
+cc_keyboard_item_is_value_default (CcKeyboardItem *self)
+{
+ GVariant *user_value;
+ gboolean is_value_default;
+
+ g_return_val_if_fail (CC_IS_KEYBOARD_ITEM (self), FALSE);
+
+ /*
+ * When the shortcut is custom, we don't treat it as modified
+ * since we don't know what would be its default value.
+ */
+ if (self->type == CC_KEYBOARD_ITEM_TYPE_GSETTINGS_PATH)
+ return TRUE;
+
+ user_value = g_settings_get_user_value (self->settings, self->key);
+ is_value_default = user_value == NULL;
+
+ g_clear_pointer (&user_value, g_variant_unref);
+
+ return is_value_default;
+}
+
+/**
+ * cc_keyboard_item_reset:
+ * @self: a #CcKeyboardItem
+ *
+ * Reset the keyboard binding to the default value.
+ */
+void
+cc_keyboard_item_reset (CcKeyboardItem *self)
+{
+ g_return_if_fail (CC_IS_KEYBOARD_ITEM (self));
+
+ g_settings_reset (self->settings, self->key);
+
+ g_object_notify (G_OBJECT (self), "is-value-default");
+}
+
/*
* vim: sw=2 ts=8 cindent noai bs=2
*/