]> git.street.me.uk Git - andy/viking.git/commitdiff
Fix incorrect setting to lowest zoom value when clicking away from the statusbar...
authorRob Norris <rw_norris@hotmail.com>
Fri, 26 Apr 2013 16:08:47 +0000 (17:08 +0100)
committerRob Norris <rw_norris@hotmail.com>
Sat, 27 Apr 2013 00:53:31 +0000 (01:53 +0100)
The only happens on the very first time since the active menu entry is not assigned and so defaults to first entry.
Unfortunately in GTK+ clicking away from the zoom menu still generates a 'selection-done' callback.
Thus ensure an active menu entry is set on initialization.

src/vikwindow.c

index 28c570d6f30cd2a568b1892b895395cad2c6a344..16f99212433b94208ebf9ce8a35a528dbca9de26 100644 (file)
@@ -404,7 +404,10 @@ static void zoom_changed (GtkMenuShell *menushell,
   }
 }
 
-static GtkWidget * create_zoom_menu_all_levels ()
+/**
+ * @mpp: The initial zoom level
+ */
+static GtkWidget *create_zoom_menu_all_levels ( gdouble mpp )
 {
   GtkWidget *menu = gtk_menu_new ();
   char *itemLabels[] = { "0.25", "0.5", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "2048", "4096", "8192", "16384", "32768" };
@@ -418,6 +421,14 @@ static GtkWidget * create_zoom_menu_all_levels ()
       g_object_set_data (G_OBJECT (item), "position", GINT_TO_POINTER(i));
     }
 
+  gint active = 2 + round ( log (mpp) / log (2) );
+  // Ensure value derived from mpp is in bounds of the menu
+  if ( active >= G_N_ELEMENTS(itemLabels) )
+    active = G_N_ELEMENTS(itemLabels) - 1;
+  if ( active < 0 )
+    active = 0;
+  gtk_menu_set_active ( GTK_MENU(menu), active );
+
   return menu;
 }
 
@@ -506,7 +517,7 @@ static void vik_window_init ( VikWindow *vw )
   gtk_toolbar_set_style (vw->toolbar, GTK_TOOLBAR_ICONS);
 
   GtkWidget * zoom_levels = gtk_ui_manager_get_widget (vw->uim, "/MainMenu/View/SetZoom");
-  GtkWidget * zoom_levels_menu = create_zoom_menu_all_levels ();
+  GtkWidget * zoom_levels_menu = create_zoom_menu_all_levels ( vik_viewport_get_zoom(vw->viking_vvp) );
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (zoom_levels), zoom_levels_menu);
   g_signal_connect ( G_OBJECT(zoom_levels_menu), "selection-done", G_CALLBACK(zoom_changed), vw);
   g_signal_connect_swapped ( G_OBJECT(vw->viking_vs), "clicked", G_CALLBACK(zoom_popup_handler), zoom_levels_menu );