Commit 48f35210 authored by Ray Strode's avatar Ray Strode

slave: drop the slaves

At this point the slaves do nothing useful, so we can
get rid of them.

https://bugzilla.gnome.org/show_bug.cgi?id=744764
parent ca5fccc2
......@@ -194,10 +194,6 @@ gdm_SOURCES = \
gdm-session-worker-common.h \
gdm-session-worker-job.c \
gdm-session-worker-job.h \
gdm-slave.c \
gdm-slave.h \
gdm-simple-slave.c \
gdm-simple-slave.h \
gdm-dbus-util.c \
gdm-dbus-util.h \
gdm-xerrors.c \
......@@ -228,8 +224,6 @@ XDMCP_SOURCES = \
gdm-xdmcp-display.h \
gdm-xdmcp-chooser-display.c \
gdm-xdmcp-chooser-display.h \
gdm-xdmcp-chooser-slave.c \
gdm-xdmcp-chooser-slave.h \
$(NULL)
if XDMCP_SUPPORT
......
......@@ -47,8 +47,6 @@
#include "gdm-settings-keys.h"
#include "gdm-launch-environment.h"
#include "gdm-simple-slave.h"
#include "gdm-xdmcp-chooser-slave.h"
#include "gdm-dbus-util.h"
#include "gdm-xerrors.h"
......@@ -68,8 +66,7 @@ struct GdmDisplayPrivate
char *x11_display_name;
int status;
time_t creation_time;
GTimer *slave_timer;
GType slave_type;
GTimer *server_timer;
char *x11_cookie;
gsize x11_cookie_size;
......@@ -79,7 +76,6 @@ struct GdmDisplayPrivate
Display *x11_display;
GdmSlave *slave;
GDBusConnection *connection;
GdmDisplayAccessFile *user_access_file;
......@@ -110,7 +106,6 @@ enum {
PROP_X11_COOKIE,
PROP_X11_AUTHORITY_FILE,
PROP_IS_LOCAL,
PROP_SLAVE_TYPE,
PROP_LAUNCH_ENVIRONMENT,
PROP_IS_INITIAL,
PROP_ALLOW_TIMED_LOGIN,
......@@ -378,7 +373,7 @@ gdm_display_add_user_authorization (GdmDisplay *self,
self->priv->user_access_file = access_file;
g_debug ("GdmDisplay: Added user authorization for %s: %s", username, *filename);
/* Remove access for the programs run by slave and greeter now that the
/* Remove access for the programs run by greeter now that the
* user session is starting.
*/
setup_xhost_auth (host_entries, si_entries);
......@@ -388,7 +383,7 @@ gdm_display_add_user_authorization (GdmDisplay *self,
}
XSync (self->priv->x11_display, False);
if (gdm_error_trap_pop ()) {
g_warning ("Failed to remove slave program access to the display. Trying to proceed.");
g_warning ("Failed to remove greeter program access to the display. Trying to proceed.");
}
return TRUE;
......@@ -602,13 +597,6 @@ queue_finish (GdmDisplay *self)
}
}
static void
on_slave_stopped (GdmSlave *slave,
GdmDisplay *self)
{
queue_finish (self);
}
static void
_gdm_display_set_status (GdmDisplay *self,
int status)
......@@ -619,17 +607,10 @@ _gdm_display_set_status (GdmDisplay *self,
}
}
static void
on_slave_started (GdmSlave *slave,
GdmDisplay *self)
{
_gdm_display_set_status (self, GDM_DISPLAY_MANAGED);
}
static void
gdm_display_real_manage (GdmDisplay *self)
{
gdm_slave_start (self->priv->slave);
_gdm_display_set_status (self, GDM_DISPLAY_MANAGED);
}
static gboolean
......@@ -647,17 +628,6 @@ gdm_display_real_prepare (GdmDisplay *self)
_gdm_display_set_status (self, GDM_DISPLAY_PREPARED);
self->priv->slave = GDM_SLAVE (g_object_new (self->priv->slave_type,
"display", self,
NULL));
g_signal_connect_object (self->priv->slave, "started",
G_CALLBACK (on_slave_started),
self,
0);
g_signal_connect_object (self->priv->slave, "stopped",
G_CALLBACK (on_slave_stopped),
self,
0);
return TRUE;
}
......@@ -748,7 +718,7 @@ gdm_display_manage (GdmDisplay *self)
}
}
g_timer_start (self->priv->slave_timer);
g_timer_start (self->priv->server_timer);
look_for_existing_users_and_manage (self);
return TRUE;
......@@ -780,17 +750,7 @@ gdm_display_unmanage (GdmDisplay *self)
g_debug ("GdmDisplay: unmanage display");
g_timer_stop (self->priv->slave_timer);
if (self->priv->slave != NULL) {
g_signal_handlers_disconnect_by_func (self->priv->slave,
G_CALLBACK (on_slave_started), self);
g_signal_handlers_disconnect_by_func (self->priv->slave,
G_CALLBACK (on_slave_stopped), self);
gdm_slave_stop (self->priv->slave);
g_object_unref (self->priv->slave);
self->priv->slave = NULL;
}
g_timer_stop (self->priv->server_timer);
if (self->priv->user_access_file != NULL) {
gdm_display_access_file_close (self->priv->user_access_file);
......@@ -804,7 +764,7 @@ gdm_display_unmanage (GdmDisplay *self)
self->priv->access_file = NULL;
}
elapsed = g_timer_elapsed (self->priv->slave_timer, NULL);
elapsed = g_timer_elapsed (self->priv->server_timer, NULL);
if (elapsed < 3) {
g_warning ("GdmDisplay: display lasted %lf seconds", elapsed);
_gdm_display_set_status (self, GDM_DISPLAY_FAILED);
......@@ -919,13 +879,6 @@ _gdm_display_set_is_local (GdmDisplay *self,
self->priv->is_local = is_local;
}
static void
_gdm_display_set_slave_type (GdmDisplay *self,
GType type)
{
self->priv->slave_type = type;
}
static void
_gdm_display_set_launch_environment (GdmDisplay *self,
GdmLaunchEnvironment *launch_environment)
......@@ -990,9 +943,6 @@ gdm_display_set_property (GObject *object,
case PROP_ALLOW_TIMED_LOGIN:
_gdm_display_set_allow_timed_login (self, g_value_get_boolean (value));
break;
case PROP_SLAVE_TYPE:
_gdm_display_set_slave_type (self, g_value_get_gtype (value));
break;
case PROP_LAUNCH_ENVIRONMENT:
_gdm_display_set_launch_environment (self, g_value_get_object (value));
break;
......@@ -1047,9 +997,6 @@ gdm_display_get_property (GObject *object,
case PROP_IS_LOCAL:
g_value_set_boolean (value, self->priv->is_local);
break;
case PROP_SLAVE_TYPE:
g_value_set_gtype (value, self->priv->slave_type);
break;
case PROP_LAUNCH_ENVIRONMENT:
g_value_set_object (value, self->priv->launch_environment);
break;
......@@ -1373,7 +1320,6 @@ gdm_display_dispose (GObject *object)
g_assert (self->priv->status == GDM_DISPLAY_FINISHED ||
self->priv->status == GDM_DISPLAY_FAILED);
g_assert (self->priv->slave == NULL);
g_assert (self->priv->user_access_file == NULL);
g_assert (self->priv->access_file == NULL);
......@@ -1495,13 +1441,6 @@ gdm_display_class_init (GdmDisplayClass *klass)
NULL,
GDM_TYPE_LAUNCH_ENVIRONMENT,
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_SLAVE_TYPE,
g_param_spec_gtype ("slave-type",
"slave type",
"slave type",
GDM_TYPE_SIMPLE_SLAVE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class,
PROP_STATUS,
g_param_spec_int ("status",
......@@ -1522,7 +1461,7 @@ gdm_display_init (GdmDisplay *self)
self->priv = GDM_DISPLAY_GET_PRIVATE (self);
self->priv->creation_time = time (NULL);
self->priv->slave_timer = g_timer_new ();
self->priv->server_timer = g_timer_new ();
}
static void
......@@ -1557,8 +1496,8 @@ gdm_display_finalize (GObject *object)
g_object_unref (self->priv->user_access_file);
}
if (self->priv->slave_timer != NULL) {
g_timer_destroy (self->priv->slave_timer);
if (self->priv->server_timer != NULL) {
g_timer_destroy (self->priv->server_timer);
}
G_OBJECT_CLASS (gdm_display_parent_class)->finalize (object);
......@@ -1589,14 +1528,26 @@ on_launch_environment_session_started (GdmLaunchEnvironment *launch_environment,
g_debug ("GdmDisplay: Greeter started");
}
static void
self_destruct (GdmDisplay *self)
{
g_object_ref (self);
if (gdm_display_get_status (self) == GDM_DISPLAY_MANAGED) {
gdm_display_unmanage (self);
}
if (gdm_display_get_status (self) != GDM_DISPLAY_FINISHED) {
queue_finish (self);
}
g_object_unref (self);
}
static void
on_launch_environment_session_stopped (GdmLaunchEnvironment *launch_environment,
GdmDisplay *self)
{
g_debug ("GdmDisplay: Greeter stopped");
gdm_slave_stop (self->priv->slave);
g_clear_object (&self->priv->launch_environment);
self_destruct (self);
}
static void
......@@ -1605,7 +1556,7 @@ on_launch_environment_session_exited (GdmLaunchEnvironment *launch_environment,
GdmDisplay *self)
{
g_debug ("GdmDisplay: Greeter exited: %d", code);
gdm_slave_stop (self->priv->slave);
self_destruct (self);
}
static void
......@@ -1614,7 +1565,7 @@ on_launch_environment_session_died (GdmLaunchEnvironment *launch_environment,
GdmDisplay *self)
{
g_debug ("GdmDisplay: Greeter died: %d", signal);
gdm_slave_stop (self->priv->slave);
self_destruct (self);
}
static gboolean
......@@ -1778,6 +1729,22 @@ void
gdm_display_stop_greeter_session (GdmDisplay *self)
{
if (self->priv->launch_environment != NULL) {
g_signal_handlers_disconnect_by_func (self->priv->launch_environment,
G_CALLBACK (on_launch_environment_session_opened),
self);
g_signal_handlers_disconnect_by_func (self->priv->launch_environment,
G_CALLBACK (on_launch_environment_session_started),
self);
g_signal_handlers_disconnect_by_func (self->priv->launch_environment,
G_CALLBACK (on_launch_environment_session_stopped),
self);
g_signal_handlers_disconnect_by_func (self->priv->launch_environment,
G_CALLBACK (on_launch_environment_session_exited),
self);
g_signal_handlers_disconnect_by_func (self->priv->launch_environment,
G_CALLBACK (on_launch_environment_session_died),
self);
gdm_launch_environment_stop (self->priv->launch_environment);
g_clear_object (&self->priv->launch_environment);
}
......@@ -1787,12 +1754,6 @@ gdm_display_stop_greeter_session (GdmDisplay *self)
}
}
GdmSlave *
gdm_display_get_slave (GdmDisplay *self)
{
return self->priv->slave;
}
static void
gdm_display_set_windowpath (GdmDisplay *self)
{
......
......@@ -24,7 +24,6 @@
#include <glib-object.h>
#include <gio/gio.h>
#include "gdm-slave.h"
G_BEGIN_DECLS
......@@ -141,7 +140,6 @@ void gdm_display_set_up_greeter_session (GdmDisplay *dis
char **username);
void gdm_display_start_greeter_session (GdmDisplay *display);
void gdm_display_stop_greeter_session (GdmDisplay *display);
GdmSlave * gdm_display_get_slave (GdmDisplay *display);
gboolean gdm_display_connect (GdmDisplay *self);
......
......@@ -1582,21 +1582,7 @@ on_session_started (GdmSession *session,
GPid pid,
GdmManager *manager)
{
GdmDisplay *display;
g_debug ("GdmManager: session started %d", pid);
display = get_display_for_user_session (session);
if (display != NULL) {
GdmSlave *slave;
const char *session_id;
slave = gdm_display_get_slave (display);
session_id = gdm_session_get_session_id (session);
g_object_set (GDM_SLAVE (slave), "session-id", session_id, NULL);
}
}
static void
......
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
*
* Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "config.h"
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <glib-object.h>
#include <X11/Xlib.h> /* for Display */
#include <act/act-user-manager.h>
#include "gdm-common.h"
#include "gdm-settings-keys.h"
#include "gdm-simple-slave.h"
#include "gdm-server.h"
#include "gdm-session.h"
#include "gdm-session-glue.h"
#include "gdm-launch-environment.h"
#include "gdm-settings-direct.h"
#include "gdm-settings-keys.h"
static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass);
static void gdm_simple_slave_init (GdmSimpleSlave *simple_slave);
G_DEFINE_TYPE (GdmSimpleSlave, gdm_simple_slave, GDM_TYPE_SLAVE)
static void
gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass)
{
}
static void
gdm_simple_slave_init (GdmSimpleSlave *slave)
{
}
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
*
* Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef __GDM_SIMPLE_SLAVE_H
#define __GDM_SIMPLE_SLAVE_H
#include <glib-object.h>
#include "gdm-slave.h"
G_BEGIN_DECLS
#define GDM_TYPE_SIMPLE_SLAVE (gdm_simple_slave_get_type ())
#define GDM_SIMPLE_SLAVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_SIMPLE_SLAVE, GdmSimpleSlave))
#define GDM_SIMPLE_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_SIMPLE_SLAVE, GdmSimpleSlaveClass))
#define GDM_IS_SIMPLE_SLAVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_SIMPLE_SLAVE))
#define GDM_IS_SIMPLE_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_SIMPLE_SLAVE))
#define GDM_SIMPLE_SLAVE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_SIMPLE_SLAVE, GdmSimpleSlaveClass))
typedef struct GdmSimpleSlavePrivate GdmSimpleSlavePrivate;
typedef struct
{
GdmSlave parent;
GdmSimpleSlavePrivate *priv;
} GdmSimpleSlave;
typedef struct
{
GdmSlaveClass parent_class;
} GdmSimpleSlaveClass;
GType gdm_simple_slave_get_type (void);
G_END_DECLS
#endif /* __GDM_SIMPLE_SLAVE_H */
This diff is collapsed.
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
*
* Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef __GDM_SLAVE_H
#define __GDM_SLAVE_H
#include <glib-object.h>
#include <gio/gio.h>
G_BEGIN_DECLS
#define GDM_TYPE_SLAVE (gdm_slave_get_type ())
#define GDM_SLAVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_SLAVE, GdmSlave))
#define GDM_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_SLAVE, GdmSlaveClass))
#define GDM_IS_SLAVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_SLAVE))
#define GDM_IS_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_SLAVE))
#define GDM_SLAVE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_SLAVE, GdmSlaveClass))
typedef struct GdmSlavePrivate GdmSlavePrivate;
typedef struct
{
GObject parent;
GdmSlavePrivate *priv;
} GdmSlave;
typedef struct
{
GObjectClass parent_class;
/* methods */
gboolean (*start) (GdmSlave *slave);
gboolean (*stop) (GdmSlave *slave);
/* signals */
void (*stopped) (GdmSlave *slave);
} GdmSlaveClass;
typedef enum
{
GDM_SLAVE_ERROR_GENERIC,
GDM_SLAVE_ERROR_UNSUPPORTED,
GDM_SLAVE_ERROR_NOT_OPENED,
GDM_SLAVE_ERROR_WRONG_SESSION,
} GdmSlaveError;
#define GDM_SLAVE_ERROR (gdm_slave_error_quark ())
GQuark gdm_slave_error_quark (void);
GType gdm_slave_get_type (void);
gboolean gdm_slave_start (GdmSlave *slave);
gboolean gdm_slave_stop (GdmSlave *slave);
gboolean gdm_slave_get_timed_login_details (GdmSlave *slave,
gboolean *enabled,
char **username,
int *delay);
gboolean gdm_slave_add_user_authorization (GdmSlave *slave,
const char *username,
char **filename);
gboolean gdm_slave_connect_to_x11_display (GdmSlave *slave);
G_END_DECLS
#endif /* __GDM_SLAVE_H */
......@@ -38,7 +38,6 @@
#include "gdm-display.h"
#include "gdm-launch-environment.h"
#include "gdm-xdmcp-chooser-display.h"
#include "gdm-xdmcp-chooser-slave.h"
#include "gdm-common.h"
#include "gdm-address.h"
......@@ -134,7 +133,6 @@ gdm_xdmcp_chooser_display_new (const char *hostname,
x11_display = g_strdup_printf ("%s:%d", hostname, number);
object = g_object_new (GDM_TYPE_XDMCP_CHOOSER_DISPLAY,
"slave-type", GDM_TYPE_XDMCP_CHOOSER_SLAVE,
"remote-hostname", hostname,
"x11-display-number", number,
"x11-display-name", x11_display,
......
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
*
* Copyright (C) 2008 William Jon McCann <jmccann@redhat.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "config.h"
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <glib-object.h>
#include <X11/Xlib.h> /* for Display */
#include "gdm-common.h"
#include "gdm-xdmcp-chooser-slave.h"
#include "gdm-server.h"
#include "gdm-launch-environment.h"
#include "gdm-settings-direct.h"
#include "gdm-settings-keys.h"
#include "gdm-session.h"
#define GDM_XDMCP_CHOOSER_SLAVE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_XDMCP_CHOOSER_SLAVE, GdmXdmcpChooserSlavePrivate))
#define GDM_DBUS_NAME "org.gnome.DisplayManager"
#define GDM_DBUS_DISPLAY_INTERFACE "org.gnome.DisplayManager.Display"
#define MAX_CONNECT_ATTEMPTS 10
#define DEFAULT_PING_INTERVAL 15
struct GdmXdmcpChooserSlavePrivate
{
char *id;
GPid pid;
int ping_interval;
guint connection_attempts;
};
enum {
LAST_SIGNAL
};
static guint signals [LAST_SIGNAL] = { 0, };
static void gdm_xdmcp_chooser_slave_class_init (GdmXdmcpChooserSlaveClass *klass);
static void gdm_xdmcp_chooser_slave_init (GdmXdmcpChooserSlave *xdmcp_chooser_slave);
static void gdm_xdmcp_chooser_slave_finalize (GObject *object);
G_DEFINE_TYPE (GdmXdmcpChooserSlave, gdm_xdmcp_chooser_slave, GDM_TYPE_SLAVE)
static void
gdm_xdmcp_chooser_slave_class_init (GdmXdmcpChooserSlaveClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gdm_xdmcp_chooser_slave_finalize;
g_type_class_add_private (klass, sizeof (GdmXdmcpChooserSlavePrivate));
}
static void
gdm_xdmcp_chooser_slave_init (GdmXdmcpChooserSlave *slave)
{
slave->priv = GDM_XDMCP_CHOOSER_SLAVE_GET_PRIVATE (slave);
}
static void
gdm_xdmcp_chooser_slave_finalize (GObject *object)
{
GdmXdmcpChooserSlave *xdmcp_chooser_slave;
g_return_if_fail (object != NULL);
g_return_if_fail (GDM_IS_XDMCP_CHOOSER_SLAVE (object));
xdmcp_chooser_slave = GDM_XDMCP_CHOOSER_SLAVE (object);
g_return_if_fail (xdmcp_chooser_slave->priv != NULL);
G_OBJECT_CLASS (gdm_xdmcp_chooser_slave_parent_class)->finalize (object);
}
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
*
* Copyright (C) 2008 William Jon McCann <jmccann@redhat.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef __GDM_XDMCP_CHOOSER_SLAVE_H
#define __GDM_XDMCP_CHOOSER_SLAVE_H
#include <glib-object.h>
#include "gdm-slave.h"
G_BEGIN_DECLS
#define GDM_TYPE_XDMCP_CHOOSER_SLAVE (gdm_xdmcp_chooser_slave_get_type ())
#define GDM_XDMCP_CHOOSER_SLAVE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_XDMCP_CHOOSER_SLAVE, GdmXdmcpChooserSlave))
#define GDM_XDMCP_CHOOSER_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_XDMCP_CHOOSER_SLAVE, GdmXdmcpChooserSlaveClass))
#define GDM_IS_XDMCP_CHOOSER_SLAVE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_XDMCP_CHOOSER_SLAVE))
#define GDM_IS_XDMCP_CHOOSER_SLAVE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_XDMCP_CHOOSER_SLAVE))
#define GDM_XDMCP_CHOOSER_SLAVE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_XDMCP_CHOOSER_SLAVE, GdmXdmcpChooserSlaveClass))
typedef struct GdmXdmcpChooserSlavePrivate GdmXdmcpChooserSlavePrivate;
typedef struct
{
GdmSlave parent;
GdmXdmcpChooserSlavePrivate *priv;
} GdmXdmcpChooserSlave;
typedef struct
{
GdmSlaveClass parent_class;
} GdmXdmcpChooserSlaveClass;
GType gdm_xdmcp_chooser_slave_get_type (void);
G_END_DECLS
#endif /* __GDM_XDMCP_CHOOSER_SLAVE_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment