1
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2
/* server-interface-check.h
4
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of version 2 of the GNU Lesser General Public
8
* License as published by the Free Software Foundation.
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 GNU
13
* General Public License for more details.
15
* You should have received a copy of the GNU Lesser General Public
16
* License along with this program; if not, write to the
17
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18
* Boston, MA 02110-1301, USA.
20
* Author: Sivaiah Nallagatla <snallagatla@novell.com>
23
/*Note : Copied from src/offline_listener.c . This should be replaced */
24
/* with network manager code */
30
#include "e-offline-listener.h"
31
#include <gconf/gconf-client.h>
33
G_DEFINE_TYPE (EOfflineListener, e_offline_listener, G_TYPE_OBJECT)
40
static guint signals[NUM_SIGNALS] = { 0 };
42
static GObjectClass *parent_class = NULL;
44
struct _EOfflineListenerPrivate
46
GConfClient *default_client;
47
gboolean is_offline_now;
51
set_online_status (EOfflineListener *eol, gboolean is_offline)
53
EOfflineListenerPrivate *priv;
57
g_signal_emit (eol, signals[CHANGED], 0);
61
online_status_changed (GConfClient *client, gint cnxn_id, GConfEntry *entry, gpointer data)
65
EOfflineListener *eol;
66
EOfflineListenerPrivate *priv;
68
eol = E_OFFLINE_LISTENER (data);
69
g_return_if_fail (eol != NULL);
73
value = gconf_entry_get_value (entry);
75
offline = gconf_value_get_bool (value);
77
if (priv->is_offline_now != offline) {
78
priv->is_offline_now = offline;
80
set_online_status (eol, offline);
85
setup_offline_listener (EOfflineListener *eol)
87
EOfflineListenerPrivate *priv = eol->priv;
89
priv->default_client = gconf_client_get_default ();
90
gconf_client_add_dir (priv->default_client, "/apps/evolution/shell", GCONF_CLIENT_PRELOAD_RECURSIVE,NULL);
91
gconf_client_notify_add (priv->default_client, "/apps/evolution/shell/start_offline",
92
(GConfClientNotifyFunc)online_status_changed,
95
priv->is_offline_now = gconf_client_get_bool (priv->default_client, "/apps/evolution/shell/start_offline", NULL);
96
set_online_status (eol, priv->is_offline_now);
100
* e_offline_listener_new:
102
* Returns a new #EOfflineListener.
104
* Returns: a new #EOfflineListener
109
e_offline_listener_new (void)
111
EOfflineListener *eol = g_object_new (E_TYPE_OFFLINE_LISTENER, NULL);
113
setup_offline_listener (eol);
119
e_offline_listener_dispose (GObject *object)
121
EOfflineListener *eol = E_OFFLINE_LISTENER (object);
122
if (eol->priv->default_client) {
123
g_object_unref (eol->priv->default_client);
124
eol->priv->default_client = NULL;
127
(* G_OBJECT_CLASS (parent_class)->dispose) (object);
131
e_offline_listener_finalize (GObject *object)
133
EOfflineListener *eol;
134
EOfflineListenerPrivate *priv;
136
eol = E_OFFLINE_LISTENER (object);
142
parent_class->finalize (object);
146
e_offline_listener_init (EOfflineListener *eol)
148
EOfflineListenerPrivate *priv;
150
priv = g_new0 (EOfflineListenerPrivate, 1);
155
e_offline_listener_class_init (EOfflineListenerClass *klass)
157
GObjectClass *object_class;
159
parent_class = g_type_class_peek_parent (klass);
161
object_class = G_OBJECT_CLASS (klass);
162
object_class->dispose = e_offline_listener_dispose;
163
object_class->finalize = e_offline_listener_finalize;
166
g_signal_new ("changed",
167
G_OBJECT_CLASS_TYPE (object_class),
169
G_STRUCT_OFFSET (EOfflineListenerClass, changed),
171
g_cclosure_marshal_VOID__VOID,
176
* e_offline_listener_get_state:
177
* @eol: an #EOfflineListener
183
EOfflineListenerState
184
e_offline_listener_get_state (EOfflineListener *eol)
186
g_return_val_if_fail (E_IS_OFFLINE_LISTENER (eol), EOL_STATE_OFFLINE);
188
return eol->priv->is_offline_now ? EOL_STATE_OFFLINE : EOL_STATE_ONLINE;