← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~ted/dbusmenu/about-to-show-is-activate into lp:dbusmenu

 

Ted Gould has proposed merging lp:~ted/dbusmenu/about-to-show-is-activate into lp:dbusmenu.

Requested reviews:
  DBus Menu Team (dbusmenu-team)


Making it so that we pass about-to-show up to menu items with children as activate
-- 
https://code.launchpad.net/~ted/dbusmenu/about-to-show-is-activate/+merge/35892
Your team ayatana-commits is subscribed to branch lp:dbusmenu.
=== modified file 'libdbusmenu-glib/menuitem.c'
--- libdbusmenu-glib/menuitem.c	2010-08-20 19:49:33 +0000
+++ libdbusmenu-glib/menuitem.c	2010-09-17 21:38:43 +0000
@@ -97,6 +97,7 @@
 static void g_value_transform_STRING_BOOLEAN (const GValue * in, GValue * out);
 static void g_value_transform_STRING_INT (const GValue * in, GValue * out);
 static void handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, guint timestamp);
+static void send_about_to_show (DbusmenuMenuitem * mi, dbusmenu_menuitem_about_to_show_cb cb, gpointer cb_data);
 
 /* GObject stuff */
 G_DEFINE_TYPE (DbusmenuMenuitem, dbusmenu_menuitem, G_TYPE_OBJECT);
@@ -114,6 +115,7 @@
 	object_class->get_property = get_property;
 
 	klass->handle_event = handle_event;
+	klass->send_about_to_show = send_about_to_show;
 
 	/**
 		DbusmenuMenuitem::property-changed:
@@ -387,6 +389,28 @@
 	return;
 }
 
+/* Handles our about to show signal on items that submenus
+   exist.  This is sending just activate now, but we should
+   probably consider a special signal in the future if GTK
+   gets more sophisticated about this. */
+static void
+send_about_to_show (DbusmenuMenuitem * mi, dbusmenu_menuitem_about_to_show_cb cb, gpointer cb_data)
+{
+	g_return_if_fail(DBUSMENU_IS_MENUITEM(mi));
+
+	if (dbusmenu_menuitem_get_children(mi) == NULL) {
+		g_warning("About to Show called on an item wihtout submenus.  We're ignoring it.");
+	} else {
+		g_signal_emit(G_OBJECT(mi), signals[ITEM_ACTIVATED], 0, 0 /* timestamp */, TRUE);
+	}
+
+	if (cb != NULL) {
+		cb(mi, cb_data);
+	}
+
+	return;
+}
+
 /* Public interface */
 
 /**


Follow ups