comparison gtk/dw.c @ 36:cddb02f847e1

Added unix versions of functions in compat, and added getfsname, plus some GTK fixes.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 17 Sep 2001 09:15:40 +0000
parents b03b24bb95f8
children 360bc6a5f1c9
comparison
equal deleted inserted replaced
35:432c39a4ff86 36:cddb02f847e1
117 { _item_select_event, "item-select" }, 117 { _item_select_event, "item-select" },
118 { _tree_select_event, "tree-select" }, 118 { _tree_select_event, "tree-select" },
119 { _set_focus_event, "set-focus" } 119 { _set_focus_event, "set-focus" }
120 }; 120 };
121 121
122 /* Alignment flags */
123 #define DW_CENTER 0.5f
124 #define DW_LEFT 0.0f
125 #define DW_RIGHT 1.0f
126
122 /* Finds the translation function for a given signal name */ 127 /* Finds the translation function for a given signal name */
123 void *_findsigfunc(char *signame) 128 void *_findsigfunc(char *signame)
124 { 129 {
125 int z; 130 int z;
126 131
821 { 826 {
822 GtkWidget *handle2 = handle; 827 GtkWidget *handle2 = handle;
823 char *font; 828 char *font;
824 int _locked_by_me = FALSE; 829 int _locked_by_me = FALSE;
825 gpointer data; 830 gpointer data;
831 GdkFont *gdkfont;
826 832
827 DW_MUTEX_LOCK; 833 DW_MUTEX_LOCK;
828 if(GTK_IS_SCROLLED_WINDOW(handle)) 834 if(GTK_IS_SCROLLED_WINDOW(handle))
829 { 835 {
830 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); 836 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
831 if(tmp) 837 if(tmp)
832 handle2 = tmp; 838 handle2 = tmp;
833 } 839 }
834 font = strdup(fontname); 840 font = strdup(fontname);
835 841
842 /* Free old font if it exists */
843 gdkfont = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle2), "gdkfont");
844 if(gdkfont)
845 gdk_font_unref(gdkfont);
846 gdkfont = gdk_font_load(fontname);
847 gtk_object_set_data(GTK_OBJECT(handle2), "gdkfont", (gpointer)gdkfont);
848
849 /* Free old font name if one is allocated */
836 data = gtk_object_get_data(GTK_OBJECT(handle2), "fontname"); 850 data = gtk_object_get_data(GTK_OBJECT(handle2), "fontname");
837 if(data) 851 if(data)
838 free(data); 852 free(data);
839 853
840 if(font) 854 if(font)
841 gtk_object_set_data(GTK_OBJECT(handle2), "fontname", (gpointer)font); 855 gtk_object_set_data(GTK_OBJECT(handle2), "fontname", (gpointer)font);
856
842 857
843 DW_MUTEX_UNLOCK; 858 DW_MUTEX_UNLOCK;
844 return TRUE; 859 return TRUE;
845 } 860 }
846 861
1022 */ 1037 */
1023 HWND dw_window_new(HWND hwndOwner, char *title, unsigned long flStyle) 1038 HWND dw_window_new(HWND hwndOwner, char *title, unsigned long flStyle)
1024 { 1039 {
1025 GtkWidget *tmp; 1040 GtkWidget *tmp;
1026 int _locked_by_me = FALSE; 1041 int _locked_by_me = FALSE;
1027 int flags = 0, cx = 0, cy = 0; 1042 int flags = 0;
1028 1043
1029 DW_MUTEX_LOCK; 1044 DW_MUTEX_LOCK;
1030 tmp = gtk_window_new(GTK_WINDOW_TOPLEVEL); 1045 tmp = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1031 1046
1032 gtk_window_set_title(GTK_WINDOW(tmp), title); 1047 gtk_window_set_title(GTK_WINDOW(tmp), title);
1034 gtk_window_set_policy(GTK_WINDOW(tmp), FALSE, FALSE, TRUE); 1049 gtk_window_set_policy(GTK_WINDOW(tmp), FALSE, FALSE, TRUE);
1035 1050
1036 gtk_widget_realize(tmp); 1051 gtk_widget_realize(tmp);
1037 1052
1038 if(flStyle & DW_FCF_TITLEBAR) 1053 if(flStyle & DW_FCF_TITLEBAR)
1039 {
1040 cy += DEFAULT_TITLEBAR_HEIGHT;
1041 flags |= GDK_DECOR_TITLE; 1054 flags |= GDK_DECOR_TITLE;
1042 }
1043 1055
1044 if(flStyle & DW_FCF_MINMAX) 1056 if(flStyle & DW_FCF_MINMAX)
1045 flags |= GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE; 1057 flags |= GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE;
1046 1058
1047 if(flStyle & DW_FCF_SIZEBORDER) 1059 if(flStyle & DW_FCF_SIZEBORDER)
1048 {
1049 cy += DEFAULT_SIZE_HEIGHT;
1050 cx += DEFAULT_SIZE_WIDTH;
1051 flags |= GDK_DECOR_RESIZEH; 1060 flags |= GDK_DECOR_RESIZEH;
1052 }
1053 1061
1054 if(flStyle & DW_FCF_BORDER) 1062 if(flStyle & DW_FCF_BORDER)
1055 flags |= GDK_DECOR_BORDER; 1063 flags |= GDK_DECOR_BORDER;
1056 1064
1057 gdk_window_set_decorations(tmp->window, flags); 1065 gdk_window_set_decorations(tmp->window, flags);
1058 gtk_object_set_data(GTK_OBJECT(tmp), "cx", (gpointer)cx);
1059 gtk_object_set_data(GTK_OBJECT(tmp), "cy", (gpointer)cy);
1060 1066
1061 if(hwndOwner) 1067 if(hwndOwner)
1062 gdk_window_reparent(GTK_WIDGET(tmp)->window, GTK_WIDGET(hwndOwner)->window, 0, 0); 1068 gdk_window_reparent(GTK_WIDGET(tmp)->window, GTK_WIDGET(hwndOwner)->window, 0, 0);
1063 1069
1064 DW_MUTEX_UNLOCK; 1070 DW_MUTEX_UNLOCK;
1075 { 1081 {
1076 GtkWidget *tmp; 1082 GtkWidget *tmp;
1077 int _locked_by_me = FALSE; 1083 int _locked_by_me = FALSE;
1078 1084
1079 DW_MUTEX_LOCK; 1085 DW_MUTEX_LOCK;
1080 if(type == BOXVERT) 1086 tmp = gtk_table_new(1, 1, FALSE);
1081 tmp = gtk_vbox_new(FALSE, pad); 1087 gtk_object_set_data(GTK_OBJECT(tmp), "boxtype", (gpointer)type);
1082 else 1088 gtk_object_set_data(GTK_OBJECT(tmp), "boxpad", (gpointer)pad);
1083 tmp = gtk_hbox_new(FALSE, pad);
1084 gtk_widget_show(tmp); 1089 gtk_widget_show(tmp);
1085 DW_MUTEX_UNLOCK; 1090 DW_MUTEX_UNLOCK;
1086 return tmp; 1091 return tmp;
1087 } 1092 }
1088 1093
1523 GtkWidget *tmp; 1528 GtkWidget *tmp;
1524 int _locked_by_me = FALSE; 1529 int _locked_by_me = FALSE;
1525 1530
1526 DW_MUTEX_LOCK; 1531 DW_MUTEX_LOCK;
1527 tmp = gtk_label_new(text); 1532 tmp = gtk_label_new(text);
1528 gtk_label_set_justify(GTK_LABEL(tmp), GTK_JUSTIFY_LEFT); 1533
1534 /* Left and centered */
1535 gtk_misc_set_alignment(GTK_MISC(tmp), 0.0f, 0.5f);
1529 gtk_widget_show(tmp); 1536 gtk_widget_show(tmp);
1530 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); 1537 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id);
1531 DW_MUTEX_UNLOCK; 1538 DW_MUTEX_UNLOCK;
1532 return tmp; 1539 return tmp;
1533 } 1540 }
1548 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); 1555 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
1549 tmp = gtk_label_new(text); 1556 tmp = gtk_label_new(text);
1550 gtk_container_add(GTK_CONTAINER(frame), tmp); 1557 gtk_container_add(GTK_CONTAINER(frame), tmp);
1551 gtk_widget_show(tmp); 1558 gtk_widget_show(tmp);
1552 gtk_widget_show(frame); 1559 gtk_widget_show(frame);
1553 gtk_label_set_justify(GTK_LABEL(tmp), GTK_JUSTIFY_LEFT); 1560
1561 /* Left and centered */
1562 gtk_misc_set_alignment(GTK_MISC(tmp), 0.0f, 0.5f);
1554 gtk_object_set_data(GTK_OBJECT(frame), "id", (gpointer)id); 1563 gtk_object_set_data(GTK_OBJECT(frame), "id", (gpointer)id);
1555 gtk_object_set_data(GTK_OBJECT(frame), "label", (gpointer)tmp); 1564 gtk_object_set_data(GTK_OBJECT(frame), "label", (gpointer)tmp);
1556 DW_MUTEX_UNLOCK; 1565 DW_MUTEX_UNLOCK;
1557 return frame; 1566 return frame;
1558 } 1567 }
1933 DW_MUTEX_LOCK; 1942 DW_MUTEX_LOCK;
1934 gtk_widget_set_sensitive(handle, TRUE); 1943 gtk_widget_set_sensitive(handle, TRUE);
1935 DW_MUTEX_UNLOCK; 1944 DW_MUTEX_UNLOCK;
1936 } 1945 }
1937 1946
1947 void _strip_cr(char *dest, char *src)
1948 {
1949 int z, x = 0;
1950
1951 for(z=0;z<strlen(src);z++)
1952 {
1953 if(src[z] != '\r')
1954 {
1955 dest[x] = src[z];
1956 x++;
1957 }
1958 }
1959 dest[x] = 0;
1960 }
1961
1938 /* 1962 /*
1939 * Adds text to an MLE box and returns the current point. 1963 * Adds text to an MLE box and returns the current point.
1940 * Parameters: 1964 * Parameters:
1941 * handle: Handle to the MLE to be queried. 1965 * handle: Handle to the MLE to be queried.
1942 * buffer: Text buffer to be imported. 1966 * buffer: Text buffer to be imported.
1949 1973
1950 DW_MUTEX_LOCK; 1974 DW_MUTEX_LOCK;
1951 if(GTK_IS_BOX(handle)) 1975 if(GTK_IS_BOX(handle))
1952 { 1976 {
1953 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); 1977 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle");
1978 GdkFont *font = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle), "gdkfont");
1954 1979
1955 if(tmp && GTK_IS_TEXT(tmp)) 1980 if(tmp && GTK_IS_TEXT(tmp))
1956 { 1981 {
1982 GdkColor *fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "foregdk");
1983 GdkColor *back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "backgdk");
1984 char *impbuf = malloc(strlen(buffer)+1);
1985
1986 _strip_cr(impbuf, buffer);
1987
1957 gtk_text_set_point(GTK_TEXT(tmp), startpoint < 0 ? 0 : startpoint); 1988 gtk_text_set_point(GTK_TEXT(tmp), startpoint < 0 ? 0 : startpoint);
1958 gtk_text_insert(GTK_TEXT(tmp), NULL, NULL, NULL, buffer, -1); 1989 gtk_text_insert(GTK_TEXT(tmp), font, fore, back, impbuf, -1);
1959 tmppoint = gtk_text_get_point(GTK_TEXT(tmp)); 1990 tmppoint = gtk_text_get_point(GTK_TEXT(tmp));
1991 free(impbuf);
1960 } 1992 }
1961 } 1993 }
1962 DW_MUTEX_UNLOCK; 1994 DW_MUTEX_UNLOCK;
1963 return tmppoint; 1995 return tmppoint;
1964 } 1996 }
2166 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); 2198 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle");
2167 2199
2168 if(tmp && GTK_IS_TEXT(tmp)) 2200 if(tmp && GTK_IS_TEXT(tmp))
2169 { 2201 {
2170 gtk_text_set_word_wrap(GTK_TEXT(tmp), state); 2202 gtk_text_set_word_wrap(GTK_TEXT(tmp), state);
2203 gtk_text_set_line_wrap(GTK_TEXT(tmp), state);
2171 } 2204 }
2172 } 2205 }
2173 DW_MUTEX_UNLOCK; 2206 DW_MUTEX_UNLOCK;
2174 } 2207 }
2175 2208
2543 2576
2544 gtk_signal_connect(GTK_OBJECT(clist), "select_row", GTK_SIGNAL_FUNC(_select_row), NULL); 2577 gtk_signal_connect(GTK_OBJECT(clist), "select_row", GTK_SIGNAL_FUNC(_select_row), NULL);
2545 gtk_signal_connect(GTK_OBJECT(clist), "unselect_row", GTK_SIGNAL_FUNC(_unselect_row), NULL); 2578 gtk_signal_connect(GTK_OBJECT(clist), "unselect_row", GTK_SIGNAL_FUNC(_unselect_row), NULL);
2546 2579
2547 gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); 2580 gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE);
2581 gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_SINGLE);
2548 gtk_container_add(GTK_CONTAINER(handle), clist); 2582 gtk_container_add(GTK_CONTAINER(handle), clist);
2549 gtk_object_set_user_data(GTK_OBJECT(handle), (gpointer)clist); 2583 gtk_object_set_user_data(GTK_OBJECT(handle), (gpointer)clist);
2550 gtk_widget_show(clist); 2584 gtk_widget_show(clist);
2551 gtk_object_set_data(GTK_OBJECT(clist), "colcount", (gpointer)count); 2585 gtk_object_set_data(GTK_OBJECT(clist), "colcount", (gpointer)count);
2552 2586
3223 if(font) 3257 if(font)
3224 { 3258 {
3225 gint ascent; 3259 gint ascent;
3226 3260
3227 gdk_text_extents(font, text, strlen(text), NULL, NULL, NULL, &ascent, NULL); 3261 gdk_text_extents(font, text, strlen(text), NULL, NULL, NULL, &ascent, NULL);
3228 gdk_draw_text(handle ? handle->window : pixmap->pixmap, font, gc, x, y + ascent, text, strlen(text)); 3262 gdk_draw_text(handle ? handle->window : pixmap->pixmap, font, gc, x, y + ascent + 2, text, strlen(text));
3229 gdk_gc_unref(gc); 3263 gdk_gc_unref(gc);
3230 gdk_font_unref(font); 3264 gdk_font_unref(font);
3231 } 3265 }
3232 } 3266 }
3233 DW_MUTEX_UNLOCK; 3267 DW_MUTEX_UNLOCK;
3560 void dw_exit(int exitcode) 3594 void dw_exit(int exitcode)
3561 { 3595 {
3562 exit(exitcode); 3596 exit(exitcode);
3563 } 3597 }
3564 3598
3599 #define DW_EXPAND (GTK_EXPAND | GTK_SHRINK | GTK_FILL)
3600
3565 /* 3601 /*
3566 * Pack windows (widgets) into a box from the end (or bottom). 3602 * Pack windows (widgets) into a box from the end (or bottom).
3567 * Parameters: 3603 * Parameters:
3568 * box: Window handle of the box to be packed into. 3604 * box: Window handle of the box to be packed into.
3569 * item: Window handle of the item to be back. 3605 * item: Window handle of the item to be back.
3573 * vsize: TRUE if the window (widget) should expand vertically to fill space given. 3609 * vsize: TRUE if the window (widget) should expand vertically to fill space given.
3574 * pad: Number of pixels of padding around the item. 3610 * pad: Number of pixels of padding around the item.
3575 */ 3611 */
3576 void dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) 3612 void dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad)
3577 { 3613 {
3578 int expand = (hsize == FALSE && vsize == FALSE) ? FALSE : TRUE;
3579 int _locked_by_me = FALSE; 3614 int _locked_by_me = FALSE;
3580 3615
3581 if(!box) 3616 if(!box)
3582 return; 3617 return;
3583 3618
3587 { 3622 {
3588 item = gtk_label_new(""); 3623 item = gtk_label_new("");
3589 gtk_widget_show(item); 3624 gtk_widget_show(item);
3590 } 3625 }
3591 3626
3592 if(GTK_IS_BOX(box)) 3627 if(GTK_IS_TABLE(box))
3593 { 3628 {
3594 gtk_box_pack_end(GTK_BOX(box), item, expand, TRUE, pad); 3629 int boxcount = (int)gtk_object_get_data(GTK_OBJECT(box), "boxcount");
3630 int boxtype = (int)gtk_object_get_data(GTK_OBJECT(box), "boxtype");
3631
3632 /* If the item being packed is a box, then we use it's padding
3633 * instead of the padding specified on the pack line, this is
3634 * due to a bug in the OS/2 and Win32 renderer and a limitation
3635 * of the GtkTable class.
3636 */
3637 if(GTK_IS_TABLE(item))
3638 pad = (int)gtk_object_get_data(GTK_OBJECT(item), "boxpad");
3639
3640 if(boxtype == BOXVERT)
3641 gtk_table_resize(GTK_TABLE(box), boxcount + 1, 1);
3642 else
3643 gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1);
3644
3645 gtk_table_attach(GTK_TABLE(box), item, 0, 1, 0, 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad);
3646 gtk_object_set_data(GTK_OBJECT(box), "boxcount", (gpointer)boxcount + 1);
3595 gtk_widget_set_usize(item, width, height); 3647 gtk_widget_set_usize(item, width, height);
3596 if(GTK_IS_RADIO_BUTTON(item)) 3648 if(GTK_IS_RADIO_BUTTON(item))
3597 { 3649 {
3598 GSList *group; 3650 GSList *group;
3599 GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "group"); 3651 GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "group");
3610 else 3662 else
3611 { 3663 {
3612 GtkWidget *vbox = gtk_vbox_new(FALSE, 0); 3664 GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
3613 3665
3614 gtk_container_add(GTK_CONTAINER(box), vbox); 3666 gtk_container_add(GTK_CONTAINER(box), vbox);
3615 gtk_box_pack_end(GTK_BOX(vbox), item, expand, TRUE, 0); 3667 gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0);
3616 gtk_widget_show(vbox); 3668 gtk_widget_show(vbox);
3617 3669
3618 gtk_widget_set_usize(item, width, height); 3670 gtk_widget_set_usize(item, width, height);
3619 gtk_object_set_user_data(GTK_OBJECT(box), vbox); 3671 gtk_object_set_user_data(GTK_OBJECT(box), vbox);
3620 } 3672 }
3714 int _locked_by_me = FALSE; 3766 int _locked_by_me = FALSE;
3715 3767
3716 DW_MUTEX_LOCK; 3768 DW_MUTEX_LOCK;
3717 if(handle && GTK_IS_WINDOW(handle)) 3769 if(handle && GTK_IS_WINDOW(handle))
3718 { 3770 {
3719 int cx = (int)gtk_object_get_data(GTK_OBJECT(handle), "cx");
3720 int cy = (int)gtk_object_get_data(GTK_OBJECT(handle), "cy");
3721
3722 _size_allocate(GTK_WINDOW(handle)); 3771 _size_allocate(GTK_WINDOW(handle));
3723 3772
3724 gtk_widget_set_uposition(handle, x, y); 3773 gtk_widget_set_uposition(handle, x, y);
3725 gtk_window_set_default_size(GTK_WINDOW(handle), width - cx, height - cy); 3774 gtk_window_set_default_size(GTK_WINDOW(handle), width, height);
3726 } 3775 }
3727 else if(handle && handle->window) 3776 else if(handle && handle->window)
3728 { 3777 {
3729 gdk_window_resize(handle->window, width, height); 3778 gdk_window_resize(handle->window, width, height);
3730 gdk_window_move(handle->window, x, y); 3779 gdk_window_move(handle->window, x, y);
3746 int _locked_by_me = FALSE; 3795 int _locked_by_me = FALSE;
3747 gint gx, gy, gwidth, gheight, gdepth; 3796 gint gx, gy, gwidth, gheight, gdepth;
3748 3797
3749 if(handle && handle->window) 3798 if(handle && handle->window)
3750 { 3799 {
3751 int cx, cy;
3752
3753 DW_MUTEX_LOCK; 3800 DW_MUTEX_LOCK;
3754
3755 cx = (int)gtk_object_get_data(GTK_OBJECT(handle), "cx");
3756 cy = (int)gtk_object_get_data(GTK_OBJECT(handle), "cy");
3757 3801
3758 gdk_window_get_geometry(handle->window, &gx, &gy, &gwidth, &gheight, &gdepth); 3802 gdk_window_get_geometry(handle->window, &gx, &gy, &gwidth, &gheight, &gdepth);
3759 gdk_window_get_root_origin(handle->window, &gx, &gy); 3803 gdk_window_get_root_origin(handle->window, &gx, &gy);
3760 if(x) 3804 if(x)
3761 *x = gx; 3805 *x = gx;
3762 if(y) 3806 if(y)
3763 *y = gy; 3807 *y = gy;
3764 if(width) 3808 if(width)
3765 *width = gwidth - cx; 3809 *width = gwidth;
3766 if(height) 3810 if(height)
3767 *height = gheight - cy; 3811 *height = gheight;
3768 DW_MUTEX_UNLOCK; 3812 DW_MUTEX_UNLOCK;
3769 } 3813 }
3770 } 3814 }
3771 3815
3772 /* 3816 /*
3792 { 3836 {
3793 if(style & DW_CCS_EXTENDSEL) 3837 if(style & DW_CCS_EXTENDSEL)
3794 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_MULTIPLE); 3838 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_MULTIPLE);
3795 if(style & DW_CCS_SINGLESEL) 3839 if(style & DW_CCS_SINGLESEL)
3796 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_SINGLE); 3840 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_SINGLE);
3841 }
3842 if(GTK_IS_LABEL(handle2))
3843 {
3844 gfloat x, y;
3845
3846 x = y = DW_LEFT;
3847
3848 if(style & DW_DT_CENTER)
3849 x = DW_CENTER;
3850
3851 if(style & DW_DT_VCENTER)
3852 y = DW_CENTER;
3853
3854 gtk_misc_set_alignment(GTK_MISC(handle2), x, y);
3797 } 3855 }
3798 DW_MUTEX_UNLOCK; 3856 DW_MUTEX_UNLOCK;
3799 } 3857 }
3800 3858
3801 /* 3859 /*
4368 * vsize: TRUE if the window (widget) should expand vertically to fill space given. 4426 * vsize: TRUE if the window (widget) should expand vertically to fill space given.
4369 * pad: Number of pixels of padding around the item. 4427 * pad: Number of pixels of padding around the item.
4370 */ 4428 */
4371 void dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) 4429 void dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad)
4372 { 4430 {
4373 int expand = (hsize == FALSE && vsize == FALSE) ? FALSE : TRUE;
4374 int _locked_by_me = FALSE; 4431 int _locked_by_me = FALSE;
4375 4432
4376 if(!box) 4433 if(!box)
4377 return; 4434 return;
4378 4435
4382 { 4439 {
4383 item = gtk_label_new(""); 4440 item = gtk_label_new("");
4384 gtk_widget_show(item); 4441 gtk_widget_show(item);
4385 } 4442 }
4386 4443
4387 if(GTK_IS_BOX(box)) 4444 if(GTK_IS_TABLE(box))
4388 { 4445 {
4389 gtk_box_pack_start(GTK_BOX(box), item, expand, TRUE, pad); 4446 int boxcount = (int)gtk_object_get_data(GTK_OBJECT(box), "boxcount");
4447 int boxtype = (int)gtk_object_get_data(GTK_OBJECT(box), "boxtype");
4448 int x, y;
4449
4450 /* If the item being packed is a box, then we use it's padding
4451 * instead of the padding specified on the pack line, this is
4452 * due to a bug in the OS/2 and Win32 renderer and a limitation
4453 * of the GtkTable class.
4454 */
4455 if(GTK_IS_TABLE(item))
4456 pad = (int)gtk_object_get_data(GTK_OBJECT(item), "boxpad");
4457
4458 if(boxtype == BOXVERT)
4459 {
4460 x = 0;
4461 y = boxcount;
4462 gtk_table_resize(GTK_TABLE(box), boxcount + 1, 1);
4463 }
4464 else
4465 {
4466 x = boxcount;
4467 y = 0;
4468 gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1);
4469 }
4470
4471 gtk_table_attach(GTK_TABLE(box), item, x, x + 1, y, y + 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad);
4472 gtk_object_set_data(GTK_OBJECT(box), "boxcount", (gpointer)boxcount + 1);
4390 gtk_widget_set_usize(item, width, height); 4473 gtk_widget_set_usize(item, width, height);
4391 if(GTK_IS_RADIO_BUTTON(item)) 4474 if(GTK_IS_RADIO_BUTTON(item))
4392 { 4475 {
4393 GSList *group; 4476 GSList *group;
4394 GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "group"); 4477 GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "group");
4405 else 4488 else
4406 { 4489 {
4407 GtkWidget *vbox = gtk_vbox_new(FALSE, 0); 4490 GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
4408 4491
4409 gtk_container_add(GTK_CONTAINER(box), vbox); 4492 gtk_container_add(GTK_CONTAINER(box), vbox);
4410 gtk_box_pack_end(GTK_BOX(vbox), item, expand, TRUE, 0); 4493 gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0);
4411 gtk_widget_show(vbox); 4494 gtk_widget_show(vbox);
4412 4495
4413 gtk_widget_set_usize(item, width, height); 4496 gtk_widget_set_usize(item, width, height);
4414 gtk_object_set_user_data(GTK_OBJECT(box), vbox); 4497 gtk_object_set_user_data(GTK_OBJECT(box), vbox);
4415 } 4498 }