@@ -59,6 +59,10 @@ struct _Displaybar {
5959 */
6060 Tilesource * tilesource ;
6161
62+ /* Not a ref ... the imageui win is displaying.
63+ */
64+ Imageui * imageui ;
65+
6266 GtkWidget * action_bar ;
6367 GtkWidget * gears ;
6468 GtkWidget * page ;
@@ -71,6 +75,7 @@ struct _Displaybar {
7175 guint changed_sid ;
7276 guint tiles_changed_sid ;
7377 guint page_changed_sid ;
78+ guint imageui_changed_sid ;
7479
7580 /* Keep view settings on new image.
7681 */
@@ -98,67 +103,63 @@ static void
98103displaybar_save_view_settings (Displaybar * displaybar )
99104{
100105 Tilesource * tilesource = displaybar -> tilesource ;
101- Imageui * imageui = imagewindow_get_imageui ( displaybar -> win ) ;
106+ Imageui * imageui = displaybar -> imageui ;
102107 ViewSettings * view_settings = & displaybar -> view_settings ;
103108
104- if (!tilesource ||
105- !imageui ) {
106- view_settings -> valid = FALSE;
107- return ;
108- }
109-
109+ if (tilesource &&
110+ imageui ) {
110111#ifdef DEBUG
111- printf ("displaybar_save_view_settings:\n" );
112+ printf ("displaybar_save_view_settings:\n" );
112113#endif /*DEBUG*/
113114
114- g_object_get (tilesource ,
115- "mode" , & view_settings -> mode ,
116- "scale" , & view_settings -> scale ,
117- "offset" , & view_settings -> offset ,
118- "page" , & view_settings -> page ,
119- "falsecolour" , & view_settings -> falsecolour ,
120- "log" , & view_settings -> log ,
121- "icc" , & view_settings -> icc ,
122- "active" , & view_settings -> active ,
123- NULL );
115+ g_object_get (tilesource ,
116+ "mode" , & view_settings -> mode ,
117+ "scale" , & view_settings -> scale ,
118+ "offset" , & view_settings -> offset ,
119+ "page" , & view_settings -> page ,
120+ "falsecolour" , & view_settings -> falsecolour ,
121+ "log" , & view_settings -> log ,
122+ "icc" , & view_settings -> icc ,
123+ "active" , & view_settings -> active ,
124+ NULL );
124125
125- g_object_get (imageui ,
126- "background" , & view_settings -> background ,
127- NULL );
126+ g_object_get (imageui ,
127+ "background" , & view_settings -> background ,
128+ NULL );
128129
129- view_settings -> valid = TRUE;
130+ view_settings -> valid = TRUE;
131+ }
130132}
131133
132134static void
133135displaybar_apply_view_settings (Displaybar * displaybar )
134136{
135- Tilesource * tilesource = displaybar -> tilesource ;
136- Imageui * imageui = imagewindow_get_imageui (displaybar -> win );
137137 ViewSettings * view_settings = & displaybar -> view_settings ;
138138
139- if (!view_settings -> valid )
140- return ;
141-
139+ if (view_settings -> valid ) {
142140#ifdef DEBUG
143- printf ("displaybar_apply_view_settings:\n" );
141+ printf ("displaybar_apply_view_settings:\n" );
144142#endif /*DEBUG*/
145143
146- if (tilesource )
147- g_object_set (tilesource ,
148- "mode" , view_settings -> mode ,
149- "scale" , view_settings -> scale ,
150- "offset" , view_settings -> offset ,
151- "page" , view_settings -> page ,
152- "falsecolour" , view_settings -> falsecolour ,
153- "log" , view_settings -> log ,
154- "icc" , view_settings -> icc ,
155- "active" , view_settings -> active ,
156- NULL );
157-
158- if (imageui )
159- g_object_set (imageui ,
160- "background" , view_settings -> background ,
161- NULL );
144+ Tilesource * tilesource = displaybar -> tilesource ;
145+ if (tilesource )
146+ g_object_set (tilesource ,
147+ "mode" , view_settings -> mode ,
148+ "scale" , view_settings -> scale ,
149+ "offset" , view_settings -> offset ,
150+ "page" , view_settings -> page ,
151+ "falsecolour" , view_settings -> falsecolour ,
152+ "log" , view_settings -> log ,
153+ "icc" , view_settings -> icc ,
154+ "active" , view_settings -> active ,
155+ NULL );
156+
157+ Imageui * imageui = displaybar -> imageui ;
158+ if (imageui )
159+ g_object_set (imageui ,
160+ "background" , view_settings -> background ,
161+ NULL );
162+ }
162163}
163164
164165static void
@@ -168,38 +169,54 @@ displaybar_tilesource_changed(Tilesource *tilesource, Displaybar *displaybar)
168169 printf ("displaybar_tilesource_changed:\n" );
169170#endif /*DEBUG*/
170171
171- g_assert (tilesource == displaybar -> tilesource );
172+ if (tilesource ) {
173+ g_assert (tilesource == displaybar -> tilesource );
172174
173- if (TSLIDER (displaybar -> scale )-> value != tilesource -> scale ) {
174- TSLIDER (displaybar -> scale )-> value = tilesource -> scale ;
175- tslider_changed (TSLIDER (displaybar -> scale ));
176- }
175+ if (TSLIDER (displaybar -> scale )-> value != tilesource -> scale ) {
176+ TSLIDER (displaybar -> scale )-> value = tilesource -> scale ;
177+ tslider_changed (TSLIDER (displaybar -> scale ));
178+ }
177179
178- if (TSLIDER (displaybar -> offset )-> value != tilesource -> offset ) {
179- TSLIDER (displaybar -> offset )-> value = tilesource -> offset ;
180- tslider_changed (TSLIDER (displaybar -> offset ));
181- }
180+ if (TSLIDER (displaybar -> offset )-> value != tilesource -> offset ) {
181+ TSLIDER (displaybar -> offset )-> value = tilesource -> offset ;
182+ tslider_changed (TSLIDER (displaybar -> offset ));
183+ }
182184
183- gtk_spin_button_set_range (GTK_SPIN_BUTTON (displaybar -> page ),
184- 0 , tilesource -> n_pages - 1 );
185- gtk_widget_set_sensitive (displaybar -> page ,
186- tilesource -> n_pages > 1 &&
187- tilesource -> mode == TILESOURCE_MODE_MULTIPAGE );
185+ gtk_spin_button_set_range (GTK_SPIN_BUTTON (displaybar -> page ),
186+ 0 , tilesource -> n_pages - 1 );
187+ gtk_widget_set_sensitive (displaybar -> page ,
188+ tilesource -> n_pages > 1 &&
189+ tilesource -> mode == TILESOURCE_MODE_MULTIPAGE );
188190
189- displaybar_save_view_settings (displaybar );
191+ displaybar_save_view_settings (displaybar );
192+ }
190193}
191194
192195static void
193196displaybar_page_changed (Tilesource * tilesource , Displaybar * displaybar )
194197{
195198#ifdef DEBUG
196- printf ("dm1Gisplaybar_page_changed :\n" );
199+ printf ("displaybar_page_changed :\n" );
197200#endif /*DEBUG*/
198201
199- g_assert (tilesource == displaybar -> tilesource );
202+ if (tilesource ) {
203+ g_assert (tilesource == displaybar -> tilesource );
204+
205+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (displaybar -> page ),
206+ tilesource -> page );
207+
208+ displaybar_save_view_settings (displaybar );
209+ }
210+ }
211+
212+ static void
213+ displaybar_imageui_changed (Imageui * imageui , Displaybar * displaybar )
214+ {
215+ #ifdef DEBUG
216+ printf ("displaybar_imageui_changed:\n" );
217+ #endif /*DEBUG*/
200218
201- gtk_spin_button_set_value (GTK_SPIN_BUTTON (displaybar -> page ),
202- tilesource -> page );
219+ g_assert (imageui == displaybar -> imageui );
203220
204221 displaybar_save_view_settings (displaybar );
205222}
@@ -214,23 +231,17 @@ displaybar_disconnect(Displaybar *displaybar)
214231
215232 VIPS_UNREF (displaybar -> tilesource );
216233 }
234+
235+ if (displaybar -> imageui ) {
236+ FREESID (displaybar -> imageui_changed_sid , displaybar -> imageui );
237+ displaybar -> imageui = NULL ;
238+ }
217239}
218240
219- /* Imagewindow has a new image, eg. after < > in titlebar.
220- */
221241static void
222- displaybar_imagewindow_new_image ( Imagewindow * win , Displaybar * displaybar )
242+ displaybar_set_tilesource ( Displaybar * displaybar , Tilesource * new_tilesource )
223243{
224- #ifdef DEBUG
225- printf ("displaybar_imagewindow_new_image:\n" );
226- #endif /*DEBUG*/
227-
228- displaybar_disconnect (displaybar );
229-
230- Tilesource * new_tilesource = imagewindow_get_tilesource (win );
231244 if (new_tilesource ) {
232- /* Set new source.
233- */
234245 displaybar -> changed_sid = g_signal_connect (new_tilesource ,
235246 "changed" ,
236247 G_CALLBACK (displaybar_tilesource_changed ), displaybar );
@@ -243,15 +254,42 @@ displaybar_imagewindow_new_image(Imagewindow *win, Displaybar *displaybar)
243254
244255 displaybar -> tilesource = new_tilesource ;
245256 g_object_ref (new_tilesource );
257+ }
258+ }
246259
247- if (displaybar -> preserve )
248- displaybar_apply_view_settings (displaybar );
249- else {
250- /* Init displaybar from new source.
251- */
252- displaybar_tilesource_changed (new_tilesource , displaybar );
253- displaybar_page_changed (new_tilesource , displaybar );
254- }
260+ static void
261+ displaybar_set_imageui (Displaybar * displaybar )
262+ {
263+ Imageui * imageui = imagewindow_get_imageui (displaybar -> win );
264+
265+ displaybar -> imageui = imageui ;
266+ if (imageui )
267+ displaybar -> imageui_changed_sid = g_signal_connect (imageui ,
268+ "changed" ,
269+ G_CALLBACK (displaybar_imageui_changed ), displaybar );
270+ }
271+
272+ /* Imagewindow has a new image, eg. after < > in titlebar.
273+ */
274+ static void
275+ displaybar_imagewindow_new_image (Imagewindow * win , Displaybar * displaybar )
276+ {
277+ #ifdef DEBUG
278+ printf ("displaybar_imagewindow_new_image:\n" );
279+ #endif /*DEBUG*/
280+
281+ displaybar_disconnect (displaybar );
282+
283+ displaybar_set_tilesource (displaybar , imagewindow_get_tilesource (win ));
284+ displaybar_set_imageui (displaybar );
285+
286+ if (displaybar -> preserve )
287+ displaybar_apply_view_settings (displaybar );
288+ else {
289+ /* Init displaybar from new source.
290+ */
291+ displaybar_tilesource_changed (displaybar -> tilesource , displaybar );
292+ displaybar_page_changed (displaybar -> tilesource , displaybar );
255293 }
256294}
257295
@@ -267,25 +305,10 @@ displaybar_imagewindow_changed(Imagewindow *win, Displaybar *displaybar)
267305
268306 displaybar_disconnect (displaybar );
269307
270- Tilesource * new_tilesource = imagewindow_get_tilesource (win );
271- if (new_tilesource ) {
272- /* Set new source.
273- */
274- displaybar -> changed_sid = g_signal_connect (new_tilesource ,
275- "changed" ,
276- G_CALLBACK (displaybar_tilesource_changed ), displaybar );
277- displaybar -> tiles_changed_sid = g_signal_connect (new_tilesource ,
278- "tiles-changed" ,
279- G_CALLBACK (displaybar_tilesource_changed ), displaybar );
280- displaybar -> page_changed_sid = g_signal_connect (new_tilesource ,
281- "page-changed" ,
282- G_CALLBACK (displaybar_page_changed ), displaybar );
283-
284- displaybar -> tilesource = new_tilesource ;
285- g_object_ref (new_tilesource );
308+ displaybar_set_tilesource (displaybar , imagewindow_get_tilesource (win ));
309+ displaybar_set_imageui (displaybar );
286310
287- displaybar_apply_view_settings (displaybar );
288- }
311+ displaybar_apply_view_settings (displaybar );
289312}
290313
291314static void
0 commit comments