From 88d7c3740bd07d0f76b029df9780babf6c14f11d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 20 Jul 2010 17:42:18 +0200 Subject: [PATCH] import gtk greeter --- doc/ldmgreeter-sections.txt | 1 + greeters/ldm-gtk-greeter.c | 71 +++++++++--- greeters/ldm-webkit-greeter.c | 15 +++ libldmgreeter/greeter.c | 205 ++++++++++++++++++++-------------- libldmgreeter/greeter.h | 2 + 5 files changed, 195 insertions(+), 99 deletions(-) diff --git a/doc/ldmgreeter-sections.txt b/doc/ldmgreeter-sections.txt index 480b85c6..c0a02c03 100644 --- a/doc/ldmgreeter-sections.txt +++ b/doc/ldmgreeter-sections.txt @@ -92,6 +92,7 @@ ldm_session_new LdmGreeter ldm_greeter_new ldm_greeter_connect +ldm_greeter_get_hostname ldm_greeter_get_num_users ldm_greeter_get_users ldm_greeter_get_languages diff --git a/greeters/ldm-gtk-greeter.c b/greeters/ldm-gtk-greeter.c index 5b81d87d..6d1aa3d7 100644 --- a/greeters/ldm-gtk-greeter.c +++ b/greeters/ldm-gtk-greeter.c @@ -16,7 +16,7 @@ static LdmGreeter *greeter; static GtkListStore *user_model; -static GtkWidget *user_window, *vbox, *label, *user_view; +static GtkWidget *user_window, *vbox, *message_label, *user_view; static GtkWidget *username_entry, *password_entry; static GtkWidget *panel_window; @@ -59,8 +59,8 @@ show_prompt_cb (LdmGreeter *greeter, const gchar *text) static void show_message_cb (LdmGreeter *greeter, const gchar *text) { - gtk_widget_show (label); - gtk_label_set_text (GTK_LABEL (label), text); + gtk_widget_show (message_label); + gtk_label_set_text (GTK_LABEL (message_label), text); } static void @@ -72,8 +72,8 @@ authentication_complete_cb (LdmGreeter *greeter) } else { - gtk_widget_show (label); - gtk_label_set_text (GTK_LABEL (label), "Failed to authenticate"); + gtk_widget_show (message_label); + gtk_label_set_text (GTK_LABEL (message_label), "Failed to authenticate"); gtk_entry_set_text (GTK_ENTRY (password_entry), ""); gtk_widget_grab_focus (username_entry); } @@ -105,6 +105,25 @@ session_changed_cb (GtkWidget *widget) ldm_greeter_set_session (greeter, g_object_get_data (G_OBJECT (widget), "key")); } +static void +a11y_font_cb (GtkWidget *widget) +{ + if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget))) + g_object_set (gtk_settings_get_default (), "gtk-font-name", "UbuntuBeta 20", NULL); + else + g_object_set (gtk_settings_get_default (), "gtk-font-name", "UbuntuBeta 10", NULL); +} + +static void +a11y_contrast_cb (GtkWidget *widget) +{ + if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget))) + g_object_set (gtk_settings_get_default (), "gtk-theme-name", "HighContrastInverse", NULL); + else + g_object_set (gtk_settings_get_default (), "gtk-theme-name", "Ambiance", NULL); + ldm_greeter_set_session (greeter, g_object_get_data (G_OBJECT (widget), "key")); +} + int main(int argc, char **argv) { @@ -116,13 +135,30 @@ main(int argc, char **argv) GdkScreen *screen; gint screen_width, screen_height; GtkAllocation allocation; + GtkWidget *logo_image; GtkWidget *option_menu, *power_menu; GtkWidget *menu_bar, *menu, *menu_item; GdkColor background_color; gint n_power_items = 0; + gtk_rc_add_default_file ("foo"); + gchar **i, **files = gtk_rc_get_default_files (); + for (i = files; *i; i++) + { + printf("%s\n", *i); + } + gtk_init (&argc, &argv); + g_object_set (gtk_settings_get_default (), "gtk-theme-name", "HumanLogin", NULL); + g_object_set (gtk_settings_get_default (), "gtk-icon-theme-name", "LoginIcons", NULL); +// g_object_set (gtk_settings_get_default (), "gtk-cursor-theme-name", "DMZ-White", NULL); + g_object_set (gtk_settings_get_default (), "gtk-font-name", "UbuntuBeta 10", NULL); + g_object_set (gtk_settings_get_default (), "gtk-xft-dpi", 1024*96, NULL); + g_object_set (gtk_settings_get_default (), "gtk-xft-hinting", 1, NULL); + g_object_set (gtk_settings_get_default (), "gtk-xft-hintstyle", "hintslight", NULL); + g_object_set (gtk_settings_get_default (), "gtk-xft-rgba", "rgb", NULL); + greeter = ldm_greeter_new (); g_signal_connect (G_OBJECT (greeter), "show-prompt", G_CALLBACK (show_prompt_cb), NULL); @@ -156,9 +192,14 @@ main(int argc, char **argv) vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (user_window), vbox); - label = gtk_label_new (""); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - gtk_widget_set_no_show_all (label, TRUE); + logo_image = gtk_image_new_from_icon_name ("computer", GTK_ICON_SIZE_DIALOG); + gtk_image_set_pixel_size (GTK_IMAGE (logo_image), 64); + gtk_box_pack_start (GTK_BOX (vbox), logo_image, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new (ldm_greeter_get_hostname (greeter)), FALSE, FALSE, 0); + + message_label = gtk_label_new (""); + gtk_box_pack_start (GTK_BOX (vbox), message_label, FALSE, FALSE, 0); + gtk_widget_set_no_show_all (message_label, TRUE); user_model = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF); items = ldm_greeter_get_users (greeter); @@ -213,7 +254,7 @@ main(int argc, char **argv) gtk_widget_set_no_show_all (username_entry, TRUE); password_entry = gtk_entry_new (); - //gtk_entry_set_visibility (GTK_ENTRY (password_entry), FALSE); + gtk_entry_set_visibility (GTK_ENTRY (password_entry), FALSE); gtk_widget_set_sensitive (password_entry, FALSE); gtk_box_pack_start (GTK_BOX (vbox), password_entry, FALSE, FALSE, 0); g_signal_connect (password_entry, "activate", G_CALLBACK (password_activate_cb), NULL); @@ -240,12 +281,16 @@ main(int argc, char **argv) gtk_menu_item_set_label (GTK_MENU_ITEM (menu_item), ""); // NOTE: Needed to make the icon show as selected gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menu_item), TRUE); gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), menu_item); - menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_menu_item_new_with_label ("?1")); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_menu_item_new_with_label ("?2")); - gtk_menu_shell_append (GTK_MENU_SHELL (menu), gtk_menu_item_new_with_label ("?3")); + + menu_item = gtk_check_menu_item_new_with_label (_("Large Font")); + g_signal_connect (menu_item, "toggled", G_CALLBACK (a11y_font_cb), NULL); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); + + menu_item = gtk_check_menu_item_new_with_label (_("High Constrast")); + g_signal_connect (menu_item, "toggled", G_CALLBACK (a11y_contrast_cb), NULL); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); menu_item = gtk_menu_item_new_with_label (_("Options")); gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), menu_item); diff --git a/greeters/ldm-webkit-greeter.c b/greeters/ldm-webkit-greeter.c index 08eaba77..19b3be7d 100644 --- a/greeters/ldm-webkit-greeter.c +++ b/greeters/ldm-webkit-greeter.c @@ -240,6 +240,20 @@ get_session_comment_cb (JSContextRef context, return JSValueMakeString (context, string); } +static JSValueRef +get_hostname_cb (JSContextRef context, + JSObjectRef thisObject, + JSStringRef propertyName, + JSValueRef *exception) +{ + LdmGreeter *greeter = JSObjectGetPrivate (thisObject); + JSStringRef string; + + string = JSStringCreateWithUTF8CString (ldm_greeter_get_hostname (greeter)); + + return JSValueMakeString (context, string); +} + static JSValueRef get_num_users_cb (JSContextRef context, JSObjectRef thisObject, @@ -791,6 +805,7 @@ static const JSStaticValue ldm_session_values[] = static const JSStaticValue ldm_greeter_values[] = { + { "hostname", get_hostname_cb, NULL, kJSPropertyAttributeReadOnly }, { "users", get_users_cb, NULL, kJSPropertyAttributeReadOnly }, { "languages", get_languages_cb, NULL, kJSPropertyAttributeReadOnly }, { "language", get_language_cb, NULL, kJSPropertyAttributeReadOnly }, diff --git a/libldmgreeter/greeter.c b/libldmgreeter/greeter.c index cc9e786a..44c33193 100644 --- a/libldmgreeter/greeter.c +++ b/libldmgreeter/greeter.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -22,6 +23,7 @@ enum { PROP_0, + PROP_HOSTNAME, PROP_NUM_USERS, PROP_USERS, PROP_LAYOUTS, @@ -58,6 +60,8 @@ struct _LdmGreeterPrivate Display *display; + gchar *hostname; + gboolean have_users; GList *users; @@ -143,6 +147,25 @@ ldm_greeter_connect (LdmGreeter *greeter) return result; } +/** + * ldm_greeter_get_hostname: + * @greeter: a #LdmGreeter + * + * Return value: The host this greeter is displaying + **/ +const gchar * +ldm_greeter_get_hostname (LdmGreeter *greeter) +{ + if (!greeter->priv->hostname) + { + struct utsname info; + uname (&info); + greeter->priv->hostname = g_strdup (info.nodename); + } + + return greeter->priv->hostname; +} + #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) @@ -705,7 +728,7 @@ gboolean ldm_greeter_get_can_suspend (LdmGreeter *greeter) { DBusGProxy *proxy; - gboolean result = FALSE; + gboolean result = TRUE; GError *error = NULL; proxy = dbus_g_proxy_new_for_name (greeter->priv->system_bus, @@ -973,6 +996,9 @@ ldm_greeter_get_property(GObject *object, self = LDM_GREETER (object); switch (prop_id) { + case PROP_HOSTNAME: + g_value_set_string (value, ldm_greeter_get_hostname (self)); + break; case PROP_NUM_USERS: g_value_set_int (value, ldm_greeter_get_num_users (self)); break; @@ -1025,91 +1051,98 @@ ldm_greeter_class_init (LdmGreeterClass *klass) object_class->set_property = ldm_greeter_set_property; object_class->get_property = ldm_greeter_get_property; - g_object_class_install_property(object_class, - PROP_NUM_USERS, - g_param_spec_int("num-users", - "num- users", - "Number of login users", - 0, G_MAXINT, 0, - G_PARAM_READABLE)); - /*g_object_class_install_property(object_class, - PROP_USERS, - g_param_spec_list("users", - "users", - "Users that can login")); - g_object_class_install_property(object_class, - PROP_LAYOUTS, - g_param_spec_list("layouts", - "layouts", - "Available keyboard layouts"));*/ - g_object_class_install_property(object_class, - PROP_LAYOUT, - g_param_spec_string("layout", - "layout", - "Current keyboard layout", - NULL, - G_PARAM_READWRITE)); - /*g_object_class_install_property(object_class, - PROP_SESSIONS, - g_param_spec_list("sessions", - "sessions", - "Available sessions"));*/ - g_object_class_install_property(object_class, - PROP_SESSION, - g_param_spec_string("session", - "session", - "Selected session", - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property(object_class, - PROP_TIMED_LOGIN_USER, - g_param_spec_string("timed-login-user", - "timed-login-user", - "User to login as when timed expires", - NULL, - G_PARAM_READABLE)); - g_object_class_install_property(object_class, - PROP_TIMED_LOGIN_DELAY, - g_param_spec_int("login-delay", - "login-delay", - "Number of seconds until logging in as default user", - G_MININT, G_MAXINT, 0, - G_PARAM_READABLE)); - g_object_class_install_property(object_class, - PROP_IS_AUTHENTICATED, - g_param_spec_boolean("is-authenticated", - "is-authenticated", - "TRUE if the selected user is authenticated", - FALSE, - G_PARAM_READABLE)); - g_object_class_install_property(object_class, - PROP_CAN_SUSPEND, - g_param_spec_boolean("can-suspend", - "can-suspend", - "TRUE if allowed to suspend the system", - FALSE, - G_PARAM_READABLE)); - g_object_class_install_property(object_class, - PROP_CAN_HIBERNATE, - g_param_spec_boolean("can-hibernate", - "can-hibernate", - "TRUE if allowed to hibernate the system", - FALSE, - G_PARAM_READABLE)); - g_object_class_install_property(object_class, - PROP_CAN_RESTART, - g_param_spec_boolean("can-restart", - "can-restart", - "TRUE if allowed to restart the system", - FALSE, - G_PARAM_READABLE)); - g_object_class_install_property(object_class, - PROP_CAN_SHUTDOWN, - g_param_spec_boolean("can-shutdown", - "can-shutdown", - "TRUE if allowed to shutdown the system", - FALSE, - G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_NUM_USERS, + g_param_spec_string ("hostname", + "hostname", + "Hostname displaying greeter for", + NULL, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_NUM_USERS, + g_param_spec_int ("num-users", + "num-users", + "Number of login users", + 0, G_MAXINT, 0, + G_PARAM_READABLE)); + /*g_object_class_install_property (object_class, + PROP_USERS, + g_param_spec_list ("users", + "users", + "Users that can login")); + g_object_class_install_property (object_class, + PROP_LAYOUTS, + g_param_spec_list ("layouts", + "layouts", + "Available keyboard layouts"));*/ + g_object_class_install_property (object_class, + PROP_LAYOUT, + g_param_spec_string ("layout", + "layout", + "Current keyboard layout", + NULL, + G_PARAM_READWRITE)); + /*g_object_class_install_property (object_class, + PROP_SESSIONS, + g_param_spec_list ("sessions", + "sessions", + "Available sessions"));*/ + g_object_class_install_property (object_class, + PROP_SESSION, + g_param_spec_string ("session", + "session", + "Selected session", + NULL, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_TIMED_LOGIN_USER, + g_param_spec_string ("timed-login-user", + "timed-login-user", + "User to login as when timed expires", + NULL, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_TIMED_LOGIN_DELAY, + g_param_spec_int ("login-delay", + "login-delay", + "Number of seconds until logging in as default user", + G_MININT, G_MAXINT, 0, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_IS_AUTHENTICATED, + g_param_spec_boolean ("is-authenticated", + "is-authenticated", + "TRUE if the selected user is authenticated", + FALSE, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_CAN_SUSPEND, + g_param_spec_boolean ("can-suspend", + "can-suspend", + "TRUE if allowed to suspend the system", + FALSE, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_CAN_HIBERNATE, + g_param_spec_boolean ("can-hibernate", + "can-hibernate", + "TRUE if allowed to hibernate the system", + FALSE, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_CAN_RESTART, + g_param_spec_boolean ("can-restart", + "can-restart", + "TRUE if allowed to restart the system", + FALSE, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, + PROP_CAN_SHUTDOWN, + g_param_spec_boolean ("can-shutdown", + "can-shutdown", + "TRUE if allowed to shutdown the system", + FALSE, + G_PARAM_READABLE)); /** * LdmGreeter::show-prompt: diff --git a/libldmgreeter/greeter.h b/libldmgreeter/greeter.h index addfe984..f927e941 100644 --- a/libldmgreeter/greeter.h +++ b/libldmgreeter/greeter.h @@ -56,6 +56,8 @@ LdmGreeter *ldm_greeter_new (void); gboolean ldm_greeter_connect (LdmGreeter *greeter); +const gchar *ldm_greeter_get_hostname (LdmGreeter *greeter); + gint ldm_greeter_get_num_users (LdmGreeter *greeter); const GList *ldm_greeter_get_users (LdmGreeter *greeter); -- 2.39.2