aboutsummaryrefslogtreecommitdiff
path: root/src/im-phone-menu.c
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-08-12 21:19:42 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-08-12 21:19:42 +0200
commitff4aefe6c8d9c36881f26c2cf8514c2ce1f3edca (patch)
tree853b2ae06615f5beed76334efe97bbc94f2f2fb7 /src/im-phone-menu.c
parent769affeef08a04881a5a84aa5c2db2caedf70646 (diff)
downloadayatana-indicator-messages-ff4aefe6c8d9c36881f26c2cf8514c2ce1f3edca.tar.gz
ayatana-indicator-messages-ff4aefe6c8d9c36881f26c2cf8514c2ce1f3edca.tar.bz2
ayatana-indicator-messages-ff4aefe6c8d9c36881f26c2cf8514c2ce1f3edca.zip
Add ImMenu
A base class for all messaging menus. ImPhoneMenu already subclasses from it, with a desktop version coming up.
Diffstat (limited to 'src/im-phone-menu.c')
-rw-r--r--src/im-phone-menu.c38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/im-phone-menu.c b/src/im-phone-menu.c
index 907749f..b24e235 100644
--- a/src/im-phone-menu.c
+++ b/src/im-phone-menu.c
@@ -21,19 +21,18 @@
#include <string.h>
-typedef GObjectClass ImPhoneMenuClass;
+typedef ImMenuClass ImPhoneMenuClass;
struct _ImPhoneMenu
{
- GObject parent;
+ ImMenu parent;
GMenu *toplevel_menu;
GMenu *message_section;
GMenu *source_section;
-
};
-G_DEFINE_TYPE (ImPhoneMenu, im_phone_menu, G_TYPE_OBJECT);
+G_DEFINE_TYPE (ImPhoneMenu, im_phone_menu, IM_TYPE_MENU);
typedef void (*ImMenuForeachFunc) (GMenuModel *menu, gint pos);
@@ -87,6 +86,22 @@ im_phone_menu_update_toplevel (ImPhoneMenu *menu)
}
static void
+im_phone_menu_constructed (GObject *object)
+{
+ ImPhoneMenu *menu = IM_PHONE_MENU (object);
+ ImApplicationList *applist;
+
+ applist = im_menu_get_application_list (IM_MENU (menu));
+
+ g_signal_connect_swapped (applist, "message-added", G_CALLBACK (im_phone_menu_add_message), menu);
+ g_signal_connect_swapped (applist, "message-removed", G_CALLBACK (im_phone_menu_remove_message), menu);
+ g_signal_connect_swapped (applist, "app-stopped", G_CALLBACK (im_phone_menu_remove_application), menu);
+ g_signal_connect_swapped (applist, "remove-all", G_CALLBACK (im_phone_menu_remove_all), menu);
+
+ G_OBJECT_CLASS (im_phone_menu_parent_class)->constructed (object);
+}
+
+static void
im_phone_menu_dispose (GObject *object)
{
ImPhoneMenu *menu = IM_PHONE_MENU (object);
@@ -109,6 +124,7 @@ im_phone_menu_class_init (ImPhoneMenuClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->constructed = im_phone_menu_constructed;
object_class->dispose = im_phone_menu_dispose;
object_class->finalize = im_phone_menu_finalize;
}
@@ -129,17 +145,13 @@ im_phone_menu_init (ImPhoneMenu *menu)
}
ImPhoneMenu *
-im_phone_menu_new (void)
-{
- return g_object_new (IM_TYPE_PHONE_MENU, NULL);
-}
-
-GMenuModel *
-im_phone_menu_get_model (ImPhoneMenu *menu)
+im_phone_menu_new (ImApplicationList *applist)
{
- g_return_val_if_fail (IM_IS_PHONE_MENU (menu), NULL);
+ g_return_val_if_fail (IM_IS_APPLICATION_LIST (applist), NULL);
- return G_MENU_MODEL (menu->toplevel_menu);
+ return g_object_new (IM_TYPE_PHONE_MENU,
+ "application-list", applist,
+ NULL);
}
static gint64