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