Hello community,

here is the log from the commit of package gsequencer for openSUSE:Factory 
checked in at 2018-01-10 23:34:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gsequencer (Old)
 and      /work/SRC/openSUSE:Factory/.gsequencer.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gsequencer"

Wed Jan 10 23:34:55 2018 rev:5 rq:562773 version:1.3.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/gsequencer/gsequencer.changes    2018-01-07 
17:23:46.446523228 +0100
+++ /work/SRC/openSUSE:Factory/.gsequencer.new/gsequencer.changes       
2018-01-10 23:34:57.736602576 +0100
@@ -1,0 +2,19 @@
+Tue Jan  9 03:32:04 UTC 2018 - [email protected]
+
+- new upstream v1.3.6 fixes the most annoying bug ever. The
+  "clipping" issue of GtkPaned was solved by a GtkViewport.
+
+-------------------------------------------------------------------
+Mon Jan  8 20:37:02 UTC 2018 - [email protected]
+
+- new upstream v1.3.5 minor fixes, increased functional test's
+  timeout in order to run more reliable on low power systems.
+
+-------------------------------------------------------------------
+Mon Jan  8 01:35:46 UTC 2018 - [email protected]
+
+- new upstream v1.3.4 fixes to the notation and automation editor.
+  It is considered to be important to update. Since unexpected
+  behaviour can occur.
+
+-------------------------------------------------------------------

Old:
----
  gsequencer-1.3.3.tar.gz

New:
----
  gsequencer-1.3.6.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gsequencer.spec ++++++
--- /var/tmp/diff_new_pack.2Y4JyB/_old  2018-01-10 23:34:58.312575550 +0100
+++ /var/tmp/diff_new_pack.2Y4JyB/_new  2018-01-10 23:34:58.316575362 +0100
@@ -18,7 +18,7 @@
 %define libagssonumber 1
 %define libgsequencersonumber 0
 Name:           gsequencer
-Version:        1.3.3
+Version:        1.3.6
 Release:        0
 Summary:        Audio processing engine
 License:        GPL-3.0+ AND AGPL-3.0+ AND GFDL-1.3

