* sync with main changes of 2002-10-04
[claws.git] / src / menu.c
index 0906a1e75f24b15e2e4b70ae68625f13e7fb9561..1fe647fa5b5977de67fac6edfa5ad6391da3e7de 100644 (file)
@@ -29,9 +29,9 @@
 #include <gtk/gtkcheckmenuitem.h>
 #include <gtk/gtkbutton.h>
 
-
 #include "intl.h"
 #include "menu.h"
+#include "utils.h"
 
 static gchar *menu_translate(const gchar *path, gpointer data);
 
@@ -63,6 +63,22 @@ GtkWidget *menu_create_items(GtkItemFactoryEntry *entries,
        return gtk_item_factory_get_widget(*factory, path);
 }
 
+GtkWidget *popupmenu_create(GtkWidget *window, GtkItemFactoryEntry *entries,
+                            guint n_entries, const gchar *path, gpointer data)
+{
+       GtkItemFactory *factory;
+       GtkAccelGroup *accel_group;
+
+       accel_group = gtk_accel_group_new();
+       factory = gtk_item_factory_new(GTK_TYPE_MENU, path, accel_group);
+       gtk_item_factory_set_translate_func(factory, menu_translate,
+                                           NULL, NULL);
+       gtk_item_factory_create_items(factory, n_entries, entries, data);
+       gtk_accel_group_attach(accel_group, GTK_OBJECT(window));
+
+       return gtk_item_factory_get_widget(factory, path);
+}
+
 static gchar *menu_translate(const gchar *path, gpointer data)
 {
        gchar *retval;
@@ -80,15 +96,19 @@ void menu_set_sensitive(GtkItemFactory *ifactory, const gchar *path,
        g_return_if_fail(ifactory != NULL);
 
        widget = gtk_item_factory_get_item(ifactory, path);
+       if(widget == NULL) {
+               debug_print("unknown menu entry %s\n", path);
+               return;
+       }
        gtk_widget_set_sensitive(widget, sensitive);
 }
 
-void menu_set_insensitive_all(GtkMenuShell *menu_shell)
+void menu_set_sensitive_all(GtkMenuShell *menu_shell, gboolean sensitive)
 {
        GList *cur;
 
        for (cur = menu_shell->children; cur != NULL; cur = cur->next)
-               gtk_widget_set_sensitive(GTK_WIDGET(cur->data), FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET(cur->data), sensitive);
 }
 
 void menu_set_toggle(GtkItemFactory *ifactory, const gchar *path,
@@ -102,6 +122,16 @@ void menu_set_toggle(GtkItemFactory *ifactory, const gchar *path,
        gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), active);
 }
 
+void menu_toggle_toggle(GtkItemFactory *ifactory, const gchar *path)
+{
+       GtkWidget *widget;
+       
+       g_return_if_fail(ifactory != NULL);
+       
+       widget = gtk_item_factory_get_item(ifactory, path);
+       gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), !((GTK_CHECK_MENU_ITEM(widget))->active));
+}
+
 void menu_button_position(GtkMenu *menu, gint *x, gint *y, gpointer user_data)
 {
        GtkWidget *button;
@@ -139,3 +169,29 @@ void menu_button_position(GtkMenu *menu, gint *x, gint *y, gpointer user_data)
        *x = xpos;
        *y = ypos;
 }
+
+gint menu_find_option_menu_index(GtkOptionMenu *optmenu, gpointer data,
+                                GCompareFunc func)
+{
+       GtkWidget *menu;
+       GtkWidget *menuitem;
+       gpointer menu_data;
+       GList *cur;
+       gint n;
+
+       menu = gtk_option_menu_get_menu(optmenu);
+
+       for (cur = GTK_MENU_SHELL(menu)->children, n = 0;
+            cur != NULL; cur = cur->next, n++) {
+               menuitem = GTK_WIDGET(cur->data);
+               menu_data = gtk_object_get_user_data(GTK_OBJECT(menuitem));
+               if (func) {
+                       if (func(menu_data, data) == 0)
+                               return n;
+               } else if (menu_data == data)
+                       return n;
+       }
+
+       return -1;
+}
+