~a-j-buxton/lightdm-gtk-greeter/background-fixes

« back to all changes in this revision

Viewing changes to src/lightdm-gtk-greeter.c

  • Committer: Simon Steinbeiß
  • Date: 2013-11-13 02:00:43 UTC
  • Revision ID: ochosi@shimmerproject.org-20131113020043-a4audv545ou4stu9
Blank the screen when the greeter is used as unlock-dialog

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
#include <gdk/gdkkeysyms.h>
30
30
#endif
31
31
 
 
32
#ifdef HAVE_MIT_SAVER_EXTENSION
 
33
#include <X11/extensions/scrnsaver.h>
 
34
#endif
 
35
 
32
36
#ifdef HAVE_LIBINDICATOR
33
37
#include <libindicator/indicator-object.h>
34
38
#endif
420
424
    gtk_widget_set_sensitive (GTK_WIDGET (language_menu), !logged_in);
421
425
}
422
426
 
423
 
static void set_background (GdkPixbuf *new_bg);
 
427
static void set_background (GdkPixbuf *new_bg, gboolean is_locked);
424
428
 
425
429
static void
426
 
set_user_background (const gchar *username)
 
430
set_user_background (const gchar *username, gboolean is_locked)
427
431
{
428
432
    LightDMUser *user;
429
433
    const gchar *path;
445
449
        }
446
450
    }
447
451
 
448
 
    set_background (bg);
 
452
    set_background (bg, is_locked);
449
453
    if (bg)
450
454
        g_object_unref (bg);
451
455
}
855
859
{
856
860
    GtkTreeModel *model;
857
861
    GtkTreeIter iter;
 
862
    gboolean is_locked;
858
863
 
859
864
    model = gtk_combo_box_get_model (user_combo);
860
865
 
876
881
        }
877
882
 
878
883
        set_login_button_label (greeter, user);
879
 
        set_user_background (user);
 
884
        is_locked = lightdm_greeter_get_lock_hint (greeter);
 
885
        set_user_background (user, is_locked);
880
886
        set_user_image (user);
881
887
        gtk_widget_set_tooltip_text (GTK_WIDGET (user_combo), user);
882
888
        start_authentication (user);
1256
1262
    gchar *last_user;
1257
1263
    const gchar *selected_user;
1258
1264
    gboolean logged_in = FALSE;
 
1265
    gboolean is_locked = FALSE;
1259
1266
 
1260
1267
    g_signal_connect (lightdm_user_list_get_instance (), "user-added", G_CALLBACK (user_added_cb), greeter);
1261
1268
    g_signal_connect (lightdm_user_list_get_instance (), "user-changed", G_CALLBACK (user_changed_cb), greeter);
1262
1269
    g_signal_connect (lightdm_user_list_get_instance (), "user-removed", G_CALLBACK (user_removed_cb), NULL);
1263
 
 
 
1270
    is_locked = lightdm_greeter_get_lock_hint (greeter);
1264
1271
    model = gtk_combo_box_get_model (user_combo);
1265
1272
    items = lightdm_user_list_get_users (lightdm_user_list_get_instance ());
1266
1273
    for (item = items; item; item = item->next)
1320
1327
                {
1321
1328
                    gtk_combo_box_set_active_iter (user_combo, &iter);
1322
1329
                    set_login_button_label (greeter, selected_user);
1323
 
                    set_user_background (selected_user);
 
1330
                    set_user_background (selected_user, is_locked);
1324
1331
                    set_user_image (selected_user);
1325
1332
                    gtk_widget_set_tooltip_text (GTK_WIDGET (user_combo), selected_user);
1326
1333
                    start_authentication (selected_user);
1334
1341
            gtk_tree_model_get (model, &iter, 0, &name, -1);
1335
1342
            gtk_combo_box_set_active_iter (user_combo, &iter);
1336
1343
            set_login_button_label (greeter, name);
1337
 
            set_user_background (name);
 
1344
            set_user_background (name, is_locked);
1338
1345
            set_user_image (name);
1339
1346
            gtk_widget_set_tooltip_text (GTK_WIDGET (user_combo), name);
1340
1347
            start_authentication (name);
1347
1354
}
1348
1355
 
1349
1356
static cairo_surface_t *
1350
 
create_root_surface (GdkScreen *screen)
 
1357
create_root_surface (GdkScreen *screen, gboolean is_locked)
1351
1358
{
1352
1359
    gint number, width, height;
1353
1360
    Display *display;
1366
1373
        g_warning ("Failed to create root pixmap");
1367
1374
        return NULL;
1368
1375
    }
 
1376
 
 
1377
    /* Force the screen to remain blank in case the session was just locked to reduce VT-switching flickering and to make the greeter behave a bit more like a screensaver than a mere unlock-dialog */
 
1378
#ifdef HAVE_MIT_SAVER_EXTENSION
 
1379
    if (is_locked)
 
1380
        XForceScreenSaver(display,ScreenSaverActive);
 
1381
#endif
 
1382
 
1369
1383
    XSetCloseDownMode (display, RetainPermanent);
1370
1384
    pixmap = XCreatePixmap (display, RootWindow (display, number), width, height, DefaultDepth (display, number));
1371
1385
    XCloseDisplay (display);
1386
1400
}
1387
1401
 
1388
1402
static void
1389
 
set_background (GdkPixbuf *new_bg)
 
1403
set_background (GdkPixbuf *new_bg, gboolean is_locked)
1390
1404
{
1391
1405
    GdkRectangle monitor_geometry;
1392
1406
    GdkPixbuf *bg = NULL;
1407
1421
        int monitor;
1408
1422
 
1409
1423
        screen = gdk_display_get_screen (gdk_display_get_default (), i);
1410
 
        surface = create_root_surface (screen);
 
1424
        surface = create_root_surface (screen, is_locked);
1411
1425
        c = cairo_create (surface);
1412
1426
 
1413
1427
        for (monitor = 0; monitor < gdk_screen_get_n_monitors (screen); monitor++)
1492
1506
    GdkColor background_color;
1493
1507
#endif
1494
1508
    GError *error = NULL;
 
1509
    gboolean is_locked = FALSE;
1495
1510
#ifdef HAVE_LIBINDICATOR
1496
1511
    gchar **whitelist;
1497
1512
    GDir *dir;
1584
1599
    g_free (value);
1585
1600
 
1586
1601
    /* Set the background */
1587
 
    set_background (NULL);
 
1602
    is_locked = lightdm_greeter_get_lock_hint (greeter);
 
1603
    set_background (NULL, is_locked);
1588
1604
 
1589
1605
    /* Set GTK+ settings */
1590
1606
    value = g_key_file_get_value (config, "greeter", "theme-name", NULL);