aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-03-31 22:02:37 -0500
committerTed Gould <ted@gould.cx>2010-03-31 22:02:37 -0500
commit9cb54c4aaf962d82db6af1225c2b854215c9ae0f (patch)
tree6ca2baecd4df463cef468368df652e0b0a08867b
parente270510a962a72df7452230ca02ab477ac909800 (diff)
parent3dcc91b1d7d8f8c5cb9e713eeab8c7fcf2437e30 (diff)
downloadayatana-indicator-messages-9cb54c4aaf962d82db6af1225c2b854215c9ae0f.tar.gz
ayatana-indicator-messages-9cb54c4aaf962d82db6af1225c2b854215c9ae0f.tar.bz2
ayatana-indicator-messages-9cb54c4aaf962d82db6af1225c2b854215c9ae0f.zip
Fixes to the placement of notifications and their visibility. Lots of lovely cleanups.
-rw-r--r--src/app-menu-item.c4
-rw-r--r--src/indicator-messages.c4
-rw-r--r--src/messages-service.c31
3 files changed, 28 insertions, 11 deletions
diff --git a/src/app-menu-item.c b/src/app-menu-item.c
index 87423c0..ef30333 100644
--- a/src/app-menu-item.c
+++ b/src/app-menu-item.c
@@ -128,6 +128,8 @@ app_menu_item_init (AppMenuItem *self)
priv->root = NULL;
priv->shortcuts = NULL;
+ dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
+
return;
}
@@ -317,6 +319,8 @@ desktop_cb (IndicateListener * listener, IndicateListenerServer * server, gchar
priv->desktop = g_strdup(value);
+ dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
+
update_label(self);
const gchar * def_icon = get_default_icon(priv->desktop);
diff --git a/src/indicator-messages.c b/src/indicator-messages.c
index 48b9abf..f47eccd 100644
--- a/src/indicator-messages.c
+++ b/src/indicator-messages.c
@@ -384,8 +384,6 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GValue * value, i
g_object_unref(resized_pixbuf);
}
}
- } else {
- g_warning("Indicator Item property '%s' unknown", prop);
}
return;
@@ -467,7 +465,7 @@ new_indicator_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusm
dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent);
g_signal_connect(G_OBJECT(newitem), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(indicator_prop_change_cb), mi_data);
- g_signal_connect(G_OBJECT(newitem), "destroyed", G_CALLBACK(g_free), mi_data);
+ g_object_weak_ref(G_OBJECT(newitem), (GWeakNotify)g_free, mi_data);
return TRUE;
}
diff --git a/src/messages-service.c b/src/messages-service.c
index f751d77..88da0e0 100644
--- a/src/messages-service.c
+++ b/src/messages-service.c
@@ -562,10 +562,6 @@ server_added (IndicateListener * listener, IndicateListenerServer * server, gcha
sl_item->attention = FALSE;
sl_item->count = 0;
- /* Build a separator */
- sl_item->separator = dbusmenu_menuitem_new();
- dbusmenu_menuitem_property_set(sl_item->separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR);
-
/* Incase we got an indicator first */
GList * alreadythere = g_list_find_custom(serverList, sl_item, serverList_equal);
if (alreadythere != NULL) {
@@ -579,6 +575,10 @@ server_added (IndicateListener * listener, IndicateListenerServer * server, gcha
serverList = g_list_insert_sorted(serverList, sl_item, serverList_sort);
}
+ /* Build a separator */
+ sl_item->separator = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set(sl_item->separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR);
+
/* Connect the signals up to the menu item */
g_signal_connect(G_OBJECT(menuitem), APP_MENU_ITEM_SIGNAL_COUNT_CHANGED, G_CALLBACK(server_count_changed), sl_item);
g_signal_connect(G_OBJECT(menuitem), APP_MENU_ITEM_SIGNAL_NAME_CHANGED, G_CALLBACK(server_name_changed), menushell);
@@ -794,15 +794,16 @@ menushell_foreach_cb (DbusmenuMenuitem * data_mi, gpointer data_ms) {
if (msl->found) return;
- msl->position++;
-
if (!IS_APP_MENU_ITEM(data_mi)) {
+ msl->position++;
return;
}
AppMenuItem * appmenu = APP_MENU_ITEM(data_mi);
if (!g_strcmp0(INDICATE_LISTENER_SERVER_DBUS_NAME((IndicateListenerServer*)msl->server), INDICATE_LISTENER_SERVER_DBUS_NAME(app_menu_item_get_server(appmenu)))) {
msl->found = TRUE;
+ } else {
+ msl->position++;
}
return;
@@ -904,6 +905,13 @@ resort_menu (DbusmenuMenuitem * menushell)
if (imi->menuitem != NULL) {
g_debug("\tMoving indicator on %s id %d to position %d", INDICATE_LISTENER_SERVER_DBUS_NAME(imi->server), INDICATE_LISTENER_INDICATOR_ID(imi->indicator), position);
+
+ if (si->menuitem == NULL || !dbusmenu_menuitem_property_get_bool(DBUSMENU_MENUITEM(si->menuitem), DBUSMENU_MENUITEM_PROP_VISIBLE)) {
+ dbusmenu_menuitem_property_set_bool(imi->menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
+ } else {
+ dbusmenu_menuitem_property_set_bool(imi->menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
+ }
+
dbusmenu_menuitem_child_reorder(DBUSMENU_MENUITEM(menushell), DBUSMENU_MENUITEM(imi->menuitem), position);
position++;
}
@@ -912,10 +920,17 @@ resort_menu (DbusmenuMenuitem * menushell)
/* Lastly putting the separator in */
if (si->separator != NULL) {
g_debug("\tMoving app %s separator to position %d", INDICATE_LISTENER_SERVER_DBUS_NAME(si->server), position);
+
+ if (si->menuitem == NULL || !dbusmenu_menuitem_property_get_bool(DBUSMENU_MENUITEM(si->menuitem), DBUSMENU_MENUITEM_PROP_VISIBLE)) {
+ dbusmenu_menuitem_property_set_bool(si->separator, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
+ /* Note, this isn't the last if we can't see it */
+ } else {
+ dbusmenu_menuitem_property_set_bool(si->separator, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
+ last_separator = si->separator;
+ }
+
dbusmenu_menuitem_child_reorder(DBUSMENU_MENUITEM(menushell), DBUSMENU_MENUITEM(si->separator), position);
- dbusmenu_menuitem_property_set_bool(si->separator, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
position++;
- last_separator = si->separator;
}
}