| 1814 GtkWidget * |
1814 GtkWidget * |
| 1815 pidgin_append_menu_action(GtkWidget *menu, PurpleMenuAction *act, |
1815 pidgin_append_menu_action(GtkWidget *menu, PurpleMenuAction *act, |
| 1816 gpointer object) |
1816 gpointer object) |
| 1817 { |
1817 { |
| 1818 GtkWidget *menuitem; |
1818 GtkWidget *menuitem; |
| |
1819 GList *list; |
| 1819 |
1820 |
| 1820 if (act == NULL) { |
1821 if (act == NULL) { |
| 1821 return pidgin_separator(menu); |
1822 return pidgin_separator(menu); |
| 1822 } |
1823 } |
| 1823 |
1824 |
| 1824 if (act->children == NULL) { |
1825 list = purple_menu_action_get_children(act); |
| 1825 menuitem = gtk_menu_item_new_with_mnemonic(act->label); |
1826 menuitem = gtk_menu_item_new_with_mnemonic(purple_menu_action_get_label(act)); |
| 1826 |
1827 |
| 1827 if (act->callback != NULL) { |
1828 if (list == NULL) { |
| |
1829 PurpleCallback callback; |
| |
1830 |
| |
1831 callback = purple_menu_action_get_callback(act); |
| |
1832 |
| |
1833 if (callback != NULL) { |
| 1828 g_object_set_data(G_OBJECT(menuitem), |
1834 g_object_set_data(G_OBJECT(menuitem), |
| 1829 "purplecallback", |
1835 "purplecallback", |
| 1830 act->callback); |
1836 callback); |
| 1831 g_object_set_data(G_OBJECT(menuitem), |
1837 g_object_set_data(G_OBJECT(menuitem), |
| 1832 "purplecallbackdata", |
1838 "purplecallbackdata", |
| 1833 act->data); |
1839 purple_menu_action_get_data(act)); |
| 1834 g_signal_connect(G_OBJECT(menuitem), "activate", |
1840 g_signal_connect(G_OBJECT(menuitem), "activate", |
| 1835 G_CALLBACK(menu_action_cb), |
1841 G_CALLBACK(menu_action_cb), |
| 1836 object); |
1842 object); |
| 1837 } else { |
1843 } else { |
| 1838 gtk_widget_set_sensitive(menuitem, FALSE); |
1844 gtk_widget_set_sensitive(menuitem, FALSE); |
| 1842 } else { |
1848 } else { |
| 1843 GList *l = NULL; |
1849 GList *l = NULL; |
| 1844 GtkWidget *submenu = NULL; |
1850 GtkWidget *submenu = NULL; |
| 1845 GtkAccelGroup *group; |
1851 GtkAccelGroup *group; |
| 1846 |
1852 |
| 1847 menuitem = gtk_menu_item_new_with_mnemonic(act->label); |
|
| 1848 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
1853 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
| 1849 |
1854 |
| 1850 submenu = gtk_menu_new(); |
1855 submenu = gtk_menu_new(); |
| 1851 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
1856 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
| 1852 |
1857 |
| 1853 group = gtk_menu_get_accel_group(GTK_MENU(menu)); |
1858 group = gtk_menu_get_accel_group(GTK_MENU(menu)); |
| 1854 if (group) { |
1859 if (group) { |
| 1855 char *path = g_strdup_printf("%s/%s", GTK_MENU_ITEM(menuitem)->accel_path, act->label); |
1860 char *path = g_strdup_printf("%s/%s", GTK_MENU_ITEM(menuitem)->accel_path, |
| |
1861 purple_menu_action_get_label(act)); |
| 1856 gtk_menu_set_accel_path(GTK_MENU(submenu), path); |
1862 gtk_menu_set_accel_path(GTK_MENU(submenu), path); |
| 1857 g_free(path); |
1863 g_free(path); |
| 1858 gtk_menu_set_accel_group(GTK_MENU(submenu), group); |
1864 gtk_menu_set_accel_group(GTK_MENU(submenu), group); |
| 1859 } |
1865 } |
| 1860 |
1866 |
| 1861 for (l = act->children; l; l = l->next) { |
1867 for (l = list; l; l = l->next) { |
| 1862 PurpleMenuAction *act = (PurpleMenuAction *)l->data; |
1868 PurpleMenuAction *act = (PurpleMenuAction *)l->data; |
| 1863 |
1869 |
| 1864 pidgin_append_menu_action(submenu, act, object); |
1870 pidgin_append_menu_action(submenu, act, object); |
| 1865 } |
1871 } |
| 1866 g_list_free(act->children); |
1872 g_list_free(list); |
| 1867 act->children = NULL; |
1873 purple_menu_action_set_children(act, NULL); |
| 1868 } |
1874 } |
| 1869 purple_menu_action_free(act); |
1875 purple_menu_action_free(act); |
| 1870 return menuitem; |
1876 return menuitem; |
| 1871 } |
1877 } |
| 1872 |
1878 |