28
29
#include <dbus/dbus-glib-bindings.h>
30
31
#include <libindicator/indicator.h>
32
INDICATOR_SET_NAME("users-status-session")
32
#include <libindicator/indicator-object.h>
34
34
#include "dbus-shared-names.h"
35
35
#include "status-service-client.h"
37
#define INDICATOR_SESSION_TYPE (indicator_session_get_type ())
38
#define INDICATOR_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INDICATOR_SESSION_TYPE, IndicatorSession))
39
#define INDICATOR_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INDICATOR_SESSION_TYPE, IndicatorSessionClass))
40
#define IS_INDICATOR_SESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INDICATOR_SESSION_TYPE))
41
#define IS_INDICATOR_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INDICATOR_SESSION_TYPE))
42
#define INDICATOR_SESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), INDICATOR_SESSION_TYPE, IndicatorSessionClass))
44
typedef struct _IndicatorSession IndicatorSession;
45
typedef struct _IndicatorSessionClass IndicatorSessionClass;
47
struct _IndicatorSessionClass {
48
IndicatorObjectClass parent_class;
51
struct _IndicatorSession {
52
IndicatorObject parent;
55
GType indicator_session_get_type (void);
59
INDICATOR_SET_TYPE(INDICATOR_SESSION_TYPE)
37
62
static DbusmenuGtkClient * status_client = NULL;
38
63
static DbusmenuGtkClient * users_client = NULL;
39
64
static DbusmenuGtkClient * session_client = NULL;
60
86
static void child_added (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint position, gpointer section);
61
87
static guint status_menu_pos_offset (void);
62
88
static guint users_menu_pos_offset (void);
64
90
static void child_realized (DbusmenuMenuitem * child, gpointer userdata);
65
91
static gboolean start_service (gpointer userdata);
66
92
static void start_service_phase2 (DBusGProxy * proxy, guint status, GError * error, gpointer data);
93
static GtkLabel * get_label (IndicatorObject * io);
94
static GtkImage * get_icon (IndicatorObject * io);
95
static GtkMenu * get_menu (IndicatorObject * io);
97
static void indicator_session_class_init (IndicatorSessionClass *klass);
98
static void indicator_session_init (IndicatorSession *self);
99
static void indicator_session_dispose (GObject *object);
100
static void indicator_session_finalize (GObject *object);
102
G_DEFINE_TYPE (IndicatorSession, indicator_session, INDICATOR_OBJECT_TYPE);
105
indicator_session_class_init (IndicatorSessionClass *klass)
107
GObjectClass *object_class = G_OBJECT_CLASS (klass);
109
object_class->dispose = indicator_session_dispose;
110
object_class->finalize = indicator_session_finalize;
112
IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass);
113
io_class->get_label = get_label;
114
io_class->get_image = get_icon;
115
io_class->get_menu = get_menu;
121
indicator_session_init (IndicatorSession *self)
128
indicator_session_dispose (GObject *object)
131
G_OBJECT_CLASS (indicator_session_parent_class)->dispose (object);
136
indicator_session_finalize (GObject *object)
139
G_OBJECT_CLASS (indicator_session_parent_class)->finalize (object);
144
get_label (IndicatorObject * io)
71
146
GtkLabel * returnval = GTK_LABEL(gtk_label_new(g_get_user_name()));
72
147
gtk_widget_show(GTK_WIDGET(returnval));
152
get_icon (IndicatorObject * io)
79
154
g_debug("Changing status icon: '%s'", "system-shutdown-panel");
80
155
status_image = GTK_IMAGE(gtk_image_new_from_icon_name("system-shutdown-panel", GTK_ICON_SIZE_MENU));
277
352
status_icon_changed (DBusGProxy * proxy, gchar * icon, gpointer userdata)
279
354
return status_icon_cb(proxy, icon, NULL, NULL);
540
615
/* Indicator based function to get the menu for the whole
541
616
applet. This starts up asking for the parts of the menu
542
617
from the various services. */
619
get_menu (IndicatorObject * io)
546
621
connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
547
622
proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS);