#include "config_value.h"
#include "action_list.h"
#include "geom.h"
+#include "keyboard.h"
+#include "mouse.h"
+#include "translate.h"
#include "stdlib.h"
/**************************** pointer functions ****************************/
-void config_value_copy_ptr(ObConfigValue *v,
- ObConfigValueDataType type,
- ObConfigValueDataPtr p,
- const ObConfigValueEnum e[])
+gboolean config_value_copy_ptr(ObConfigValue *v,
+ ObConfigValueDataType type,
+ ObConfigValueDataPtr p,
+ const ObConfigValueEnum e[])
{
+ gboolean ok = TRUE;
+
switch (type) {
case OB_CONFIG_VALUE_STRING:
*p.string = config_value_string(v);
*p.integer = config_value_int(v);
break;
case OB_CONFIG_VALUE_ENUM:
- *p.enumeration = config_value_enum(v, e);
+ ok = config_value_enum(v, e, p.enumeration);
break;
case OB_CONFIG_VALUE_FRACTION: {
gint n, d;
break;
}
case OB_CONFIG_VALUE_GRAVITY_COORD: {
- GravityCoord c;
- config_value_gravity_coord(v, &c);
- *p.coord = c;
+ config_value_gravity_coord(v, p.coord);
break;
}
+ case OB_CONFIG_VALUE_KEY:
+ ok = config_value_key(v, p.key);
+ break;
+ case OB_CONFIG_VALUE_BUTTON:
+ ok = config_value_button(v, p.button);
+ break;
case OB_CONFIG_VALUE_STRING_LIST: {
*p.list = config_value_string_list(v);
break;
*p.actions = config_value_action_list(v);
break;
case NUM_OB_CONFIG_VALUE_TYPES:
- default:
g_assert_not_reached();
}
+ return ok;
}
s = v->v.string;
return strtol(s, &s, 10);
}
-guint config_value_enum(ObConfigValue *v, const ObConfigValueEnum choices[])
+gboolean config_value_enum(ObConfigValue *v, const ObConfigValueEnum choices[],
+ guint *out)
{
const ObConfigValueEnum *e;
- g_return_val_if_fail(v != NULL, (guint)-1);
- g_return_val_if_fail(config_value_is_string(v), (guint)-1);
- g_return_val_if_fail(choices != NULL, (guint)-1);
+ g_return_val_if_fail(v != NULL, FALSE);
+ g_return_val_if_fail(config_value_is_string(v), FALSE);
+ g_return_val_if_fail(choices != NULL, FALSE);
for (e = choices; e->name; ++e)
- if (g_strcasecmp(v->v.string, e->name) == 0)
- return e->value;
- return (guint)-1;
+ if (g_strcasecmp(v->v.string, e->name) == 0) {
+ *out = e->value;
+ return TRUE;
+ }
+ return FALSE;
}
void config_value_fraction(ObConfigValue *v, gint *numer, gint *denom)
{
c->denom = atoi(s+1);
}
}
+gboolean config_value_key(ObConfigValue *v, struct _ObKeyboardKey *k)
+{
+ k->modifiers = 0;
+ k->keycode = 0;
+
+ g_return_val_if_fail(v != NULL, FALSE);
+ g_return_val_if_fail(config_value_is_string(v), FALSE);
+ return translate_key(v->v.string, &k->modifiers, &k->keycode);
+}
+gboolean config_value_button(ObConfigValue *v, struct _ObMouseButton *b)
+{
+ b->modifiers = 0;
+ b->button = 0;
+
+ g_return_val_if_fail(v != NULL, FALSE);
+ g_return_val_if_fail(config_value_is_string(v), FALSE);
+ return translate_button(v->v.string, &b->modifiers, &b->button);
+}
const gchar *const* config_value_string_list(ObConfigValue *v)
{
g_return_val_if_fail(v != NULL, NULL);
See the COPYING file for a copy of the GNU General Public License.
*/
-#include "geom.h"
-
#include <glib.h>
struct _GravityCoord;
OB_CONFIG_VALUE_INTEGER,
OB_CONFIG_VALUE_FRACTION,
OB_CONFIG_VALUE_GRAVITY_COORD,
+ OB_CONFIG_VALUE_KEY,
+ OB_CONFIG_VALUE_BUTTON,
OB_CONFIG_VALUE_STRING_LIST,
+ OB_CONFIG_VALUE_LIST,
OB_CONFIG_VALUE_ACTIONLIST,
NUM_OB_CONFIG_VALUE_TYPES
} ObConfigValueDataType;
guint denom;
} *fraction;
struct _GravityCoord *coord;
+ struct _ObKeyboardKey *key;
+ struct _ObMouseButton *button;
const gchar *const**list;
struct _ObActionList **actions;
} ObConfigValueDataPtr;
/*! Copies the data inside @v to the destination that the pointer @p is
pointing to. */
-void config_value_copy_ptr(ObConfigValue *v,
- ObConfigValueDataType type,
- ObConfigValueDataPtr p,
- const ObConfigValueEnum e[]);
+gboolean config_value_copy_ptr(ObConfigValue *v,
+ ObConfigValueDataType type,
+ ObConfigValueDataPtr p,
+ const ObConfigValueEnum e[]);
/* These ones are valid on a string value */
const gchar* config_value_string(ObConfigValue *v);
gboolean config_value_bool(ObConfigValue *v);
guint config_value_int(ObConfigValue *v);
-/*! returns (guint)-1 if an error */
-guint config_value_enum(ObConfigValue *v, const ObConfigValueEnum e[]);
+/*! returns FALSE if the value isn't in the enumeration */
+gboolean config_value_enum(ObConfigValue *v, const ObConfigValueEnum e[],
+ guint *out);
void config_value_fraction(ObConfigValue *v, gint *numer, gint *denom);
void config_value_gravity_coord(ObConfigValue *v, struct _GravityCoord *c);
+/*! returns FALSE if the key string isn't valid */
+gboolean config_value_key(ObConfigValue *v, struct _ObKeyboardKey *k);
+/*! returns FALSE if the button string isn't valid */
+gboolean config_value_button(ObConfigValue *v, struct _ObMouseButton *b);
/* These ones are valid on a string list value */