comparison gtk/dw.c @ 60:61869769c050

Sync with the latest DW code.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 29 Nov 2001 15:10:39 +0000
parents 1ed95c8ec2ff
children a6801a2260af
comparison
equal deleted inserted replaced
59:286ffd8e8ed8 60:61869769c050
963 if(!handle) 963 if(!handle)
964 return 0; 964 return 0;
965 965
966 DW_MUTEX_LOCK; 966 DW_MUTEX_LOCK;
967 gtk_widget_show(handle); 967 gtk_widget_show(handle);
968 gdk_window_raise(GTK_WIDGET(handle)->window); 968 if(GTK_WIDGET(handle)->window)
969 gdk_flush(); 969 {
970 gdk_window_show(GTK_WIDGET(handle)->window); 970 gdk_window_raise(GTK_WIDGET(handle)->window);
971 gdk_flush(); 971 gdk_flush();
972 gdk_window_show(GTK_WIDGET(handle)->window);
973 gdk_flush();
974 }
972 defaultitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "defaultitem"); 975 defaultitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "defaultitem");
973 if(defaultitem) 976 if(defaultitem)
974 gtk_widget_grab_focus(defaultitem); 977 gtk_widget_grab_focus(defaultitem);
975 DW_MUTEX_UNLOCK; 978 DW_MUTEX_UNLOCK;
976 return 0; 979 return 0;
1775 { 1778 {
1776 gtk_widget_destroy(tmp); 1779 gtk_widget_destroy(tmp);
1777 DW_MUTEX_UNLOCK; 1780 DW_MUTEX_UNLOCK;
1778 return FALSE; 1781 return FALSE;
1779 } 1782 }
1783 gtk_tree_set_view_mode(GTK_TREE(tree), GTK_TREE_VIEW_ITEM);
1784 gtk_tree_set_selection_mode(GTK_TREE(tree), GTK_SELECTION_SINGLE);
1780 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), tree); 1785 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), tree);
1781 /* Set the selection mode */ 1786 /* Set the selection mode */
1782 gtk_tree_set_selection_mode (GTK_TREE(tree), GTK_SELECTION_SINGLE); 1787 gtk_tree_set_selection_mode (GTK_TREE(tree), GTK_SELECTION_SINGLE);
1783 1788
1784 gtk_object_set_user_data(GTK_OBJECT(tmp), (gpointer)tree); 1789 gtk_object_set_user_data(GTK_OBJECT(tmp), (gpointer)tree);
2075 * Create a new listbox window (widget) to be packed. 2080 * Create a new listbox window (widget) to be packed.
2076 * Parameters: 2081 * Parameters:
2077 * id: An ID to be used with WinWindowFromID() or 0L. 2082 * id: An ID to be used with WinWindowFromID() or 0L.
2078 * multi: Multiple select TRUE or FALSE. 2083 * multi: Multiple select TRUE or FALSE.
2079 */ 2084 */
2080 HWND dw_listbox_new(unsigned long id, int multi) 2085 HWND dw_listbox_new(unsigned long id, int multi)
2081 { 2086 {
2082 GtkWidget *tmp, *list; 2087 GtkWidget *tmp, *list;
2083 int _locked_by_me = FALSE; 2088 int _locked_by_me = FALSE;
2084 2089
2085 DW_MUTEX_LOCK; 2090 DW_MUTEX_LOCK;
2107 * handle: Handle to the window. 2112 * handle: Handle to the window.
2108 * id: An ID to be used to specify the icon. 2113 * id: An ID to be used to specify the icon.
2109 */ 2114 */
2110 void dw_window_set_icon(HWND handle, unsigned long id) 2115 void dw_window_set_icon(HWND handle, unsigned long id)
2111 { 2116 {
2112 GdkBitmap *bitmap; 2117 GdkBitmap *bitmap = NULL;
2113 GdkPixmap *icon_pixmap; 2118 GdkPixmap *icon_pixmap;
2114 int _locked_by_me = FALSE; 2119 int _locked_by_me = FALSE;
2115 2120
2116 DW_MUTEX_LOCK; 2121 DW_MUTEX_LOCK;
2117 icon_pixmap = _find_pixmap(&bitmap, id, handle); 2122 icon_pixmap = _find_pixmap(&bitmap, id, handle);
2128 * handle: Handle to the window. 2133 * handle: Handle to the window.
2129 * id: An ID to be used to specify the icon. 2134 * id: An ID to be used to specify the icon.
2130 */ 2135 */
2131 void dw_window_set_bitmap(HWND handle, unsigned long id) 2136 void dw_window_set_bitmap(HWND handle, unsigned long id)
2132 { 2137 {
2133 GdkBitmap *bitmap; 2138 GdkBitmap *bitmap = NULL;
2134 GdkPixmap *tmp; 2139 GdkPixmap *tmp;
2135 int _locked_by_me = FALSE; 2140 int _locked_by_me = FALSE;
2136 2141
2137 DW_MUTEX_LOCK; 2142 DW_MUTEX_LOCK;
2138 tmp = _find_pixmap(&bitmap, id, handle); 2143 tmp = _find_pixmap(&bitmap, id, handle);
2738 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(handle), value); 2743 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(handle), value);
2739 DW_MUTEX_UNLOCK; 2744 DW_MUTEX_UNLOCK;
2740 } 2745 }
2741 2746
2742 /* 2747 /*
2748 * Inserts an item into a tree window (widget) after another item.
2749 * Parameters:
2750 * handle: Handle to the tree to be inserted.
2751 * item: Handle to the item to be positioned after.
2752 * title: The text title of the entry.
2753 * icon: Handle to coresponding icon.
2754 * parent: Parent handle or 0 if root.
2755 * itemdata: Item specific data.
2756 */
2757 HWND dw_tree_insert_after(HWND handle, HWND item, char *title, unsigned long icon, HWND parent, void *itemdata)
2758 {
2759 GtkWidget *newitem, *tree, *subtree, *label, *hbox, *pixmap;
2760 GdkPixmap *gdkpix;
2761 GdkBitmap *gdkbmp = NULL;
2762 int position = 0;
2763 int _locked_by_me = FALSE;
2764
2765 if(!handle)
2766 return NULL;
2767
2768 DW_MUTEX_LOCK;
2769 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
2770 if(!tree || !GTK_IS_TREE(tree))
2771 {
2772 DW_MUTEX_UNLOCK;
2773 return NULL;
2774 }
2775
2776 if(item && GTK_IS_TREE_ITEM(item))
2777 position = gtk_tree_child_position(GTK_TREE(tree), item);
2778
2779 position++;
2780
2781 newitem = gtk_tree_item_new();
2782 label = gtk_label_new(title);
2783 gtk_object_set_data(GTK_OBJECT(newitem), "text", (gpointer)strdup(title));
2784 gtk_object_set_data(GTK_OBJECT(newitem), "itemdata", (gpointer)itemdata);
2785 gtk_object_set_data(GTK_OBJECT(newitem), "tree", (gpointer)tree);
2786 hbox = gtk_hbox_new(FALSE, 2);
2787 gtk_object_set_data(GTK_OBJECT(newitem), "hbox", (gpointer)hbox);
2788 gdkpix = _find_pixmap(&gdkbmp, icon, hbox);
2789 pixmap = gtk_pixmap_new(gdkpix, gdkbmp);
2790 gtk_container_add(GTK_CONTAINER(newitem), hbox);
2791 gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0);
2792 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0);
2793 gtk_widget_show(label);
2794 gtk_widget_show(pixmap);
2795 gtk_widget_show(hbox);
2796
2797 if(parent)
2798 {
2799 subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent));
2800 if(!subtree)
2801 {
2802 void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "select-child-func");
2803 void *work = (void *)gtk_object_get_data(GTK_OBJECT(tree), "select-child-data");
2804
2805 subtree = gtk_tree_new();
2806
2807 if(thisfunc && work)
2808 gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc), work);
2809
2810 thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "container-context-func");
2811 work = (void *)gtk_object_get_data(GTK_OBJECT(tree), "container-context-data");
2812
2813 if(thisfunc && work)
2814 gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), work);
2815
2816 gtk_object_set_user_data(GTK_OBJECT(parent), subtree);
2817 gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE);
2818 gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM);
2819 gtk_tree_item_set_subtree(GTK_TREE_ITEM(parent), subtree);
2820 gtk_tree_item_collapse(GTK_TREE_ITEM(parent));
2821 gtk_widget_show(subtree);
2822 gtk_tree_item_expand(GTK_TREE_ITEM(parent));
2823 gtk_tree_item_collapse(GTK_TREE_ITEM(parent));
2824 }
2825 gtk_object_set_data(GTK_OBJECT(newitem), "parenttree", (gpointer)subtree);
2826 gtk_tree_insert(GTK_TREE(subtree), newitem, position);
2827 }
2828 else
2829 {
2830 gtk_object_set_data(GTK_OBJECT(newitem), "parenttree", (gpointer)tree);
2831 gtk_tree_insert(GTK_TREE(tree), newitem, position);
2832 }
2833 gtk_tree_item_expand(GTK_TREE_ITEM(newitem));
2834 gtk_tree_item_collapse(GTK_TREE_ITEM(newitem));
2835 gtk_widget_show(newitem);
2836 DW_MUTEX_UNLOCK;
2837 return newitem;
2838 }
2839
2840 /*
2743 * Inserts an item into a tree window (widget). 2841 * Inserts an item into a tree window (widget).
2744 * Parameters: 2842 * Parameters:
2745 * handle: Handle to the tree to be inserted. 2843 * handle: Handle to the tree to be inserted.
2746 * title: The text title of the entry. 2844 * title: The text title of the entry.
2747 * icon: Handle to coresponding icon. 2845 * icon: Handle to coresponding icon.
2750 */ 2848 */
2751 HWND dw_tree_insert(HWND handle, char *title, unsigned long icon, HWND parent, void *itemdata) 2849 HWND dw_tree_insert(HWND handle, char *title, unsigned long icon, HWND parent, void *itemdata)
2752 { 2850 {
2753 GtkWidget *item, *tree, *subtree, *label, *hbox, *pixmap; 2851 GtkWidget *item, *tree, *subtree, *label, *hbox, *pixmap;
2754 GdkPixmap *gdkpix; 2852 GdkPixmap *gdkpix;
2755 GdkBitmap *gdkbmp; 2853 GdkBitmap *gdkbmp = NULL;
2756 int _locked_by_me = FALSE; 2854 int _locked_by_me = FALSE;
2855
2856 if(!handle)
2857 return NULL;
2757 2858
2758 DW_MUTEX_LOCK; 2859 DW_MUTEX_LOCK;
2759 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); 2860 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
2760 if(!tree || !GTK_IS_TREE(tree)) 2861 if(!tree || !GTK_IS_TREE(tree))
2761 { 2862 {
2804 gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); 2905 gtk_tree_item_collapse(GTK_TREE_ITEM(parent));
2805 gtk_widget_show(subtree); 2906 gtk_widget_show(subtree);
2806 gtk_tree_item_expand(GTK_TREE_ITEM(parent)); 2907 gtk_tree_item_expand(GTK_TREE_ITEM(parent));
2807 gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); 2908 gtk_tree_item_collapse(GTK_TREE_ITEM(parent));
2808 } 2909 }
2910 gtk_object_set_data(GTK_OBJECT(item), "parenttree", (gpointer)subtree);
2809 gtk_tree_append(GTK_TREE(subtree), item); 2911 gtk_tree_append(GTK_TREE(subtree), item);
2810 } 2912 }
2811 else 2913 else
2914 {
2915 gtk_object_set_data(GTK_OBJECT(item), "parenttree", (gpointer)tree);
2812 gtk_tree_append(GTK_TREE(tree), item); 2916 gtk_tree_append(GTK_TREE(tree), item);
2917 }
2813 gtk_tree_item_expand(GTK_TREE_ITEM(item)); 2918 gtk_tree_item_expand(GTK_TREE_ITEM(item));
2814 gtk_tree_item_collapse(GTK_TREE_ITEM(item)); 2919 gtk_tree_item_collapse(GTK_TREE_ITEM(item));
2815 gtk_widget_show(item); 2920 gtk_widget_show(item);
2816 DW_MUTEX_UNLOCK; 2921 DW_MUTEX_UNLOCK;
2817 return item; 2922 return item;
2827 */ 2932 */
2828 void dw_tree_set(HWND handle, HWND item, char *title, unsigned long icon) 2933 void dw_tree_set(HWND handle, HWND item, char *title, unsigned long icon)
2829 { 2934 {
2830 GtkWidget *label, *hbox, *pixmap; 2935 GtkWidget *label, *hbox, *pixmap;
2831 GdkPixmap *gdkpix; 2936 GdkPixmap *gdkpix;
2832 GdkBitmap *gdkbmp; 2937 GdkBitmap *gdkbmp = NULL;
2833 char *oldtext; 2938 char *oldtext;
2834 int _locked_by_me = FALSE; 2939 int _locked_by_me = FALSE;
2940
2941 if(!handle || !item)
2942 return;
2835 2943
2836 DW_MUTEX_LOCK; 2944 DW_MUTEX_LOCK;
2837 oldtext = (char *)gtk_object_get_data(GTK_OBJECT(item), "text"); 2945 oldtext = (char *)gtk_object_get_data(GTK_OBJECT(item), "text");
2838 if(oldtext) 2946 if(oldtext)
2839 free(oldtext); 2947 free(oldtext);
2863 */ 2971 */
2864 void dw_tree_set_data(HWND handle, HWND item, void *itemdata) 2972 void dw_tree_set_data(HWND handle, HWND item, void *itemdata)
2865 { 2973 {
2866 int _locked_by_me = FALSE; 2974 int _locked_by_me = FALSE;
2867 2975
2976 if(!handle || !item)
2977 return;
2978
2868 DW_MUTEX_LOCK; 2979 DW_MUTEX_LOCK;
2869 gtk_object_set_data(GTK_OBJECT(item), "itemdata", (gpointer)itemdata); 2980 gtk_object_set_data(GTK_OBJECT(item), "itemdata", (gpointer)itemdata);
2870 DW_MUTEX_UNLOCK; 2981 DW_MUTEX_UNLOCK;
2871 } 2982 }
2872 2983
2878 */ 2989 */
2879 void dw_tree_item_select(HWND handle, HWND item) 2990 void dw_tree_item_select(HWND handle, HWND item)
2880 { 2991 {
2881 GtkWidget *lastselect; 2992 GtkWidget *lastselect;
2882 int _locked_by_me = FALSE; 2993 int _locked_by_me = FALSE;
2994
2995 if(!handle || !item)
2996 return;
2883 2997
2884 DW_MUTEX_LOCK; 2998 DW_MUTEX_LOCK;
2885 lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "lastselect"); 2999 lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "lastselect");
2886 if(lastselect && GTK_IS_TREE_ITEM(lastselect)) 3000 if(lastselect && GTK_IS_TREE_ITEM(lastselect))
2887 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); 3001 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect));
2898 void dw_tree_clear(HWND handle) 3012 void dw_tree_clear(HWND handle)
2899 { 3013 {
2900 GtkWidget *tree; 3014 GtkWidget *tree;
2901 int _locked_by_me = FALSE; 3015 int _locked_by_me = FALSE;
2902 3016
3017 if(!handle)
3018 return;
3019
2903 DW_MUTEX_LOCK; 3020 DW_MUTEX_LOCK;
2904 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); 3021 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
2905 if(!tree || !GTK_IS_TREE(tree)) 3022 if(!tree || !GTK_IS_TREE(tree))
2906 { 3023 {
2907 DW_MUTEX_UNLOCK; 3024 DW_MUTEX_UNLOCK;
2919 */ 3036 */
2920 void dw_tree_expand(HWND handle, HWND item) 3037 void dw_tree_expand(HWND handle, HWND item)
2921 { 3038 {
2922 int _locked_by_me = FALSE; 3039 int _locked_by_me = FALSE;
2923 3040
3041 if(!handle || !item)
3042 return;
3043
2924 DW_MUTEX_LOCK; 3044 DW_MUTEX_LOCK;
2925 if(GTK_IS_TREE_ITEM(item)) 3045 if(GTK_IS_TREE_ITEM(item))
2926 gtk_tree_item_expand(GTK_TREE_ITEM(item)); 3046 gtk_tree_item_expand(GTK_TREE_ITEM(item));
2927 DW_MUTEX_UNLOCK; 3047 DW_MUTEX_UNLOCK;
2928 } 3048 }
2935 */ 3055 */
2936 void dw_tree_collapse(HWND handle, HWND item) 3056 void dw_tree_collapse(HWND handle, HWND item)
2937 { 3057 {
2938 int _locked_by_me = FALSE; 3058 int _locked_by_me = FALSE;
2939 3059
3060 if(!handle || !item)
3061 return;
3062
2940 DW_MUTEX_LOCK; 3063 DW_MUTEX_LOCK;
2941 if(GTK_IS_TREE_ITEM(item)) 3064 if(GTK_IS_TREE_ITEM(item))
2942 gtk_tree_item_collapse(GTK_TREE_ITEM(item)); 3065 gtk_tree_item_collapse(GTK_TREE_ITEM(item));
2943 DW_MUTEX_UNLOCK; 3066 DW_MUTEX_UNLOCK;
2944 } 3067 }
2949 * handle: Handle to the window (widget) to be cleared. 3072 * handle: Handle to the window (widget) to be cleared.
2950 * item: Handle to node to be deleted. 3073 * item: Handle to node to be deleted.
2951 */ 3074 */
2952 void dw_tree_delete(HWND handle, HWND item) 3075 void dw_tree_delete(HWND handle, HWND item)
2953 { 3076 {
2954 GtkWidget *tree, *lastselect; 3077 GtkWidget *tree, *lastselect, *parenttree;
2955 int _locked_by_me = FALSE; 3078 int _locked_by_me = FALSE;
3079
3080 if(!handle || !item || !GTK_IS_WIDGET(handle) || !GTK_IS_WIDGET(item))
3081 return;
2956 3082
2957 DW_MUTEX_LOCK; 3083 DW_MUTEX_LOCK;
2958 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); 3084 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
2959 if(!tree || !GTK_IS_TREE(tree)) 3085 if(!tree || !GTK_IS_TREE(tree))
2960 { 3086 {
2961 DW_MUTEX_UNLOCK; 3087 DW_MUTEX_UNLOCK;
2962 return; 3088 return;
2963 } 3089 }
2964 3090
2965 lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "lastselect"); 3091 lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "lastselect");
3092
2966 if(lastselect == item) 3093 if(lastselect == item)
3094 {
3095 if(lastselect && GTK_IS_WIDGET(lastselect))
3096 {
3097 parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(lastselect), "parenttree");
3098 if(parenttree && GTK_IS_TREE(parenttree))
3099 gtk_tree_unselect_child(GTK_TREE(parenttree), lastselect);
3100 }
2967 gtk_object_set_data(GTK_OBJECT(handle), "lastselect", NULL); 3101 gtk_object_set_data(GTK_OBJECT(handle), "lastselect", NULL);
2968 3102 }
2969 gtk_widget_destroy(item); 3103
3104 parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "parenttree");
3105
3106 if(parenttree && GTK_IS_WIDGET(parenttree))
3107 gtk_tree_remove_item(GTK_TREE(parenttree), item);
2970 DW_MUTEX_UNLOCK; 3108 DW_MUTEX_UNLOCK;
2971 } 3109 }
2972 3110
2973 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) 3111 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra)
2974 { 3112 {
3154 flag = (int)gtk_object_get_data(GTK_OBJECT(clist), numbuf); 3292 flag = (int)gtk_object_get_data(GTK_OBJECT(clist), numbuf);
3155 3293
3156 if(flag & DW_CFA_BITMAPORICON) 3294 if(flag & DW_CFA_BITMAPORICON)
3157 { 3295 {
3158 long hicon = *((long *)data); 3296 long hicon = *((long *)data);
3159 GdkBitmap *bitmap; 3297 GdkBitmap *bitmap = NULL;
3160 GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist); 3298 GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist);
3161 3299
3162 if(pixmap) 3300 if(pixmap)
3163 gtk_clist_set_pixmap(GTK_CLIST(clist), row, column, pixmap, bitmap); 3301 gtk_clist_set_pixmap(GTK_CLIST(clist), row, column, pixmap, bitmap);
3164 } 3302 }
3548 DW_MUTEX_UNLOCK; 3686 DW_MUTEX_UNLOCK;
3549 } 3687 }
3550 3688
3551 GdkGC *_set_colors(GdkWindow *window) 3689 GdkGC *_set_colors(GdkWindow *window)
3552 { 3690 {
3553 GdkGC *gc; 3691 GdkGC *gc = NULL;
3554 int index = _find_thread_index(dw_thread_id()); 3692 int index = _find_thread_index(dw_thread_id());
3555 3693
3556 if(!window) 3694 if(!window)
3557 return NULL; 3695 return NULL;
3558 gc = gdk_gc_new(window); 3696 gc = gdk_gc_new(window);
3766 * Returns: 3904 * Returns:
3767 * A handle to a pixmap or NULL on failure. 3905 * A handle to a pixmap or NULL on failure.
3768 */ 3906 */
3769 HPIXMAP dw_pixmap_grab(HWND handle, ULONG id) 3907 HPIXMAP dw_pixmap_grab(HWND handle, ULONG id)
3770 { 3908 {
3771 GdkBitmap *bitmap; 3909 GdkBitmap *bitmap = NULL;
3772 HPIXMAP pixmap; 3910 HPIXMAP pixmap;
3773 int _locked_by_me = FALSE; 3911 int _locked_by_me = FALSE;
3774 3912
3775 if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) 3913 if (!(pixmap = calloc(1,sizeof(struct _hpixmap))))
3776 return NULL; 3914 return NULL;
4845 } 4983 }
4846 DW_MUTEX_UNLOCK; 4984 DW_MUTEX_UNLOCK;
4847 } 4985 }
4848 4986
4849 /* 4987 /*
4988 * Returns the index to the current selected item or -1 when done.
4989 * Parameters:
4990 * handle: Handle to the listbox to be queried.
4991 * where: Either the previous return or -1 to restart.
4992 */
4993 int dw_listbox_selected_multi(HWND handle, int where)
4994 {
4995 GtkWidget *handle2 = handle;
4996 int retval = DW_LIT_NONE;
4997 int _locked_by_me = FALSE;
4998
4999 DW_MUTEX_LOCK;
5000 if(GTK_IS_SCROLLED_WINDOW(handle))
5001 {
5002 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
5003 if(tmp)
5004 handle2 = tmp;
5005 }
5006 if(GTK_IS_LIST(handle2))
5007 {
5008 int counter = 0;
5009 GList *list = GTK_LIST(handle2)->selection;
5010 while(list)
5011 {
5012 if(counter > where)
5013 {
5014 retval = counter;
5015 break;
5016 }
5017
5018 list = list->next;
5019 counter++;
5020 }
5021 }
5022 DW_MUTEX_UNLOCK;
5023 return retval;
5024 }
5025
5026 /*
4850 * Returns the index to the item in the list currently selected. 5027 * Returns the index to the item in the list currently selected.
4851 * Parameters: 5028 * Parameters:
4852 * handle: Handle to the listbox to be queried. 5029 * handle: Handle to the listbox to be queried.
4853 */ 5030 */
4854 unsigned int dw_listbox_selected(HWND handle) 5031 unsigned int dw_listbox_selected(HWND handle)