From: unknown Date: Wed, 21 Jul 2010 07:30:17 +0000 (+0200) Subject: Support theme properties, use this to find the gtkrc in GNOME theme X-Git-Url: http://rtime.felk.cvut.cz/gitweb/sojka/lightdm.git/commitdiff_plain/a4ec639ac6de56a149df39e77cf96c2d9576b25c Support theme properties, use this to find the gtkrc in GNOME theme --- diff --git a/configure.ac b/configure.ac index a5c780dc..ba52bba4 100644 --- a/configure.ac +++ b/configure.ac @@ -179,6 +179,7 @@ libldmgreeter/Makefile po/Makefile.in src/Makefile themes/Makefile +themes/gnome/Makefile themes/webkit/Makefile ]) diff --git a/doc/ldmgreeter-sections.txt b/doc/ldmgreeter-sections.txt index b3c1a48e..81146c01 100644 --- a/doc/ldmgreeter-sections.txt +++ b/doc/ldmgreeter-sections.txt @@ -94,8 +94,9 @@ ldm_greeter_new ldm_greeter_connect ldm_greeter_get_hostname ldm_greeter_get_theme -ldm_greeter_get_theme_string_property -ldm_greeter_get_theme_integer_property +ldm_greeter_get_string_property +ldm_greeter_get_integer_property +ldm_greeter_get_boolean_property ldm_greeter_get_num_users ldm_greeter_get_users ldm_greeter_get_languages diff --git a/doc/tmpl/greeter.sgml b/doc/tmpl/greeter.sgml index c62f6d3c..d689657c 100644 --- a/doc/tmpl/greeter.sgml +++ b/doc/tmpl/greeter.sgml @@ -146,6 +146,11 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL); + + + + + @@ -194,6 +199,54 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL); @Returns: + + + + + +@greeter: +@Returns: + + + + + + + +@greeter: +@Returns: + + + + + + + +@greeter: +@name: +@Returns: + + + + + + + +@greeter: +@name: +@Returns: + + + + + + + +@greeter: +@name: +@Returns: + + diff --git a/greeters/ldm-gtk-greeter.c b/greeters/ldm-gtk-greeter.c index 12c0797d..ceff9e8b 100644 --- a/greeters/ldm-gtk-greeter.c +++ b/greeters/ldm-gtk-greeter.c @@ -127,6 +127,7 @@ a11y_contrast_cb (GtkWidget *widget) int main(int argc, char **argv) { + gchar *theme_dir, *rc_file, *rc_path; GdkWindow *root; const GList *items, *item; GSList *session_radio_list = NULL, *language_radio_list = NULL, *layout_radio_list = NULL; @@ -154,9 +155,15 @@ main(int argc, char **argv) ldm_greeter_connect (greeter); - printf("2.%s\n", ldm_greeter_get_theme (greeter)); - - gtk_rc_add_default_file ("foo"); + theme_dir = g_path_get_dirname (ldm_greeter_get_theme (greeter)); + rc_file = ldm_greeter_get_string_property (greeter, "gtkrc"); + if (rc_file) + { + rc_path = g_build_filename (theme_dir, rc_file, NULL); + g_free (rc_file); + gtk_rc_add_default_file (rc_path); + } + g_free (theme_dir); gtk_init (&argc, &argv); diff --git a/greeters/ldm-webkit-greeter.c b/greeters/ldm-webkit-greeter.c index 19b3be7d..cbc2c4a6 100644 --- a/greeters/ldm-webkit-greeter.c +++ b/greeters/ldm-webkit-greeter.c @@ -492,6 +492,84 @@ get_timed_login_delay_cb (JSContextRef context, return JSValueMakeNumber (context, delay); } +static JSValueRef +get_string_property_cb (JSContextRef context, + JSObjectRef function, + JSObjectRef thisObject, + size_t argumentCount, + const JSValueRef arguments[], + JSValueRef *exception) +{ + LdmGreeter *greeter = JSObjectGetPrivate (thisObject); + JSStringRef name_arg; + char name[1024]; + gchar *value; + JSStringRef string; + + // FIXME: Throw exception + if (argumentCount != 1) + return JSValueMakeNull (context); + + name_arg = JSValueToStringCopy (context, arguments[0], NULL); + JSStringGetUTF8CString (name_arg, name, 1024); + JSStringRelease (name_arg); + + value = ldm_greeter_get_string_property (greeter, name); + + if (!value) + return JSValueMakeNull (context); + + string = JSStringCreateWithUTF8CString (value); + g_free (value); + return JSValueMakeString (context, string); +} + +static JSValueRef +get_integer_property_cb (JSContextRef context, + JSObjectRef function, + JSObjectRef thisObject, + size_t argumentCount, + const JSValueRef arguments[], + JSValueRef *exception) +{ + LdmGreeter *greeter = JSObjectGetPrivate (thisObject); + JSStringRef name_arg; + char name[1024]; + + // FIXME: Throw exception + if (argumentCount != 1) + return JSValueMakeNull (context); + + name_arg = JSValueToStringCopy (context, arguments[0], NULL); + JSStringGetUTF8CString (name_arg, name, 1024); + JSStringRelease (name_arg); + + return JSValueMakeNumber (context, ldm_greeter_get_integer_property (greeter, name)); +} + +static JSValueRef +get_boolean_property_cb (JSContextRef context, + JSObjectRef function, + JSObjectRef thisObject, + size_t argumentCount, + const JSValueRef arguments[], + JSValueRef *exception) +{ + LdmGreeter *greeter = JSObjectGetPrivate (thisObject); + JSStringRef name_arg; + char name[1024]; + + // FIXME: Throw exception + if (argumentCount != 1) + return JSValueMakeNull (context); + + name_arg = JSValueToStringCopy (context, arguments[0], NULL); + JSStringGetUTF8CString (name_arg, name, 1024); + JSStringRelease (name_arg); + + return JSValueMakeBoolean (context, ldm_greeter_get_boolean_property (greeter, name)); +} + static JSValueRef cancel_timed_login_cb (JSContextRef context, JSObjectRef function, @@ -826,7 +904,10 @@ static const JSStaticValue ldm_greeter_values[] = static const JSStaticFunction ldm_greeter_functions[] = { - { "cancel_timed_login", cancel_timed_login_cb, kJSPropertyAttributeReadOnly }, + { "get_string_property", get_string_property_cb, kJSPropertyAttributeReadOnly }, + { "get_integer_property", get_integer_property_cb, kJSPropertyAttributeReadOnly }, + { "get_boolean_property", get_boolean_property_cb, kJSPropertyAttributeReadOnly }, + { "cancel_timed_login", cancel_timed_login_cb, kJSPropertyAttributeReadOnly }, { "start_authentication", start_authentication_cb, kJSPropertyAttributeReadOnly }, { "provide_secret", provide_secret_cb, kJSPropertyAttributeReadOnly }, { "cancel_authentication", cancel_authentication_cb, kJSPropertyAttributeReadOnly }, diff --git a/libldmgreeter/greeter.c b/libldmgreeter/greeter.c index cbc13a61..d2a29abc 100644 --- a/libldmgreeter/greeter.c +++ b/libldmgreeter/greeter.c @@ -197,14 +197,14 @@ load_theme (LdmGreeter *greeter) } /** - * ldm_greeter_get_string_theme: + * ldm_greeter_get_string_property: * @greeter: a #LdmGreeter * @name: the name of the property to get * - * Return value: The value of this property or NULL if is not defined + * Return value: The value of this property or NULL if it is not defined **/ gchar * -ldm_greeter_get_theme_string_property (LdmGreeter *greeter, const gchar *name) +ldm_greeter_get_string_property (LdmGreeter *greeter, const gchar *name) { GError *error = NULL; gchar *result; @@ -220,14 +220,14 @@ ldm_greeter_get_theme_string_property (LdmGreeter *greeter, const gchar *name) } /** - * ldm_greeter_get_int_theme: + * ldm_greeter_get_integer_property: * @greeter: a #LdmGreeter * @name: the name of the property to get * - * Return value: The value of this property or NULL if is not defined + * Return value: The value of this property or 0 if it is not defined **/ gint -ldm_greeter_get_theme_integer_property (LdmGreeter *greeter, const gchar *name) +ldm_greeter_get_integer_property (LdmGreeter *greeter, const gchar *name) { GError *error = NULL; gint result; @@ -242,6 +242,29 @@ ldm_greeter_get_theme_integer_property (LdmGreeter *greeter, const gchar *name) return result; } +/** + * ldm_greeter_get_boolean_property: + * @greeter: a #LdmGreeter + * @name: the name of the property to get + * + * Return value: The value of this property or FALSE if it is not defined + **/ +gboolean +ldm_greeter_get_boolean_property (LdmGreeter *greeter, const gchar *name) +{ + GError *error = NULL; + gboolean result; + + load_theme (greeter); + + result = g_key_file_get_boolean (greeter->priv->theme_file, "theme", name, &error); + if (!result) + g_warning ("Error reading theme property: %s", error->message); // FIXME: Can handle G_KEY_FILE_ERROR_KEY_NOT_FOUND and G_KEY_FILE_ERROR_GROUP_NOT_FOUND + g_clear_error (&error); + + return result; +} + #define TYPE_USER dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID) #define TYPE_USER_LIST dbus_g_type_get_collection ("GPtrArray", TYPE_USER) diff --git a/libldmgreeter/greeter.h b/libldmgreeter/greeter.h index c3ba3c13..bd6665e0 100644 --- a/libldmgreeter/greeter.h +++ b/libldmgreeter/greeter.h @@ -60,9 +60,11 @@ const gchar *ldm_greeter_get_hostname (LdmGreeter *greeter); const gchar *ldm_greeter_get_theme (LdmGreeter *greeter); -gchar *ldm_greeter_get_theme_string_property (LdmGreeter *greeter, const gchar *name); +gchar *ldm_greeter_get_string_property (LdmGreeter *greeter, const gchar *name); -gint ldm_greeter_get_theme_integer_property (LdmGreeter *greeter, const gchar *name); +gint ldm_greeter_get_integer_property (LdmGreeter *greeter, const gchar *name); + +gboolean ldm_greeter_get_boolean_property (LdmGreeter *greeter, const gchar *name); gint ldm_greeter_get_num_users (LdmGreeter *greeter); diff --git a/src/Makefile.am b/src/Makefile.am index e0a3b130..a2da809f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -69,7 +69,8 @@ lightdm_LDADD = \ $(LIGHTDM_LIBS) \ -lpam -EXTRA_DIST = display-manager.xml \ +EXTRA_DIST = ldm-marshal.list \ + display-manager.xml \ display.xml \ user-manager.xml diff --git a/src/display.c b/src/display.c index 7a29772c..736cc0f7 100644 --- a/src/display.c +++ b/src/display.c @@ -357,7 +357,6 @@ display_connect (Display *display, const gchar **theme, const gchar **session, c filename = g_strdup_printf ("%s.theme", display->priv->greeter_theme); *theme = g_build_filename (THEME_DIR, filename, NULL); - printf("1.%s\n", *theme); g_free (filename); *session = g_strdup (display->priv->session_name); *username = g_strdup (display->priv->default_user); diff --git a/src/ldm-marshal.list b/src/ldm-marshal.list new file mode 100644 index 00000000..360a4c2c --- /dev/null +++ b/src/ldm-marshal.list @@ -0,0 +1,2 @@ +BOOLEAN:OBJECT +VOID:INT,POINTER diff --git a/themes/Makefile.am b/themes/Makefile.am index 86ee7aa4..a12c5b9b 100644 --- a/themes/Makefile.am +++ b/themes/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = webkit +SUBDIRS = gnome webkit themedir = $(THEME_DIR) theme_DATA = gnome.theme webkit.theme diff --git a/themes/gnome/Makefile.am b/themes/gnome/Makefile.am new file mode 100644 index 00000000..bac1b44a --- /dev/null +++ b/themes/gnome/Makefile.am @@ -0,0 +1,7 @@ +themedir = $(THEME_DIR)/gnome +theme_DATA = gtkrc + +EXTRA_DIST = $(theme_DATA) + +DISTCLEANFILES = \ + Makefile.in diff --git a/themes/gnome/gtkrc b/themes/gnome/gtkrc new file mode 100644 index 00000000..817e1f75 --- /dev/null +++ b/themes/gnome/gtkrc @@ -0,0 +1,9 @@ +gtk_theme_name = "HumanLogin" +gtk_icon_theme_name = "LoginIcons" +gtk_cursor_theme_name = "DMZ-White" +gtk_font_name = "UbuntuBeta 10" +# Not working, but set to 96*1024 (=96dpi) +gtk_xft_dpi = 98304 +gtk_xft_hinting = 1 +gtk_xft_hintstyle = "hintslight" +gtk_xft_rgba = "rgb"