2
* Fast User Switch Applet: status-manager.c
4
* Copyright (C) 2008 Canonical, Ltd.
6
* Ted Gould <ted@canonical.com>
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation; either version 2 of the License, or
11
* (at your option) any later version.
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, write to the Free Software
20
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
#include "applet-signaler.h"
25
#define PANEL_APPLET_SIGNALER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PANEL_TYPE_APPLET_SIGNALER, PanelAppletSignalerClass))
26
#define PANEL_IS_APPLET_SIGNALER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PANEL_TYPE_APPLET_SIGNALER))
27
#define PANEL_APPLET_SIGNALER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), PANEL_TYPE_APPLET_SIGNALER, PanelAppletSignalerClass))
36
struct _PanelAppletSignaler
41
typedef struct _PanelAppletSignalerClass
43
GObjectClass parent_class;
45
PanelAppletSignalerFunc applet_added;
46
PanelAppletSignalerFunc applet_removed;
48
PanelAppletSignalerClass;
50
guint signals[LAST_SIGNAL] = {0};
52
G_DEFINE_TYPE (PanelAppletSignaler, panel_applet_signaler, G_TYPE_OBJECT);
55
panel_applet_signaler_finalize (GObject * obj)
61
panel_applet_signaler_class_init (PanelAppletSignalerClass * class)
64
gobj = G_OBJECT_CLASS(class);
66
gobj->finalize = panel_applet_signaler_finalize;
69
signals[APPLET_ADDED] = g_signal_new (PANEL_APPLET_SIGNALER_SIGNAL_APPLET_ADDED,
70
G_TYPE_FROM_CLASS(class),
72
G_STRUCT_OFFSET(PanelAppletSignalerClass, applet_added),
73
NULL, NULL, /* accumulator */
74
g_cclosure_marshal_VOID__POINTER,
75
G_TYPE_NONE, /* Return value */
76
1, G_TYPE_POINTER); /* Parameters */
78
signals[APPLET_REMOVED] = g_signal_new (PANEL_APPLET_SIGNALER_SIGNAL_APPLET_REMOVED,
79
G_TYPE_FROM_CLASS(class),
81
G_STRUCT_OFFSET(PanelAppletSignalerClass, applet_removed),
82
NULL, NULL, /* accumulator */
83
g_cclosure_marshal_VOID__POINTER,
84
G_TYPE_NONE, /* Return value */
85
1, G_TYPE_POINTER); /* Parameters */
91
panel_applet_signaler_init (PanelAppletSignaler * pas)
96
static PanelAppletSignaler * default_signaler = NULL;
99
panel_applet_signaler_get_default (void)
101
if (default_signaler == NULL) {
102
default_signaler = g_object_new(PANEL_TYPE_APPLET_SIGNALER, NULL);
103
g_object_add_weak_pointer(G_OBJECT(default_signaler),
104
(gpointer *)&default_signaler);
107
return default_signaler;
110
static guint applet_count = 0;
113
panel_applet_signaler_add_applet (AppletInfo * applet)
115
/* Ensure that one is created */
116
PanelAppletSignaler * signaler = panel_applet_signaler_get_default();
118
g_signal_emit(signaler, signals[APPLET_ADDED], NULL, applet);
124
panel_applet_signaler_remove_applet (AppletInfo * applet)
126
/* Ensure that one is created */
127
PanelAppletSignaler * signaler = panel_applet_signaler_get_default();
129
g_signal_emit(signaler, signals[APPLET_REMOVED], NULL, applet);