++++++ gsequencer-1.3.3.tar.gz -> gsequencer-1.3.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ChangeLog 
new/gsequencer-1.3.6/ChangeLog
--- old/gsequencer-1.3.3/ChangeLog      2018-01-06 06:48:45.000000000 +0100
+++ new/gsequencer-1.3.6/ChangeLog      2018-01-09 04:19:31.000000000 +0100
@@ -1,3 +1,21 @@
+ags (1.3.6)
+
+       [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
+       * improved use of paned widgets to use GtkViewport
+
+ags (1.3.5)
+
+       [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
+       * fixed ags_notation.c and ags_automation.c to always match timestamp
+       * increased timeouts of functional tests because build environment 
might have not much power
+
+ags (1.3.4)
+
+       [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
+       * fixed paste only as within defined offset of AgsNotation and 
AgsAutomation
+       * fixed ags_notation_edit_draw_selection() to use vscrollbar to 
determine y offset
+       * improved selection to select only within area
+
 ags (1.3.3)
 
        [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ags/X/ags_automation_editor.c 
new/gsequencer-1.3.6/ags/X/ags_automation_editor.c
--- old/gsequencer-1.3.3/ags/X/ags_automation_editor.c  2018-01-04 
13:57:27.000000000 +0100
+++ new/gsequencer-1.3.6/ags/X/ags_automation_editor.c  2018-01-09 
04:20:08.000000000 +0100
@@ -184,6 +184,7 @@
 void
 ags_automation_editor_init(AgsAutomationEditor *automation_editor)
 {
+  GtkViewport *viewport;
   GtkScrolledWindow *scrolled_window;
   GtkTable *table;
 
@@ -217,11 +218,18 @@
                     0);
 
   /* machine selector */
-  scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL);
+  viewport = gtk_viewport_new(NULL,
+                             NULL);
+  g_object_set(viewport,
+              "shadow-type", GTK_SHADOW_NONE,
+              NULL);
   gtk_paned_pack1((GtkPaned *) automation_editor->paned,
-                 (GtkWidget *) scrolled_window,
+                 (GtkWidget *) viewport,
                  FALSE, TRUE);
 
+  scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(viewport,
+                   scrolled_window);
   automation_editor->machine_selector = g_object_new(AGS_TYPE_MACHINE_SELECTOR,
                                                     "homogeneous", FALSE,
                                                     "spacing", 0,
@@ -242,10 +250,18 @@
   automation_editor->selected_machine = NULL;
 
   /* notebook audio, output, input */
-  automation_editor->notebook = (GtkNotebook *) gtk_notebook_new();
+  viewport = gtk_viewport_new(NULL,
+                             NULL);
+  g_object_set(viewport,
+              "shadow-type", GTK_SHADOW_NONE,
+              NULL);
   gtk_paned_pack2((GtkPaned *) automation_editor->paned,
-                 (GtkWidget *) automation_editor->notebook,
-                 TRUE, FALSE);
+                 (GtkWidget *) viewport,
+                 TRUE, TRUE);
+
+  automation_editor->notebook = (GtkNotebook *) gtk_notebook_new();
+  gtk_container_add(viewport,
+                   automation_editor->notebook);
   
   /* audio */
   table = (GtkTable *) gtk_table_new(4, 3,
@@ -1699,16 +1715,158 @@
   gint first_x, last_x;
   gboolean paste_from_position;
 
+  auto gint ags_automation_editor_paste_automation_all(xmlNode 
*automation_node,
+                                                      AgsTimestamp *timestamp,
+                                                      gboolean match_line, 
gboolean no_duplicates);
   auto gint ags_automation_editor_paste_automation(xmlNode *audio_node);
+
+  gint ags_automation_editor_paste_automation_all(xmlNode *automation_node,
+                                                 AgsTimestamp *timestamp,
+                                                 gboolean match_line, gboolean 
no_duplicates)
+  {    
+    AgsAutomation *automation;
+               
+    GList *list_automation;
+    
+    guint first_x;
+    guint current_x;
+    gint i;
+
+    first_x = -1;
+
+    /*  */
+    i = 0;
+               
+    while(notebook == NULL ||
+         (i = ags_notebook_next_active_tab(notebook,
+                                           i)) != -1){           
+      list_automation = 
ags_automation_find_near_timestamp_extended(machine->audio->automation, i,
+                                                                   
automation_editor->focused_automation_edit->channel_type, 
automation_editor->focused_automation_edit->control_name,
+                                                                   timestamp);
+
+      if(list_automation == NULL){
+       automation = ags_automation_new(machine->audio,
+                                       i,
+                                       
automation_editor->focused_automation_edit->channel_type,
+                                       
automation_editor->focused_automation_edit->control_name);
+       automation->timestamp->timer.ags_offset.offset = 
timestamp->timer.ags_offset.offset;
+       machine->audio->automation = 
ags_automation_add(machine->audio->automation,
+                                                       automation);
+      }else{
+       automation = AGS_AUTOMATION(list_automation->data);
+      }
+                 
+      if(paste_from_position){
+       xmlNode *child;
+
+       guint x_boundary;
+         
+       ags_automation_insert_from_clipboard_extended(automation,
+                                                     automation_node,
+                                                     TRUE, position_x,
+                                                     TRUE, position_y,
+                                                     match_line, 
no_duplicates);
+
+       /* get boundaries */
+       child = automation_node->children;
+       current_x = 0;
+         
+       while(child != NULL){
+         if(child->type == XML_ELEMENT_NODE){
+           if(!xmlStrncmp(child->name,
+                          "note",
+                          5)){
+             guint tmp;
+
+             tmp = g_ascii_strtoull(xmlGetProp(child,
+                                               "x"),
+                                    NULL,
+                                    10);
+
+             if(tmp > current_x){
+               current_x = tmp;
+             }
+           }
+         }
+
+         child = child->next;
+       }
+
+       x_boundary = g_ascii_strtoull(xmlGetProp(automation_node,
+                                                "x_boundary"),
+                                     NULL,
+                                     10);
+
+
+       if(first_x == -1 || x_boundary < first_x){
+         first_x = x_boundary;
+       }
+         
+       if(position_x > x_boundary){
+         current_x += (position_x - x_boundary);
+       }else{
+         current_x -= (x_boundary - position_x);
+       }
+         
+       if(current_x > last_x){
+         last_x = current_x;
+       }       
+      }else{
+       xmlNode *child;
+
+       ags_automation_insert_from_clipboard(automation,
+                                            automation_node,
+                                            FALSE, 0,
+                                            FALSE, 0);
+
+       /* get boundaries */
+       child = automation_node->children;
+       current_x = 0;
+         
+       while(child != NULL){
+         if(child->type == XML_ELEMENT_NODE){
+           if(!xmlStrncmp(child->name,
+                          "note",
+                          5)){
+             guint tmp;
+
+             tmp = g_ascii_strtoull(xmlGetProp(child,
+                                               "x"),
+                                    NULL,
+                                    10);
+
+             if(tmp > current_x){
+               current_x = tmp;
+             }
+           }
+         }
+
+         child = child->next;
+       }
+
+       if(current_x > last_x){
+         last_x = current_x;
+       }
+      }
+
+      if(notebook == NULL){
+       break;
+      }
+                 
+      i++;
+    }
+
+    return(first_x);
+  }
   
   gint ags_automation_editor_paste_automation(xmlNode *audio_node){
     AgsTimestamp *timestamp;
-    
-    GList *list_automation;
 
     guint first_x;
     gboolean match_line, no_duplicates;
 
+    first_x = -1;
+
     match_line = ((AGS_AUTOMATION_EDITOR_PASTE_MATCH_LINE & 
(automation_editor->flags)) != 0) ? TRUE: FALSE;
     no_duplicates = ((AGS_AUTOMATION_EDITOR_PASTE_NO_DUPLICATES & 
(automation_editor->flags)) != 0) ? TRUE: FALSE;
     
@@ -1734,12 +1892,8 @@
              if(!xmlStrncmp(automation_node->name,
                             "automation",
                             9)){
-               AgsAutomation *automation;
+               guint64 offset;
                
-               guint offset;
-               guint current_x;
-               gint i;
-
                timestamp_node = automation_node->children;
                offset = 0;
          
@@ -1760,130 +1914,20 @@
                  timestamp_node = timestamp_node->next;
                }     
                
+               /* 1st attempt */
+               timestamp->timer.ags_offset.offset = offset;
                
-               /*  */
-               i = 0;
+               first_x = 
ags_automation_editor_paste_automation_all(automation_node,
+                                                                    timestamp,
+                                                                    
match_line, no_duplicates);
+
+               /* 2nd attempt */
+               timestamp->timer.ags_offset.offset = offset + 
AGS_AUTOMATION_DEFAULT_OFFSET;
+
+               ags_automation_editor_paste_automation_all(automation_node,
+                                                          timestamp,
+                                                          match_line, 
no_duplicates);
                
-               while(notebook == NULL ||
-                     (i = ags_notebook_next_active_tab(notebook,
-                                                       i)) != -1){
-                 timestamp->timer.ags_offset.offset = offset;
-                 
-                 list_automation = 
ags_automation_find_near_timestamp_extended(machine->audio->automation, i,
-                                                                               
automation_editor->focused_automation_edit->channel_type, 
automation_editor->focused_automation_edit->control_name,
-                                                                               
timestamp);
-
-                 if(list_automation == NULL){
-                   automation = ags_automation_new(machine->audio,
-                                                   i,
-                                                   
automation_editor->focused_automation_edit->channel_type,
-                                                   
automation_editor->focused_automation_edit->control_name);
-                   
AGS_TIMESTAMP(automation->timestamp)->timer.ags_offset.offset = offset;
-                   machine->audio->automation = 
ags_automation_add(machine->audio->automation,
-                                                                   automation);
-                 }else{
-                   automation = AGS_AUTOMATION(list_automation->data);
-                 }
-                 
-                 if(paste_from_position){
-                   xmlNode *child;
-
-                   guint x_boundary;
-         
-                   ags_automation_insert_from_clipboard_extended(automation,
-                                                                 
automation_node,
-                                                                 TRUE, 
position_x,
-                                                                 TRUE, 
position_y,
-                                                                 match_line, 
no_duplicates);
-
-                   /* get boundaries */
-                   child = automation_node->children;
-                   current_x = 0;
-         
-                   while(child != NULL){
-                     if(child->type == XML_ELEMENT_NODE){
-                       if(!xmlStrncmp(child->name,
-                                      "note",
-                                      5)){
-                         guint tmp;
-
-                         tmp = g_ascii_strtoull(xmlGetProp(child,
-                                                           "x"),
-                                                NULL,
-                                                10);
-
-                         if(tmp > current_x){
-                           current_x = tmp;
-                         }
-                       }
-                     }
-
-                     child = child->next;
-                   }
-
-                   x_boundary = g_ascii_strtoull(xmlGetProp(automation_node,
-                                                            "x_boundary"),
-                                                 NULL,
-                                                 10);
-
-
-                   if(first_x == -1 || x_boundary < first_x){
-                     first_x = x_boundary;
-                   }
-         
-                   if(position_x > x_boundary){
-                     current_x += (position_x - x_boundary);
-                   }else{
-                     current_x -= (x_boundary - position_x);
-                   }
-         
-                   if(current_x > last_x){
-                     last_x = current_x;
-                   }   
-                 }else{
-                   xmlNode *child;
-
-                   ags_automation_insert_from_clipboard(automation,
-                                                      automation_node,
-                                                      FALSE, 0,
-                                                      FALSE, 0);
-
-                   /* get boundaries */
-                   child = automation_node->children;
-                   current_x = 0;
-         
-                   while(child != NULL){
-                     if(child->type == XML_ELEMENT_NODE){
-                       if(!xmlStrncmp(child->name,
-                                      "note",
-                                      5)){
-                         guint tmp;
-
-                         tmp = g_ascii_strtoull(xmlGetProp(child,
-                                                           "x"),
-                                                NULL,
-                                                10);
-
-                         if(tmp > current_x){
-                           current_x = tmp;
-                         }
-                       }
-                     }
-
-                     child = child->next;
-                   }
-
-                   if(current_x > last_x){
-                     last_x = current_x;
-                   }
-                 }
-
-                 if(notebook == NULL){
-                   break;
-                 }
-                 
-                 i++;
-               }
              }
            }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ags/X/ags_notation_editor.c 
new/gsequencer-1.3.6/ags/X/ags_notation_editor.c
--- old/gsequencer-1.3.3/ags/X/ags_notation_editor.c    2018-01-04 
13:57:27.000000000 +0100
+++ new/gsequencer-1.3.6/ags/X/ags_notation_editor.c    2018-01-09 
04:19:59.000000000 +0100
@@ -190,6 +190,7 @@
 void
 ags_notation_editor_init(AgsNotationEditor *notation_editor)
 {
+  GtkViewport *viewport;
   GtkScrolledWindow *scrolled_window;
   GtkTable *table;
   
@@ -220,11 +221,19 @@
                     TRUE, TRUE, 0);
 
   /* machine selector */
-  scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL);
+  viewport = gtk_viewport_new(NULL,
+                             NULL);
+  g_object_set(viewport,
+              "shadow-type", GTK_SHADOW_NONE,
+              NULL);
   gtk_paned_pack1((GtkPaned *) notation_editor->paned,
-                 (GtkWidget *) scrolled_window,
+                 (GtkWidget *) viewport,
                  FALSE, TRUE);
 
+  scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(viewport,
+                   scrolled_window);
+
   notation_editor->machine_selector = g_object_new(AGS_TYPE_MACHINE_SELECTOR,
                                                   "homogeneous", FALSE,
                                                   "spacing", 0,
@@ -247,11 +256,19 @@
   notation_editor->selected_machine = NULL;
 
   /* table */
+  viewport = gtk_viewport_new(NULL,
+                             NULL);
+  g_object_set(viewport,
+              "shadow-type", GTK_SHADOW_NONE,
+              NULL);
+  gtk_paned_pack2((GtkPaned *) notation_editor->paned,
+                 (GtkWidget *) viewport,
+                 TRUE, TRUE);
+
   table = (GtkTable *) gtk_table_new(3, 2,
                                     FALSE);
-  gtk_paned_pack2((GtkPaned *) notation_editor->paned,
-                 (GtkWidget *) table,
-                 TRUE, FALSE);
+  gtk_container_add(viewport,
+                   table);
   
   /* notebook */
   notation_editor->notebook = g_object_new(AGS_TYPE_NOTEBOOK,
@@ -607,7 +624,7 @@
     timestamp->flags &= (~AGS_TIMESTAMP_UNIX);
     timestamp->flags |= AGS_TIMESTAMP_OFFSET;
     
-    timestamp->timer.ags_offset.offset = AGS_NOTATION_DEFAULT_OFFSET * 
floor(note->x[0] / AGS_NOTATION_DEFAULT_OFFSET);
+    timestamp->timer.ags_offset.offset = (guint64) AGS_NOTATION_DEFAULT_OFFSET 
* floor((double) note->x[0] / (double) AGS_NOTATION_DEFAULT_OFFSET);
 
     pthread_mutex_lock(audio_mutex);
 
@@ -1146,19 +1163,154 @@
   gint first_x, last_x;
   gboolean paste_from_position;
 
+  auto gint ags_notation_editor_paste_notation_all(xmlNode *notation_node,
+                                                  AgsTimestamp *timestamp,
+                                                  gboolean match_channel, 
gboolean no_duplicates);
   auto gint ags_notation_editor_paste_notation(xmlNode *audio_node);
+
+  gint ags_notation_editor_paste_notation_all(xmlNode *notation_node,
+                                             AgsTimestamp *timestamp,
+                                             gboolean match_channel, gboolean 
no_duplicates)
+  {    
+    AgsNotation *notation;
+               
+    GList *list_notation;
+    
+    gint first_x;
+    guint current_x;
+    gint i;
+
+    first_x = -1;
+    
+    /*  */
+    i = 0;
+               
+    while((i = ags_notebook_next_active_tab(notation_editor->notebook,
+                                           i)) != -1){           
+      list_notation = 
ags_notation_find_near_timestamp(machine->audio->notation, i,
+                                                      timestamp);
+
+      if(list_notation == NULL){
+       notation = ags_notation_new(machine->audio,
+                                   i);
+       notation->timestamp->timer.ags_offset.offset = 
timestamp->timer.ags_offset.offset;
+       machine->audio->notation = ags_notation_add(machine->audio->notation,
+                                                   notation);
+      }else{
+       notation = AGS_NOTATION(list_notation->data);
+      }
+                 
+      if(paste_from_position){
+       xmlNode *child;
+
+       guint x_boundary;
+         
+       ags_notation_insert_from_clipboard_extended(notation,
+                                                   notation_node,
+                                                   TRUE, position_x,
+                                                   TRUE, position_y,
+                                                   match_channel, 
no_duplicates);
+                   
+       /* get boundaries */
+       child = notation_node->children;
+       current_x = 0;
+         
+       while(child != NULL){
+         if(child->type == XML_ELEMENT_NODE){
+           if(!xmlStrncmp(child->name,
+                          "note",
+                          5)){
+             guint tmp;
+
+             tmp = g_ascii_strtoull(xmlGetProp(child,
+                                               "x1"),
+                                    NULL,
+                                    10);
+
+             if(tmp > current_x){
+               current_x = tmp;
+             }
+           }
+         }
+
+         child = child->next;
+       }
+
+       x_boundary = g_ascii_strtoull(xmlGetProp(notation_node,
+                                                "x_boundary"),
+                                     NULL,
+                                     10);
+
+
+       if(first_x == -1 || x_boundary < first_x){
+         first_x = x_boundary;
+       }
+         
+       if(position_x > x_boundary){
+         current_x += (position_x - x_boundary);
+       }else{
+         current_x -= (x_boundary - position_x);
+       }
+         
+       if(current_x > last_x){
+         last_x = current_x;
+       }       
+      }else{
+       xmlNode *child;
+
+       ags_notation_insert_from_clipboard(notation,
+                                          notation_node,
+                                          FALSE, 0,
+                                          FALSE, 0);
+
+       /* get boundaries */
+       child = notation_node->children;
+       current_x = 0;
+         
+       while(child != NULL){
+         if(child->type == XML_ELEMENT_NODE){
+           if(!xmlStrncmp(child->name,
+                          "note",
+                          5)){
+             guint tmp;
+
+             tmp = g_ascii_strtoull(xmlGetProp(child,
+                                               "x1"),
+                                    NULL,
+                                    10);
+
+             if(tmp > current_x){
+               current_x = tmp;
+             }
+           }
+         }
+
+         child = child->next;
+       }
+
+       if(current_x > last_x){
+         last_x = current_x;
+       }
+      }
+                 
+      i++;
+    }
+
+    return(first_x);
+  }
   
   gint ags_notation_editor_paste_notation(xmlNode *audio_node){
     AgsTimestamp *timestamp;
-    
-    GList *list_notation;
 
-    guint first_x;
+    gint first_x;
     gboolean match_channel, no_duplicates;
 
+    first_x = -1;
+
     match_channel = ((AGS_NOTATION_EDITOR_PASTE_MATCH_AUDIO_CHANNEL & 
(notation_editor->flags)) != 0) ? TRUE: FALSE;
     no_duplicates = ((AGS_NOTATION_EDITOR_PASTE_NO_DUPLICATES & 
(notation_editor->flags)) != 0) ? TRUE: FALSE;
 
+    /* timestamp */
     timestamp = ags_timestamp_new();
 
     timestamp->flags &= (~AGS_TIMESTAMP_UNIX);
@@ -1181,12 +1333,8 @@
              if(!xmlStrncmp(notation_node->name,
                             "notation",
                             9)){
-               AgsNotation *notation;
+               guint64 offset;
                
-               guint offset;
-               guint current_x;
-               gint i;
-
                timestamp_node = notation_node->children;
                offset = 0;
          
@@ -1206,123 +1354,20 @@
 
                  timestamp_node = timestamp_node->next;
                }     
-               
-               
-               /*  */
-               i = 0;
-               
-               while((i = 
ags_notebook_next_active_tab(notation_editor->notebook,
-                                                       i)) != -1){
-                 timestamp->timer.ags_offset.offset = offset;
-                 
-                 list_notation = 
ags_notation_find_near_timestamp(machine->audio->notation, i,
-                                                                  timestamp);
 
-                 if(list_notation == NULL){
-                   notation = ags_notation_new(machine->audio,
-                                               i);
-                   AGS_TIMESTAMP(notation->timestamp)->timer.ags_offset.offset 
= offset;
-                   machine->audio->notation = 
ags_notation_add(machine->audio->notation,
-                                                               notation);
-                 }else{
-                   notation = AGS_NOTATION(list_notation->data);
-                 }
-                 
-                 if(paste_from_position){
-                   xmlNode *child;
-
-                   guint x_boundary;
-         
-                   ags_notation_insert_from_clipboard_extended(notation,
-                                                               notation_node,
-                                                               TRUE, 
position_x,
-                                                               TRUE, 
position_y,
-                                                               match_channel, 
no_duplicates);
-                   
-                   /* get boundaries */
-                   child = notation_node->children;
-                   current_x = 0;
-         
-                   while(child != NULL){
-                     if(child->type == XML_ELEMENT_NODE){
-                       if(!xmlStrncmp(child->name,
-                                      "note",
-                                      5)){
-                         guint tmp;
-
-                         tmp = g_ascii_strtoull(xmlGetProp(child,
-                                                           "x1"),
-                                                NULL,
-                                                10);
-
-                         if(tmp > current_x){
-                           current_x = tmp;
-                         }
-                       }
-                     }
-
-                     child = child->next;
-                   }
-
-                   x_boundary = g_ascii_strtoull(xmlGetProp(notation_node,
-                                                            "x_boundary"),
-                                                 NULL,
-                                                 10);
-
-
-                   if(first_x == -1 || x_boundary < first_x){
-                     first_x = x_boundary;
-                   }
-         
-                   if(position_x > x_boundary){
-                     current_x += (position_x - x_boundary);
-                   }else{
-                     current_x -= (x_boundary - position_x);
-                   }
-         
-                   if(current_x > last_x){
-                     last_x = current_x;
-                   }   
-                 }else{
-                   xmlNode *child;
-
-                   ags_notation_insert_from_clipboard(notation,
-                                                      notation_node,
-                                                      FALSE, 0,
-                                                      FALSE, 0);
-
-                   /* get boundaries */
-                   child = notation_node->children;
-                   current_x = 0;
-         
-                   while(child != NULL){
-                     if(child->type == XML_ELEMENT_NODE){
-                       if(!xmlStrncmp(child->name,
-                                      "note",
-                                      5)){
-                         guint tmp;
-
-                         tmp = g_ascii_strtoull(xmlGetProp(child,
-                                                           "x1"),
-                                                NULL,
-                                                10);
-
-                         if(tmp > current_x){
-                           current_x = tmp;
-                         }
-                       }
-                     }
-
-                     child = child->next;
-                   }
-
-                   if(current_x > last_x){
-                     last_x = current_x;
-                   }
-                 }
-                 
-                 i++;
-               }
+               /* 1st attempt */
+               timestamp->timer.ags_offset.offset = offset;
+               
+               first_x = ags_notation_editor_paste_notation_all(notation_node,
+                                                                timestamp,
+                                                                match_channel, 
no_duplicates);
+
+               /* 2nd attempt */
+               timestamp->timer.ags_offset.offset = offset + 
AGS_NOTATION_DEFAULT_OFFSET;
+
+               ags_notation_editor_paste_notation_all(notation_node,
+                                                      timestamp,
+                                                      match_channel, 
no_duplicates);
              }
            }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ags/X/ags_window.c 
new/gsequencer-1.3.6/ags/X/ags_window.c
--- old/gsequencer-1.3.3/ags/X/ags_window.c     2018-01-06 05:35:49.000000000 
+0100
+++ new/gsequencer-1.3.6/ags/X/ags_window.c     2018-01-09 04:14:34.000000000 
+0100
@@ -191,6 +191,7 @@
 ags_window_init(AgsWindow *window)
 {
   GtkVBox *vbox;
+  GtkViewport *viewport;
   GtkWidget *scrolled_window;
 
   gchar *str;
@@ -246,12 +247,23 @@
 
   /* vpaned and scrolled window */
   window->paned = (GtkVPaned *) gtk_vpaned_new();
-  gtk_box_pack_start((GtkBox*) vbox, (GtkWidget*) window->paned, TRUE, TRUE, 
0);
-
-  scrolled_window = (GtkWidget *) gtk_scrolled_window_new(NULL, NULL);
+  gtk_box_pack_start((GtkBox*) vbox,
+                    (GtkWidget*) window->paned,
+                    TRUE, TRUE,
+                    0);
+
+  viewport = gtk_viewport_new(NULL,
+                             NULL);
+  g_object_set(viewport,
+              "shadow-type", GTK_SHADOW_NONE,
+              NULL);
   gtk_paned_pack1((GtkPaned *) window->paned,
-                 scrolled_window,
+                 viewport,
                  TRUE, TRUE);
+  
+  scrolled_window = (GtkWidget *) gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(viewport,
+                   scrolled_window);
 
   /* machines rack */
   window->machines = (GtkVBox *) gtk_vbox_new(FALSE, 0);
@@ -262,13 +274,21 @@
   window->selected = NULL;
 
   /* editor */
+  viewport = gtk_viewport_new(NULL,
+                             NULL);
+  g_object_set(viewport,
+              "shadow-type", GTK_SHADOW_NONE,
+              NULL);
+  gtk_paned_pack2((GtkPaned *) window->paned,
+                 (GtkWidget *) viewport,
+                 TRUE, TRUE);
+
   window->notation_editor = g_object_new(AGS_TYPE_NOTATION_EDITOR,
                                         "homogeneous", FALSE,
                                         "spacing", 0,
                                         NULL);
-  gtk_paned_pack2((GtkPaned *) window->paned,
-                 (GtkWidget *) window->notation_editor,
-                 TRUE, TRUE);
+  gtk_container_add(viewport,
+                   window->notation_editor);
 
   /* navigation */
   window->navigation = g_object_new(AGS_TYPE_NAVIGATION,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ags/X/editor/ags_automation_edit.c 
new/gsequencer-1.3.6/ags/X/editor/ags_automation_edit.c
--- old/gsequencer-1.3.3/ags/X/editor/ags_automation_edit.c     2018-01-06 
05:20:47.000000000 +0100
+++ new/gsequencer-1.3.6/ags/X/editor/ags_automation_edit.c     2018-01-08 
13:24:01.000000000 +0100
@@ -1653,7 +1653,7 @@
   zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
automation_toolbar->zoom));
 
   /* get offset */
-  x = ((double) automation_edit->cursor_position_x) - 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value;
+  x = ((double) automation_edit->cursor_position_x) - 
(GTK_RANGE(automation_edit->hscrollbar)->adjustment->value * zoom_factor);
   
   if((AGS_AUTOMATION_EDIT_LOGARITHMIC & (automation_edit->flags)) != 0){
     y = GTK_WIDGET(automation_edit->drawing_area)->allocation.height - 
((((double) exp(automation_edit->cursor_position_y) / c_range) * 
GTK_WIDGET(automation_edit->drawing_area)->allocation.height) - 
GTK_RANGE(automation_edit->vscrollbar)->adjustment->value);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-1.3.3/ags/X/editor/ags_automation_edit_callbacks.c 
new/gsequencer-1.3.6/ags/X/editor/ags_automation_edit_callbacks.c
--- old/gsequencer-1.3.3/ags/X/editor/ags_automation_edit_callbacks.c   
2018-01-06 01:48:00.000000000 +0100
+++ new/gsequencer-1.3.6/ags/X/editor/ags_automation_edit_callbacks.c   
2018-01-08 13:24:01.000000000 +0100
@@ -80,7 +80,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
automation_toolbar->zoom));
 
     /* cursor position */
-    automation_edit->cursor_position_x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value) / 
automation_edit->control_width);
+    automation_edit->cursor_position_x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value)) / 
automation_edit->control_width;
     
     if((AGS_AUTOMATION_EDIT_LOGARITHMIC & (automation_edit->flags)) != 0){
       automation_edit->cursor_position_y = 
log(((GTK_WIDGET(automation_edit->drawing_area)->allocation.height - event->y) 
/ g_range) * c_range);
@@ -114,7 +114,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
automation_toolbar->zoom));
 
     /* acceleration */
