Mercurial > dwindows
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 |