Browse Source

Allow the theme to query the config file

sisyphus
Scott Balneaves 9 years ago
parent
commit
20f11900a2
  1. 162
      src/lightdm-webkit2-greeter-ext.c

162
src/lightdm-webkit2-greeter-ext.c

@ -61,8 +61,9 @@ static JSClassRef
lightdm_language_class, lightdm_language_class,
lightdm_layout_class, lightdm_layout_class,
lightdm_session_class, lightdm_session_class,
branding_class; conffile_class;
GKeyFile *keyfile;
/* /*
* Returns either a string or null. * Returns either a string or null.
@ -1016,6 +1017,127 @@ ngettext_cb(JSContextRef context,
return result; return result;
} }
static JSValueRef
get_conf_str_cb(JSContextRef context,
JSObjectRef function,
JSObjectRef thisObject,
size_t argumentCount,
const JSValueRef arguments[],
JSValueRef *exception) {
gchar *section, *key, *value;
GError *err = NULL;
JSValueRef result;
if (argumentCount != 2) {
return mkexception(context, exception, "Needs 2 arguments");
}
section = arg_to_string(context, arguments[0], exception);
if (!section) {
return JSValueMakeNull(context);
}
key = arg_to_string(context, arguments[1], exception);
if (!section) {
return JSValueMakeNull(context);
}
value = g_key_file_get_string(keyfile, section, key, &err);
if (err) {
_mkexception(context, exception, err->message);
g_error_free(err);
return JSValueMakeNull(context);
}
result = string_or_null(context, value);
g_free(value);
return result;
}
static JSValueRef
get_conf_num_cb(JSContextRef context,
JSObjectRef function,
JSObjectRef thisObject,
size_t argumentCount,
const JSValueRef arguments[],
JSValueRef *exception) {
gchar *section, *key;
gint value;
GError *err = NULL;
if (argumentCount != 2) {
return mkexception(context, exception, "Needs 2 arguments");
}
section = arg_to_string(context, arguments[0], exception);
if (!section) {
return JSValueMakeNull(context);
}
key = arg_to_string(context, arguments[1], exception);
if (!section) {
return JSValueMakeNull(context);
}
value = g_key_file_get_integer(keyfile, section, key, &err);
if (err) {
_mkexception(context, exception, err->message);
g_error_free(err);
return JSValueMakeNull(context);
}
return JSValueMakeNumber(context, value);
}
static JSValueRef
get_conf_bool_cb(JSContextRef context,
JSObjectRef function,
JSObjectRef thisObject,
size_t argumentCount,
const JSValueRef arguments[],
JSValueRef *exception) {
gchar *section, *key;
gboolean value;
GError *err = NULL;
if (argumentCount != 2) {
return mkexception(context, exception, "Needs 2 arguments");
}
section = arg_to_string(context, arguments[0], exception);
if (!section) {
return JSValueMakeNull(context);
}
key = arg_to_string(context, arguments[1], exception);
if (!section) {
return JSValueMakeNull(context);
}
value = g_key_file_get_boolean(keyfile, section, key, &err);
if (err) {
_mkexception(context, exception, err->message);
g_error_free(err);
return JSValueMakeNull(context);
}
return JSValueMakeBoolean(context, value);
}
static JSValueRef static JSValueRef
get_iconsdir_cb(JSContextRef context, get_iconsdir_cb(JSContextRef context,
JSObjectRef thisObject, JSObjectRef thisObject,
@ -1113,9 +1235,11 @@ static const JSStaticFunction gettext_functions[] = {
{NULL, NULL, 0}}; {NULL, NULL, 0}};
static const JSStaticValue branding_values[] = { static const JSStaticFunction conffile_functions[] = {
{"iconsdir", get_iconsdir_cb, NULL, kJSPropertyAttributeReadOnly}, {"get_str", get_conf_str_cb, kJSPropertyAttributeReadOnly},
{NULL, NULL, NULL, 0}}; {"get_num", get_conf_num_cb, kJSPropertyAttributeReadOnly},
{"get_bool", get_conf_bool_cb, kJSPropertyAttributeReadOnly},
{NULL, NULL, 0}};
static const JSClassDefinition lightdm_user_definition = { static const JSClassDefinition lightdm_user_definition = {
@ -1168,12 +1292,13 @@ static const JSClassDefinition gettext_definition = {
gettext_functions, /* Static functions */ gettext_functions, /* Static functions */
}; };
static const JSClassDefinition branding_definition = { static const JSClassDefinition conffile_definition = {
0, /* Version */ 0, /* Version */
kJSClassAttributeNone, /* Attributes */ kJSClassAttributeNone, /* Attributes */
"Branding", /* Class name */ "Branding", /* Class name */
NULL, /* Parent class */ NULL, /* Parent class */
branding_values, /* Static values */ NULL, /* Static values */
conffile_functions, /* Static functions */
}; };
/*static void /*static void
@ -1192,7 +1317,7 @@ window_object_cleared_callback(WebKitScriptWorld *world,
WebKitFrame *frame, WebKitFrame *frame,
LightDMGreeter *greeter) { LightDMGreeter *greeter) {
JSObjectRef gettext_object, lightdm_greeter_object, branding_object; JSObjectRef gettext_object, lightdm_greeter_object, conffile_object;
JSGlobalContextRef jsContext; JSGlobalContextRef jsContext;
JSObjectRef globalObject; JSObjectRef globalObject;
WebKitDOMDocument *dom_document; WebKitDOMDocument *dom_document;
@ -1210,7 +1335,7 @@ window_object_cleared_callback(WebKitScriptWorld *world,
lightdm_language_class = JSClassCreate(&lightdm_language_definition); lightdm_language_class = JSClassCreate(&lightdm_language_definition);
lightdm_layout_class = JSClassCreate(&lightdm_layout_definition); lightdm_layout_class = JSClassCreate(&lightdm_layout_definition);
lightdm_session_class = JSClassCreate(&lightdm_session_definition); lightdm_session_class = JSClassCreate(&lightdm_session_definition);
branding_class = JSClassCreate(&branding_definition); conffile_class = JSClassCreate(&conffile_definition);
gettext_object = JSObjectMake(jsContext, gettext_class, NULL); gettext_object = JSObjectMake(jsContext, gettext_class, NULL);
@ -1230,12 +1355,12 @@ window_object_cleared_callback(WebKitScriptWorld *world,
kJSPropertyAttributeNone, kJSPropertyAttributeNone,
NULL); NULL);
branding_object = JSObjectMake(jsContext, branding_class, greeter); conffile_object = JSObjectMake(jsContext, conffile_class, greeter);
JSObjectSetProperty(jsContext, JSObjectSetProperty(jsContext,
globalObject, globalObject,
JSStringCreateWithUTF8CString("branding"), JSStringCreateWithUTF8CString("config"),
branding_object, conffile_object,
kJSPropertyAttributeNone, kJSPropertyAttributeNone,
NULL); NULL);
@ -1398,4 +1523,11 @@ webkit_web_extension_initialize(WebKitWebExtension *extension) {
g_signal_connect(G_OBJECT(greeter), "show-message", G_CALLBACK(show_message_cb), extension); g_signal_connect(G_OBJECT(greeter), "show-message", G_CALLBACK(show_message_cb), extension);
lightdm_greeter_connect_sync(greeter, NULL); lightdm_greeter_connect_sync(greeter, NULL);
/* load greeter settings from config file */
keyfile = g_key_file_new();
g_key_file_load_from_file(keyfile,
CONFIG_DIR "/lightdm-webkit2-greeter.conf",
G_KEY_FILE_NONE, NULL);
} }

Loading…
Cancel
Save