View | Details | Raw Unified | Return to bug 939571
Collapse All | Expand All

(-)a/daemon/gdm-local-display-factory.c (-3 / +2 lines)
Lines 445-451 delete_display (GdmLocalDisplayFactory *factory, Link Here
445
        gdm_display_store_foreach_remove (store, lookup_by_seat_id, (gpointer) seat_id);
445
        gdm_display_store_foreach_remove (store, lookup_by_seat_id, (gpointer) seat_id);
446
}
446
}
447
447
448
static gboolean gdm_local_display_factory_sync_seats (GdmLocalDisplayFactory *factory)
448
static gboolean
449
gdm_local_display_factory_sync_seats (GdmLocalDisplayFactory *factory)
449
{
450
{
450
        GError *error = NULL;
451
        GError *error = NULL;
451
        GVariant *result;
452
        GVariant *result;
452
- 
453
finishes
453
finishes
454
--
455
daemon/gdm-local-display-factory.c | 9 +++++++--
454
daemon/gdm-local-display-factory.c | 9 +++++++--
456
1 file changed, 7 insertions(+), 2 deletions(-)
455
1 file changed, 7 insertions(+), 2 deletions(-)
(-)a/daemon/gdm-local-display-factory.c (-4 / +7 lines)
Lines 83-88 static void on_display_status_changed (GdmDisplay Link Here
83
                                                         GParamSpec                  *arg1,
83
                                                         GParamSpec                  *arg1,
84
                                                         GdmLocalDisplayFactory      *factory);
84
                                                         GdmLocalDisplayFactory      *factory);
85
85
86
static gboolean gdm_local_display_factory_sync_seats    (GdmLocalDisplayFactory *factory);
86
static gpointer local_display_factory_object = NULL;
87
static gpointer local_display_factory_object = NULL;
87
88
88
G_DEFINE_TYPE (GdmLocalDisplayFactory, gdm_local_display_factory, GDM_TYPE_DISPLAY_FACTORY)
89
G_DEFINE_TYPE (GdmLocalDisplayFactory, gdm_local_display_factory, GDM_TYPE_DISPLAY_FACTORY)
Lines 312-323 on_display_status_changed (GdmDisplay *display, Link Here
312
                }
313
                }
313
                gdm_display_store_remove (store, display);
314
                gdm_display_store_remove (store, display);
314
315
315
                /* Create a new equivalent display if it was static */
316
                /* if this is a local display, do a full resync.  Only
317
                 * seats without displays will get created anyway.  This
318
                 * ensures we get a new login screen when the user logs out,
319
                 * if there isn't one.
320
                 */
316
                if (is_local) {
321
                if (is_local) {
317
                        /* reset num failures */
322
                        /* reset num failures */
318
                        factory->priv->num_failures = 0;
323
                        factory->priv->num_failures = 0;
319
324
320
                        create_display (factory, seat_id, session_type, is_initial);
325
                        gdm_local_display_factory_sync_seats (factory);
321
                }
326
                }
322
                break;
327
                break;
323
        case GDM_DISPLAY_FAILED:
328
        case GDM_DISPLAY_FAILED:
324
- 
325
stub display (autologin)
329
stub display (autologin)
326
--
327
daemon/gdm-manager.c | 3 ---
330
daemon/gdm-manager.c | 3 ---
328
1 file changed, 3 deletions(-)
331
1 file changed, 3 deletions(-)
(-)a/daemon/gdm-manager.c (-5 lines)
Lines 1742-1750 set_up_automatic_login_session (GdmManager *manager, Link Here
1742
        GdmSession *session;
1742
        GdmSession *session;
1743
        gboolean is_initial;
1743
        gboolean is_initial;
1744
1744
1745
        g_object_set (G_OBJECT (display), "session-class", "user", NULL);
1746
        g_object_set (G_OBJECT (display), "session-type", NULL, NULL);
1747
1748
        /* 0 is root user; since the daemon talks to the session object
1745
        /* 0 is root user; since the daemon talks to the session object
1749
         * directly, itself, for automatic login
1746
         * directly, itself, for automatic login
1750
         */
1747
         */
1751
- 
1752
--
1753
daemon/gdm-manager.c | 4 ++++
1748
daemon/gdm-manager.c | 4 ++++
1754
1 file changed, 4 insertions(+)
1749
1 file changed, 4 insertions(+)
(-)a/daemon/gdm-manager.c (-2 / +4 lines)
Lines 2007-2012 on_start_user_session (StartUserSessionOperation *operation) Link Here
2007
                g_object_set_data (G_OBJECT (display), "gdm-embryonic-user-session", NULL);
2007
                g_object_set_data (G_OBJECT (display), "gdm-embryonic-user-session", NULL);
2008
                g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL);
