aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/messages-service.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/messages-service.c b/src/messages-service.c
index e5471ce..990cb3c 100644
--- a/src/messages-service.c
+++ b/src/messages-service.c
@@ -674,6 +674,11 @@ check_hidden (void)
return;
}
+/* This function takes care of putting the menu in the right order.
+ It basically it rebuilds the order by looking through all the
+ applications and launchers and puts them in the right place. The
+ menu functions will handle the cases where they don't move so this
+ is a good way to ensure everything is right. */
static void
resort_menu (DbusmenuMenuitem * menushell)
{
@@ -686,13 +691,21 @@ resort_menu (DbusmenuMenuitem * menushell)
for (serverentry = serverList; serverentry != NULL; serverentry = serverentry->next) {
serverList_t * si = (serverList_t *)serverentry->data;
+ /* Looking to see if there are any launchers we need to insert
+ into the menu structure. We put as many as we need to. */
if (launcherentry != NULL) {
launcherList_t * li = (launcherList_t *)launcherentry->data;
while (launcherentry != NULL && g_strcmp0(launcher_menu_item_get_name(li->menuitem), app_menu_item_get_name(si->menuitem)) < 0) {
+ /* Putting the launcher item in */
g_debug("\tMoving launcher '%s' to position %d", launcher_menu_item_get_name(li->menuitem), position);
dbusmenu_menuitem_child_reorder(DBUSMENU_MENUITEM(menushell), DBUSMENU_MENUITEM(li->menuitem), position);
+ position++;
+ /* Putting the launcher separator in */
+ g_debug("\tMoving launcher separator to position %d", position);
+ dbusmenu_menuitem_child_reorder(DBUSMENU_MENUITEM(menushell), DBUSMENU_MENUITEM(li->separator), position);
position++;
+
launcherentry = launcherentry->next;
if (launcherentry != NULL) {
li = (launcherList_t *)launcherentry->data;
@@ -700,12 +713,15 @@ resort_menu (DbusmenuMenuitem * menushell)
}
}
+ /* Putting the app menu item in */
if (si->menuitem != NULL) {
g_debug("\tMoving app %s to position %d", INDICATE_LISTENER_SERVER_DBUS_NAME(si->server), position);
dbusmenu_menuitem_child_reorder(DBUSMENU_MENUITEM(menushell), DBUSMENU_MENUITEM(si->menuitem), position);
position++;
}
+ /* Putting all the indicators that are related to this application
+ after it. */
GList * imentry;
for (imentry = si->imList; imentry != NULL; imentry = imentry->next) {
imList_t * imi = (imList_t *)imentry->data;
@@ -716,14 +732,29 @@ resort_menu (DbusmenuMenuitem * menushell)
position++;
}
}
+
+ /* 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);
+ dbusmenu_menuitem_child_reorder(DBUSMENU_MENUITEM(menushell), DBUSMENU_MENUITEM(si->separator), position);
+ position++;
+ }
}
+ /* Put any leftover launchers in at the end of the list. */
while (launcherentry != NULL) {
launcherList_t * li = (launcherList_t *)launcherentry->data;
+
+ /* Putting the launcher in */
g_debug("\tMoving launcher '%s' to position %d", launcher_menu_item_get_name(li->menuitem), position);
dbusmenu_menuitem_child_reorder(DBUSMENU_MENUITEM(menushell), DBUSMENU_MENUITEM(li->menuitem), position);
+ position++;
+ /* Putting the launcher separator in */
+ g_debug("\tMoving launcher separator to position %d", position);
+ dbusmenu_menuitem_child_reorder(DBUSMENU_MENUITEM(menushell), DBUSMENU_MENUITEM(li->separator), position);
position++;
+
launcherentry = launcherentry->next;
}