[virt-tools-list] [PATCH virt-viewer 2/2] Add a "Do not ask me again" checkbox when closing app
Marc-André Lureau
mlureau at redhat.com
Tue Jan 29 14:47:26 UTC 2013
----- Mensaje original -----
> ---
> src/virt-viewer-app.c | 61
> +++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 59 insertions(+), 2 deletions(-)
>
> diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
> index eea77e0..18b87a4 100644
> --- a/src/virt-viewer-app.c
> +++ b/src/virt-viewer-app.c
> @@ -140,6 +140,8 @@ struct _VirtViewerAppPrivate {
> char *title;
>
> gint focused;
> + GKeyFile *config;
> + gchar *config_file;
> };
>
>
> @@ -221,6 +223,9 @@
> virt_viewer_app_simple_message_dialog(VirtViewerApp *self,
> void
> virt_viewer_app_quit(VirtViewerApp *self)
> {
> + GError *error = NULL;
> + gchar *data;
> +
> g_return_if_fail(VIRT_VIEWER_IS_APP(self));
> VirtViewerAppPrivate *priv = self->priv;
>
> @@ -232,6 +237,19 @@ virt_viewer_app_quit(VirtViewerApp *self)
> }
> }
>
> + {
> + gchar *dir = g_path_get_dirname(priv->config_file);
> + if (g_mkdir_with_parents(dir, S_IRWXU) == -1)
> + g_warning("failed to create config directory");
missing g_free(dir) here
> + }
> +
> + if ((data = g_key_file_to_data(priv->config, NULL, &error)) ==
> NULL ||
> + !g_file_set_contents(priv->config_file, data, -1, &error)) {
> + g_warning("Couldn't save configuration: %s",
> error->message);
> + g_clear_error(&error);
> + }
> + g_free(data);
> +
> gtk_main_quit();
> }
>
> @@ -259,6 +277,8 @@ virt_viewer_app_window_set_visible(VirtViewerApp
> *self,
> VirtViewerWindow *window,
> gboolean visible)
> {
> + GError *error = NULL;
> +
> g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), FALSE);
> g_return_val_if_fail(VIRT_VIEWER_IS_WINDOW(window), FALSE);
>
> @@ -269,14 +289,33 @@
> virt_viewer_app_window_set_visible(VirtViewerApp *self,
> if (virt_viewer_app_get_n_windows_visible(self) > 1) {
> virt_viewer_window_hide(window);
> return FALSE;
> - } else {
> + }
> +
> + gboolean ask = g_key_file_get_boolean(self->priv->config,
> + "virt-viewer",
> "ask-quit", &error);
> + if (error) {
> + ask = TRUE;
> + g_clear_error(&error);
> + }
> +
> + if (ask) {
> GtkWidget *dialog =
> gtk_message_dialog_new
> (virt_viewer_window_get_window(window),
> GTK_DIALOG_DESTROY_WITH_PARENT,
> GTK_MESSAGE_QUESTION,
> GTK_BUTTONS_OK_CANCEL,
> _("Do you want to close the
> session?"));
> - gint result = gtk_dialog_run (GTK_DIALOG (dialog));
> +
> + GtkWidget *check = gtk_check_button_new_with_label(_("Do
> not ask me again"));
> +
> gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
> check);
> + gtk_widget_show(check);
> +
> + gint result = gtk_dialog_run(GTK_DIALOG(dialog));
> + g_object_get(check, "active", &ask, NULL);
I am going to have a second boolean called dont_ask instead
> + if (ask)
> + g_key_file_set_boolean(self->priv->config,
> + "virt-viewer", "ask-quit",
> FALSE);
> +
> gtk_widget_destroy(dialog);
> switch (result) {
> case GTK_RESPONSE_OK:
> @@ -286,6 +325,9 @@ virt_viewer_app_window_set_visible(VirtViewerApp
> *self,
> break;
> }
> return FALSE;
> + } else {
> + virt_viewer_app_quit(self);
> + return FALSE;
> }
> }
>
> @@ -1291,6 +1333,9 @@ virt_viewer_app_dispose (GObject *object)
> priv->guri = NULL;
> g_free(priv->title);
> priv->title = NULL;
> + g_free(priv->config_file);
> + priv->config_file = NULL;
> + g_clear_pointer(&priv->config, g_key_file_free);
>
> virt_viewer_app_free_connect_info(self);
>
> @@ -1320,8 +1365,20 @@ gboolean virt_viewer_app_start(VirtViewerApp
> *self)
> static void
> virt_viewer_app_init (VirtViewerApp *self)
> {
> + GError *error = NULL;
> +
> self->priv = GET_PRIVATE(self);
> self->priv->windows = g_hash_table_new_full(g_int_hash,
> g_int_equal, g_free, g_object_unref);
> + self->priv->config = g_key_file_new();
> + self->priv->config_file =
> g_build_filename(g_get_user_config_dir(),
> + "virt-viewer",
> "settings", NULL);
> +
> + g_key_file_load_from_file(self->priv->config,
> self->priv->config_file,
> +
> G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,
> &error);
> + if (error)
> + g_debug("Couldn't load configuration: %s", error->message);
> +
> + g_clear_error(&error);
> }
>
> static GObject *
> --
> 1.8.1.1.439.g50a6b54
>
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
>
More information about the virt-tools-list
mailing list