diff options
| author | Joakim Verona | 2011-06-27 00:51:25 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-06-27 00:51:25 +0200 |
| commit | 2f69e75a614ffbe94da2c81022d8313ab5c43a72 (patch) | |
| tree | b8718458f9ffb54b3bbaf11d66ace7fb276ff33c /src/xwidget.c | |
| parent | 76d08552619c83268f1353f449099f50ed6f93fa (diff) | |
| download | emacs-2f69e75a614ffbe94da2c81022d8313ab5c43a72.tar.gz emacs-2f69e75a614ffbe94da2c81022d8313ab5c43a72.zip | |
some more explanations regarding slider mvc
Diffstat (limited to 'src/xwidget.c')
| -rw-r--r-- | src/xwidget.c | 17 |
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, | |||
| 205 | void xwidget_slider_changed (GtkRange *range, | 205 | void 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]; |