31
31
static GtkComboBox *session_combo;
32
32
static GtkComboBox *language_combo;
33
33
static gchar *default_font_name, *default_theme_name, *default_icon_theme_name;
34
static GdkPixbuf *default_background_pixbuf = NULL;
35
static GdkRGBA *default_background_color = NULL;
34
36
static gboolean cancelling = FALSE, prompted = FALSE;
162
164
gtk_widget_set_sensitive (GTK_WIDGET (language_combo), !logged_in);
167
static void set_background (GdkPixbuf *new_bg);
170
set_user_background (const gchar *username)
174
GdkPixbuf *bg = NULL;
175
GError *error = NULL;
177
user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
180
path = lightdm_user_get_background (user);
183
bg = gdk_pixbuf_new_from_file (path, &error);
186
g_warning ("Failed to load user background: %s", error->message);
187
g_clear_error (&error);
166
198
start_authentication (const gchar *username)
396
autologin_timer_expired_cb (LightDMGreeter *greeter)
398
if (lightdm_greeter_get_autologin_guest_hint (greeter))
399
start_authentication ("*guest");
400
else if (lightdm_greeter_get_autologin_user_hint (greeter))
401
start_authentication (lightdm_greeter_get_autologin_user_hint (greeter));
405
429
center_window (GtkWindow *window)
407
431
GdkScreen *screen;
676
700
gtk_combo_box_set_active_iter (user_combo, &iter);
677
701
set_login_button_label (selected_user);
702
set_user_background (selected_user);
678
703
start_authentication (selected_user);
720
745
cairo_xlib_surface_get_drawable (surface));
752
set_background (GdkPixbuf *new_bg)
754
GdkRectangle monitor_geometry;
755
GdkPixbuf *bg = NULL;
761
bg = default_background_pixbuf;
763
/* Set the background */
764
for (i = 0; i < gdk_display_get_n_screens (gdk_display_get_default ()); i++)
767
cairo_surface_t *surface;
771
screen = gdk_display_get_screen (gdk_display_get_default (), i);
772
surface = create_root_surface (screen);
773
c = cairo_create (surface);
775
for (monitor = 0; monitor < gdk_screen_get_n_monitors (screen); monitor++)
777
gdk_screen_get_monitor_geometry (screen, monitor, &monitor_geometry);
781
GdkPixbuf *p = gdk_pixbuf_scale_simple (bg, monitor_geometry.width,
782
monitor_geometry.height, GDK_INTERP_BILINEAR);
783
gdk_cairo_set_source_pixbuf (c, p, monitor_geometry.x, monitor_geometry.y);
787
gdk_cairo_set_source_rgba (c, default_background_color);
793
/* Refresh background */
795
XClearWindow (GDK_SCREEN_XDISPLAY (screen), RootWindow (GDK_SCREEN_XDISPLAY (screen), i));
735
808
GtkCellRenderer *renderer;
736
809
GtkWidget *menuitem, *hbox, *image;
737
810
gchar *value, *state_dir;
738
GdkPixbuf *background_pixbuf = NULL;
739
811
GdkRGBA background_color;
741
812
GError *error = NULL;
743
814
/* Disable global menus */
774
845
g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
775
846
g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
776
847
g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
777
g_signal_connect (greeter, "autologin-timer-expired", G_CALLBACK (autologin_timer_expired_cb), NULL);
848
g_signal_connect (greeter, "autologin-timer-expired", G_CALLBACK (lightdm_greeter_authenticate_autologin), NULL);
778
849
if (!lightdm_greeter_connect_sync (greeter, NULL))
779
850
return EXIT_FAILURE;
796
867
path = g_build_filename (GREETER_DATA_DIR, value, NULL);
798
869
g_debug ("Loading background %s", path);
799
background_pixbuf = gdk_pixbuf_new_from_file (path, &error);
800
if (!background_pixbuf)
870
default_background_pixbuf = gdk_pixbuf_new_from_file (path, &error);
871
if (!default_background_pixbuf)
801
872
g_warning ("Failed to load background: %s", error->message);
802
873
g_clear_error (&error);
806
878
g_debug ("Using background color %s", value);
879
default_background_color = gdk_rgba_copy (&background_color);
809
883
/* Set the background */
810
for (i = 0; i < gdk_display_get_n_screens (gdk_display_get_default ()); i++)
813
cairo_surface_t *surface;
817
screen = gdk_display_get_screen (gdk_display_get_default (), i);
818
surface = create_root_surface (screen);
819
c = cairo_create (surface);
821
for (monitor = 0; monitor < gdk_screen_get_n_monitors (screen); monitor++)
823
gdk_screen_get_monitor_geometry (screen, monitor, &monitor_geometry);
825
if (background_pixbuf)
827
GdkPixbuf *pixbuf = gdk_pixbuf_scale_simple (background_pixbuf, monitor_geometry.width, monitor_geometry.height, GDK_INTERP_BILINEAR);
828
gdk_cairo_set_source_pixbuf (c, pixbuf, monitor_geometry.x, monitor_geometry.y);
829
g_object_unref (pixbuf);
832
gdk_cairo_set_source_rgba (c, &background_color);
838
/* Refresh background */
840
XClearWindow (GDK_SCREEN_XDISPLAY (screen), RootWindow (GDK_SCREEN_XDISPLAY (screen), i));
842
if (background_pixbuf)
843
g_object_unref (background_pixbuf);
884
set_background (NULL);
845
886
/* Set GTK+ settings */
846
887
value = g_key_file_get_value (config, "greeter", "theme-name", NULL);