예제 #1
0
static void
on_name_vanished (GDBusConnection *connection,
                  const char      *name,
                  gpointer         user_data)
{
    queue_finish (GDM_DISPLAY (user_data));
}
예제 #2
0
static GObject *
gdm_display_constructor (GType                  type,
                         guint                  n_construct_properties,
                         GObjectConstructParam *construct_properties)
{
    GdmDisplay      *display;
    char            *canonical_display_name;
    gboolean         res;

    display = GDM_DISPLAY (G_OBJECT_CLASS (gdm_display_parent_class)->constructor (type,
                           n_construct_properties,
                           construct_properties));

    canonical_display_name = g_strdelimit (g_strdup (display->priv->x11_display_name),
                                           ":" G_STR_DELIMITERS, '_');

    g_free (display->priv->id);
    display->priv->id = g_strdup_printf ("/org/gnome/DisplayManager/Displays/%s",
                                         canonical_display_name);

    g_free (canonical_display_name);

    res = register_display (display);
    if (! res) {
        g_warning ("Unable to register display with system bus");
    }

    return G_OBJECT (display);
}
예제 #3
0
static void
gdm_display_dispose (GObject *object)
{
        GdmDisplay *display;

        display = GDM_DISPLAY (object);

        g_debug ("GdmDisplay: Disposing display");

        if (display->priv->finish_idle_id > 0) {
                g_source_remove (display->priv->finish_idle_id);
                display->priv->finish_idle_id = 0;
        }

        if (display->priv->slave_proxy != NULL) {
                g_object_unref (display->priv->slave_proxy);
                display->priv->slave_proxy = NULL;
        }

        if (display->priv->user_access_file != NULL) {
                gdm_display_access_file_close (display->priv->user_access_file);
                g_object_unref (display->priv->user_access_file);
                display->priv->user_access_file = NULL;
        }

        if (display->priv->access_file != NULL) {
                gdm_display_access_file_close (display->priv->access_file);
                g_object_unref (display->priv->access_file);
                display->priv->access_file = NULL;
        }

        G_OBJECT_CLASS (gdm_display_parent_class)->dispose (object);
}
예제 #4
0
static void
gdm_display_finalize (GObject *object)
{
        GdmDisplay *display;

        g_return_if_fail (object != NULL);
        g_return_if_fail (GDM_IS_DISPLAY (object));

        display = GDM_DISPLAY (object);

        g_return_if_fail (display->priv != NULL);

        g_debug ("GdmDisplay: Finalizing display: %s", display->priv->id);
        g_free (display->priv->id);
        g_free (display->priv->seat_id);
        g_free (display->priv->remote_hostname);
        g_free (display->priv->x11_display_name);
        g_free (display->priv->x11_cookie);
        g_free (display->priv->slave_command);

        if (display->priv->access_file != NULL) {
                g_object_unref (display->priv->access_file);
        }

        if (display->priv->user_access_file != NULL) {
                g_object_unref (display->priv->user_access_file);
        }

        if (display->priv->slave_timer != NULL) {
                g_timer_destroy (display->priv->slave_timer);
        }

        G_OBJECT_CLASS (gdm_display_parent_class)->finalize (object);
}
예제 #5
0
static gboolean
idle_connect_to_display (GdmXdmcpDisplay *self)
{
        gboolean res;

        self->priv->connection_attempts++;

        res = gdm_display_connect (GDM_DISPLAY (self));
        if (res) {
        } else {
                if (self->priv->connection_attempts >= MAX_CONNECT_ATTEMPTS) {
                        g_warning ("Unable to connect to display after %d tries - bailing out", self->priv->connection_attempts);
                        gdm_display_unmanage (GDM_DISPLAY (self));
                        return FALSE;
                }
                return TRUE;
        }

        return FALSE;
}
예제 #6
0
static void
gdm_display_get_property (GObject        *object,
                          guint           prop_id,
                          GValue         *value,
                          GParamSpec     *pspec)
{
    GdmDisplay *self;

    self = GDM_DISPLAY (object);

    switch (prop_id) {
    case PROP_ID:
        g_value_set_string (value, self->priv->id);
        break;
    case PROP_STATUS:
        g_value_set_int (value, self->priv->status);
        break;
    case PROP_SEAT_ID:
        g_value_set_string (value, self->priv->seat_id);
        break;
    case PROP_SESSION_ID:
        g_value_set_string (value, self->priv->session_id);
        break;
    case PROP_REMOTE_HOSTNAME:
        g_value_set_string (value, self->priv->remote_hostname);
        break;
    case PROP_X11_DISPLAY_NUMBER:
        g_value_set_int (value, self->priv->x11_display_number);
        break;
    case PROP_X11_DISPLAY_NAME:
        g_value_set_string (value, self->priv->x11_display_name);
        break;
    case PROP_X11_COOKIE:
        g_value_set_string (value, self->priv->x11_cookie);
        break;
    case PROP_X11_AUTHORITY_FILE:
        g_value_take_string (value,
                             gdm_display_access_file_get_path (self->priv->access_file));
        break;
    case PROP_IS_LOCAL:
        g_value_set_boolean (value, self->priv->is_local);
        break;
    case PROP_SLAVE_COMMAND:
        g_value_set_string (value, self->priv->slave_command);
        break;
    case PROP_IS_INITIAL:
        g_value_set_boolean (value, self->priv->is_initial);
        break;
    default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
        break;
    }
}
예제 #7
0
static void
gdm_display_set_property (GObject        *object,
                          guint           prop_id,
                          const GValue   *value,
                          GParamSpec     *pspec)
{
    GdmDisplay *self;

    self = GDM_DISPLAY (object);

    switch (prop_id) {
    case PROP_ID:
        _gdm_display_set_id (self, g_value_get_string (value));
        break;
    case PROP_STATUS:
        _gdm_display_set_status (self, g_value_get_int (value));
        break;
    case PROP_SEAT_ID:
        _gdm_display_set_seat_id (self, g_value_get_string (value));
        break;
    case PROP_SESSION_ID:
        _gdm_display_set_session_id (self, g_value_get_string (value));
        break;
    case PROP_REMOTE_HOSTNAME:
        _gdm_display_set_remote_hostname (self, g_value_get_string (value));
        break;
    case PROP_X11_DISPLAY_NUMBER:
        _gdm_display_set_x11_display_number (self, g_value_get_int (value));
        break;
    case PROP_X11_DISPLAY_NAME:
        _gdm_display_set_x11_display_name (self, g_value_get_string (value));
        break;
    case PROP_X11_COOKIE:
        _gdm_display_set_x11_cookie (self, g_value_get_string (value));
        break;
    case PROP_IS_LOCAL:
        _gdm_display_set_is_local (self, g_value_get_boolean (value));
        break;
    case PROP_SLAVE_COMMAND:
        _gdm_display_set_slave_command (self, g_value_get_string (value));
        break;
    case PROP_IS_INITIAL:
        _gdm_display_set_is_initial (self, g_value_get_boolean (value));
        break;
    default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
        break;
    }
}
예제 #8
0
GdmDisplay *
gdm_xdmcp_display_new (const char *hostname,
                       int         number,
                       GdmAddress *address,
                       gint32      session_number)
{
        GObject *object;
        char    *x11_display;

        x11_display = g_strdup_printf ("%s:%d", hostname, number);
        object = g_object_new (GDM_TYPE_XDMCP_DISPLAY,
                               "remote-hostname", hostname,
                               "x11-display-number", number,
                               "x11-display-name", x11_display,
                               "is-local", FALSE,
                               "remote-address", address,
                               "session-number", session_number,
                               NULL);
        g_free (x11_display);

        return GDM_DISPLAY (object);
}
예제 #9
0
static GObject *
gdm_display_constructor (GType                  type,
                         guint                  n_construct_properties,
                         GObjectConstructParam *construct_properties)
{
        GdmDisplay      *display;
        gboolean         res;

        display = GDM_DISPLAY (G_OBJECT_CLASS (gdm_display_parent_class)->constructor (type,
                                                                                       n_construct_properties,
                                                                                       construct_properties));

        g_free (display->priv->id);
        display->priv->id = g_strdup_printf ("/org/gnome/DisplayManager/Display%u", get_next_display_serial ());

        res = register_display (display);
        if (! res) {
                g_warning ("Unable to register display with system bus");
        }

        return G_OBJECT (display);
}