aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-08-27 13:39:28 -0500
committerTed Gould <ted@canonical.com>2009-08-27 13:39:28 -0500
commit41f1b3206ab13b008aed6670dc42636049c9590d (patch)
treeaf7b92db9ef4f7d14f85e9a8268bf200a332a742 /src
parenta4b4a9271212b8a9370fb7aa461302c6f9a97111 (diff)
parentcc8a87dfca40afd26ab6989db11dd63ea2eccf5c (diff)
downloadayatana-indicator-session-41f1b3206ab13b008aed6670dc42636049c9590d.tar.gz
ayatana-indicator-session-41f1b3206ab13b008aed6670dc42636049c9590d.tar.bz2
ayatana-indicator-session-41f1b3206ab13b008aed6670dc42636049c9590d.zip
Merging in a branch to use the new dbusmenu API and make it more stable overall.0.1
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";