[gimp] app: make error-console highlighting criterion configurable



commit 7655dd727b1baed1366030031310c09f58de975e
Author: Ell <ell_se yahoo com>
Date:   Sat Oct 28 08:57:57 2017 -0400

    app: make error-console highlighting criterion configurable
    
    Currently, the error console is highlighted (shown/blinked) only
    upon errors; however, warnings, which are not shown on the
    statusbar while the error console is open, often also contain
    important information.
    
    Allow the user to configure which message types (errors, warnings,
    and regular messages) highlight the error console, using a new
    "highlight" submenu in the error-console menu.  Add corresponding
    config options, saved in sessionrc.  By default, highlight the
    error console unpon both errors and warnings.

 app/actions/error-console-actions.c  |   55 +++++++++++++++++++++++++++-
 app/actions/error-console-commands.c |   42 +++++++++++++++++++++
 app/actions/error-console-commands.h |   21 +++++++---
 app/config/gimpguiconfig.c           |   45 ++++++++++++++++++++++
 app/config/gimpguiconfig.h           |    1 +
 app/config/gimprc-blurbs.h           |    9 ++++
 app/gui/gui-message.c                |    7 ++-
 app/gui/session.c                    |   68 +++++++++++++++++++++++++++++++++-
 app/widgets/gimphelp-ids.h           |    1 +
 menus/error-console-menu.xml         |    6 +++
 10 files changed, 243 insertions(+), 12 deletions(-)
---
diff --git a/app/actions/error-console-actions.c b/app/actions/error-console-actions.c
index 858d857..3bd04ec 100644
--- a/app/actions/error-console-actions.c
+++ b/app/actions/error-console-actions.c
@@ -24,6 +24,10 @@
 
 #include "actions-types.h"
 
+#include "config/gimpguiconfig.h"
+
+#include "core/gimp.h"
+
 #include "widgets/gimpactiongroup.h"
 #include "widgets/gimperrorconsole.h"
 #include "widgets/gimphelp-ids.h"
@@ -50,7 +54,11 @@ static const GimpActionEntry error_console_actions[] =
     NC_("error-console-action", "Select _All"), "",
     NC_("error-console-action", "Select all error messages"),
     G_CALLBACK (error_console_select_all_cmd_callback),
-    GIMP_HELP_ERRORS_SELECT_ALL }
+    GIMP_HELP_ERRORS_SELECT_ALL },
+
+  { "error-console-highlight", NULL,
+    NC_("error-console-action", "_Highlight"), NULL, NULL, NULL,
+    GIMP_HELP_ERRORS_HIGHLIGHT }
 };
 
 static const GimpEnumActionEntry error_console_save_actions[] =
@@ -68,6 +76,30 @@ static const GimpEnumActionEntry error_console_save_actions[] =
     GIMP_HELP_ERRORS_SAVE }
 };
 
+static const GimpToggleActionEntry error_console_highlight_actions[] =
+{
+  { "error-console-highlight-error", NULL,
+    NC_("error-console-action", "_Errors"), NULL,
+    NC_("error-console-action", "Highlight error console on errors"),
+    G_CALLBACK (error_console_highlight_error_cmd_callback),
+    FALSE,
+    GIMP_HELP_ERRORS_HIGHLIGHT },
+
+  { "error-console-highlight-warning", NULL,
+    NC_("error-console-action", "_Warnings"), NULL,
+    NC_("error-console-action", "Highlight error console on warnings"),
+    G_CALLBACK (error_console_highlight_warning_cmd_callback),
+    FALSE,
+    GIMP_HELP_ERRORS_HIGHLIGHT },
+
+  { "error-console-highlight-info", NULL,
+    NC_("error-console-action", "_Messages"), NULL,
+    NC_("error-console-action", "Highlight error console on messages"),
+    G_CALLBACK (error_console_highlight_info_cmd_callback),
+    FALSE,
+    GIMP_HELP_ERRORS_HIGHLIGHT }
+};
+
 
 void
 error_console_actions_setup (GimpActionGroup *group)
@@ -80,6 +112,10 @@ error_console_actions_setup (GimpActionGroup *group)
                                       error_console_save_actions,
                                       G_N_ELEMENTS (error_console_save_actions),
                                       G_CALLBACK (error_console_save_cmd_callback));
+
+  gimp_action_group_add_toggle_actions (group, "error-console-action",
+                                        error_console_highlight_actions,
+                                        G_N_ELEMENTS (error_console_highlight_actions));
 }
 
 void
