aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-08-27 12:53:11 -0500
committerTed Gould <ted@canonical.com>2009-08-27 12:53:11 -0500
commitafc824d8ca3cd0465d5700c8afbe07fb932c00c9 (patch)
tree1926914c224f8c96d174280fd31f2b38854e249e /src
parent78f43614f7b138d092c6ca823ea0ce95b94c30e6 (diff)
parent1765940759064c0d7cd8428a3c89fa862f24f076 (diff)
downloadayatana-indicator-session-afc824d8ca3cd0465d5700c8afbe07fb932c00c9.tar.gz
ayatana-indicator-session-afc824d8ca3cd0465d5700c8afbe07fb932c00c9.tar.bz2
ayatana-indicator-session-afc824d8ca3cd0465d5700c8afbe07fb932c00c9.zip
Merge from upstream
Diffstat (limited to 'src')
-rw-r--r--src/indicator-session.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/indicator-session.c b/src/indicator-session.c
index 07efc86..43c568f 100644
--- a/src/indicator-session.c
+++ b/src/indicator-session.c
@@ -61,6 +61,7 @@ static void child_added (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, gu
static guint status_menu_pos_offset (void);
static guint users_menu_pos_offset (void);
static guint session_menu_pos_offset (void);
+static void child_realized (DbusmenuMenuitem * child, gpointer userdata);
GtkLabel *
get_label (void)
@@ -79,14 +80,44 @@ get_icon (void)
return status_image;
}
+typedef struct _realized_data_t realized_data_t;
+struct _realized_data_t {
+ guint position;
+ section_t section;
+};
+
static void
child_added (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint position, gpointer section)
{
+ realized_data_t * data = g_new0(realized_data_t, 1);
+ if (data == NULL) {
+ g_warning("Unable to allocate data for realization of item");
+ return;
+ }
+
+ data->position = position;
+ data->section = GPOINTER_TO_UINT(section);
+
+ g_signal_connect(G_OBJECT(child), DBUSMENU_MENUITEM_SIGNAL_REALIZED, G_CALLBACK(child_realized), data);
+ return;
+}
+
+static void
+child_realized (DbusmenuMenuitem * child, gpointer userdata)
+{
+ g_return_if_fail(userdata != NULL);
+ g_return_if_fail(DBUSMENU_IS_MENUITEM(child));
+
+ realized_data_t * data = (realized_data_t *)userdata;
+ guint position = data->position;
+ section_t section = data->section;
+ g_free(data);
+
DbusmenuGtkClient * client = NULL;
gchar * errorstr = NULL;
guint (*posfunc) (void) = NULL;
- switch (GPOINTER_TO_UINT(section)) {
+ switch (section) {
case STATUS_SECTION:
client = status_client;
errorstr = "Status";