comparison gtk/dw.c @ 185:f55677513954

Updated the menu code.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 19 Dec 2002 04:16:32 +0000
parents 0b3debaa9c6c
children efd4703450fa
comparison
equal deleted inserted replaced
184:4ec906d40ce2 185:f55677513954
1703 * resource file. 1703 * resource file.
1704 */ 1704 */
1705 HMENUI dw_menu_new(unsigned long id) 1705 HMENUI dw_menu_new(unsigned long id)
1706 { 1706 {
1707 int _locked_by_me = FALSE; 1707 int _locked_by_me = FALSE;
1708 HMENUI tmp = malloc(sizeof(struct _hmenui));
1709 GtkAccelGroup *accel_group; 1708 GtkAccelGroup *accel_group;
1710 1709 HMENUI tmp;
1711 if(!tmp) 1710
1712 return NULL; 1711 DW_MUTEX_LOCK;
1713 1712 tmp = gtk_menu_new();
1714 DW_MUTEX_LOCK; 1713 gtk_widget_show(tmp);
1715 tmp->menu = gtk_menu_new();
1716 gtk_widget_show(tmp->menu);
1717 accel_group = gtk_accel_group_new(); 1714 accel_group = gtk_accel_group_new();
1718 gtk_object_set_data(GTK_OBJECT(tmp->menu), "id", (gpointer)id); 1715 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id);
1719 gtk_object_set_data(GTK_OBJECT(tmp->menu), "accel", (gpointer)accel_group); 1716 gtk_object_set_data(GTK_OBJECT(tmp), "accel", (gpointer)accel_group);
1720 DW_MUTEX_UNLOCK; 1717 DW_MUTEX_UNLOCK;
1721 return tmp; 1718 return tmp;
1722 } 1719 }
1723 1720
1724 /* 1721 /*
1728 */ 1725 */
1729 HMENUI dw_menubar_new(HWND location) 1726 HMENUI dw_menubar_new(HWND location)
1730 { 1727 {
1731 GtkWidget *box; 1728 GtkWidget *box;
1732 int _locked_by_me = FALSE; 1729 int _locked_by_me = FALSE;
1733 HMENUI tmp = malloc(sizeof(struct _hmenui));
1734 GtkAccelGroup *accel_group; 1730 GtkAccelGroup *accel_group;
1735 1731 HMENUI tmp;
1736 if(!tmp) 1732
1737 return NULL; 1733 DW_MUTEX_LOCK;
1738 1734 tmp = gtk_menu_bar_new();
1739 DW_MUTEX_LOCK;
1740 tmp->menu = gtk_menu_bar_new();
1741 box = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(location)); 1735 box = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(location));
1742 gtk_widget_show(tmp->menu); 1736 gtk_widget_show(tmp);
1743 accel_group = gtk_accel_group_new(); 1737 accel_group = gtk_accel_group_new();
1744 gtk_object_set_data(GTK_OBJECT(tmp->menu), "accel", (gpointer)accel_group); 1738 gtk_object_set_data(GTK_OBJECT(tmp), "accel", (gpointer)accel_group);
1745 1739
1746 if(box) 1740 if(box)
1747 gtk_box_pack_end(GTK_BOX(box), tmp->menu, FALSE, FALSE, 0); 1741 gtk_box_pack_end(GTK_BOX(box), tmp, FALSE, FALSE, 0);
1748 1742
1749 DW_MUTEX_UNLOCK; 1743 DW_MUTEX_UNLOCK;
1750 return tmp; 1744 return tmp;
1751 } 1745 }
1752 1746
1760 if(menu && *menu) 1754 if(menu && *menu)
1761 { 1755 {
1762 int _locked_by_me = FALSE; 1756 int _locked_by_me = FALSE;
1763 1757
1764 DW_MUTEX_LOCK; 1758 DW_MUTEX_LOCK;
1765 gtk_widget_destroy((*menu)->menu); 1759 gtk_widget_destroy(*menu);
1766 free(*menu);
1767 *menu = NULL; 1760 *menu = NULL;
1768 DW_MUTEX_UNLOCK; 1761 DW_MUTEX_UNLOCK;
1769 } 1762 }
1770 } 1763 }
1771 1764
1809 char accel, *tempbuf = malloc(strlen(title)+1); 1802 char accel, *tempbuf = malloc(strlen(title)+1);
1810 int _locked_by_me = FALSE, submenucount; 1803 int _locked_by_me = FALSE, submenucount;
1811 guint tmp_key; 1804 guint tmp_key;
1812 GtkAccelGroup *accel_group; 1805 GtkAccelGroup *accel_group;
1813 1806
1814 if(!menu || !menu->menu) 1807 if(!menu)
1815 { 1808 {
1816 free(tempbuf); 1809 free(tempbuf);
1817 return NULL; 1810 return NULL;
1818 } 1811 }
1819 1812
1820 DW_MUTEX_LOCK; 1813 DW_MUTEX_LOCK;
1821 accel = _removetilde(tempbuf, title); 1814 accel = _removetilde(tempbuf, title);
1822 1815
1823 accel_group = (GtkAccelGroup *)gtk_object_get_data(GTK_OBJECT(menu->menu), "accel"); 1816 accel_group = (GtkAccelGroup *)gtk_object_get_data(GTK_OBJECT(menu), "accel");
1824 submenucount = (int)gtk_object_get_data(GTK_OBJECT(menu->menu), "submenucount"); 1817 submenucount = (int)gtk_object_get_data(GTK_OBJECT(menu), "submenucount");
1825 1818
1826 if(strlen(tempbuf) == 0) 1819 if(strlen(tempbuf) == 0)
1827 tmphandle=gtk_menu_item_new(); 1820 tmphandle=gtk_menu_item_new();
1828 else 1821 else
1829 { 1822 {
1840 } 1833 }
1841 else 1834 else
1842 tmphandle=gtk_check_menu_item_new_with_label(tempbuf); 1835 tmphandle=gtk_check_menu_item_new_with_label(tempbuf);
1843 gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE); 1836 gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE);
1844 sprintf(numbuf, "%lu", id); 1837 sprintf(numbuf, "%lu", id);
1845 gtk_object_set_data(GTK_OBJECT(menu->menu), numbuf, (gpointer)tmphandle); 1838 gtk_object_set_data(GTK_OBJECT(menu), numbuf, (gpointer)tmphandle);
1846 } 1839 }
1847 else 1840 else
1848 { 1841 {
1849 if(accel && accel_group) 1842 if(accel && accel_group)
1850 { 1843 {
1865 { 1858 {
1866 char tempbuf[100]; 1859 char tempbuf[100];
1867 1860
1868 sprintf(tempbuf, "submenu%d", submenucount); 1861 sprintf(tempbuf, "submenu%d", submenucount);
1869 submenucount++; 1862 submenucount++;
1870 gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu->menu); 1863 gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu);
1871 gtk_object_set_data(GTK_OBJECT(menu->menu), tempbuf, (gpointer)submenu->menu); 1864 gtk_object_set_data(GTK_OBJECT(menu), tempbuf, (gpointer)submenu);
1872 gtk_object_set_data(GTK_OBJECT(menu->menu), "submenucount", (gpointer)submenucount); 1865 gtk_object_set_data(GTK_OBJECT(menu), "submenucount", (gpointer)submenucount);
1873 } 1866 }
1874 1867
1875 if(GTK_IS_MENU_BAR(menu->menu)) 1868 if(GTK_IS_MENU_BAR(menu))
1876 gtk_menu_bar_append(GTK_MENU_BAR(menu->menu), tmphandle); 1869 gtk_menu_bar_append(GTK_MENU_BAR(menu), tmphandle);
1877 else 1870 else
1878 gtk_menu_append(GTK_MENU(menu->menu), tmphandle); 1871 gtk_menu_append(GTK_MENU(menu), tmphandle);
1879 1872
1880 gtk_object_set_data(GTK_OBJECT(tmphandle), "id", (gpointer)id); 1873 gtk_object_set_data(GTK_OBJECT(tmphandle), "id", (gpointer)id);
1881 free(tempbuf); 1874 free(tempbuf);
1882 DW_MUTEX_UNLOCK; 1875 DW_MUTEX_UNLOCK;
1883 return tmphandle; 1876 return tmphandle;
1918 { 1911 {
1919 char numbuf[10]; 1912 char numbuf[10];
1920 GtkWidget *tmphandle; 1913 GtkWidget *tmphandle;
1921 int _locked_by_me = FALSE; 1914 int _locked_by_me = FALSE;
1922 1915
1923 if(!menu || !menu->menu) 1916 if(!menu)
1924 return; 1917 return;
1925 1918
1926 DW_MUTEX_LOCK; 1919 DW_MUTEX_LOCK;
1927 sprintf(numbuf, "%lu", id); 1920 sprintf(numbuf, "%lu", id);
1928 tmphandle = _find_submenu_id(menu->menu, numbuf); 1921 tmphandle = _find_submenu_id(menu, numbuf);
1929 1922
1930 if(tmphandle) 1923 if(tmphandle)
1931 { 1924 {
1932 _dw_ignore_click = 1; 1925 _dw_ignore_click = 1;
1933 if(GTK_CHECK_MENU_ITEM(tmphandle)->active != check) 1926 if(GTK_CHECK_MENU_ITEM(tmphandle)->active != check)
1953 return; 1946 return;
1954 1947
1955 popup = parent; 1948 popup = parent;
1956 1949
1957 DW_MUTEX_LOCK; 1950 DW_MUTEX_LOCK;
1958 gtk_menu_popup(GTK_MENU((*menu)->menu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME); 1951 gtk_menu_popup(GTK_MENU(*menu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME);
1959 free(*menu);
1960 *menu = NULL; 1952 *menu = NULL;
1961 DW_MUTEX_UNLOCK; 1953 DW_MUTEX_UNLOCK;
1962 } 1954 }
1963 1955
1964 1956