diff options
-rw-r--r-- | daemon/gdm-local-display-factory.c | 11 | ||||
-rw-r--r-- | daemon/gdm-manager.c | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c index eba38671..5fbbad68 100644 --- a/daemon/gdm-local-display-factory.c +++ b/daemon/gdm-local-display-factory.c @@ -73,6 +73,8 @@ struct _GdmLocalDisplayFactory guint active_vt_watch_id; guint wait_to_finish_timeout_id; #endif + + gboolean is_started; }; enum { @@ -505,6 +507,10 @@ on_display_status_changed (GdmDisplay *display, gboolean is_initial = TRUE; gboolean is_local = TRUE; + + if (!factory->is_started) + return; + num = -1; gdm_display_get_x11_display_number (display, &num, NULL); @@ -1270,6 +1276,8 @@ gdm_local_display_factory_start (GdmDisplayFactory *base_factory) g_return_val_if_fail (GDM_IS_LOCAL_DISPLAY_FACTORY (factory), FALSE); + factory->is_started = TRUE; + store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); g_signal_connect_object (G_OBJECT (store), @@ -1306,9 +1314,10 @@ gdm_local_display_factory_stop (GdmDisplayFactory *base_factory) g_signal_handlers_disconnect_by_func (G_OBJECT (store), G_CALLBACK (on_display_removed), factory); - g_clear_handle_id (&factory->seat0_graphics_check_timeout_id, g_source_remove); + factory->is_started = FALSE; + return TRUE; } diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c index 4c2752fe..cc61efc9 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -2768,6 +2768,8 @@ gdm_manager_dispose (GObject *object) g_return_if_fail (manager->priv != NULL); + gdm_manager_stop (manager); + g_clear_weak_pointer (&manager->priv->automatic_login_display); #ifdef HAVE_LIBXDMCP |