diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2011-08-04 10:34:18 +0100 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2011-08-04 10:34:18 +0100 |
commit | 321f253ad18dc80ff781580b65b0b289117457ec (patch) | |
tree | 7fc5759e6652f152bec41032036b5c42b2b14b5c | |
parent | 39439b0b3e531f1eeac44fec229b8cd77bed78a6 (diff) | |
download | virt-viewer-321f253ad18dc80ff781580b65b0b289117457ec.tar.gz virt-viewer-321f253ad18dc80ff781580b65b0b289117457ec.tar.xz virt-viewer-321f253ad18dc80ff781580b65b0b289117457ec.zip |
Fix sort order of displays submenu
-rw-r--r-- | src/virt-viewer-app.c | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c index d173f48..918e788 100644 --- a/src/virt-viewer-app.c +++ b/src/virt-viewer-app.c @@ -1227,22 +1227,18 @@ menu_display_visible_toggled_cb(GtkCheckMenuItem *checkmenuitem, reentering = FALSE; } -static void update_menu_displays_cb(gpointer key, - gpointer value, - gpointer user_data) +static gint +update_menu_displays_sort(gconstpointer a, gconstpointer b) { - gint nth = *(gint*)key; - VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(value); - GtkMenuShell *submenu = GTK_MENU_SHELL(user_data); - GtkWidget *item; - gboolean visible; + const int *ai = a; + const int *bi = b; - item = gtk_check_menu_item_new_with_label(g_strdup_printf("Display %d", nth)); - visible = gtk_widget_get_visible(GTK_WIDGET(virt_viewer_window_get_window(vwin))); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), visible); - g_signal_connect(G_OBJECT(item), - "toggled", G_CALLBACK(menu_display_visible_toggled_cb), vwin); - gtk_menu_shell_append(submenu, item); + if (*ai > *bi) + return 1; + else if (*ai < *bi) + return -1; + else + return 0; } static void @@ -1252,13 +1248,32 @@ window_update_menu_displays_cb(gpointer key G_GNUC_UNUSED, { VirtViewerApp *self = VIRT_VIEWER_APP(user_data); VirtViewerWindow *window = VIRT_VIEWER_WINDOW(value); - GtkWidget *submenu = gtk_menu_new(); + GtkMenuShell *submenu = GTK_MENU_SHELL(gtk_menu_new()); GtkMenuItem *menu = virt_viewer_window_get_menu_displays(window); + GList *keys = g_hash_table_get_keys(self->priv->windows); + GList *tmp; + + keys = g_list_sort(keys, update_menu_displays_sort); + + tmp = keys; + while (tmp) { + int *nth = tmp->data; + VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(g_hash_table_lookup(self->priv->windows, nth)); + GtkWidget *item; + gboolean visible; + + item = gtk_check_menu_item_new_with_label(g_strdup_printf("Display %d", *nth)); + visible = gtk_widget_get_visible(GTK_WIDGET(virt_viewer_window_get_window(vwin))); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), visible); + g_signal_connect(G_OBJECT(item), + "toggled", G_CALLBACK(menu_display_visible_toggled_cb), vwin); + gtk_menu_shell_append(submenu, item); + tmp = tmp->next; + } - g_hash_table_foreach(self->priv->windows, update_menu_displays_cb, submenu); - - gtk_widget_show_all(submenu); - gtk_menu_item_set_submenu(menu, submenu); + gtk_widget_show_all(GTK_WIDGET(submenu)); + gtk_menu_item_set_submenu(menu, GTK_WIDGET(submenu)); + g_list_free(keys); } static void |