source: proiecte/PPPP/gdm/debian/patches/13_cache_ck_history.patch @ 134

Last change on this file since 134 was 134, checked in by (none), 14 years ago

gdm sources with the modifications for webcam

File size: 4.1 KB
  • gui/simple-greeter/Makefile.am

    #
    # Description: Cache the result of ck-history so greeter shows user list immediately after login
    # Ubuntu: https://bugs.edge.launchpad.net/ubuntu/karmic/+source/gdm/+bug/400863
    # Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=594344
    #
    diff --git a/gui/simple-greeter/Makefile.am b/gui/simple-greeter/Makefile.am
    index b36aa28..901a71b 100644
    a b AM_CPPFLAGS = \ 
    1010        -DDMCONFDIR=\""$(dmconfdir)"\"                  \
    1111        -DGDMCONFDIR=\"$(gdmconfdir)\"                  \
    1212        -DDATADIR=\""$(datadir)"\"                      \
     13        -DCACHEDIR=\""$(GDM_WORKING_DIR)/.cache"\"              \
    1314        -DSYSCONFDIR=\""$(sysconfdir)"\"                \
    1415        -DLIBLOCALEDIR=\""$(prefix)/lib/locale"\"       \
    1516        -DGNOMELOCALEDIR=\""$(datadir)/locale"\"        \
  • gui/simple-greeter/gdm-user-manager.c

    diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
    index 6c91b3b..3fb8423 100644
    a b  
    9999                                  "pcap",       \
    100100                                  NULL }
    101101
     102#define LOGIN_CACHE_FILE CACHEDIR "/login_frequency.cache"
     103
    102104struct GdmUserManagerPrivate
    103105{
    104106        GHashTable            *users;
    struct GdmUserManagerPrivate 
    116118        guint                  ck_history_id;
    117119
    118120        guint8                 users_dirty : 1;
     121        guint8                 loaded_cache : 1;
     122        guint8                 loading_users : 1;   
    119123};
    120124
    121125enum {
    ck_history_watch (GIOChannel *source, 
    12741278        }
    12751279
    12761280        if (done) {
    1277                 g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0);
     1281                FILE *fp;
     1282
     1283                /* Cache login counts */
     1284                fp = fopen (LOGIN_CACHE_FILE, "w");
     1285                if (fp != NULL) {
     1286                        GHashTableIter iter;
     1287                        gpointer value;
     1288
     1289                        g_hash_table_iter_init (&iter, manager->priv->users);
     1290                        while (g_hash_table_iter_next (&iter, NULL, &value)) {
     1291                                GdmUser *user = (GdmUser *) value;
     1292                                fprintf (fp, "%s %lu\n",
     1293                                         gdm_user_get_user_name (user),
     1294                                         gdm_user_get_login_frequency (user));
     1295                        }
     1296                        fclose (fp);
     1297                }
     1298                else
     1299                        g_warning ("Unable to write to login cache file: %s", LOGIN_CACHE_FILE);
     1300
     1301                if (manager->priv->loading_users) {
     1302                        g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0);
     1303                        manager->priv->loading_users = FALSE;
     1304                }
    12781305
    12791306                manager->priv->ck_history_id = 0;
    12801307                return FALSE;
    reload_passwd (GdmUserManager *manager) 
    14721499}
    14731500
    14741501static void
     1502load_login_frequency_cache (GdmUserManager *manager)
     1503{
     1504        GIOChannel *channel;
     1505        gchar *line;
     1506
     1507        channel = g_io_channel_new_file (LOGIN_CACHE_FILE, "r", NULL);
     1508        if (channel == NULL)
     1509                return;
     1510
     1511        while (g_io_channel_read_line (channel, &line, NULL, NULL, NULL) == G_IO_STATUS_NORMAL) {
     1512                process_ck_history_line (manager, line);
     1513                g_free (line);
     1514        }
     1515   
     1516        g_io_channel_close (channel);
     1517   
     1518        if (manager->priv->loading_users) {
     1519                g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0);
     1520                manager->priv->loading_users = FALSE;
     1521        }   
     1522}
     1523
     1524static void
    14751525reload_users (GdmUserManager *manager)
    14761526{
     1527        if (!manager->priv->loaded_cache) {
     1528                load_login_frequency_cache (manager);
     1529                manager->priv->loaded_cache = TRUE;
     1530        }
    14771531        reload_ck_history (manager);
    14781532        reload_passwd (manager);
    14791533}
    queue_reload_users (GdmUserManager *manager) 
    14951549        }
    14961550
    14971551        g_signal_emit (G_OBJECT (manager), signals[LOADING_USERS], 0);
     1552        manager->priv->loading_users = TRUE;
    14981553        manager->priv->reload_id = g_idle_add ((GSourceFunc)reload_users_timeout, manager);
    14991554}
    15001555
Note: See TracBrowser for help on using the repository browser.