pidgin/gtkutils.c

changeset 32287
c8cf9b704a49
parent 32229
f4aa2edf2735
child 32518
f3ed9129c573
equal deleted inserted replaced
32286:316da124dc0e 32287:c8cf9b704a49
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

mercurial