-    acceleration->x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value));
+    acceleration->x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value));
     
     if((AGS_AUTOMATION_EDIT_LOGARITHMIC & (automation_edit->flags)) != 0){
       acceleration->y = 
log(((GTK_WIDGET(automation_edit->drawing_area)->allocation.height - event->y) 
/ g_range) * c_range);
@@ -209,7 +209,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
automation_toolbar->zoom));
 
     /* cursor position */
-    automation_edit->cursor_position_x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value) / 
automation_edit->control_width);
+    automation_edit->cursor_position_x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value)) / 
automation_edit->control_width;
     
     if((AGS_AUTOMATION_EDIT_LOGARITHMIC & (automation_edit->flags)) != 0){
       automation_edit->cursor_position_y = 
log(((GTK_WIDGET(automation_edit->drawing_area)->allocation.height - event->y) 
/ g_range) * c_range);
@@ -248,7 +248,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
automation_toolbar->zoom));
 
     /* acceleration */
-    acceleration->x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value));
+    acceleration->x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(automation_edit->hscrollbar)->adjustment->value));
     
     if((AGS_AUTOMATION_EDIT_LOGARITHMIC & (automation_edit->flags)) != 0){
       acceleration->y = 
log(((GTK_WIDGET(automation_edit->drawing_area)->allocation.height - event->y) 
/ g_range) * c_range);
@@ -352,6 +352,8 @@
      event->button == 1){    
     if(automation_edit->mode == AGS_AUTOMATION_EDIT_POSITION_CURSOR){
       ags_automation_edit_drawing_area_button_release_position_cursor();
+
+      automation_edit->mode = AGS_AUTOMATION_EDIT_NO_EDIT_MODE;
     }else if(automation_edit->mode == AGS_AUTOMATION_EDIT_ADD_ACCELERATION){
       ags_automation_edit_drawing_area_button_release_add_acceleration();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ags/X/editor/ags_notation_edit.c 
new/gsequencer-1.3.6/ags/X/editor/ags_notation_edit.c
--- old/gsequencer-1.3.3/ags/X/editor/ags_notation_edit.c       2018-01-06 
05:20:47.000000000 +0100
+++ new/gsequencer-1.3.6/ags/X/editor/ags_notation_edit.c       2018-01-08 
13:24:01.000000000 +0100
@@ -1338,7 +1338,7 @@
   zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
notation_toolbar->zoom));
 
   /* get offset */
