network: fix version compatibility warning dialog

Make it use the correct parent window, improve the text, and
not block startup.

https://bugzilla.gnome.org/show_bug.cgi?id=644973
This commit is contained in:
William Jon McCann 2011-03-16 19:30:29 -04:00
parent 4f000889eb
commit e1b1be1f60

View file

@ -1657,14 +1657,34 @@ notify_connections_read_cb (NMRemoteSettings *settings,
} }
} }
static gboolean
display_version_warning_idle (CcNetworkPanel *panel)
{
GtkWidget *dialog;
GtkWindow *window;
const char *message;
/* TRANSLATORS: the user is running a NM that is not API compatible */
message = _("The system network services are not compatible with this version.");
window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (panel)));
dialog = gtk_message_dialog_new (window,
GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"%s",
message);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
return FALSE;
}
static gboolean static gboolean
panel_check_network_manager_version (CcNetworkPanel *panel) panel_check_network_manager_version (CcNetworkPanel *panel)
{ {
const gchar *message;
const gchar *version; const gchar *version;
gchar **split = NULL; gchar **split = NULL;
GtkWidget *dialog;
GtkWindow *window = NULL;
guint major = 0; guint major = 0;
guint micro = 0; guint micro = 0;
guint minor = 0; guint minor = 0;
@ -1679,33 +1699,14 @@ panel_check_network_manager_version (CcNetworkPanel *panel)
micro = atoi (split[2]); micro = atoi (split[2]);
} }
/* is it too new */ /* is it too new or old */
if (major > 0 || major > 9) { if (major > 0 || major > 9 || (minor <= 8 && micro < 992)) {
ret = FALSE;
/* TRANSLATORS: the user is running a NM that is too new and API compatible */ /* do modal dialog in idle so we don't block startup */
message = _("The running NetworkManager version is not compatible (too new)."); g_idle_add ((GSourceFunc)display_version_warning_idle, panel);
/* is it new enough */
} else if (minor <= 8 && micro < 992) {
/* TRANSLATORS: the user is running a NM that is too old and API compatible */
message = _("The running NetworkManager version is not compatible (too old).");
/* nothing to do */
} else {
goto out;
} }
/* do modal dialog */
ret = FALSE;
dialog = gtk_message_dialog_new (window,
GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"%s",
message);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
out:
g_strfreev (split); g_strfreev (split);
return ret; return ret;
} }
@ -1805,6 +1806,23 @@ remove_connection (GtkToolButton *button, CcNetworkPanel *panel)
} }
} }
static void
on_toplevel_map (GtkWidget *widget,
CcNetworkPanel *panel)
{
gboolean ret;
/* is the user compiling against a new version, but running an
* old daemon version? */
ret = panel_check_network_manager_version (panel);
if (ret) {
manager_running (panel->priv->client, NULL, panel);
} else {
/* just select the proxy settings */
select_first_device (panel);
}
}
static void static void
cc_network_panel_init (CcNetworkPanel *panel) cc_network_panel_init (CcNetworkPanel *panel)
{ {
@ -1820,6 +1838,7 @@ cc_network_panel_init (CcNetworkPanel *panel)
GtkTreeSelection *selection; GtkTreeSelection *selection;
GtkTreeSortable *sortable; GtkTreeSortable *sortable;
GtkWidget *widget; GtkWidget *widget;
GtkWidget *toplevel;
panel->priv = NETWORK_PANEL_PRIVATE (panel); panel->priv = NETWORK_PANEL_PRIVATE (panel);
@ -2032,15 +2051,8 @@ cc_network_panel_init (CcNetworkPanel *panel)
g_signal_connect (panel->priv->remote_settings, NM_REMOTE_SETTINGS_NEW_CONNECTION, g_signal_connect (panel->priv->remote_settings, NM_REMOTE_SETTINGS_NEW_CONNECTION,
G_CALLBACK (notify_new_connection_cb), panel); G_CALLBACK (notify_new_connection_cb), panel);
/* is the user compiling against a new version, but running an toplevel = gtk_widget_get_toplevel (GTK_WIDGET (panel));
* old daemon version? */ g_signal_connect_after (toplevel, "map", G_CALLBACK (on_toplevel_map), panel);
ret = panel_check_network_manager_version (panel);
if (ret) {
manager_running (panel->priv->client, NULL, panel);
} else {
/* just select the proxy settings */
select_first_device (panel);
}
/* hide implementation details */ /* hide implementation details */
widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder, widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,