2008
                g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL);
2009
                create_embryonic_user_session_for_display (operation->manager, display, allowed_uid);
2009
                create_embryonic_user_session_for_display (operation->manager, display, allowed_uid);
2010
2011
                /* remove the unused prepared greeter display since we're not going
2012
                 * to have a greeter */
2013
                gdm_display_store_remove (self->priv->display_store, display);
2010
                g_object_unref (display);
2014
                g_object_unref (display);
2011
2015
2012
                /* Give the user session a new display object for bookkeeping purposes */
2016
                /* Give the user session a new display object for bookkeeping purposes */
2013
- 
2014
assigned
2017
assigned
2015
--
2016
daemon/gdm-manager.c | 3 +++
2018
daemon/gdm-manager.c | 3 +++
2017
1 file changed, 3 insertions(+)
2019
1 file changed, 3 insertions(+)
(-)a/daemon/gdm-manager.c (-2 / +3 lines)
Lines 1927-1937 create_display_for_user_session (GdmManager *self, Link Here
1927
                                 const char *session_id)
1927
                                 const char *session_id)
1928
{
1928
{
1929
        GdmDisplay *display;
1929
        GdmDisplay *display;
1930
        /* at the moment we only create GdmLocalDisplay objects on seat0 */
1931
        const char *seat_id = "seat0";
1930
1932
1931
        display = gdm_local_display_new ();
1933
        display = gdm_local_display_new ();
1932
1934
1933
        g_object_set (G_OBJECT (display),
1935
        g_object_set (G_OBJECT (display),
1934
                      "session-class", "user",
1936
                      "session-class", "user",
1937
                      "seat-id", seat_id,
1935
                      "session-id", session_id,
1938
                      "session-id", session_id,
1936
                      NULL);
1939
                      NULL);
1937
        gdm_display_store_add (self->priv->display_store,
1940
        gdm_display_store_add (self->priv->display_store,
1938
- 
1939
--
1940
daemon/gdm-local-display-factory.c | 61 ++++++++++++++++++++++++++++++++++----
1941
daemon/gdm-local-display-factory.c | 61 ++++++++++++++++++++++++++++++++++----
1941
1 file changed, 56 insertions(+), 5 deletions(-)
1942
1 file changed, 56 insertions(+), 5 deletions(-)
(-)a/daemon/gdm-local-display-factory.c (-7 / +56 lines)
Lines 186-196 store_display (GdmLocalDisplayFactory *factory, Link Here
186
{
186
{
187
        GdmDisplayStore *store;
187
        GdmDisplayStore *store;
188
188
189
        g_signal_connect (display, "notify::status",
190
                          G_CALLBACK (on_display_status_changed), factory);
191
192
        g_object_weak_ref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory);
193
194
        store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
189
        store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
195
        gdm_display_store_add (store, display);
190
        gdm_display_store_add (store, display);
196
}
191
}
Lines 577-590 gdm_local_display_factory_stop_monitor (GdmLocalDisplayFactory *factory) Link Here
577
572
578
#endif
573
#endif
579
574
575
static void
576
on_display_added (GdmDisplayStore        *display_store,
577
                  const char             *id,
578
                  GdmLocalDisplayFactory *factory)
579
{
580
        GdmDisplay *display;
581
582
        display = gdm_display_store_lookup (display_store, id);
583
584
        if (display != NULL) {
585
                g_signal_connect (display, "notify::status",
586
                                  G_CALLBACK (on_display_status_changed), factory);
587
588
                g_object_weak_ref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory);
589
        }
590
}
591
592
static void
593
on_display_removed (GdmDisplayStore        *display_store,
594
                    const char             *id,
595
                    GdmLocalDisplayFactory *factory)
596
{
597
        GdmDisplay *display;
598
599
        display = gdm_display_store_lookup (display_store, id);
600
601
        if (display != NULL) {
602
                g_signal_handlers_disconnect_by_func (display, G_CALLBACK (on_display_status_changed), factory);
603
                g_object_weak_unref (G_OBJECT (display), (GWeakNotify)on_display_disposed, factory);
604
605
        }
606
}
607
580
static gboolean
608
static gboolean
581
gdm_local_display_factory_start (GdmDisplayFactory *base_factory)
609
gdm_local_display_factory_start (GdmDisplayFactory *base_factory)
582
{
610
{
583
        GdmLocalDisplayFactory *factory = GDM_LOCAL_DISPLAY_FACTORY (base_factory);
611
        GdmLocalDisplayFactory *factory = GDM_LOCAL_DISPLAY_FACTORY (base_factory);
584
        GdmDisplay             *display;
612
        GdmDisplay             *display;
613
        GdmDisplayStore *store;
585
614
586
        g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
615
        g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
587
616
617
        store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
618
619
        g_signal_connect (G_OBJECT (store),
620
                          "display-added",
621
                          G_CALLBACK (on_display_added),
622
                          factory);
623
624
        g_signal_connect (G_OBJECT (store),
625
                          "display-removed",
626
                          G_CALLBACK (on_display_removed),
627
                          factory);
628
588
#ifdef WITH_SYSTEMD
629
#ifdef WITH_SYSTEMD
589
        if (LOGIND_RUNNING()) {
630
        if (LOGIND_RUNNING()) {
590
                gdm_local_display_factory_start_monitor (factory);
631
                gdm_local_display_factory_start_monitor (factory);
Lines 602-607 static gboolean Link Here
602
gdm_local_display_factory_stop (GdmDisplayFactory *base_factory)
643
gdm_local_display_factory_stop (GdmDisplayFactory *base_factory)
603
{
644
{
604
        GdmLocalDisplayFactory *factory = GDM_LOCAL_DISPLAY_FACTORY (base_factory);
645
        GdmLocalDisplayFactory *factory = GDM_LOCAL_DISPLAY_FACTORY (base_factory);
646
        GdmDisplayStore *store;
605
647
606
        g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
648
        g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE);
607
649
Lines 609-614 gdm_local_display_factory_stop (GdmDisplayFactory *base_factory) Link Here
609
        gdm_local_display_factory_stop_monitor (factory);
651
        gdm_local_display_factory_stop_monitor (factory);
610
#endif
652
#endif
611
653
654
        store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
655
656
        g_signal_handlers_disconnect_by_func (G_OBJECT (store),
657
                                              G_CALLBACK (on_display_added),
658
                                              factory);
659
        g_signal_handlers_disconnect_by_func (G_OBJECT (store),
660
                                              G_CALLBACK (on_display_removed),
661
                                              factory);
662
612
        return TRUE;
663
        return TRUE;
613
}
664
}
614
665
615
- 
616
actually a stub
666
actually a stub
617
 bug 747339 )
667
 bug 747339 )
618
--
619
daemon/gdm-manager.c | 10 ++++++----
668
daemon/gdm-manager.c | 10 ++++++----
620
1 file changed, 6 insertions(+), 4 deletions(-)
669
1 file changed, 6 insertions(+), 4 deletions(-)
(-)a/daemon/gdm-manager.c (-6 / +6 lines)
Lines 2011-2020 on_start_user_session (StartUserSessionOperation *operation) Link Here
2011
                g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL);
2011
                g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL);
2012
                create_embryonic_user_session_for_display (operation->manager, display, allowed_uid);
2012
                create_embryonic_user_session_for_display (operation->manager, display, allowed_uid);
2013
2013
2014
                /* remove the unused prepared greeter display since we're not going
2014
                if (g_strcmp0 (operation->service_name, "gdm-autologin") == 0) {
2015
                 * to have a greeter */
2015
                        /* remove the unused prepared greeter display since we're not going
2016
                gdm_display_store_remove (self->priv->display_store, display);
2016
                         * to have a greeter */
2017
                g_object_unref (display);
2017
                        gdm_display_store_remove (self->priv->display_store, display);
2018
                        g_object_unref (display);
2019
                }
2018
2020
2019
                /* Give the user session a new display object for bookkeeping purposes */
2021
                /* Give the user session a new display object for bookkeeping purposes */
2020
                session_id = gdm_session_get_conversation_session_id (operation->session,
2022
                session_id = gdm_session_get_conversation_session_id (operation->session,
2021
- 
2022
--
2023
daemon/gdm-display.c | 1 -
2023
daemon/gdm-display.c | 1 -
2024
1 file changed, 1 deletion(-)
2024
1 file changed, 1 deletion(-)
(-)a/daemon/gdm-display.c (-2 lines)
Lines 1138-1144 gdm_display_dispose (GObject *object) Link Here
1138
        }
1138
        }
1139
        g_clear_object (&self->priv->launch_environment);
1139
        g_clear_object (&self->priv->launch_environment);
1140
1140
1141
        g_warn_if_fail (self->priv->status != GDM_DISPLAY_PREPARED);
1142
        g_warn_if_fail (self->priv->status != GDM_DISPLAY_MANAGED);
1141
        g_warn_if_fail (self->priv->status != GDM_DISPLAY_MANAGED);
1143
        g_warn_if_fail (self->priv->user_access_file == NULL);
1142
        g_warn_if_fail (self->priv->user_access_file == NULL);
1144
        g_warn_if_fail (self->priv->access_file == NULL);
1143
        g_warn_if_fail (self->priv->access_file == NULL);
1145
- 

Return to bug 939571