#include "e-source-option-menu.h"
+#include "e-util-marshal.h"
+
#include <gal/util/e-util.h>
#include <gtk/gtkmenu.h>
};
+enum {
+ SOURCE_SELECTED,
+ NUM_SIGNALS
+};
+
+static uint signals[NUM_SIGNALS] = { 0 };
+
+
/* Selecting a source. */
typedef struct {
select_source (ESourceOptionMenu *menu,
ESource *source)
{
+ ForeachMenuItemData *foreach_data;
+
if (menu->priv->selected_source != NULL)
g_object_unref (menu->priv->selected_source);
menu->priv->selected_source = source;
- if (source != NULL) {
- ForeachMenuItemData *foreach_data = g_new0 (ForeachMenuItemData, 1);
+ foreach_data = g_new0 (ForeachMenuItemData, 1);
+ foreach_data->option_menu = menu;
- foreach_data->option_menu = menu;
+ gtk_container_foreach (GTK_CONTAINER (GTK_OPTION_MENU (menu)->menu),
+ (GtkCallback) select_source_foreach_menu_item, foreach_data);
- gtk_container_foreach (GTK_CONTAINER (GTK_OPTION_MENU (menu)->menu),
- (GtkCallback) select_source_foreach_menu_item, foreach_data);
+ g_free (foreach_data);
+ g_object_ref (source);
- g_free (foreach_data);
- g_object_ref (source);
- }
+ g_signal_emit (menu, signals[SOURCE_SELECTED], 0, source);
}
object_class->finalize = impl_finalize;
parent_class = g_type_class_peek_parent (class);
+
+ signals[SOURCE_SELECTED] =
+ g_signal_new ("source_selected",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ESourceOptionMenuClass, source_selected),
+ NULL, NULL,
+ e_util_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
}
static void
#include <libgnomeui/gnome-ui-init.h>
+static void
+source_selected_callback (ESourceOptionMenu *menu,
+ ESource *source,
+ void *unused_data)
+{
+ g_print ("source selected: \"%s\"\n", e_source_peek_name (source));
+}
+
+
static int
on_idle_create_widget (const char *gconf_path)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
option_menu = e_source_option_menu_new (source_list);
+ g_signal_connect (option_menu, "source_selected", G_CALLBACK (source_selected_callback), NULL);
gtk_container_add (GTK_CONTAINER (window), option_menu);
gtk_widget_show_all (window);