@@ -2241,11 +2241,49 @@ preview_pane_selection_changed_callback (NemoView *view, NemoWindow *window)
22412241 nemo_file_list_free (selection );
22422242}
22432243
2244+ static void
2245+ set_preview_pane_width_from_settings (NemoWindow * window )
2246+ {
2247+ gint saved_width , position , total_width ;
2248+
2249+ /* Only set initial position once */
2250+ if (window -> details -> preview_pane_width_set ) {
2251+ return ;
2252+ }
2253+
2254+ window -> details -> preview_pane_width_set = TRUE;
2255+
2256+ /* Set position based on saved preview pane width */
2257+ saved_width = g_settings_get_int (nemo_preview_pane_preferences , "pane-width" );
2258+ total_width = gtk_widget_get_allocated_width (window -> details -> split_view_hpane );
2259+
2260+ if (saved_width > 100 && total_width > saved_width ) {
2261+ /* Position is from left, so subtract preview width from total */
2262+ position = total_width - saved_width ;
2263+ gtk_paned_set_position (GTK_PANED (window -> details -> split_view_hpane ), position );
2264+ } else {
2265+ /* Fallback: 60/40 split */
2266+ gtk_paned_set_position (GTK_PANED (window -> details -> split_view_hpane ), total_width * 0.6 );
2267+ }
2268+ }
2269+
2270+ static void
2271+ preview_pane_realize_callback (GtkWidget * widget , gpointer user_data )
2272+ {
2273+ NemoWindow * window = NEMO_WINDOW (user_data );
2274+ set_preview_pane_width_from_settings (window );
2275+ }
2276+
22442277static void
22452278preview_pane_position_changed_callback (GObject * paned , GParamSpec * pspec , NemoWindow * window )
22462279{
22472280 gint position , total_width , preview_width ;
22482281
2282+ /* Don't save position until initial width has been set */
2283+ if (!window -> details -> preview_pane_width_set ) {
2284+ return ;
2285+ }
2286+
22492287 position = gtk_paned_get_position (GTK_PANED (paned ));
22502288 total_width = gtk_widget_get_allocated_width (GTK_WIDGET (paned ));
22512289
@@ -2344,6 +2382,9 @@ nemo_window_preview_pane_on (NemoWindow *window)
23442382 nemo_window_split_view_off (window );
23452383 }
23462384
2385+ /* Reset flag so position can be set */
2386+ window -> details -> preview_pane_width_set = FALSE;
2387+
23472388 /* Create preview pane */
23482389 window -> details -> preview_pane = nemo_preview_pane_new (window );
23492390
@@ -2354,19 +2395,15 @@ nemo_window_preview_pane_on (NemoWindow *window)
23542395
23552396 gtk_widget_show (window -> details -> preview_pane );
23562397
2357- /* Set position from saved settings */
2358- gint saved_width = g_settings_get_int (nemo_preview_pane_preferences , "pane-width" );
2359- gint total_width = gtk_widget_get_allocated_width (window -> details -> split_view_hpane );
2360- gint position ;
2361-
2362- if (saved_width > 100 && total_width > saved_width ) {
2363- /* Position is measured from left, so subtract preview width from total */
2364- position = total_width - saved_width ;
2365- gtk_paned_set_position (GTK_PANED (window -> details -> split_view_hpane ), position );
2398+ /* Set position from settings - check if paned is already realized */
2399+ if (gtk_widget_get_realized (window -> details -> split_view_hpane )) {
2400+ /* Already realized, set position immediately */
2401+ set_preview_pane_width_from_settings (window );
23662402 } else {
2367- /* Fallback to 60/40 split if no saved value */
2368- gtk_paned_set_position (GTK_PANED (window -> details -> split_view_hpane ),
2369- total_width * 0.6 );
2403+ /* Not realized yet, wait for realize signal */
2404+ g_signal_connect (window -> details -> split_view_hpane , "realize" ,
2405+ G_CALLBACK (preview_pane_realize_callback ),
2406+ window );
23702407 }
23712408
23722409 /* Connect signal to save position on resize */
@@ -2418,7 +2455,10 @@ nemo_window_preview_pane_off (NemoWindow *window)
24182455 return ;
24192456 }
24202457
2421- /* Disconnect position signal */
2458+ /* Disconnect signals */
2459+ g_signal_handlers_disconnect_by_func (window -> details -> split_view_hpane ,
2460+ G_CALLBACK (preview_pane_realize_callback ),
2461+ window );
24222462 g_signal_handlers_disconnect_by_func (window -> details -> split_view_hpane ,
24232463 G_CALLBACK (preview_pane_position_changed_callback ),
24242464 window );
0 commit comments