[gimp/wip/Jehan/welcome-dialog: 2/2] app: now store the last run version in the core config.




commit 92fa8e86014ee1a14cb0c1370c76148e5f5545fd
Author: Jehan <jehan girinstud io>
Date:   Sun Feb 20 20:21:14 2022 +0100

    app: now store the last run version in the core config.
    
    This will be used by the update check to verify you are running a new
    version since last time. In the future, it might even allow to handle
    some types of config migrations if ever we update some things in-between
    micro releases. Until now, we could only detect minor updates through
    the config folder name (and even this was limited as the config folder
    can be specified, in which case we would not even know what version the
    files were for).
    
    Maybe we could start also warning in cases of downgrading too, which can
    break some configuration files (though there is not much we can do about
    it other than warn as there is no time machine!).
    
    Last point: if the new config value "last-run-version" doesn't exist, it
    simply means the config folder was run for a GIMP before this point in
    time/commit. So we just show the welcome dialog.

 app/app.c                   |  9 ++++++++-
 app/config/gimpcoreconfig.c | 16 ++++++++++++++++
 app/config/gimpcoreconfig.h |  2 ++
 app/config/gimprc-blurbs.h  |  3 +++
 app/gimp-update.c           | 28 ++++++++++++++++++++++++----
 app/gimp-update.h           |  4 +++-
 6 files changed, 56 insertions(+), 6 deletions(-)
---
diff --git a/app/app.c b/app/app.c
index 1c19b4b128..b54aa28d9a 100644
--- a/app/app.c
+++ b/app/app.c
@@ -319,7 +319,14 @@ app_run (const gchar         *full_prog_name,
   /*  check for updates *after* enabling config autosave, so that the timestamp
    *  is saved
    */
-  gimp_update_auto_check (gimp->edit_config);
+  gimp_update_auto_check (gimp->edit_config, gimp);
+
+  /* Set this after gimp_update_auto_check(). This will be used for the
+   * next run.
+   */
+  g_object_set (gimp->edit_config,
+                "last-run-version", GIMP_VERSION,
+                NULL);
 
   loop = run_loop = g_main_loop_new (NULL, FALSE);
 
diff --git a/app/config/gimpcoreconfig.c b/app/config/gimpcoreconfig.c
index 9417d685d9..32160519f3 100644
--- a/app/config/gimpcoreconfig.c
+++ b/app/config/gimpcoreconfig.c
@@ -125,6 +125,7 @@ enum
   PROP_LAST_RELEASE_COMMENT,
   PROP_LAST_REVISION,
   PROP_LAST_KNOWN_RELEASE,
+  PROP_LAST_RUN_VERSION,
 #ifdef G_OS_WIN32
   PROP_WIN32_POINTER_INPUT_API,
 #endif
@@ -661,6 +662,13 @@ gimp_core_config_class_init (GimpCoreConfigClass *klass)
                         0, G_MAXINT, 0,
                         GIMP_PARAM_STATIC_STRINGS);
 
+  GIMP_CONFIG_PROP_STRING (object_class, PROP_LAST_RUN_VERSION,
+                           "last-run-version",
+                           "Version of GIMP run last",
+                           LAST_RUN_VERSION_BLURB,
+                           NULL,
+                           GIMP_PARAM_STATIC_STRINGS);
+
   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SAVE_DOCUMENT_HISTORY,
                             "save-document-history",
                             "Save document history",
@@ -865,6 +873,7 @@ gimp_core_config_finalize (GObject *object)
 
   g_clear_pointer (&core_config->last_known_release, g_free);
   g_clear_pointer (&core_config->last_release_comment, g_free);
+  g_clear_pointer (&core_config->last_run_version, g_free);
 
   g_clear_object (&core_config->default_image);
   g_clear_object (&core_config->default_grid);