-  x = ((double) notation_edit->cursor_position_x * (double) 
notation_edit->control_width) - 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value;
+  x = ((double) notation_edit->cursor_position_x * (double) 
notation_edit->control_width) - 
(GTK_RANGE(notation_edit->hscrollbar)->adjustment->value * zoom_factor);
   y = ((double) notation_edit->cursor_position_y * (double) 
notation_edit->control_height) - 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value;
 
   width = (double) notation_edit->control_width;
@@ -1427,15 +1427,17 @@
   }
 
   if(notation_edit->selection_y0 < notation_edit->selection_y1){
-    y = ((double) notation_edit->selection_y0) - 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value;
+    y = ((double) notation_edit->selection_y0) - 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value;
     height = ((double) notation_edit->selection_y1 - (double) 
notation_edit->selection_y0);
   }else{
-    y = ((double) notation_edit->selection_y1) - 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value;
+    y = ((double) notation_edit->selection_y1) - 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value;
     height = ((double) notation_edit->selection_y0 - (double) 
notation_edit->selection_y1);
   }
 
   /* clip */
   if(x < 0.0){
+    width += x;
+
     x = 0.0;
   }else if(x > GTK_WIDGET(notation_edit->drawing_area)->allocation.width){
     cairo_destroy(cr);
@@ -1448,6 +1450,8 @@
   }
   
   if(y < 0.0){
+    height += y;
+
     y = 0.0;
   }else if(y > GTK_WIDGET(notation_edit->drawing_area)->allocation.height){
     cairo_destroy(cr);
@@ -1640,6 +1644,7 @@
 ags_notation_edit_draw_notation(AgsNotationEdit *notation_edit)
 {
   AgsNotationEditor *notation_editor;
+  AgsNotationToolbar *notation_toolbar;
 
   GtkStyle *notation_edit_style;
   
@@ -1649,7 +1654,8 @@
 
   GList *list_notation;
   GList *list_note;
-  
+
+  gdouble zoom;
   guint x0, x1;
   guint y0, y1;
   guint offset;
@@ -1666,6 +1672,7 @@
 
   notation_editor = gtk_widget_get_ancestor(notation_edit,
                                            AGS_TYPE_NOTATION_EDITOR);
+  notation_toolbar = notation_editor->notation_toolbar;
 
   if(notation_editor->selected_machine == NULL){
     return;
@@ -1691,9 +1698,12 @@
     return;
   }
 
+  /* zoom */
+  zoom = exp2((double) gtk_combo_box_get_active((GtkComboBox *) 
notation_toolbar->zoom) - 2.0);
+
   /* get visisble region */
   x0 = GTK_RANGE(notation_edit->hscrollbar)->adjustment->value / 
notation_edit->control_width;
-  x1 = (GTK_RANGE(notation_edit->hscrollbar)->adjustment->value + 
GTK_WIDGET(notation_edit->drawing_area)->allocation.width) / 
notation_edit->control_width;
+  x1 = (GTK_RANGE(notation_edit->hscrollbar)->adjustment->value / 
notation_edit->control_width) + 
(GTK_WIDGET(notation_edit->drawing_area)->allocation.width * zoom);
 
   y0 = GTK_RANGE(notation_edit->vscrollbar)->adjustment->value / 
notation_edit->control_height;
   y1 = (GTK_RANGE(notation_edit->vscrollbar)->adjustment->value + 
GTK_WIDGET(notation_edit->drawing_area)->allocation.height) / 
notation_edit->control_height;
@@ -1719,7 +1729,7 @@
       notation = AGS_NOTATION(list_notation->data);
       
       if(notation->timestamp != NULL &&
-        AGS_TIMESTAMP(notation->timestamp)->timer.ags_offset.offset > x1){
+        AGS_TIMESTAMP(notation->timestamp)->timer.ags_offset.offset > x1){     
        break;
       }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-1.3.3/ags/X/editor/ags_notation_edit_callbacks.c 
new/gsequencer-1.3.6/ags/X/editor/ags_notation_edit_callbacks.c
--- old/gsequencer-1.3.3/ags/X/editor/ags_notation_edit_callbacks.c     
2017-12-21 01:30:44.000000000 +0100
+++ new/gsequencer-1.3.6/ags/X/editor/ags_notation_edit_callbacks.c     
2018-01-08 13:24:01.000000000 +0100
@@ -70,7 +70,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
notation_toolbar->zoom));
 
     /* cursor position */
