Fix terminatorX bug #29:
authorterminatorX <>
Sun, 13 Nov 2011 12:53:51 +0000 (12:53 +0000)
committerterminatorX <>
Sun, 13 Nov 2011 12:53:51 +0000 (12:53 +0000)
http://www-stud.hs-esslingen.de/bugzilla/show_bug.cgi?id=29

ChangeLog
README
configure.in
doc/terminatorX-manual/C/terminatorX-manual.xml
src/tX_mastergui.cc
src/tX_midiin.cc
src/tX_seqpar.cc
src/tX_seqpar.h
src/tX_sequencer.cc
src/tX_vttgui.cc

index 82f162a697dbfc69ec9c358cc41e85f849b64002..323d4950625b5df705d23b794eba1b8331b275aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,9 @@
 
    Copyright (C) 1999-2011 Alexander König
 
+   Version 3.84
+     * introduced a workaround for terminatorX bug #29
+
    Version 3.83
      * moved to terminatorX.org
      * fixed misc gcc 4.0 warnings
diff --git a/README b/README
index a7ad9566e9bb75786f24465d222290e185237faa..e5296a553d6cc30a63238d960547b0bca2a59f96 100644 (file)
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-terminatorX V3.83 README
+terminatorX V3.84 README
 ------------------------
 
 Copyright (C) 1999-2011 Alexander König
index 1001da6f62ecdf98c0211b29e4316545bb6321a7..0a283892701282d7e152a605c976fd2f91d2dc4a 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT(src/tX_global.h)
-AM_INIT_AUTOMAKE(terminatorX, 3.83)
+AM_INIT_AUTOMAKE(terminatorX, 3.84)
 AM_CONFIG_HEADER(config.h)
 
 AC_ARG_ENABLE(sox,             [  --enable-sox            use sox as input converter. (default=auto) ])
index b3fda528e619c08aab34f391ea79aba83ab94f6c..6e0d53649f8ada5d28c46b83fe09eee2f0599b73 100644 (file)
@@ -11,7 +11,7 @@
     <copyright><year>1999</year><year>2000</year><year>2001</year><year>2002</year><year>2003</year><year>2004</year><year>2005</year><year>2006</year>
     <holder role="mailto:alex@lisas.de">Alexander 
     König</holder></copyright>
-    <releaseinfo>Version 3.83</releaseinfo>
+    <releaseinfo>Version 3.84</releaseinfo>
 
     <legalnotice id="legalnotice">
 
index ded579f811351fa58105e665a6556c0b239ffa75..b8c54430e140bd6357b3b6d390c6df1ef0ab6c6e 100644 (file)
@@ -1138,7 +1138,7 @@ GCallback create_table_sequencer_menu(GtkWidget *widget, void *param)
                gtk_container_add(GTK_CONTAINER (seqpar_menu), sep);
                gtk_widget_set_sensitive (sep, FALSE);
                
