Mercurial > dwindows
comparison gtk/dw.c @ 409:1d7be77cbfb5
Implemented signal removal system so it works like OS/2 and Windows.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 13 May 2003 05:07:02 +0000 |
parents | a8124a9561c7 |
children | 47273b6a8500 |
comparison
equal
deleted
inserted
replaced
408:fecd529ba9d4 | 409:1d7be77cbfb5 |
---|---|
126 typedef struct | 126 typedef struct |
127 { | 127 { |
128 HWND window; | 128 HWND window; |
129 void *func; | 129 void *func; |
130 gpointer data; | 130 gpointer data; |
131 gint cid; | |
132 void *intfunc; | |
131 | 133 |
132 } SignalHandler; | 134 } SignalHandler; |
133 | 135 |
134 #define SIGNALMAX 17 | 136 #define SIGNALMAX 17 |
135 | 137 |
195 | 197 |
196 sprintf(text, "_dw_sigwindow%d", counter); | 198 sprintf(text, "_dw_sigwindow%d", counter); |
197 sh.window = (HWND)gtk_object_get_data(GTK_OBJECT(widget), text); | 199 sh.window = (HWND)gtk_object_get_data(GTK_OBJECT(widget), text); |
198 sprintf(text, "_dw_sigfunc%d", counter); | 200 sprintf(text, "_dw_sigfunc%d", counter); |
199 sh.func = (void *)gtk_object_get_data(GTK_OBJECT(widget), text); | 201 sh.func = (void *)gtk_object_get_data(GTK_OBJECT(widget), text); |
202 sprintf(text, "_dw_intfunc%d", counter); | |
203 sh.intfunc = (void *)gtk_object_get_data(GTK_OBJECT(widget), text); | |
200 sprintf(text, "_dw_sigdata%d", counter); | 204 sprintf(text, "_dw_sigdata%d", counter); |
201 sh.data = gtk_object_get_data(GTK_OBJECT(widget), text); | 205 sh.data = gtk_object_get_data(GTK_OBJECT(widget), text); |
206 sprintf(text, "_dw_sigcid%d", counter); | |
207 sh.cid = (gint)gtk_object_get_data(GTK_OBJECT(widget), text); | |
202 | 208 |
203 return sh; | 209 return sh; |
204 } | 210 } |
205 | 211 |
206 static int _set_signal_handler(GtkWidget *widget, HWND window, void *func, gpointer data) | 212 static void _remove_signal_handler(GtkWidget *widget, int counter) |
213 { | |
214 char text[100]; | |
215 gint cid; | |
216 | |
217 sprintf(text, "_dw_sigcid%d", counter); | |
218 cid = (gint)gtk_object_get_data(GTK_OBJECT(widget), text); | |
219 gtk_signal_disconnect(GTK_OBJECT(widget), cid); | |
220 gtk_object_set_data(GTK_OBJECT(widget), text, NULL); | |
221 sprintf(text, "_dw_sigwindow%d", counter); | |
222 gtk_object_set_data(GTK_OBJECT(widget), text, NULL); | |
223 sprintf(text, "_dw_sigfunc%d", counter); | |
224 gtk_object_set_data(GTK_OBJECT(widget), text, NULL); | |
225 sprintf(text, "_dw_intfunc%d", counter); | |
226 gtk_object_set_data(GTK_OBJECT(widget), text, NULL); | |
227 sprintf(text, "_dw_sigdata%d", counter); | |
228 gtk_object_set_data(GTK_OBJECT(widget), text, NULL); | |
229 } | |
230 | |
231 static int _set_signal_handler(GtkWidget *widget, HWND window, void *func, gpointer data, void *intfunc) | |
207 { | 232 { |
208 int counter = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_sigcounter"); | 233 int counter = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_sigcounter"); |
209 char text[100]; | 234 char text[100]; |
210 | 235 |
211 sprintf(text, "_dw_sigwindow%d", counter); | 236 sprintf(text, "_dw_sigwindow%d", counter); |
212 gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)window); | 237 gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)window); |
213 sprintf(text, "_dw_sigfunc%d", counter); | 238 sprintf(text, "_dw_sigfunc%d", counter); |
214 gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)func); | 239 gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)func); |
240 sprintf(text, "_dw_intfunc%d", counter); | |
241 gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)intfunc); | |
215 sprintf(text, "_dw_sigdata%d", counter); | 242 sprintf(text, "_dw_sigdata%d", counter); |
216 gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)data); | 243 gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)data); |
217 | 244 |
218 counter++; | 245 counter++; |
219 gtk_object_set_data(GTK_OBJECT(widget), "_dw_sigcounter", (gpointer)counter); | 246 gtk_object_set_data(GTK_OBJECT(widget), "_dw_sigcounter", (gpointer)counter); |
220 | 247 |
221 return counter - 1; | 248 return counter - 1; |
249 } | |
250 | |
251 static void _set_signal_handler_id(GtkWidget *widget, int counter, gint cid) | |
252 { | |
253 char text[100]; | |
254 | |
255 sprintf(text, "_dw_sigcid%d", counter); | |
256 gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)cid); | |
222 } | 257 } |
223 | 258 |
224 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data) | 259 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data) |
225 { | 260 { |
226 SignalHandler work = _get_signal_handler((GtkWidget *)window, data); | 261 SignalHandler work = _get_signal_handler((GtkWidget *)window, data); |
3871 | 3906 |
3872 subtree = gtk_tree_new(); | 3907 subtree = gtk_tree_new(); |
3873 | 3908 |
3874 if(thisfunc && work.window) | 3909 if(thisfunc && work.window) |
3875 { | 3910 { |
3876 gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc), | 3911 int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); |
3877 (gpointer)_set_signal_handler(subtree, work.window, work.func, work.data)); | 3912 gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); |
3913 _set_signal_handler_id(subtree, sigid, cid); | |
3878 } | 3914 } |
3879 | 3915 |
3880 thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_func"); | 3916 thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_func"); |
3881 mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_data"); | 3917 mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_data"); |
3882 work = _get_signal_handler(tree, mydata); | 3918 work = _get_signal_handler(tree, mydata); |
3883 | 3919 |
3884 if(thisfunc && work.window) | 3920 if(thisfunc && work.window) |
3885 { | 3921 { |
3886 gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), | 3922 int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); |
3887 (gpointer)_set_signal_handler(subtree, work.window, work.func, work.data)); | 3923 gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); |
3924 _set_signal_handler_id(subtree, sigid, cid); | |
3888 } | 3925 } |
3889 | 3926 |
3890 gtk_object_set_user_data(GTK_OBJECT(parent), subtree); | 3927 gtk_object_set_user_data(GTK_OBJECT(parent), subtree); |
3891 gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); | 3928 gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); |
3892 gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); | 3929 gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); |
3998 | 4035 |
3999 subtree = gtk_tree_new(); | 4036 subtree = gtk_tree_new(); |
4000 | 4037 |
4001 if(thisfunc && work.window) | 4038 if(thisfunc && work.window) |
4002 { | 4039 { |
4003 gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc), | 4040 int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); |
4004 (gpointer)_set_signal_handler(subtree, work.window, work.func, work.data)); | 4041 gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); |
4042 _set_signal_handler_id(subtree, sigid, cid); | |
4005 } | 4043 } |
4006 | 4044 |
4007 thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_func"); | 4045 thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_func"); |
4008 mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_data"); | 4046 mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_data"); |
4009 work = _get_signal_handler(tree, mydata); | 4047 work = _get_signal_handler(tree, mydata); |
4010 | 4048 |
4011 if(thisfunc && work.window) | 4049 if(thisfunc && work.window) |
4012 { | 4050 { |
4013 gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), | 4051 int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); |
4014 (gpointer)_set_signal_handler(subtree, work.window, work.func, work.data)); | 4052 gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); |
4053 _set_signal_handler_id(subtree, sigid, cid); | |
4015 } | 4054 } |
4016 | 4055 |
4017 gtk_object_set_user_data(GTK_OBJECT(parent), subtree); | 4056 gtk_object_set_user_data(GTK_OBJECT(parent), subtree); |
4018 gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); | 4057 gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); |
4019 gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); | 4058 gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); |
7730 void dw_signal_connect(HWND window, char *signame, void *sigfunc, void *data) | 7769 void dw_signal_connect(HWND window, char *signame, void *sigfunc, void *data) |
7731 { | 7770 { |
7732 void *thisfunc = _findsigfunc(signame); | 7771 void *thisfunc = _findsigfunc(signame); |
7733 char *thisname = signame; | 7772 char *thisname = signame; |
7734 HWND thiswindow = window; | 7773 HWND thiswindow = window; |
7735 int _locked_by_me = FALSE; | 7774 int sigid, _locked_by_me = FALSE; |
7775 gint cid; | |
7736 | 7776 |
7737 DW_MUTEX_LOCK; | 7777 DW_MUTEX_LOCK; |
7738 if(GTK_IS_SCROLLED_WINDOW(thiswindow)) | 7778 if(GTK_IS_SCROLLED_WINDOW(thiswindow)) |
7739 { | 7779 { |
7740 thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); | 7780 thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); |
7752 } | 7792 } |
7753 #if GTK_MAJOR_VERSION > 1 | 7793 #if GTK_MAJOR_VERSION > 1 |
7754 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) | 7794 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) |
7755 { | 7795 { |
7756 thisfunc = _findsigfunc("tree-context"); | 7796 thisfunc = _findsigfunc("tree-context"); |
7757 | 7797 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); |
7758 gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), | 7798 cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); |
7759 (gpointer)_set_signal_handler(thiswindow, window, sigfunc, data)); | 7799 _set_signal_handler_id(thiswindow, sigid, cid); |
7760 gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), | 7800 sigid = _set_signal_handler(window, window, sigfunc, data, thisfunc); |
7761 (gpointer)_set_signal_handler(window, window, sigfunc, data)); | 7801 cid = gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); |
7802 _set_signal_handler_id(window, sigid, cid); | |
7762 DW_MUTEX_UNLOCK; | 7803 DW_MUTEX_UNLOCK; |
7763 return; | 7804 return; |
7764 } | 7805 } |
7765 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) | 7806 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) |
7766 { | 7807 { |
7767 GtkWidget *treeview = thiswindow; | 7808 GtkWidget *treeview = thiswindow; |
7768 | 7809 |
7769 thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); | 7810 thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); |
7770 thisname = "changed"; | 7811 thisname = "changed"; |
7771 | 7812 |
7772 g_signal_connect(G_OBJECT(thiswindow), thisname, (GCallback)thisfunc, | 7813 sigid = _set_signal_handler(treeview, window, sigfunc, data, thisfunc); |
7773 (gpointer)_set_signal_handler(treeview, window, sigfunc, data)); | 7814 cid = g_signal_connect(G_OBJECT(thiswindow), thisname, (GCallback)thisfunc, (gpointer)sigid); |
7815 _set_signal_handler_id(thiswindow, sigid, cid); | |
7774 DW_MUTEX_UNLOCK; | 7816 DW_MUTEX_UNLOCK; |
7775 return; | 7817 return; |
7776 } | 7818 } |
7777 #else | 7819 #else |
7778 else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) | 7820 else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) |
7779 { | 7821 { |
7780 int counter = (int)_set_signal_handler(thiswindow, window, sigfunc, data); | |
7781 | |
7782 thisfunc = _findsigfunc("tree-context"); | 7822 thisfunc = _findsigfunc("tree-context"); |
7823 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); | |
7783 | 7824 |
7784 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_func", (gpointer)thisfunc); | 7825 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_func", (gpointer)thisfunc); |
7785 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_data", (gpointer)counter); | 7826 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_data", (gpointer)sigid); |
7786 gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)counter); | 7827 cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); |
7787 gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), | 7828 _set_signal_handler_id(thiswindow, sigid, cid); |
7788 (gpointer)_set_signal_handler(window, window, sigfunc, data)); | 7829 sigid = _set_signal_handler(window, window, sigfunc, data, thisfunc); |
7830 cid = gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); | |
7831 _set_signal_handler_id(window, sigid, cid); | |
7789 DW_MUTEX_UNLOCK; | 7832 DW_MUTEX_UNLOCK; |
7790 return; | 7833 return; |
7791 } | 7834 } |
7792 else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) | 7835 else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) |
7793 { | 7836 { |
7794 if(thisfunc) | 7837 if(thisfunc) |
7795 { | 7838 { |
7839 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); | |
7796 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_select_child_func", (gpointer)thisfunc); | 7840 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_select_child_func", (gpointer)thisfunc); |
7797 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_select_child_data", | 7841 gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_select_child_data", (gpointer)sigid); |
7798 (gpointer)_set_signal_handler(thiswindow, window, sigfunc, data)); | |
7799 } | 7842 } |
7800 thisname = "select-child"; | 7843 thisname = "select-child"; |
7801 } | 7844 } |
7802 #endif | 7845 #endif |
7803 else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_ENTER) == 0) | 7846 else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_ENTER) == 0) |
7804 { | 7847 { |
7805 gtk_signal_connect(GTK_OBJECT(thiswindow), "key_press_event", GTK_SIGNAL_FUNC(_container_enter_event), | 7848 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, _container_enter_event); |
7806 (gpointer)_set_signal_handler(thiswindow, window, sigfunc, data)); | 7849 cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "key_press_event", GTK_SIGNAL_FUNC(_container_enter_event), (gpointer)sigid); |
7850 _set_signal_handler_id(thiswindow, sigid, cid); | |
7807 | 7851 |
7808 thisname = "button_press_event"; | 7852 thisname = "button_press_event"; |
7809 thisfunc = _findsigfunc(DW_SIGNAL_ITEM_ENTER); | 7853 thisfunc = _findsigfunc(DW_SIGNAL_ITEM_ENTER); |
7810 } | 7854 } |
7811 else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) | 7855 else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) |
7850 { | 7894 { |
7851 DW_MUTEX_UNLOCK; | 7895 DW_MUTEX_UNLOCK; |
7852 return; | 7896 return; |
7853 } | 7897 } |
7854 | 7898 |
7855 gtk_signal_connect(GTK_OBJECT(thiswindow), thisname, GTK_SIGNAL_FUNC(thisfunc), | 7899 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); |
7856 (gpointer)_set_signal_handler(thiswindow, window, sigfunc, data)); | 7900 cid = gtk_signal_connect(GTK_OBJECT(thiswindow), thisname, GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); |
7901 _set_signal_handler_id(thiswindow, sigid, cid); | |
7857 DW_MUTEX_UNLOCK; | 7902 DW_MUTEX_UNLOCK; |
7858 } | 7903 } |
7859 | 7904 |
7860 /* | 7905 /* |
7861 * Removes callbacks for a given window with given name. | 7906 * Removes callbacks for a given window with given name. |
7862 * Parameters: | 7907 * Parameters: |
7863 * window: Window handle of callback to be removed. | 7908 * window: Window handle of callback to be removed. |
7864 */ | 7909 */ |
7865 void dw_signal_disconnect_by_name(HWND window, char *signame) | 7910 void dw_signal_disconnect_by_name(HWND window, char *signame) |
7866 { | 7911 { |
7867 #if 0 | 7912 int z, count = (int)gtk_object_get_data(GTK_OBJECT(window), "_dw_sigcounter"); |
7868 gtk_signal_disconnect_by_name(window, signame); | 7913 void *thisfunc = _findsigfunc(signame); |
7869 #endif | 7914 |
7915 for(z=0;z<count;z++) | |
7916 { | |
7917 SignalHandler sh = _get_signal_handler(window, (gpointer)z); | |
7918 | |
7919 if(sh.intfunc == thisfunc) | |
7920 _remove_signal_handler(window, z); | |
7921 } | |
7870 } | 7922 } |
7871 | 7923 |
7872 /* | 7924 /* |
7873 * Removes all callbacks for a given window. | 7925 * Removes all callbacks for a given window. |
7874 * Parameters: | 7926 * Parameters: |
7875 * window: Window handle of callback to be removed. | 7927 * window: Window handle of callback to be removed. |
7876 */ | 7928 */ |
7877 void dw_signal_disconnect_by_window(HWND window) | 7929 void dw_signal_disconnect_by_window(HWND window) |
7878 { | 7930 { |
7879 #if 0 | 7931 int z, count = (int)gtk_object_get_data(GTK_OBJECT(window), "_dw_sigcounter"); |
7880 gtk_signal_disconnect_by_window(window); | 7932 |
7881 #endif | 7933 for(z=0;z<count;z++) |
7934 _remove_signal_handler(window, z); | |
7935 gtk_object_set_data(GTK_OBJECT(window), "_dw_sigcounter", NULL); | |
7882 } | 7936 } |
7883 | 7937 |
7884 /* | 7938 /* |
7885 * Removes all callbacks for a given window with specified data. | 7939 * Removes all callbacks for a given window with specified data. |
7886 * Parameters: | 7940 * Parameters: |
7887 * window: Window handle of callback to be removed. | 7941 * window: Window handle of callback to be removed. |
7888 * data: Pointer to the data to be compared against. | 7942 * data: Pointer to the data to be compared against. |
7889 */ | 7943 */ |
7890 void dw_signal_disconnect_by_data(HWND window, void *data) | 7944 void dw_signal_disconnect_by_data(HWND window, void *data) |
7891 { | 7945 { |
7892 dw_signal_disconnect_by_data(window, data); | 7946 int z, count = (int)gtk_object_get_data(GTK_OBJECT(window), "_dw_sigcounter"); |
7893 } | 7947 |
7894 | 7948 for(z=0;z<count;z++) |
7949 { | |
7950 SignalHandler sh = _get_signal_handler(window, (gpointer)z); | |
7951 | |
7952 if(sh.data == data) | |
7953 _remove_signal_handler(window, z); | |
7954 } | |
7955 } | |
7956 |