From ddd7bb88caa1e0c5b637c9ef6cf79983c3225c31 Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Fri, 26 Apr 2013 17:08:47 +0100 Subject: [PATCH] Fix incorrect setting to lowest zoom value when clicking away from the statusbar zoom menu. 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 | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/vikwindow.c b/src/vikwindow.c index 28c570d6..16f99212 100644 --- a/src/vikwindow.c +++ b/src/vikwindow.c @@ -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 ); -- 2.39.5