@@ -87,11 +123,14 @@ error_console_actions_update (GimpActionGroup *group,
                               gpointer         data)
 {
   GimpErrorConsole *console = GIMP_ERROR_CONSOLE (data);
+  GimpGuiConfig    *config  = GIMP_GUI_CONFIG (console->gimp->config);
   gboolean          selection;
 
   selection = gtk_text_buffer_get_selection_bounds (console->text_buffer,
                                                     NULL, NULL);
 
+#define SET_ACTIVE(action,condition)                                           \
+        gimp_action_group_set_action_active (group, action, (condition) != 0)
 #define SET_SENSITIVE(action,condition) \
         gimp_action_group_set_action_sensitive (group, action, (condition) != 0)
 
@@ -99,6 +138,20 @@ error_console_actions_update (GimpActionGroup *group,
   SET_SENSITIVE ("error-console-select-all",     TRUE);
   SET_SENSITIVE ("error-console-save-all",       TRUE);
   SET_SENSITIVE ("error-console-save-selection", selection);
+  SET_SENSITIVE ("error-console-highlight",      TRUE);
+
+  SET_SENSITIVE ("error-console-highlight-error", TRUE);
+  SET_ACTIVE ("error-console-highlight-error",
+              config->error_console_highlight[GIMP_MESSAGE_ERROR]);
+
+  SET_SENSITIVE ("error-console-highlight-warning", TRUE);
+  SET_ACTIVE ("error-console-highlight-warning",
+              config->error_console_highlight[GIMP_MESSAGE_WARNING]);
+
+  SET_SENSITIVE ("error-console-highlight-info", TRUE);
+  SET_ACTIVE ("error-console-highlight-info",
+              config->error_console_highlight[GIMP_MESSAGE_INFO]);
 
+#undef SET_ACTIVE
 #undef SET_SENSITIVE
 }
diff --git a/app/actions/error-console-commands.c b/app/actions/error-console-commands.c
index b9da590..97374c3 100644
--- a/app/actions/error-console-commands.c
+++ b/app/actions/error-console-commands.c
@@ -131,6 +131,48 @@ error_console_save_cmd_callback (GtkAction *action,
   gtk_window_present (GTK_WINDOW (console->file_dialog));
 }
 
+void
+error_console_highlight_error_cmd_callback (GtkAction *action,
+                                            gpointer   data)
+{
+  GimpErrorConsole *console = GIMP_ERROR_CONSOLE (data);
+  gboolean          active;
+
+  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+
+  g_object_set (console->gimp->config,
+                "error-console-highlight-error", active,
+                NULL);
+}
+
+void
+error_console_highlight_warning_cmd_callback (GtkAction *action,
+                                              gpointer   data)
+{
+  GimpErrorConsole *console = GIMP_ERROR_CONSOLE (data);
+  gboolean          active;
+
+  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+
+  g_object_set (console->gimp->config,
+                "error-console-highlight-warning", active,
+                NULL);
+}
+
+void
+error_console_highlight_info_cmd_callback (GtkAction *action,
+                                           gpointer   data)
+{
+  GimpErrorConsole *console = GIMP_ERROR_CONSOLE (data);
+  gboolean          active;
+
+  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+
+  g_object_set (console->gimp->config,
+                "error-console-highlight-info", active,
+                NULL);
+}
+
 
 /*  private functions  */
 
diff --git a/app/actions/error-console-commands.h b/app/actions/error-console-commands.h
index 9b9b805..1a5c58b 100644
--- a/app/actions/error-console-commands.h
+++ b/app/actions/error-console-commands.h
@@ -19,13 +19,20 @@
 #define __ERROR_CONSOLE_COMMANDS_H__
 
 
-void   error_console_clear_cmd_callback      (GtkAction *action,
-                                              gpointer   data);
-void   error_console_select_all_cmd_callback (GtkAction *action,
-                                              gpointer   data);
-void   error_console_save_cmd_callback       (GtkAction *action,
-                                              gint       value,
-                                              gpointer   data);
+void   error_console_clear_cmd_callback             (GtkAction *action,
+                                                     gpointer   data);
+void   error_console_select_all_cmd_callback        (GtkAction *action,
+                                                     gpointer   data);
+void   error_console_save_cmd_callback              (GtkAction *action,
+                                                     gint       value,
+                                                     gpointer   data);
+
+void   error_console_highlight_error_cmd_callback   (GtkAction *action,
+                                                     gpointer   data);
+void   error_console_highlight_warning_cmd_callback (GtkAction *action,
+                                                     gpointer   data);
+void   error_console_highlight_info_cmd_callback    (GtkAction *action,
+                                                     gpointer   data);
 
 
 #endif /* __ERROR_CONSOLE_COMMANDS_H__ */
diff --git a/app/config/gimpguiconfig.c b/app/config/gimpguiconfig.c
index aa1f700..496d784 100644
--- a/app/config/gimpguiconfig.c
+++ b/app/config/gimpguiconfig.c
@@ -96,6 +96,9 @@ enum
   PROP_SINGLE_WINDOW_MODE,
   PROP_TABS_POSITION,
   PROP_LAST_TIP_SHOWN,
+  PROP_ERROR_CONSOLE_HIGHLIGHT_ERROR,
+  PROP_ERROR_CONSOLE_HIGHLIGHT_WARNING,
+  PROP_ERROR_CONSOLE_HIGHLIGHT_INFO,
 
   /* ignored, only for backward compatibility: */
   PROP_CURSOR_FORMAT,
@@ -459,6 +462,30 @@ gimp_gui_config_class_init (GimpGuiConfigClass *klass)
                                                      G_PARAM_READWRITE |
                                                      G_PARAM_CONSTRUCT |
                                                      GIMP_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (object_class, PROP_ERROR_CONSOLE_HIGHLIGHT_ERROR,
+                                   g_param_spec_boolean ("error-console-highlight-error",
+                                                         NULL,
+                                                         ERROR_CONSOLE_HIGHLIGHT_ERROR_BLURB,
+                                                         TRUE,
+                                                         G_PARAM_READWRITE |
+                                                         G_PARAM_CONSTRUCT |
+                                                         GIMP_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (object_class, PROP_ERROR_CONSOLE_HIGHLIGHT_WARNING,
+                                   g_param_spec_boolean ("error-console-highlight-warning",
+                                                         NULL,
+                                                         ERROR_CONSOLE_HIGHLIGHT_WARNING_BLURB,
+                                                         TRUE,
+                                                         G_PARAM_READWRITE |
+                                                         G_PARAM_CONSTRUCT |
+                                                         GIMP_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (object_class, PROP_ERROR_CONSOLE_HIGHLIGHT_INFO,
+                                   g_param_spec_boolean ("error-console-highlight-info",
+                                                         NULL,
+                                                         ERROR_CONSOLE_HIGHLIGHT_INFO_BLURB,
+                                                         FALSE,
+                                                         G_PARAM_READWRITE |
+                                                         G_PARAM_CONSTRUCT |
+                                                         GIMP_PARAM_STATIC_STRINGS));
 
   /*  only for backward compatibility:  */
   GIMP_CONFIG_PROP_ENUM (object_class, PROP_CURSOR_FORMAT,
@@ -712,6 +739,15 @@ gimp_gui_config_set_property (GObject      *object,
     case PROP_LAST_TIP_SHOWN:
       gui_config->last_tip_shown = g_value_get_int (value);
       break;
+    case PROP_ERROR_CONSOLE_HIGHLIGHT_ERROR:
+      gui_config->error_console_highlight[GIMP_MESSAGE_ERROR] = g_value_get_boolean (value);
+      break;
+    case PROP_ERROR_CONSOLE_HIGHLIGHT_WARNING:
+      gui_config->error_console_highlight[GIMP_MESSAGE_WARNING] = g_value_get_boolean (value);
+      break;
+    case PROP_ERROR_CONSOLE_HIGHLIGHT_INFO:
+      gui_config->error_console_highlight[GIMP_MESSAGE_INFO] = g_value_get_boolean (value);
+      break;
 
     case PROP_CURSOR_FORMAT:
     case PROP_INFO_WINDOW_PER_DISPLAY:
@@ -869,6 +905,15 @@ gimp_gui_config_get_property (GObject    *object,
     case PROP_LAST_TIP_SHOWN:
       g_value_set_int (value, gui_config->last_tip_shown);
       break;
+    case PROP_ERROR_CONSOLE_HIGHLIGHT_ERROR:
+      g_value_set_boolean (value, gui_config->error_console_highlight[GIMP_MESSAGE_ERROR]);
+      break;
+    case PROP_ERROR_CONSOLE_HIGHLIGHT_WARNING:
+      g_value_set_boolean (value, gui_config->error_console_highlight[GIMP_MESSAGE_WARNING]);
+      break;
+    case PROP_ERROR_CONSOLE_HIGHLIGHT_INFO:
+      g_value_set_boolean (value, gui_config->error_console_highlight[GIMP_MESSAGE_INFO]);
+      break;
 
     case PROP_CURSOR_FORMAT:
     case PROP_INFO_WINDOW_PER_DISPLAY:
diff --git a/app/config/gimpguiconfig.h b/app/config/gimpguiconfig.h
index bbb8130..9892e35 100644
--- a/app/config/gimpguiconfig.h
+++ b/app/config/gimpguiconfig.h
@@ -87,6 +87,7 @@ struct _GimpGuiConfig
   gboolean             single_window_mode;
   GimpPosition         tabs_position;
   gint                 last_tip_shown;
+  gboolean             error_console_highlight[GIMP_MESSAGE_ERROR + 1];
 };
 
 struct _GimpGuiConfigClass
diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h
index 599b044..cb05f2b 100644
--- a/app/config/gimprc-blurbs.h
+++ b/app/config/gimprc-blurbs.h
@@ -126,6 +126,15 @@ _("The window type hint that is set on dock windows and the toolbox " \
 #define ENVIRON_PATH_BLURB \
 "Sets the environ search path."
 
+#define ERROR_CONSOLE_HIGHLIGHT_ERROR_BLURB \
+"Highlight error console on errors"
+
+#define ERROR_CONSOLE_HIGHLIGHT_INFO_BLURB \
+"Highlight error console on messages"
+
+#define ERROR_CONSOLE_HIGHLIGHT_WARNING_BLURB \
+"Highlight error console on warnings"
+
 #define FRACTALEXPLORER_PATH_BLURB \
 "Where to search for fractals used by the Fractal Explorer plug-in."
 
diff --git a/app/gui/gui-message.c b/app/gui/gui-message.c
index 6a50b60..b9cc078 100644
--- a/app/gui/gui-message.c
+++ b/app/gui/gui-message.c
@@ -153,10 +153,11 @@ gui_message_error_console (Gimp                *gimp,
                            const gchar         *domain,
                            const gchar         *message)
 {
-  GtkWidget *dockable = NULL;
+  GimpGuiConfig *config   = GIMP_GUI_CONFIG (gimp->config);
+  GtkWidget     *dockable = NULL;
 
-  /* try to avoid raising the error console for not so severe messages */
-  if (severity < GIMP_MESSAGE_ERROR)
+  /* avoid raising the error console for unhighlighted messages */
+  if (! config->error_console_highlight[severity])
     {
       GtkWidget *widget =
         gimp_dialog_factory_find_widget (gimp_dialog_factory_get_singleton (),
diff --git a/app/gui/session.c b/app/gui/session.c
index 5e98079..35fabc9 100644
--- a/app/gui/session.c
+++ b/app/gui/session.c
@@ -52,7 +52,10 @@ enum
   HIDE_DOCKS,
   SINGLE_WINDOW_MODE,
   TABS_POSITION,
-  LAST_TIP_SHOWN
+  LAST_TIP_SHOWN,
+  ERROR_CONSOLE_HIGHLIGHT_ERROR,
+  ERROR_CONSOLE_HIGHLIGHT_WARNING,
+  ERROR_CONSOLE_HIGHLIGHT_INFO
 };
 
 
@@ -110,6 +113,12 @@ session_init (Gimp *gimp)
                               GINT_TO_POINTER (TABS_POSITION));
   g_scanner_scope_add_symbol (scanner, 0,  "last-tip-shown",
                               GINT_TO_POINTER (LAST_TIP_SHOWN));
+  g_scanner_scope_add_symbol (scanner, 0,  "error-console-highlight-error",
+                              GINT_TO_POINTER (ERROR_CONSOLE_HIGHLIGHT_ERROR));
+  g_scanner_scope_add_symbol (scanner, 0,  "error-console-highlight-warning",
+                              GINT_TO_POINTER (ERROR_CONSOLE_HIGHLIGHT_WARNING));
+  g_scanner_scope_add_symbol (scanner, 0,  "error-console-highlight-info",
+                              GINT_TO_POINTER (ERROR_CONSOLE_HIGHLIGHT_INFO));
 
   token = G_TOKEN_LEFT_PAREN;
 
@@ -272,6 +281,45 @@ session_init (Gimp *gimp)
                             "last-tip-shown", last_tip_shown,
                             NULL);
             }
+          else if (scanner->value.v_symbol == GINT_TO_POINTER (ERROR_CONSOLE_HIGHLIGHT_ERROR))
+            {
+              gboolean error_console_highlight_error;
+
+              token = G_TOKEN_IDENTIFIER;
+
+              if (! gimp_scanner_parse_boolean (scanner, &error_console_highlight_error))
+                break;
+
+              g_object_set (gimp->config,
+                            "error-console-highlight-error", error_console_highlight_error,
+                            NULL);
+            }
+          else if (scanner->value.v_symbol == GINT_TO_POINTER (ERROR_CONSOLE_HIGHLIGHT_WARNING))
+            {
+              gboolean error_console_highlight_warning;
+
+              token = G_TOKEN_IDENTIFIER;
+
+              if (! gimp_scanner_parse_boolean (scanner, &error_console_highlight_warning))
+                break;
+
+              g_object_set (gimp->config,
+                            "error-console-highlight-warning", error_console_highlight_warning,
+                            NULL);
+            }
+          else if (scanner->value.v_symbol == GINT_TO_POINTER (ERROR_CONSOLE_HIGHLIGHT_INFO))
+            {
+              gboolean error_console_highlight_info;
+
+              token = G_TOKEN_IDENTIFIER;
+
+              if (! gimp_scanner_parse_boolean (scanner, &error_console_highlight_info))
+                break;
+
+              g_object_set (gimp->config,
+                            "error-console-highlight-info", error_console_highlight_info,
+                            NULL);
+            }
           token = G_TOKEN_RIGHT_PAREN;
           break;
 
@@ -395,6 +443,24 @@ session_save (Gimp     *gimp,
                              GIMP_GUI_CONFIG (gimp->config)->last_tip_shown);
   gimp_config_writer_close (writer);
 
+  gimp_config_writer_open (writer, "error-console-highlight-error");
+  gimp_config_writer_identifier (writer,
+                                 GIMP_GUI_CONFIG (gimp->config)->error_console_highlight[GIMP_MESSAGE_ERROR] 
?
+                                 "yes" : "no");
+  gimp_config_writer_close (writer);
+
+  gimp_config_writer_open (writer, "error-console-highlight-warning");
+  gimp_config_writer_identifier (writer,
+                                 GIMP_GUI_CONFIG 
(gimp->config)->error_console_highlight[GIMP_MESSAGE_WARNING] ?
+                                 "yes" : "no");
+  gimp_config_writer_close (writer);
+
+  gimp_config_writer_open (writer, "error-console-highlight-info");
+  gimp_config_writer_identifier (writer,
+                                 GIMP_GUI_CONFIG (gimp->config)->error_console_highlight[GIMP_MESSAGE_INFO] ?
+                                 "yes" : "no");
+  gimp_config_writer_close (writer);
+
   if (! gimp_config_writer_finish (writer, "end of sessionrc", &error))
     {
       gimp_message_literal (gimp, NULL, GIMP_MESSAGE_ERROR, error->message);
diff --git a/app/widgets/gimphelp-ids.h b/app/widgets/gimphelp-ids.h
index 1cd5d4e..b9d35a4 100644
--- a/app/widgets/gimphelp-ids.h
+++ b/app/widgets/gimphelp-ids.h
@@ -591,6 +591,7 @@
 #define GIMP_HELP_TOOL_OPTIONS_RESET              "gimp-tool-options-reset"
 
 #define GIMP_HELP_ERRORS_DIALOG                   "gimp-errors-dialog"
+#define GIMP_HELP_ERRORS_HIGHLIGHT                "gimp-errors-highlight"
 #define GIMP_HELP_ERRORS_CLEAR                    "gimp-errors-clear"
 #define GIMP_HELP_ERRORS_SAVE                     "gimp-errors-save"
 #define GIMP_HELP_ERRORS_SELECT_ALL               "gimp-errors-select-all"
diff --git a/menus/error-console-menu.xml b/menus/error-console-menu.xml
index f4c788d..b32686e 100644
--- a/menus/error-console-menu.xml
+++ b/menus/error-console-menu.xml
@@ -8,5 +8,11 @@
     <separator />
     <menuitem action="error-console-save-all" />
     <menuitem action="error-console-save-selection" />
+    <separator />
+    <menu action="error-console-highlight">
+      <menuitem action="error-console-highlight-error" />
+      <menuitem action="error-console-highlight-warning" />
+      <menuitem action="error-console-highlight-info" />
+    </menu>
   </popup>
 </ui>


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