[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