diff --git a/man/lightdm-webkit2-greeter.1 b/man/lightdm-webkit2-greeter.1 index 5d5dff9..73a3658 100644 --- a/man/lightdm-webkit2-greeter.1 +++ b/man/lightdm-webkit2-greeter.1 @@ -258,6 +258,15 @@ config\&.get_bool(section, key)\fR Returns the boolean value associated with key under the "section" in the configuration file\&. .RE .PP +The greeterutil object has some utility functions associated with it which +are intended to make a theme author's work easier\&. +.PP +greeterutil\&.dirlist(path)\fR +.RS 4 +Returns an array of strings of filenames present at "path", or Null if the +path does not exist\&. +.RE +.PP Please see the LightDM API documentation for the complete list of calls available\&. The lightdm-webkit2-greeter implements all of the LightDM API\&. .PP diff --git a/src/lightdm-webkit2-greeter-ext.c b/src/lightdm-webkit2-greeter-ext.c index a666c45..97c292f 100644 --- a/src/lightdm-webkit2-greeter-ext.c +++ b/src/lightdm-webkit2-greeter-ext.c @@ -69,7 +69,8 @@ static JSClassRef lightdm_language_class, lightdm_layout_class, lightdm_session_class, - config_file_class; + config_file_class, + greeter_util_class; /* @@ -1136,6 +1137,61 @@ get_conf_bool_cb(JSContextRef context, return JSValueMakeBoolean(context, value); } +static JSValueRef +get_dirlist_cb(JSContextRef context, + JSObjectRef function, + JSObjectRef thisObject, + size_t argumentCount, + const JSValueRef arguments[], + JSValueRef *exception) { + JSObjectRef array; + guint n_entries = 0; + JSValueRef *args = NULL; + GDir *dir; + gchar *path, *fullpath; + const gchar *dirent; + GError *err = NULL; + + if (argumentCount != 1) { + return mkexception(context, exception, ARGNOTSUPPLIED); + } + + path = arg_to_string(context, arguments[0], exception); + if (!path) { + return JSValueMakeNull(context); + } + + dir = g_dir_open (path, 0, &err); + + if (err) { + _mkexception(context, exception, err->message); + g_error_free(err); + return JSValueMakeNull(context); + } + + /* + * Create the lis of the directory entries + */ + + while ((dirent = g_dir_read_name (dir)) != NULL) { + n_entries++; + args = g_realloc (args, sizeof (JSValueRef) * (n_entries + 1)); + fullpath = g_build_filename (path, dirent, NULL); /* Give theme developer full pathname */ + args[(n_entries - 1)] = string_or_null (context, fullpath); + g_free (fullpath); + } + + g_dir_close (dir); + + array = JSObjectMakeArray (context, n_entries, args, exception); + g_free (args); + if (array == NULL) { + return JSValueMakeNull (context); + } else { + return array; + } +} + static const JSStaticValue lightdm_user_values[] = { {"name", get_user_name_cb, NULL, kJSPropertyAttributeReadOnly}, @@ -1230,6 +1286,11 @@ static const JSStaticFunction config_file_functions[] = { {NULL, NULL, 0}}; +static const JSStaticFunction greeter_util_functions[] = { + {"dirlist", get_dirlist_cb, kJSPropertyAttributeReadOnly}, + {NULL, NULL, 0}}; + + static const JSClassDefinition lightdm_user_definition = { 0, /* Version */ kJSClassAttributeNone, /* Attributes */ @@ -1289,6 +1350,15 @@ static const JSClassDefinition config_file_definition = { config_file_functions, /* Static functions */ }; +static const JSClassDefinition greeter_util_definition = { + 0, /* Version */ + kJSClassAttributeNone, /* Attributes */ + "GreeterUtil", /* Class name */ + NULL, /* Parent class */ + NULL, /* Static values */ + greeter_util_functions, /* Static functions */ +}; + static void window_object_cleared_callback(WebKitScriptWorld *world, @@ -1296,7 +1366,7 @@ window_object_cleared_callback(WebKitScriptWorld *world, WebKitFrame *frame, LightDMGreeter *greeter) { - JSObjectRef gettext_object, lightdm_greeter_object, config_file_object; + JSObjectRef gettext_object, lightdm_greeter_object, config_file_object, greeter_util_object; JSGlobalContextRef jsContext; JSObjectRef globalObject; WebKitDOMDocument *dom_document; @@ -1315,6 +1385,7 @@ window_object_cleared_callback(WebKitScriptWorld *world, lightdm_layout_class = JSClassCreate(&lightdm_layout_definition); lightdm_session_class = JSClassCreate(&lightdm_session_definition); config_file_class = JSClassCreate(&config_file_definition); + greeter_util_class = JSClassCreate(&greeter_util_definition); gettext_object = JSObjectMake(jsContext, gettext_class, NULL); @@ -1343,6 +1414,17 @@ window_object_cleared_callback(WebKitScriptWorld *world, kJSPropertyAttributeNone, NULL); + greeter_util_object = JSObjectMake(context, greeter_util_class, NULL); + + JSObjectSetProperty(context, + globalObject, + JSStringCreateWithUTF8CString("greeterutil"), + greeter_util_object, + kJSPropertyAttributeNone, + NULL); + + + /* If the greeter was started as a lock-screen, send message to our UI process. */ if (lightdm_greeter_get_lock_hint(greeter)) { dom_document = webkit_web_page_get_dom_document(web_page);