1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
2  *
3  * Copyright (C) 2008 Red Hat, Inc.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  *
19  */
20 
21 #include "config.h"
22 
23 #include <stdlib.h>
24 #include <stdio.h>
25 #include <unistd.h>
26 #include <string.h>
27 #include <errno.h>
28 
29 #include <glib.h>
30 #include <glib/gi18n.h>
31 #include <glib-object.h>
32 
33 #include "gdm-address.h"
34 #include "gdm-chooser-host.h"
35 
36 #define GDM_CHOOSER_HOST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_CHOOSER_HOST, GdmChooserHostPrivate))
37 
38 struct GdmChooserHostPrivate
39 {
40         GdmAddress        *address;
41         char              *description;
42         GdmChooserHostKind kind;
43         gboolean           willing;
44 };
45 
46 enum {
47         PROP_0,
48         PROP_ADDRESS,
49         PROP_DESCRIPTION,
50         PROP_KIND,
51         PROP_WILLING,
52 };
53 
54 static void     gdm_chooser_host_class_init  (GdmChooserHostClass *klass);
55 static void     gdm_chooser_host_init        (GdmChooserHost      *chooser_host);
56 static void     gdm_chooser_host_finalize    (GObject             *object);
57 
G_DEFINE_TYPE(GdmChooserHost,gdm_chooser_host,G_TYPE_OBJECT)58 G_DEFINE_TYPE (GdmChooserHost, gdm_chooser_host, G_TYPE_OBJECT)
59 
60 GdmAddress *
61 gdm_chooser_host_get_address (GdmChooserHost *host)
62 {
63         g_return_val_if_fail (GDM_IS_CHOOSER_HOST (host), NULL);
64 
65         return host->priv->address;
66 }
67 
68 G_CONST_RETURN char *
gdm_chooser_host_get_description(GdmChooserHost * host)69 gdm_chooser_host_get_description (GdmChooserHost *host)
70 {
71         g_return_val_if_fail (GDM_IS_CHOOSER_HOST (host), NULL);
72 
73         return host->priv->description;
74 }
75 
76 GdmChooserHostKind
gdm_chooser_host_get_kind(GdmChooserHost * host)77 gdm_chooser_host_get_kind (GdmChooserHost *host)
78 {
79         g_return_val_if_fail (GDM_IS_CHOOSER_HOST (host), 0);
80 
81         return host->priv->kind;
82 }
83 
84 gboolean
gdm_chooser_host_get_willing(GdmChooserHost * host)85 gdm_chooser_host_get_willing (GdmChooserHost *host)
86 {
87         g_return_val_if_fail (GDM_IS_CHOOSER_HOST (host), FALSE);
88 
89         return host->priv->willing;
90 }
91 
92 static void
_gdm_chooser_host_set_address(GdmChooserHost * host,GdmAddress * address)93 _gdm_chooser_host_set_address (GdmChooserHost *host,
94                                GdmAddress     *address)
95 {
96         if (host->priv->address != NULL) {
97                 gdm_address_free (host->priv->address);
98         }
99 
100         g_assert (address != NULL);
101 
102         gdm_address_debug (address);
103         host->priv->address = gdm_address_copy (address);
104 }
105 
106 static void
_gdm_chooser_host_set_description(GdmChooserHost * host,const char * description)107 _gdm_chooser_host_set_description (GdmChooserHost *host,
108                                    const char     *description)
109 {
110         g_free (host->priv->description);
111         host->priv->description = g_strdup (description);
112 }
113 
114 static void
_gdm_chooser_host_set_kind(GdmChooserHost * host,int kind)115 _gdm_chooser_host_set_kind (GdmChooserHost *host,
116                             int             kind)
117 {
118         if (host->priv->kind != kind) {
119                 host->priv->kind = kind;
120         }
121 }
122 
123 static void
_gdm_chooser_host_set_willing(GdmChooserHost * host,gboolean willing)124 _gdm_chooser_host_set_willing (GdmChooserHost *host,
125                                gboolean        willing)
126 {
127         if (host->priv->willing != willing) {
128                 host->priv->willing = willing;
129         }
130 }
131 
132 static void
gdm_chooser_host_set_property(GObject * object,guint param_id,const GValue * value,GParamSpec * pspec)133 gdm_chooser_host_set_property (GObject      *object,
134                                guint         param_id,
135                                const GValue *value,
136                                GParamSpec   *pspec)
137 {
138         GdmChooserHost *host;
139 
140         host = GDM_CHOOSER_HOST (object);
141 
142         switch (param_id) {
143         case PROP_ADDRESS:
144                 _gdm_chooser_host_set_address (host, g_value_get_boxed (value));
145                 break;
146         case PROP_DESCRIPTION:
147                 _gdm_chooser_host_set_description (host, g_value_get_string (value));
148                 break;
149         case PROP_KIND:
150                 _gdm_chooser_host_set_kind (host, g_value_get_int (value));
151                 break;
152         case PROP_WILLING:
153                 _gdm_chooser_host_set_willing (host, g_value_get_boolean (value));
154                 break;
155         default:
156                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
157                 break;
158         }
159 }
160 
161 static void
gdm_chooser_host_get_property(GObject * object,guint param_id,GValue * value,GParamSpec * pspec)162 gdm_chooser_host_get_property (GObject    *object,
163                                guint       param_id,
164                                GValue     *value,
165                                GParamSpec *pspec)
166 {
167         GdmChooserHost *host;
168 
169         host = GDM_CHOOSER_HOST (object);
170 
171         switch (param_id) {
172         case PROP_ADDRESS:
173                 g_value_set_boxed (value, host->priv->address);
174                 break;
175         case PROP_DESCRIPTION:
176                 g_value_set_string (value, host->priv->description);
177                 break;
178         case PROP_KIND:
179                 g_value_set_int (value, host->priv->kind);
180                 break;
181         case PROP_WILLING:
182                 g_value_set_boolean (value, host->priv->willing);
183                 break;
184         default:
185                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
186                 break;
187         }
188 }
189 
190 static void
gdm_chooser_host_class_init(GdmChooserHostClass * klass)191 gdm_chooser_host_class_init (GdmChooserHostClass *klass)
192 {
193         GObjectClass   *object_class = G_OBJECT_CLASS (klass);
194 
195         object_class->set_property = gdm_chooser_host_set_property;
196         object_class->get_property = gdm_chooser_host_get_property;
197         object_class->finalize = gdm_chooser_host_finalize;
198 
199 
200         g_object_class_install_property (object_class,
201                                          PROP_ADDRESS,
202                                          g_param_spec_boxed ("address",
203                                                              "address",
204                                                              "address",
205                                                              GDM_TYPE_ADDRESS,
206                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
207         g_object_class_install_property (object_class,
208                                          PROP_DESCRIPTION,
209                                          g_param_spec_string ("description",
210                                                               "description",
211                                                               "description",
212                                                               NULL,
213                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
214 
215         g_object_class_install_property (object_class,
216                                          PROP_KIND,
217                                          g_param_spec_int ("kind",
218                                                            "kind",
219                                                            "kind",
220                                                            0,
221                                                            G_MAXINT,
222                                                            0,
223                                                            G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
224         g_object_class_install_property (object_class,
225                                          PROP_WILLING,
226                                          g_param_spec_boolean ("willing",
227                                                                "willing",
228                                                                "willing",
229                                                                FALSE,
230                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
231 
232 
233         g_type_class_add_private (klass, sizeof (GdmChooserHostPrivate));
234 }
235 
236 static void
gdm_chooser_host_init(GdmChooserHost * widget)237 gdm_chooser_host_init (GdmChooserHost *widget)
238 {
239         widget->priv = GDM_CHOOSER_HOST_GET_PRIVATE (widget);
240 }
241 
242 static void
gdm_chooser_host_finalize(GObject * object)243 gdm_chooser_host_finalize (GObject *object)
244 {
245         GdmChooserHost *host;
246 
247         g_return_if_fail (object != NULL);
248         g_return_if_fail (GDM_IS_CHOOSER_HOST (object));
249 
250         host = GDM_CHOOSER_HOST (object);
251 
252         g_return_if_fail (host->priv != NULL);
253 
254         g_free (host->priv->description);
255         gdm_address_free (host->priv->address);
256 
257         G_OBJECT_CLASS (gdm_chooser_host_parent_class)->finalize (object);
258 }
259