@@ -82,48 +82,83 @@ public class Spice.SlideManager : Object {
8282
8383 public void move_down (Slide slide ) {
8484 var index = slides. index_of (slide);
85-
86- if (index + 1 < slides. size) {
87- stderr. printf (" Moving slide %d down\n " , index);
88- var slide_2 = slides. get (index + 1 );
8985
90- slides. set (index + 1 , slide);
91- slides. set (index, slide_2);
86+ var next_slide = get_next_slide (slide);
87+ if (next_slide != null ) {
88+ var next_index = slides. index_of (next_slide);
89+
90+ slides. set (next_index, slide);
91+ slides. set (index, next_slide);
9292
9393 slides_sorted ();
9494 }
9595 }
9696
9797 public void move_up (Slide slide ) {
9898 var index = slides. index_of (slide);
99- if (index - 1 >= 0 ) {
100- stderr. printf (" Moving slide %d up\n " , index);
101- var slide_2 = slides. get (index - 1 );
10299
103- slides. set (index - 1 , slide);
104- slides. set (index, slide_2);
100+ var previous_slide = get_previous_slide (slide);
101+ if (previous_slide != null ) {
102+ var previous_index = slides. index_of (previous_slide);
103+
104+ slides. set (previous_index, slide);
105+ slides. set (index, previous_slide);
105106
106107 slides_sorted ();
107108 }
108109 }
109110
110111 public void next_slide () {
112+ var next_slide = get_next_slide (current_slide);
113+
114+ if (next_slide != null ) {
115+ current_slide = next_slide;
116+ } else {
117+ // TODO: Show end of presentation slide
118+ window. unfullscreen ();
119+ }
120+ }
121+
122+ private Slide ? get_next_slide (Slide current ) {
123+ Slide ? next_slide = null ;
111124 bool found = false ;
112125 int n = 1 ;
126+
113127 do {
114- var next_index = slides. index_of (current_slide ) + n++ ;
128+ var next_index = slides. index_of (current ) + n++ ;
115129 if (next_index < slides. size) {
116- var new_slide = slides. get (next_index);
117- if (new_slide . visible) {
118- current_slide = new_slide ;
130+ var slide = slides. get (next_index);
131+ if (slide . visible) {
132+ next_slide = slide ;
119133 found = true ;
120134 }
121135 } else {
122- // TODO: Show end of presentation slide
123- window. unfullscreen ();
124136 found = true ;
125137 }
126138 } while (! found);
139+
140+ return next_slide;
141+ }
142+
143+ private Slide ? get_previous_slide (Slide current ) {
144+ Slide ? previous_slide = null ;
145+ bool found = false ;
146+ int n = 1 ;
147+
148+ do {
149+ var previous_index = slides. index_of (current) - n++ ;
150+ if (previous_index < slides. size) {
151+ var slide = slides. get (previous_index);
152+ if (slide. visible) {
153+ previous_slide = slide;
154+ found = true ;
155+ }
156+ } else {
157+ found = true ;
158+ }
159+ } while (! found);
160+
161+ return previous_slide;
127162 }
128163
129164 public Slide new_slide (Json .Object ? save_data = null ) {
0 commit comments