aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2011-06-27 00:51:25 +0200
committerJoakim Verona2011-06-27 00:51:25 +0200
commit2f69e75a614ffbe94da2c81022d8313ab5c43a72 (patch)
treeb8718458f9ffb54b3bbaf11d66ace7fb276ff33c
parent76d08552619c83268f1353f449099f50ed6f93fa (diff)
downloademacs-2f69e75a614ffbe94da2c81022d8313ab5c43a72.tar.gz
emacs-2f69e75a614ffbe94da2c81022d8313ab5c43a72.zip
some more explanations regarding slider mvc
-rw-r--r--src/xwidget.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/xwidget.c b/src/xwidget.c
index 4029adb141d..1a0c23f5d9c 100644
--- a/src/xwidget.c
+++ b/src/xwidget.c
@@ -205,14 +205,22 @@ gboolean xwidget_plug_removed(GtkSocket *socket,
205void xwidget_slider_changed (GtkRange *range, 205void xwidget_slider_changed (GtkRange *range,
206 gpointer user_data) 206 gpointer user_data)
207{ 207{
208 //slider value changed. change value of siblings correspondingly. but remember that changing value will again trigger signal 208 //slider value changed. change value of siblings
209 //gtk_range_set_value () 209 //correspondingly. but remember that changing value will again
210 //http://developer.gnome.org/gobject/unstable/gobject-Signals.html#g-signal-handler-block 210 //trigger signal
211
212 //TODO view storage wont be an array futureish so the loop needs to change eventually
213 //TODO it would be nice if this code could be reusable but, alas, C is not a functional language
214 //issues are:
215 // - the type of the controllers value (double, boolean etc)
216 // - the getter and setter (but they can be func pointers)
217 // a behemoth macro is always an option.
211 double v; 218 double v;
212 printf("slider changed val:%f\n", v=gtk_range_get_value(range)); 219 printf("slider changed val:%f\n", v=gtk_range_get_value(range));
213 //code meant to be refactored 220
214 struct xwidget_view* xvp = g_object_get_data (G_OBJECT (range), XG_XWIDGET_VIEW); 221 struct xwidget_view* xvp = g_object_get_data (G_OBJECT (range), XG_XWIDGET_VIEW);
215 struct xwidget_view* xv; 222 struct xwidget_view* xv;
223 //block sibling views signal handlers
216 for (int i = 0; i < MAX_XWIDGETS; i++) 224 for (int i = 0; i < MAX_XWIDGETS; i++)
217 { 225 {
218 xv = &xwidget_views[i]; 226 xv = &xwidget_views[i];
@@ -220,6 +228,7 @@ void xwidget_slider_changed (GtkRange *range,
220 g_signal_handler_block( xv->widget,xv->handler_id); 228 g_signal_handler_block( xv->widget,xv->handler_id);
221 } 229 }
222 } 230 }
231 //set values of sibling views and unblock
223 for (int i = 0; i < MAX_XWIDGETS; i++) 232 for (int i = 0; i < MAX_XWIDGETS; i++)
224 { 233 {
225 xv = &xwidget_views[i]; 234 xv = &xwidget_views[i];