-    notation_edit->cursor_position_x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value) / 
notation_edit->control_width);
+    notation_edit->cursor_position_x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value)) / 
notation_edit->control_width;
     notation_edit->cursor_position_x = zoom_factor * 
floor(notation_edit->cursor_position_x / zoom_factor);
     
     notation_edit->cursor_position_y = (guint) ((event->y + 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value) / 
notation_edit->control_height);
@@ -91,7 +91,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
notation_toolbar->zoom));
 
     /* note */
-    note->x[0] = (guint) zoom_factor * ((event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value) / 
notation_edit->control_width);
+    note->x[0] = (guint) (zoom_factor * (event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value)) / 
notation_edit->control_width;
     note->x[0] = zoom_factor * floor(note->x[0] / zoom_factor);
 
     if((AGS_NOTATION_EDITOR_PATTERN_MODE & (notation_editor->flags)) == 0){
@@ -178,7 +178,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
notation_toolbar->zoom));
 
     /* cursor position */
-    notation_edit->cursor_position_x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value) / 
notation_edit->control_width);
+    notation_edit->cursor_position_x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value)) / 
notation_edit->control_width;
     notation_edit->cursor_position_x = zoom_factor * 
floor(notation_edit->cursor_position_x / zoom_factor);
 
     notation_edit->cursor_position_y = (guint) ((event->y + 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value) / 
notation_edit->control_height);
@@ -205,7 +205,7 @@
 
     /* new x[1] */
     if((AGS_NOTATION_EDITOR_PATTERN_MODE & (notation_editor->flags)) == 0){
-      new_x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value) / 
notation_edit->control_width);
+      new_x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value)) / 
notation_edit->control_width;
       new_x = zoom_factor * floor((new_x + zoom_factor) / zoom_factor);
     
       if(new_x >= note->x[0] + zoom_factor){
@@ -236,7 +236,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
notation_toolbar->zoom));
 
     /* note */