-               for (sp=tX_seqpar::all.begin(); sp!=tX_seqpar::all.end(); sp++) {
+               for (sp=tX_seqpar::all->begin(); sp!=tX_seqpar::all->end(); sp++) {
                        if ((*sp)->vtt==(*vtt)) {
                                sprintf(label, "Delete '%s' Events", (*sp)->get_name());
                                GtkWidget *menu_item=gtk_menu_item_new_with_label(label);
index ebcc74a0e06119ea905972f194cd454ca614291b..3956339925079e89b360ace0c726ee022f8232cd 100644 (file)
@@ -189,7 +189,7 @@ int tX_midiin::check_event()
                                
                                list <tX_seqpar *> :: iterator sp;                      
                                
-                               for (sp=tX_seqpar::all.begin(); sp!=tX_seqpar::all.end(); sp++) {
+                               for (sp=tX_seqpar::all->begin(); sp!=tX_seqpar::all->end(); sp++) {
                                        if ( (*sp)->bound_midi_event.type_matches (event) ) {
                                                (*sp)->handle_midi_input (event);
                                        }
@@ -212,7 +212,7 @@ void tX_midiin::configure_bindings( vtt_class* vtt )
        GtkTreeIter iter;
        char tempstr[128];
        
-       for (sp=tX_seqpar::all.begin(); sp!=tX_seqpar::all.end(); sp++) {
+       for (sp=tX_seqpar::all->begin(); sp!=tX_seqpar::all->end(); sp++) {
                if (((*sp)->is_mappable) && ((*sp)->vtt) == (void*) vtt) {
                        
                        snprintf( tempstr, sizeof(tempstr), "Type: %d, Number: %d, Channel: %d",
@@ -637,7 +637,7 @@ void tX_midiin::clear_midi_mappings(GtkWidget *widget, gpointer dummy)
                }               
        }
        
-       for (sp=tX_seqpar::all.begin(); sp!=tX_seqpar::all.end(); sp++) {
+       for (sp=tX_seqpar::all->begin(); sp!=tX_seqpar::all->end(); sp++) {
                (*sp)->bound_midi_event.type=tX_midievent::NONE;
                (*sp)->bound_midi_event.channel=0;
                (*sp)->bound_midi_event.number=0;
index 6fca4ad23678fb2e096ebc2b0f921d1b99523a3d..3fb7f509b912fa6b47265ae176ada49652f39e37 100644 (file)
@@ -33,8 +33,8 @@
 
 #define TX_SEQPAR_DEFAULT_SCALE 0.05
 
-list <tX_seqpar *> tX_seqpar :: all;
-list <tX_seqpar *> tX_seqpar :: update;
+list <tX_seqpar *> *tX_seqpar :: all = NULL;
+list <tX_seqpar *> *tX_seqpar :: update = NULL;
 pthread_mutex_t tX_seqpar :: update_lock = PTHREAD_MUTEX_INITIALIZER;
 
 #define tt ((vtt_class *) vtt)
@@ -57,9 +57,13 @@ tX_seqpar :: tX_seqpar () : bound_midi_event()
        scale_value=0;
        is_boolean=false;
        is_mappable=1;
-       all.push_back(this);
+       if (!all) {
+               all = new list <tX_seqpar *>();
+               update = new list <tX_seqpar *>();
+       }
+       all->push_back(this);
        last_event_recorded=NULL;
-       
+
        midi_lower_bound_set=false;
        midi_upper_bound_set=false;
        reverse_midi=false;
@@ -147,10 +151,10 @@ void tX_seqpar :: set_vtt (void *mytt)
 tX_seqpar :: ~tX_seqpar()
 {
        seqpar_mutex_lock(&update_lock);
-       update.remove(this);
+       update->remove(this);
        seqpar_mutex_unlock(&update_lock);
        sequencer.delete_all_events_for_sp(this, tX_sequencer::DELETE_ALL);
-       all.remove(this);
+       all->remove(this);
 }
 
 void tX_seqpar :: do_touch()
@@ -166,7 +170,7 @@ void tX_seqpar :: untouch_all()
 {
        list <tX_seqpar *> :: iterator sp;
        
-       for (sp=all.begin(); sp!=all.end(); sp++) {
+       for (sp=all->begin(); sp!=all->end(); sp++) {
                (*sp)->untouch();
        }
 }
@@ -176,7 +180,7 @@ void tX_seqpar :: create_persistence_ids()
        list <tX_seqpar *> :: iterator sp;
        int pid=0;
        
-       for (sp=all.begin(); sp!=all.end(); sp++) {
+       for (sp=all->begin(); sp!=all->end(); sp++) {
                pid++;
                (*sp)->set_persistence_id(pid);
        }
@@ -186,7 +190,7 @@ tX_seqpar* tX_seqpar :: get_sp_by_persistence_id(unsigned int pid)
 {
        list <tX_seqpar *> :: iterator sp;
        
-       for (sp=all.begin(); sp!=all.end(); sp++) {
+       for (sp=all->begin(); sp!=all->end(); sp++) {
                if ((*sp)->get_persistence_id()==pid) return ((*sp));
        }
        
@@ -236,7 +240,7 @@ void tX_seqpar :: materialize_forward_values()
 {
        list <tX_seqpar *> :: iterator sp;
        
-       for (sp=all.begin(); sp!=all.end(); sp++) {
+       for (sp=all->begin(); sp!=all->end(); sp++) {
                (*sp)->exec_value((*sp)->fwd_value);
        }       
        gdk_flush();
@@ -369,15 +373,15 @@ void tX_seqpar :: update_all_graphics()
 
        seqpar_mutex_lock(&update_lock);
 
-       if (!update.size()) {
+       if (!update->size()) {
                seqpar_mutex_unlock(&update_lock);
                return; 
        }
 
-       for (sp=update.begin(); sp!=update.end(); sp++) {
+       for (sp=update->begin(); sp!=update->end(); sp++) {
                (*sp)->update_graphics(false);
        }
-       update.erase(update.begin(), update.end());
+       update->erase(update->begin(), update->end());
        seqpar_mutex_unlock(&update_lock);
 
        while (gtk_events_pending()) gtk_main_iteration();
@@ -389,7 +393,7 @@ void tX_seqpar :: init_all_graphics()
 
        seqpar_mutex_lock(&update_lock);
        
-       for (sp=all.begin(); sp!=all.end(); sp++) {
+       for (sp=all->begin(); sp!=all->end(); sp++) {
                (*sp)->update_graphics();
        }
        seqpar_mutex_unlock(&update_lock);
@@ -401,7 +405,7 @@ void tX_seqpar_update :: exec_value(const float value)
 {
        do_exec(value);
        seqpar_mutex_lock(&update_lock);
-       update.push_front(this);
+       update->push_front(this);
        seqpar_mutex_unlock(&update_lock);
 }
 
index 56cf97465301a58375696633b3c3497e7a3664ac..c70813f08407a7f3796f30095d51b329fffc5d22 100644 (file)
@@ -43,13 +43,13 @@ using namespace std;
 class tX_seqpar
 {      
        public:
-       static list <tX_seqpar *> all;
+       static list <tX_seqpar *> *all;
        void *vtt; /* have to make this void as tX_vtt.h includes this */
 
        tX_midievent bound_midi_event;
 
        protected:
-       static list <tX_seqpar *> update;
+       static list <tX_seqpar *> *update;
        static pthread_mutex_t update_lock;
                
        int touched;
index 6016230a9c8215fc2065f60483e278aedb40419d..81de94407332ca5e3088de31b1e273cab24d3934 100644 (file)
@@ -230,7 +230,7 @@ void tX_sequencer :: delete_all_events_for_vtt(vtt_class *vtt, del_mode mode)
 {
        list <tX_seqpar *> :: iterator sp;
        
-       for (sp=tX_seqpar::all.begin(); sp!=tX_seqpar::all.end(); sp++) {
+       for (sp=tX_seqpar::all->begin(); sp!=tX_seqpar::all->end(); sp++) {
                if ((*sp)->vtt==vtt) {
                        delete_all_events_for_sp((*sp), mode);
                }
index 1b9e2e74bddd3e8e38c660aa0824d1a7bb17a3b8..e5e542e68ca77de612fae561656865ef60694841 100644 (file)
@@ -628,7 +628,7 @@ static gint vg_mouse_mapping_pressed(GtkWidget *wid, GdkEventButton *event, vtt_
 
        list <tX_seqpar *> :: iterator sp;
 
-       for (sp=tX_seqpar::all.begin(); sp!=tX_seqpar::all.end(); sp++) {
+       for (sp=tX_seqpar::all->begin(); sp!=tX_seqpar::all->end(); sp++) {
                if (((*sp)->is_mappable) && ((*sp)->vtt) == (void*) vtt) {
                        item=gtk_check_menu_item_new_with_label((*sp)->get_name());
                        gtk_menu_shell_append(GTK_MENU_SHELL(vtt->gui.mouse_mapping_menu_x), item);
@@ -650,7 +650,7 @@ static gint vg_mouse_mapping_pressed(GtkWidget *wid, GdkEventButton *event, vtt_
        g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(vg_ycontrol_dis), vtt);
        if (vtt->y_par==NULL) item_to_activate=item;
 
-       for (sp=tX_seqpar::all.begin(); sp!=tX_seqpar::all.end(); sp++) {
+       for (sp=tX_seqpar::all->begin(); sp!=tX_seqpar::all->end(); sp++) {
                if (((*sp)->is_mappable) && ((*sp)->vtt) == (void*) vtt) {
                        item=gtk_check_menu_item_new_with_label((*sp)->get_name());
                        gtk_menu_shell_append(GTK_MENU_SHELL(vtt->gui.mouse_mapping_menu_y), item);