Fix the refresh rate menu

1. Make all of the items into radio items, not just the one for
   the current refresh rate.

2. Add all the items into a group, so that only one can be checked.

3. Only fire the signal handler when the item is activated, not
   when it is deactivated.
This commit is contained in:
Alistair Buxton
2014-11-12 00:19:41 +00:00
committed by Landry Breuil
parent bf7ad9f99e
commit 18311141d0

View File

@@ -73,8 +73,11 @@ show_settings_dialog (XtmSettingsToolButton *button)
static void
refresh_rate_toggled (GtkCheckMenuItem *mi, XtmSettings *settings)
{
guint refresh_rate = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (mi), "refresh-rate"));
g_object_set (settings, "refresh-rate", refresh_rate, NULL);
if(mi->active)
{
guint refresh_rate = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (mi), "refresh-rate"));
g_object_set (settings, "refresh-rate", refresh_rate, NULL);
}
}
static void
@@ -82,18 +85,16 @@ menu_refresh_rate_append_item (GtkMenu *menu, gchar *title, guint refresh_rate,
{
GtkWidget *mi;
guint cur_refresh_rate;
static GSList *group = NULL;
g_object_get (settings, "refresh-rate", &cur_refresh_rate, NULL);
mi = gtk_radio_menu_item_new_with_label (group, title);
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM (mi));
if (cur_refresh_rate == refresh_rate)
{
mi = gtk_radio_menu_item_new_with_label (NULL, title);
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), TRUE);
}
else
{
mi = gtk_menu_item_new_with_label (title);
}
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
g_object_set_data (G_OBJECT (mi), "refresh-rate", GUINT_TO_POINTER (refresh_rate));
g_signal_connect (mi, "activate", G_CALLBACK (refresh_rate_toggled), settings);