-    x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value) / 
notation_edit->control_width);
+    x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value)) / 
notation_edit->control_width;
     x = zoom_factor * floor(x / zoom_factor);
     
     y = (guint) ((event->y + 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value) / 
notation_edit->control_height);
@@ -255,13 +255,11 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
notation_toolbar->zoom));
 
     /* region */
-    x0 = (guint) zoom_factor * (notation_edit->selection_x0 / 
notation_edit->control_width);
-    x0 = zoom_factor * floor(x0 / zoom_factor);
+    x0 = (guint) (zoom_factor * notation_edit->selection_x0) / 
notation_edit->control_width;
 
     y0 = (guint) (notation_edit->selection_y0 / notation_edit->control_height);
     
-    x1 = (guint) zoom_factor * ((event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value) / 
notation_edit->control_width);
-    x1 = zoom_factor * floor(x1 / zoom_factor);
+    x1 = (guint) (zoom_factor * (event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value)) / 
notation_edit->control_width;
     
     y1 = (guint) ((event->y + 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value) / 
notation_edit->control_height);
 
@@ -280,6 +278,8 @@
      event->button == 1){    
     if(notation_edit->mode == AGS_NOTATION_EDIT_POSITION_CURSOR){
       ags_notation_edit_drawing_area_button_release_position_cursor();
+
+      notation_edit->mode = AGS_NOTATION_EDIT_NO_EDIT_MODE;
     }else if(notation_edit->mode == AGS_NOTATION_EDIT_ADD_NOTE){
       ags_notation_edit_drawing_area_button_release_add_note();
 
@@ -317,7 +317,7 @@
     zoom_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) 
notation_toolbar->zoom));
 
     /* cursor position */
-    notation_edit->cursor_position_x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value) / 
notation_edit->control_width);
+    notation_edit->cursor_position_x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value)) / 
notation_edit->control_width;
     notation_edit->cursor_position_x = zoom_factor * 