@@ -1089,6 +1098,10 @@ gimp_core_config_set_property (GObject      *object,
       g_clear_pointer (&core_config->last_known_release, g_free);
       core_config->last_known_release = g_value_dup_string (value);
       break;
+    case PROP_LAST_RUN_VERSION:
+      g_clear_pointer (&core_config->last_run_version, g_free);
+      core_config->last_run_version = g_value_dup_string (value);
+      break;
     case PROP_SAVE_DOCUMENT_HISTORY:
       core_config->save_document_history = g_value_get_boolean (value);
       break;
@@ -1349,6 +1362,9 @@ gimp_core_config_get_property (GObject    *object,
     case PROP_LAST_KNOWN_RELEASE:
       g_value_set_string (value, core_config->last_known_release);
       break;
+    case PROP_LAST_RUN_VERSION:
+      g_value_set_string (value, core_config->last_run_version);
+      break;
     case PROP_SAVE_DOCUMENT_HISTORY:
       g_value_set_boolean (value, core_config->save_document_history);
       break;
diff --git a/app/config/gimpcoreconfig.h b/app/config/gimpcoreconfig.h
index ec2c80bdc9..6354ecc912 100644
--- a/app/config/gimpcoreconfig.h
+++ b/app/config/gimpcoreconfig.h
@@ -115,6 +115,8 @@ struct _GimpCoreConfig
   gint64                  last_release_timestamp;
   gchar                  *last_release_comment;
   gint                    last_revision;
+
+  gchar                  *last_run_version;
 };
 
 struct _GimpCoreConfigClass
diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h
index 127d414ef0..183945975e 100644
--- a/app/config/gimprc-blurbs.h
+++ b/app/config/gimprc-blurbs.h
@@ -270,6 +270,9 @@ _("Specifies the language to use for the user interface.")
 #define LAST_KNOWN_RELEASE_BLURB \
 _("The last known release version of GIMP as queried from official website.")
 
+#define LAST_RUN_VERSION_BLURB \
+_("The version of GIMP which was last run.")
+
 #define LAST_OPENED_SIZE_BLURB \
 _("How many recently opened image filenames to keep on the File menu.")
 
diff --git a/app/gimp-update.c b/app/gimp-update.c
index eae244697f..5297452b10 100644
--- a/app/gimp-update.c
+++ b/app/gimp-update.c
@@ -36,6 +36,7 @@
 
 #ifndef GIMP_CONSOLE_COMPILATION
 #include "dialogs/about-dialog.h"
+#include "dialogs/welcome-dialog.h"
 #endif
 
 #include "gimp-intl.h"
@@ -415,9 +416,9 @@ gimp_update_about_dialog (GimpCoreConfig   *config,
 #ifndef GIMP_CONSOLE_COMPILATION
       gtk_widget_show (about_dialog_create (config));
 #else
-      g_warning (_("A new version of GIMP (%s) was released.\n"
-                   "It is recommended to update."),
-                 config->last_known_release);
+      g_printerr (_("A new version of GIMP (%s) was released.\n"
+                    "It is recommended to update."),
+                  config->last_known_release);
 #endif
     }
 }
@@ -512,17 +513,36 @@ gimp_version_cmp (const gchar *v1,
 /*
  * gimp_update_auto_check:
  * @config:
+ * @gimp:
  *
  * Run the check for newer versions of GIMP if conditions are right.
  *
  * Returns: %TRUE if a check was actually run.
  */
 gboolean
-gimp_update_auto_check (GimpCoreConfig *config)
+gimp_update_auto_check (GimpCoreConfig *config,
+                        Gimp           *gimp)
 {
   gint64 prev_update_timestamp;
   gint64 current_timestamp;
 
+  if (config->last_run_version == NULL ||
+      gimp_version_cmp (GIMP_VERSION,
+                        config->last_run_version) > 0)
+    {
+#ifndef GIMP_CONSOLE_COMPILATION
+      /* GIMP was just updated and this is the first time the new
+       * version is run. Display a welcome dialog, and do not check for
+       * updates right now. */
+      gtk_widget_show (welcome_dialog_create (gimp));
+
+      return FALSE;
+#else
+      g_log (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE,
+             "Welcome to GIMP %s!", GIMP_VERSION);
+#endif
+    }
+
   /* Builds with update check deactivated just always return FALSE. */
 #ifdef CHECK_UPDATE
   if (! config->check_updates)
diff --git a/app/gimp-update.h b/app/gimp-update.h
index 836f2bca57..7ddc25e28a 100644
--- a/app/gimp-update.h
+++ b/app/gimp-update.h
@@ -22,7 +22,9 @@
 #define __APP_GIMP_UPDATE_H__
 
 
-gboolean gimp_update_auto_check (GimpCoreConfig *config);
+gboolean gimp_update_auto_check (GimpCoreConfig *config,
+                                 Gimp           *gimp);
+
 void     gimp_update_check      (GimpCoreConfig *config);
 void     gimp_update_refresh    (GimpCoreConfig *config);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]