From 1ec2b70ac16b031a4c7cc5398e9fb7a17bef4e4c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 11 Nov 2010 20:10:54 -0600 Subject: Create a property for the dbusmenu server --- src/app-indicator.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/app-indicator.c b/src/app-indicator.c index 4f7daa8..25599a7 100644 --- a/src/app-indicator.c +++ b/src/app-indicator.c @@ -34,6 +34,7 @@ License version 3 and version 2.1 along with this program. If not, see #include #include +#include #include #include @@ -121,7 +122,8 @@ enum { PROP_X_LABEL, PROP_X_LABEL_GUIDE, PROP_ORDERING_INDEX, - PROP_X_ORDERING_INDEX + PROP_X_ORDERING_INDEX, + PROP_DBUS_MENU_SERVER }; /* The strings so that they can be slowly looked up. */ @@ -139,6 +141,7 @@ enum { #define PROP_X_LABEL_GUIDE_S ("x-ayatana-" PROP_LABEL_GUIDE_S) #define PROP_ORDERING_INDEX_S "ordering-index" #define PROP_X_ORDERING_INDEX_S ("x-ayatana-" PROP_ORDERING_INDEX_S) +#define PROP_DBUS_MENU_SERVER_S "dbus-menu-server" /* Private macro, shhhh! */ #define APP_INDICATOR_GET_PRIVATE(o) \ @@ -406,6 +409,19 @@ app_indicator_class_init (AppIndicatorClass *klass) "A wrapper, please don't use.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + AppIndicator:dbus-menu-server: + + A way to get the internal dbusmenu server if it is available. + This should only be used for testing. + */ + g_object_class_install_property(object_class, + PROP_DBUS_MENU_SERVER, + g_param_spec_object (PROP_DBUS_MENU_SERVER_S, + "The internal DBusmenu Server", + "DBusmenu server which is available for testing the application indicators.", + DBUSMENU_TYPE_MENUITEM, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Signals */ -- cgit v1.2.3 From 00758f364ae486352c0e2aa076710ae74e3ce190 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 11 Nov 2010 20:17:51 -0600 Subject: Set and Get for the dbusmenu server property --- src/app-indicator.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/app-indicator.c b/src/app-indicator.c index 25599a7..fd035ac 100644 --- a/src/app-indicator.c +++ b/src/app-indicator.c @@ -810,6 +810,14 @@ app_indicator_set_property (GObject * object, guint prop_id, const GValue * valu priv->ordering_index = g_value_get_uint(value); break; + case PROP_DBUS_MENU_SERVER: + if (priv->menuservice != NULL) { + g_object_unref (priv->menuservice); + } + gpointer val = g_value_dup_object(value); + priv->menuservice = DBUSMENU_SERVER(val); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -882,6 +890,10 @@ app_indicator_get_property (GObject * object, guint prop_id, GValue * value, GPa g_value_set_uint(value, priv->ordering_index); break; + case PROP_DBUS_MENU_SERVER: + g_value_set_object(value, priv->menuservice); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; -- cgit v1.2.3 From 53d10c22f2df62a7ee96f7effa9f641bf638a627 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 11 Nov 2010 21:05:29 -0600 Subject: Test setting the menu and verify it comes out --- tests/test-libappindicator.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/test-libappindicator.c b/tests/test-libappindicator.c index 8d12ac5..7a1976c 100644 --- a/tests/test-libappindicator.c +++ b/tests/test-libappindicator.c @@ -25,6 +25,9 @@ with this program. If not, see . #include +#include +#include + void test_libappindicator_prop_signals_status_helper (AppIndicator * ci, gchar * status, gboolean * signalactivated) { @@ -224,6 +227,50 @@ test_libappindicator_set_label (void) return; } +void +test_libappindicator_set_menu (void) +{ + AppIndicator * ci = app_indicator_new ("my-id", + "my-name", + APP_INDICATOR_CATEGORY_APPLICATION_STATUS); + + g_assert(ci != NULL); + + GtkMenu * menu = GTK_MENU(gtk_menu_new()); + + GtkMenuItem * item = GTK_MENU_ITEM(gtk_menu_item_new_with_label("Test Label")); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), GTK_WIDGET(item)); + gtk_widget_show(GTK_WIDGET(item)); + + app_indicator_set_menu(ci, menu); + + g_assert(app_indicator_get_menu(ci) != NULL); + + GValue serverval = {0}; + g_value_init(&serverval, DBUSMENU_TYPE_SERVER); + g_object_get_property(G_OBJECT(ci), "dbus-menu-server", &serverval); + + DbusmenuServer * server = DBUSMENU_SERVER(g_value_get_object(&serverval)); + g_assert(server != NULL); + + GValue rootval = {0}; + g_value_init(&rootval, DBUSMENU_TYPE_MENUITEM); + g_object_get_property(G_OBJECT(server), DBUSMENU_SERVER_PROP_ROOT_NODE, &rootval); + DbusmenuMenuitem * root = DBUSMENU_MENUITEM(g_value_get_object(&rootval)); + g_assert(root != NULL); + + GList * children = dbusmenu_menuitem_get_children(root); + g_assert(children != NULL); + g_assert(g_list_length(children) == 1); + + const gchar * label = dbusmenu_menuitem_property_get(DBUSMENU_MENUITEM(children->data), DBUSMENU_MENUITEM_PROP_LABEL); + g_assert(label != NULL); + g_assert(g_strcmp0(label, "Test Label") == 0); + + g_object_unref(G_OBJECT(ci)); + return; +} + void label_signals_cb (AppIndicator * appindicator, gchar * label, gchar * guide, gpointer user_data) { @@ -301,6 +348,7 @@ test_libappindicator_props_suite (void) g_test_add_func ("/indicator-application/libappindicator/init_set_props", test_libappindicator_init_set_props); g_test_add_func ("/indicator-application/libappindicator/prop_signals", test_libappindicator_prop_signals); g_test_add_func ("/indicator-application/libappindicator/set_label", test_libappindicator_set_label); + g_test_add_func ("/indicator-application/libappindicator/set_menu", test_libappindicator_set_menu); g_test_add_func ("/indicator-application/libappindicator/label_signals", test_libappindicator_label_signals); return; -- cgit v1.2.3 From 8b57d12c54ec1befb09711439e40eac7ed93dbcd Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 11 Nov 2010 21:05:39 -0600 Subject: Set the property type correctly. --- src/app-indicator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app-indicator.c b/src/app-indicator.c index fd035ac..78d784a 100644 --- a/src/app-indicator.c +++ b/src/app-indicator.c @@ -420,7 +420,7 @@ app_indicator_class_init (AppIndicatorClass *klass) g_param_spec_object (PROP_DBUS_MENU_SERVER_S, "The internal DBusmenu Server", "DBusmenu server which is available for testing the application indicators.", - DBUSMENU_TYPE_MENUITEM, + DBUSMENU_TYPE_SERVER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Signals */ -- cgit v1.2.3