floor(notation_edit->cursor_position_x / zoom_factor);
 
     notation_edit->cursor_position_y = (guint) ((event->y + 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value) / 
notation_edit->control_height);
@@ -348,7 +348,7 @@
 
     /* new x[1] */
     if((AGS_NOTATION_EDITOR_PATTERN_MODE & (notation_editor->flags)) == 0){    
-      new_x = (guint) zoom_factor * ((event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value) / 
notation_edit->control_width);
+      new_x = (guint) (zoom_factor * (event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value)) / 
notation_edit->control_width;
       new_x = zoom_factor * floor((new_x + zoom_factor) / zoom_factor);
     
       if(new_x >= note->x[0] + zoom_factor){
@@ -368,9 +368,17 @@
 
   void ags_notation_edit_drawing_area_motion_notify_select_note()
   {
-    notation_edit->selection_x1 = (guint) event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value;
+    if(event->x + GTK_RANGE(notation_edit->hscrollbar)->adjustment->value >= 
0.0){
+      notation_edit->selection_x1 = (guint) event->x + 
GTK_RANGE(notation_edit->hscrollbar)->adjustment->value;
+    }else{
+      notation_edit->selection_x1 = 0.0;
+    }
     
-    notation_edit->selection_y1 = (guint) event->y + 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value;
+    if(event->y + GTK_RANGE(notation_edit->vscrollbar)->adjustment->value >= 
0.0){
+      notation_edit->selection_y1 = (guint) event->y + 
GTK_RANGE(notation_edit->vscrollbar)->adjustment->value;
+    }else{
+      notation_edit->selection_y1 = 0.0;
+    }
 
     gtk_widget_queue_draw(notation_edit);
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ags/audio/ags_automation.c 
new/gsequencer-1.3.6/ags/audio/ags_automation.c
--- old/gsequencer-1.3.3/ags/audio/ags_automation.c     2018-01-04 
13:57:27.000000000 +0100
+++ new/gsequencer-1.3.6/ags/audio/ags_automation.c     2018-01-08 
13:51:14.000000000 +0100
@@ -1690,6 +1690,8 @@
                                                  gboolean from_y_offset, guint 
y_offset,
                                                  gboolean match_line, gboolean 
no_duplicates)
 {
+  gboolean match_timestamp;
+  
   auto void ags_automation_insert_from_clipboard_version_0_4_3();
   
   void ags_automation_insert_from_clipboard_version_0_4_3()
@@ -1833,25 +1835,29 @@
        }
 
        /* check duplicate */
-       if(ags_automation_find_point(automation,
+       if(no_duplicates &&
+          ags_automation_find_point(automation,
                                     x_val, y_val,
                                     FALSE) != NULL){
          continue;
        }
        
        /* add acceleration */
-       acceleration = ags_acceleration_new();
-
-       acceleration->x = x_val;
-       acceleration->y = y_val;
+       if(!match_timestamp ||
+          x_val < automation->timestamp->timer.ags_offset.offset + 
AGS_AUTOMATION_DEFAULT_OFFSET){
+         acceleration = ags_acceleration_new();
+         
+         acceleration->x = x_val;
+         acceleration->y = y_val;
 
 #ifdef AGS_DEBUG
-       g_message("adding acceleration at: [%u|%f]\n", x_val, y_val);
+         g_message("adding acceleration at: [%u|%f]\n", x_val, y_val);
 #endif
-       
-       ags_automation_add_acceleration(automation,
-                                       acceleration,
-                                       FALSE);
+         
+         ags_automation_add_acceleration(automation,
+                                         acceleration,
+                                         FALSE);
+       }
       }
     }
   }
@@ -1860,9 +1866,13 @@
     return;
   }  
 
