context: Add 'nick' property
A nick property is a bit similar to the nick of a GObject property, in that it's a shorter version of the name. It's intended to be used to store state on the file system, where the state depends on the desktop environment being used. E.g. gnome-shell sets the name "GNOME Shell", which is, if no nick is explicitly set, transformed into the nick "gnome-shell", which will be used for file paths. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3825>
This commit is contained in:
parent
af250506fb
commit
c3cfd5266a
2 changed files with 84 additions and 0 deletions
|
@ -60,6 +60,8 @@ struct _MetaContextClass
|
||||||
|
|
||||||
const char * meta_context_get_name (MetaContext *context);
|
const char * meta_context_get_name (MetaContext *context);
|
||||||
|
|
||||||
|
const char * meta_context_get_nick (MetaContext *context);
|
||||||
|
|
||||||
const char * meta_context_get_gnome_wm_keybindings (MetaContext *context);
|
const char * meta_context_get_gnome_wm_keybindings (MetaContext *context);
|
||||||
|
|
||||||
void meta_context_set_unsafe_mode (MetaContext *context,
|
void meta_context_set_unsafe_mode (MetaContext *context,
|
||||||
|
|
|
@ -44,6 +44,7 @@ enum
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
|
||||||
PROP_NAME,
|
PROP_NAME,
|
||||||
|
PROP_NICK,
|
||||||
PROP_UNSAFE_MODE,
|
PROP_UNSAFE_MODE,
|
||||||
|
|
||||||
N_PROPS
|
N_PROPS
|
||||||
|
@ -74,6 +75,7 @@ typedef enum _MetaContextState
|
||||||
typedef struct _MetaContextPrivate
|
typedef struct _MetaContextPrivate
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
char *nick;
|
||||||
char *plugin_name;
|
char *plugin_name;
|
||||||
GType plugin_gtype;
|
GType plugin_gtype;
|
||||||
char *gnome_wm_keybindings;
|
char *gnome_wm_keybindings;
|
||||||
|
@ -229,6 +231,14 @@ meta_context_get_name (MetaContext *context)
|
||||||
return priv->name;
|
return priv->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
meta_context_get_nick (MetaContext *context)
|
||||||
|
{
|
||||||
|
MetaContextPrivate *priv = meta_context_get_instance_private (context);
|
||||||
|
|
||||||
|
return priv->nick;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* meta_context_get_backend:
|
* meta_context_get_backend:
|
||||||
* @context: The #MetaContext
|
* @context: The #MetaContext
|
||||||
|
@ -731,6 +741,9 @@ meta_context_get_property (GObject *object,
|
||||||
case PROP_NAME:
|
case PROP_NAME:
|
||||||
g_value_set_string (value, priv->name);
|
g_value_set_string (value, priv->name);
|
||||||
break;
|
break;
|
||||||
|
case PROP_NICK:
|
||||||
|
g_value_set_string (value, priv->nick);
|
||||||
|
break;
|
||||||
case PROP_UNSAFE_MODE:
|
case PROP_UNSAFE_MODE:
|
||||||
g_value_set_boolean (value, priv->unsafe_mode);
|
g_value_set_boolean (value, priv->unsafe_mode);
|
||||||
break;
|
break;
|
||||||
|
@ -754,6 +767,9 @@ meta_context_set_property (GObject *object,
|
||||||
case PROP_NAME:
|
case PROP_NAME:
|
||||||
priv->name = g_value_dup_string (value);
|
priv->name = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_NICK:
|
||||||
|
priv->nick = g_value_dup_string (value);
|
||||||
|
break;
|
||||||
case PROP_UNSAFE_MODE:
|
case PROP_UNSAFE_MODE:
|
||||||
meta_context_set_unsafe_mode (META_CONTEXT (object),
|
meta_context_set_unsafe_mode (META_CONTEXT (object),
|
||||||
g_value_get_boolean (value));
|
g_value_get_boolean (value));
|
||||||
|
@ -764,6 +780,64 @@ meta_context_set_property (GObject *object,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
derive_nick (MetaContext *context)
|
||||||
|
{
|
||||||
|
MetaContextPrivate *priv = meta_context_get_instance_private (context);
|
||||||
|
const char *source = NULL;
|
||||||
|
g_autofree char *nick = NULL;
|
||||||
|
int name_i, nick_i;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
if (priv->name)
|
||||||
|
source = priv->name;
|
||||||
|
|
||||||
|
if (priv->nick)
|
||||||
|
source = priv->nick;
|
||||||
|
|
||||||
|
if (!source)
|
||||||
|
return g_strdup (PACKAGE_NAME);
|
||||||
|
|
||||||
|
len = strlen (source);
|
||||||
|
nick = g_malloc0 (len + 1);
|
||||||
|
for (name_i = 0, nick_i = 0; name_i < len; name_i++)
|
||||||
|
{
|
||||||
|
char name_char = source[name_i];
|
||||||
|
|
||||||
|
if (g_ascii_isalpha (name_char))
|
||||||
|
nick[nick_i++] = g_ascii_tolower (name_char);
|
||||||
|
else if (g_ascii_isspace (name_char))
|
||||||
|
nick[nick_i++] = '-';
|
||||||
|
else if (g_ascii_isdigit (name_char) ||
|
||||||
|
name_char == '-' ||
|
||||||
|
name_char == '_')
|
||||||
|
nick[nick_i++] = name_char;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nick_i == 0)
|
||||||
|
return g_strdup (PACKAGE_NAME);
|
||||||
|
|
||||||
|
return g_steal_pointer (&nick);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_context_constructed (GObject *object)
|
||||||
|
{
|
||||||
|
MetaContext *context = META_CONTEXT (object);
|
||||||
|
MetaContextPrivate *priv = meta_context_get_instance_private (context);
|
||||||
|
char *nick;
|
||||||
|
|
||||||
|
nick = derive_nick (context);
|
||||||
|
|
||||||
|
if (priv->nick && nick && g_strcmp0 (priv->nick, nick) != 0)
|
||||||
|
g_warning ("Invalid nick '%s'! Using '%s' instead.", priv->nick, nick);
|
||||||
|
|
||||||
|
g_clear_pointer (&priv->nick, g_free);
|
||||||
|
priv->nick = nick;
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (meta_context_parent_class)->constructed (object);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_context_dispose (GObject *object)
|
meta_context_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
|
@ -811,6 +885,7 @@ meta_context_finalize (GObject *object)
|
||||||
g_clear_pointer (&priv->gnome_wm_keybindings, g_free);
|
g_clear_pointer (&priv->gnome_wm_keybindings, g_free);
|
||||||
g_clear_pointer (&priv->plugin_name, g_free);
|
g_clear_pointer (&priv->plugin_name, g_free);
|
||||||
g_clear_pointer (&priv->name, g_free);
|
g_clear_pointer (&priv->name, g_free);
|
||||||
|
g_clear_pointer (&priv->nick, g_free);
|
||||||
|
|
||||||
G_OBJECT_CLASS (meta_context_parent_class)->finalize (object);
|
G_OBJECT_CLASS (meta_context_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
@ -822,6 +897,7 @@ meta_context_class_init (MetaContextClass *klass)
|
||||||
|
|
||||||
object_class->get_property = meta_context_get_property;
|
object_class->get_property = meta_context_get_property;
|
||||||
object_class->set_property = meta_context_set_property;
|
object_class->set_property = meta_context_set_property;
|
||||||
|
object_class->constructed = meta_context_constructed;
|
||||||
object_class->dispose = meta_context_dispose;
|
object_class->dispose = meta_context_dispose;
|
||||||
object_class->finalize = meta_context_finalize;
|
object_class->finalize = meta_context_finalize;
|
||||||
|
|
||||||
|
@ -834,6 +910,12 @@ meta_context_class_init (MetaContextClass *klass)
|
||||||
G_PARAM_READWRITE |
|
G_PARAM_READWRITE |
|
||||||
G_PARAM_CONSTRUCT_ONLY |
|
G_PARAM_CONSTRUCT_ONLY |
|
||||||
G_PARAM_STATIC_STRINGS);
|
G_PARAM_STATIC_STRINGS);
|
||||||
|
obj_props[PROP_NICK] =
|
||||||
|
g_param_spec_string ("nick", NULL, NULL,
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READWRITE |
|
||||||
|
G_PARAM_CONSTRUCT_ONLY |
|
||||||
|
G_PARAM_STATIC_STRINGS);
|
||||||
obj_props[PROP_UNSAFE_MODE] =
|
obj_props[PROP_UNSAFE_MODE] =
|
||||||
g_param_spec_boolean ("unsafe-mode", NULL, NULL,
|
g_param_spec_boolean ("unsafe-mode", NULL, NULL,
|
||||||
FALSE,
|
FALSE,
|
||||||
|
|
Loading…
Reference in a new issue