aboutsummaryrefslogtreecommitdiff
path: root/src/im-menu.c
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2014-04-07 15:22:06 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2014-04-07 15:22:06 +0200
commita47b48393a476dce75271739eec561d0db6ee60b (patch)
tree50f9a5aebaddd572b67a4bc815abc3f6ea82347f /src/im-menu.c
parentde9c80835a2facd1957d580f01e81209294406f6 (diff)
downloadayatana-indicator-messages-a47b48393a476dce75271739eec561d0db6ee60b.tar.gz
ayatana-indicator-messages-a47b48393a476dce75271739eec561d0db6ee60b.tar.bz2
ayatana-indicator-messages-a47b48393a476dce75271739eec561d0db6ee60b.zip
desktop menu: sort applications like specified
Default chat client, default email client, and the other applications sorted by alphabet.
Diffstat (limited to 'src/im-menu.c')
-rw-r--r--src/im-menu.c57
1 files changed, 33 insertions, 24 deletions
diff --git a/src/im-menu.c b/src/im-menu.c
index 57cf957..55d4685 100644
--- a/src/im-menu.c
+++ b/src/im-menu.c
@@ -176,43 +176,52 @@ im_menu_append_section (ImMenu *menu,
g_menu_append_section (priv->menu, NULL, section);
}
+/*
+ * Inserts @item into @menu by comparing its
+ * "x-messaging-menu-sort-string" with those found in existing menu
+ * items between positions @first and @last.
+ *
+ * If @last is negative, it is counted from the end of @menu.
+ */
void
-im_menu_insert_section (ImMenu *menu,
- const gchar *sort_string,
- const gchar *namespace,
- GMenuModel *section)
+im_menu_insert_item_sorted (ImMenu *menu,
+ GMenuItem *item,
+ gint first,
+ gint last)
{
- int position;
ImMenuPrivate *priv;
- GMenuItem *item;
+ gint position = first;
+ gchar *sort_string;
g_return_if_fail (IM_IS_MENU (menu));
- g_return_if_fail (G_IS_MENU_MODEL (section));
+ g_return_if_fail (G_IS_MENU_ITEM (item));
priv = im_menu_get_instance_private (menu);
- for (position = 1; position < g_menu_model_get_n_items(G_MENU_MODEL (priv->menu)) - 1; position++)
- {
- gchar *item_sort;
+ if (last < 0)
+ last = g_menu_model_get_n_items (G_MENU_MODEL (priv->menu)) + last;
+
+ g_return_if_fail (first <= last);
- if (g_menu_model_get_item_attribute(G_MENU_MODEL(priv->menu), position, "x-messaging-menu-sort-string", "s", &item_sort))
+ if (g_menu_item_get_attribute (item, "x-messaging-menu-sort-string", "s", &sort_string))
+ {
+ while (position < last)
{
- gint cmp;
+ gchar *item_sort;
- cmp = g_utf8_collate(sort_string, item_sort);
- g_free (item_sort);
- if (cmp < 0)
- break;
- }
- }
+ if (g_menu_model_get_item_attribute(G_MENU_MODEL(priv->menu), position, "x-messaging-menu-sort-string", "s", &item_sort))
+ {
+ gint cmp;
- item = g_menu_item_new_section (NULL, section);
- g_menu_item_set_attribute (item, "x-messaging-menu-sort-string", "s", sort_string);
+ cmp = g_utf8_collate(sort_string, item_sort);
+ g_free (item_sort);
+ if (cmp < 0)
+ break;
+ }
- if (namespace)
- g_menu_item_set_attribute (item, "action-namespace", "s", namespace);
+ position++;
+ }
+ }
g_menu_insert_item (priv->menu, position, item);
-
- g_object_unref (item);
}