+  match_timestamp = TRUE;
+  
   if(!xmlStrncmp("0.4.3", version, 6)){
     ags_automation_insert_from_clipboard_version_0_4_3();
   }else if(!xmlStrncmp("1.3.0", version, 6)){
+    match_timestamp = TRUE;
+    
     if(match_line &&
        automation->line != g_ascii_strtoull(xmlGetProp(root_node,
                                                       "line"),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ags/audio/ags_notation.c 
new/gsequencer-1.3.6/ags/audio/ags_notation.c
--- old/gsequencer-1.3.3/ags/audio/ags_notation.c       2018-01-04 
13:57:27.000000000 +0100
+++ new/gsequencer-1.3.6/ags/audio/ags_notation.c       2018-01-08 
13:51:27.000000000 +0100
@@ -1650,6 +1650,8 @@
                                                gboolean reset_y_offset, guint 
y_offset,
                                                gboolean match_channel, 
gboolean no_duplicates)
 {
+  gboolean match_timestamp;
+  
   auto void ags_notation_insert_native_piano_from_clipboard_version_0_3_12();
   
   void ags_notation_insert_native_piano_from_clipboard_version_0_3_12()
@@ -1865,7 +1867,8 @@
          }
 
          /* check duplicate */
-         if(ags_notation_find_point(notation,
+         if(no_duplicates &&
+            ags_notation_find_point(notation,
                                     x0_val, y_val,
                                     FALSE) != NULL){
            node = node->next;
@@ -1874,37 +1877,24 @@
          }
          
          /* add note */
-         note = ags_note_new();
+         if(!match_timestamp ||
+            x0_val < notation->timestamp->timer.ags_offset.offset + 
AGS_NOTATION_DEFAULT_OFFSET){
+           note = ags_note_new();
 
-         note->x[0] = x0_val;
-         note->x[1] = x1_val;
+           note->x[0] = x0_val;
+           note->x[1] = x1_val;
 
-         note->y = y_val;
+           note->y = y_val;
 
 #ifdef AGS_DEBUG
-         g_message("adding note at: [%u,%u|%u]\n", x0_val, x1_val, y_val);
+           g_message("adding note at: [%u,%u|%u]\n", x0_val, x1_val, y_val);
 #endif
-         
-         ags_notation_add_note(notation,
-                               note,
-                               FALSE);
-       }
-      }else if(!xmlStrncmp("timestamp",
-                          node->name,
-                          10)){
-       /* retrieve timer offset */
-       offset = xmlGetProp(node, "offset");
-
-       if(notation->timestamp == NULL){
-         notation->timestamp = ags_timestamp_new();
-
-         AGS_TIMESTAMP(notation->timestamp)->flags &= (~AGS_TIMESTAMP_UNIX);
-         AGS_TIMESTAMP(notation->timestamp)->flags |= AGS_TIMESTAMP_OFFSET;
+           
+           ags_notation_add_note(notation,
+                                 note,
+                                 FALSE);
+         }
        }
-
-       AGS_TIMESTAMP(notation->timestamp)->timer.ags_offset.offset = 
g_ascii_strtoull(offset,
-                                                                               
       NULL,
-                                                                               
       10);
       }
     
       node = node->next;
@@ -1914,6 +1904,8 @@
   if(!AGS_IS_NOTATION(notation)){
     return;
   }
+
+  match_timestamp = TRUE;
   
   if(!xmlStrncmp("0.3.12", version, 7)){
     ags_notation_insert_native_piano_from_clipboard_version_0_3_12();
@@ -1922,6 +1914,8 @@
     ags_notation_insert_native_piano_from_clipboard_version_0_3_12();
   }else if(!xmlStrncmp("1.2.0", version, 7)){
     /* changes contain only optional informations */
+    match_timestamp = TRUE;
+    
     if(match_channel &&
        notation->audio_channel != g_ascii_strtoull(xmlGetProp(root_node,
                                                              "audio-channel"),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gsequencer-1.3.3/ags/test/X/ags_functional_test_util.c 
new/gsequencer-1.3.6/ags/test/X/ags_functional_test_util.c
--- old/gsequencer-1.3.3/ags/test/X/ags_functional_test_util.c  2018-01-04 
13:57:27.000000000 +0100
+++ new/gsequencer-1.3.6/ags/test/X/ags_functional_test_util.c  2018-01-08 
13:50:05.000000000 +0100
@@ -32,8 +32,8 @@
 
 #include <pthread.h>
 
-#define AGS_FUNCTIONAL_TEST_UTIL_REACTION_TIME (125000)
-#define AGS_FUNCTIONAL_TEST_UTIL_REACTION_TIME_LONG (500000)
+#define AGS_FUNCTIONAL_TEST_UTIL_REACTION_TIME (1000000)
+#define AGS_FUNCTIONAL_TEST_UTIL_REACTION_TIME_LONG (2000000)
 
 gboolean ags_functional_test_util_driver_prepare(GSource *source,
                                                 gint *timeout_);
@@ -66,7 +66,7 @@
 };
 
 struct timespec ags_functional_test_util_default_timeout = {
-  20,
+  59,
   0,
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/ags/widget/ags_scrolled_piano.c 
new/gsequencer-1.3.6/ags/widget/ags_scrolled_piano.c
--- old/gsequencer-1.3.3/ags/widget/ags_scrolled_piano.c        2018-01-04 
13:57:27.000000000 +0100
+++ new/gsequencer-1.3.6/ags/widget/ags_scrolled_piano.c        2018-01-09 
00:21:51.000000000 +0100
@@ -333,7 +333,7 @@
   }
 
   gtk_widget_size_allocate((GtkWidget *) scrolled_piano->viewport,
-                          allocation);
+                          &child_allocation);
 }
 
 void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/configure 
new/gsequencer-1.3.6/configure
--- old/gsequencer-1.3.3/configure      2018-01-06 06:25:21.000000000 +0100
+++ new/gsequencer-1.3.6/configure      2018-01-09 00:45:24.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gsequencer 1.3.3.
+# Generated by GNU Autoconf 2.69 for gsequencer 1.3.6.
 #
 # Report bugs to <[email protected]>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='gsequencer'
 PACKAGE_TARNAME='gsequencer'
-PACKAGE_VERSION='1.3.3'
-PACKAGE_STRING='gsequencer 1.3.3'
+PACKAGE_VERSION='1.3.6'
+PACKAGE_STRING='gsequencer 1.3.6'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1473,7 +1473,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures gsequencer 1.3.3 to adapt to many kinds of systems.
+\`configure' configures gsequencer 1.3.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1548,7 +1548,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gsequencer 1.3.3:";;
+     short | recursive ) echo "Configuration of gsequencer 1.3.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1741,7 +1741,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gsequencer configure 1.3.3
+gsequencer configure 1.3.6
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2218,7 +2218,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by gsequencer $as_me 1.3.3, which was
+It was created by gsequencer $as_me 1.3.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3085,7 +3085,7 @@
 
 # Define the identity of the package.
  PACKAGE='gsequencer'
- VERSION='1.3.3'
+ VERSION='1.3.6'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -19597,7 +19597,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gsequencer $as_me 1.3.3, which was
+This file was extended by gsequencer $as_me 1.3.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -19663,7 +19663,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-gsequencer config.status 1.3.3
+gsequencer config.status 1.3.6
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/configure.ac 
new/gsequencer-1.3.6/configure.ac
--- old/gsequencer-1.3.3/configure.ac   2018-01-06 06:25:08.000000000 +0100
+++ new/gsequencer-1.3.6/configure.ac   2018-01-09 00:44:47.000000000 +0100
@@ -6,7 +6,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.69])
-AC_INIT([gsequencer],[1.3.3],[[email protected]])
+AC_INIT([gsequencer],[1.3.6],[[email protected]])
 AM_INIT_AUTOMAKE([subdir-objects])
 AC_CONFIG_SRCDIR([ags/config.h.in])
 AC_CONFIG_HEADERS([ags/config.h])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gsequencer-1.3.3/po/gsequencer.pot 
new/gsequencer-1.3.6/po/gsequencer.pot
--- old/gsequencer-1.3.3/po/gsequencer.pot      2018-01-06 06:49:22.000000000 
+0100
+++ new/gsequencer-1.3.6/po/gsequencer.pot      2018-01-09 04:21:39.000000000 
+0100
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gsequencer 1.3.3\n"
+"Project-Id-Version: gsequencer 1.3.6\n"
 "Report-Msgid-Bugs-To: [email protected]\n"
-"POT-Creation-Date: 2018-01-06 06:49+0100\n"
+"POT-Creation-Date: 2018-01-09 04:21+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <[email protected]>\n"
@@ -37,24 +37,24 @@
 msgid "connect sink"
 msgstr ""
 
-#: ags/X/ags_automation_editor.c:231
+#: ags/X/ags_automation_editor.c:239
 msgid "automation"
 msgstr ""
 
-#: ags/X/ags_automation_editor.c:255 ags/X/ags_preferences.c:179
+#: ags/X/ags_automation_editor.c:271 ags/X/ags_preferences.c:179
 msgid "audio"
 msgstr ""
 
-#: ags/X/ags_automation_editor.c:326 ags/X/ags_connection_editor.c:217
+#: ags/X/ags_automation_editor.c:342 ags/X/ags_connection_editor.c:217
 #: ags/X/ags_machine_editor.c:217
 msgid "output"
 msgstr ""
 
-#: ags/X/ags_automation_editor.c:351 ags/X/ags_automation_editor.c:435
+#: ags/X/ags_automation_editor.c:367 ags/X/ags_automation_editor.c:451
 msgid "line"
 msgstr ""
 
-#: ags/X/ags_automation_editor.c:410 ags/X/ags_machine_editor.c:224
+#: ags/X/ags_automation_editor.c:426 ags/X/ags_machine_editor.c:224
 msgid "input"
 msgstr ""
 
@@ -239,7 +239,7 @@
 msgid "engine mode"
 msgstr ""
 
-#: ags/X/ags_line.c:721 ags/X/ags_line.c:729 ags/X/ags_notation_editor.c:260
+#: ags/X/ags_line.c:721 ags/X/ags_line.c:729 ags/X/ags_notation_editor.c:277
 msgid "channel"
 msgstr ""
 
@@ -405,7 +405,7 @@
 msgid "loop R"
 msgstr ""
 
-#: ags/X/ags_notation_editor.c:236
+#: ags/X/ags_notation_editor.c:245
 msgid "notation"
 msgstr ""
 


Reply via email to