The following commit has been merged in the master branch:
commit 199014665c23b3556dcb7f015e0e267b94a6cc23
Author: Andrei Zavada <[email protected]>
Date:   Sun Oct 14 01:50:50 2012 +0300

    fix some spurious dereferencing of userdata in several SF callbacks

diff --git a/src/ui/scoring-facility-artifacts_cb.cc 
b/src/ui/scoring-facility-artifacts_cb.cc
index e827ff9..5a149c1 100644
--- a/src/ui/scoring-facility-artifacts_cb.cc
+++ b/src/ui/scoring-facility-artifacts_cb.cc
@@ -56,65 +56,69 @@ void
 bSFADApply_clicked_cb( GtkButton*, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
+       auto& AD = SF.artifact_detection_dialog;
 
        gtk_widget_hide( (GtkWidget*)SF.wSFArtifactDetectionSetup);
 
-       for ( auto& H : SF.channels_visible_backup )
+       for ( auto& H : AD.channels_visible_backup )
                H.first->hidden = H.second;
-       SF.channels_visible_backup.clear();
+       AD.channels_visible_backup.clear();
 
-       SF.artifacts_backup.clear_all();
+       AD.artifacts_backup.clear_all();
 }
 
 void
 bSFADCancel_clicked_cb( GtkButton*, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
+       auto& AD = SF.artifact_detection_dialog;
 
        gtk_widget_hide( (GtkWidget*)SF.wSFArtifactDetectionSetup);
 
        if ( gtk_toggle_button_get_active(SF.bSFADPreview) ) {
-               SF.using_channel -> artifacts = SF.artifacts_backup;
+               SF.using_channel -> artifacts = AD.artifacts_backup;
                SF.using_channel -> get_signal_filtered();
 
                gtk_widget_queue_draw( (GtkWidget*)SF.daSFMontage);
                gtk_widget_queue_draw( (GtkWidget*)SF.daSFHypnogram);
        }
 
-       for ( auto& H : SF.channels_visible_backup )
+       for ( auto& H : AD.channels_visible_backup )
                H.first->hidden = H.second;
-       SF.channels_visible_backup.clear();
+       AD.channels_visible_backup.clear();
 
-       SF.artifacts_backup.clear_all();
+       AD.artifacts_backup.clear_all();
 }
 
 void
 bSFADPreview_toggled_cb( GtkToggleButton *b, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
-       if ( SF.suppress_preview_handler )
+       auto& AD = SF.artifact_detection_dialog;
+
+       if ( AD.suppress_preview_handler )
                return;
 
        if ( gtk_toggle_button_get_active(b) ) {
                aghui::SBusyBlock bb (SF.wSFArtifactDetectionSetup);
-               SF.artifacts_backup = SF.using_channel->artifacts;
+               AD.artifacts_backup = SF.using_channel->artifacts;
                SF.using_channel -> detect_artifacts( (AD.W_V.down(), AD.P));
                gtk_widget_set_sensitive( (GtkWidget*)SF.bSFADApply, TRUE);
 
                if ( gtk_toggle_button_get_active( 
(GtkToggleButton*)SF.eSFADSingleChannelPreview) ) {
-                       SF.channels_visible_backup.clear();
+                       AD.channels_visible_backup.clear();
                        for ( auto& H : SF.channels ) {
-                               SF.channels_visible_backup.emplace_back(
+                               AD.channels_visible_backup.emplace_back(
                                        &H, H.hidden);
                                if ( &H != SF.using_channel )
                                        H.hidden = true;
                        }
                }  else
-                       SF.channels_visible_backup.clear();
+                       AD.channels_visible_backup.clear();
 
        } else {
-               SF.using_channel->artifacts = SF.artifacts_backup;
-               for ( auto& H : SF.channels_visible_backup )
+               SF.using_channel->artifacts = AD.artifacts_backup;
+               for ( auto& H : AD.channels_visible_backup )
                        H.first->hidden = H.second;
                gtk_widget_set_sensitive( (GtkWidget*)SF.bSFADApply, FALSE);
        }
diff --git a/src/ui/scoring-facility-filter_cb.cc 
b/src/ui/scoring-facility-filter_cb.cc
index 0667d8a..f15b309 100644
--- a/src/ui/scoring-facility-filter_cb.cc
+++ b/src/ui/scoring-facility-filter_cb.cc
@@ -75,7 +75,8 @@ void
 eFilterHighPassCutoff_value_changed_cb( GtkSpinButton *spinbutton,
                                        gpointer       userdata)
 {
-       auto& FD = *(SScoringFacility::SFiltersDialog*)userdata;
+       auto& SF = *(SScoringFacility*)userdata;
+       auto& FD = SF.filters_dialog;
        double other_freq = gtk_spin_button_get_value( 
FD._p.eFilterLowPassCutoff);
        gtk_widget_set_sensitive( (GtkWidget*)FD._p.bFilterOK,
                                  fdim( other_freq, 0.) < 1e-5 || 
gtk_spin_button_get_value( spinbutton) < other_freq);
@@ -85,7 +86,8 @@ void
 eFilterLowPassCutoff_value_changed_cb( GtkSpinButton *spinbutton,
                                       gpointer       userdata)
 {
-       auto& FD = *(SScoringFacility::SFiltersDialog*)userdata;
+       auto& SF = *(SScoringFacility*)userdata;
+       auto& FD = SF.filters_dialog;
        gdouble other_freq = gtk_spin_button_get_value( 
FD._p.eFilterHighPassCutoff);
        gtk_widget_set_sensitive( (GtkWidget*)FD._p.bFilterOK,
                                  fdim( other_freq, 0.) < 1e-5 || 
gtk_spin_button_get_value( spinbutton) > other_freq);
diff --git a/src/ui/scoring-facility-montage_cb.cc 
b/src/ui/scoring-facility-montage_cb.cc
index fe23ebc..a81729e 100644
--- a/src/ui/scoring-facility-montage_cb.cc
+++ b/src/ui/scoring-facility-montage_cb.cc
@@ -635,6 +635,7 @@ void
 iSFPageDetectArtifacts_activate_cb( GtkMenuItem*, gpointer userdata)
 {
        auto& SF = *(SScoringFacility*)userdata;
+       auto& AD = SF.artifact_detection_dialog;
 
        g_signal_emit_by_name( SF.eSFADEstimateE, "toggled");
        g_signal_emit_by_name( SF.eSFADEstimateE, "toggled");
@@ -642,9 +643,9 @@ iSFPageDetectArtifacts_activate_cb( GtkMenuItem*, gpointer 
userdata)
        g_signal_emit_by_name( SF.eSFADUseThisRange, "toggled");
 
        gtk_widget_set_sensitive( (GtkWidget*)SF.bSFADApply, FALSE);
-       SF.suppress_preview_handler = true;
+       AD.suppress_preview_handler = true;
        gtk_toggle_button_set_active( SF.bSFADPreview, FALSE);
-       SF.suppress_preview_handler = false;
+       AD.suppress_preview_handler = false;
 
        snprintf_buf( "Artifact detection in channel %s", 
SF.using_channel->name);
        gtk_label_set_text( SF.lSFADInfo, __buf__);

-- 
Sleep experiment manager

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to