@ -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 ) ;