[gimp] libgimp: Always use g_object_notify_by_pspec()



commit 1f3bcb9b49aec35cc5ad289badfa313d0a3fb815
Author: Niels De Graef <nielsdegraef gmail com>
Date:   Sat Jan 2 14:29:04 2021 +0100

    libgimp: Always use g_object_notify_by_pspec()
    
    `g_object_notify()` actually takes a global lock to look up the property
    by its name, which means there is a performance hit (albeit tiny) every
    time this function is called.  So let's encourage using
    `g_object_notify_by_pspec()` instead.
    
    Another nice advantage is that it's a bit safer at compile-time, since
    now typos will at least be caught by the compiler (as the enum value has
    to match).

 libgimp/gimpbrushselectbutton.c    | 59 +++++++++++++++++++-------------------
 libgimp/gimpfontselectbutton.c     | 32 +++++++++++----------
 libgimp/gimpgradientselectbutton.c | 32 +++++++++++----------
 libgimp/gimppaletteselectbutton.c  | 26 +++++++++--------
 libgimp/gimppatternselectbutton.c  | 32 +++++++++++----------
 5 files changed, 94 insertions(+), 87 deletions(-)
---
diff --git a/libgimp/gimpbrushselectbutton.c b/libgimp/gimpbrushselectbutton.c
index 2eac6293e2..eaf6e9030b 100644
--- a/libgimp/gimpbrushselectbutton.c
+++ b/libgimp/gimpbrushselectbutton.c
@@ -60,7 +60,8 @@ enum
   PROP_BRUSH_NAME,
   PROP_BRUSH_OPACITY,
   PROP_BRUSH_SPACING,
-  PROP_BRUSH_PAINT_MODE
+  PROP_BRUSH_PAINT_MODE,
+  N_PROPS
 };
 
 
@@ -142,6 +143,7 @@ static GtkWidget * gimp_brush_select_button_create_inside (GimpBrushSelectButton
 static const GtkTargetEntry target = { "application/x-gimp-brush-name", 0 };
 
 static guint brush_button_signals[LAST_SIGNAL] = { 0 };
+static GParamSpec *brush_button_props[N_PROPS] = { NULL, };
 
 
 G_DEFINE_TYPE_WITH_PRIVATE (GimpBrushSelectButton, gimp_brush_select_button,
@@ -169,13 +171,12 @@ gimp_brush_select_button_class_init (GimpBrushSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_TITLE,
-                                   g_param_spec_string ("title",
+  brush_button_props[PROP_TITLE] = g_param_spec_string ("title",
                                                         "Title",
                                                         "The title to be used for the brush selection popup 
dialog",
                                                         _("Brush Selection"),
                                                         GIMP_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT_ONLY));
+                                                        G_PARAM_CONSTRUCT_ONLY);
 
   /**
    * GimpBrushSelectButton:brush-name:
@@ -184,12 +185,11 @@ gimp_brush_select_button_class_init (GimpBrushSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_BRUSH_NAME,
-                                   g_param_spec_string ("brush-name",
-                                                        "Brush name",
-                                                        "The name of the currently selected brush",
-                                                        NULL,
-                                                        GIMP_PARAM_READWRITE));
+  brush_button_props[PROP_BRUSH_NAME] = g_param_spec_string ("brush-name",
+                                                             "Brush name",
+                                                             "The name of the currently selected brush",
+                                                             NULL,
+                                                             GIMP_PARAM_READWRITE);
 
   /**
    * GimpBrushSelectButton:opacity:
@@ -198,12 +198,11 @@ gimp_brush_select_button_class_init (GimpBrushSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_BRUSH_OPACITY,
-                                   g_param_spec_double ("brush-opacity",
-                                                        "Brush opacity",
-                                                        "The opacity of the currently selected brush",
-                                                        -1.0, 100.0, -1.0,
-                                                        GIMP_PARAM_READWRITE));
+  brush_button_props[PROP_BRUSH_OPACITY] = g_param_spec_double ("brush-opacity",
+                                                                "Brush opacity",
+                                                                "The opacity of the currently selected 
brush",
+                                                                -1.0, 100.0, -1.0,
+                                                                GIMP_PARAM_READWRITE);
 
   /**
    * GimpBrushSelectButton:spacing:
@@ -212,12 +211,11 @@ gimp_brush_select_button_class_init (GimpBrushSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_BRUSH_SPACING,
-                                   g_param_spec_int ("brush-spacing",
-                                                     "Brush spacing",
-                                                     "The spacing of the currently selected brush",
-                                                     -G_MAXINT, 1000, -1,
-                                                     GIMP_PARAM_READWRITE));
+  brush_button_props[PROP_BRUSH_SPACING] = g_param_spec_int ("brush-spacing",
+                                                             "Brush spacing",
+                                                             "The spacing of the currently selected brush",
+                                                             -G_MAXINT, 1000, -1,
+                                                             GIMP_PARAM_READWRITE);
 
   /**
    * GimpBrushSelectButton:paint-mode:
@@ -226,13 +224,14 @@ gimp_brush_select_button_class_init (GimpBrushSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_BRUSH_PAINT_MODE,
-                                   g_param_spec_int ("brush-paint-mode",
-                                                     "Brush paint mode",
-                                                     "The paint mode of the currently selected brush",
-                                                     -1, GIMP_LAYER_MODE_LUMINANCE,
-                                                     -1,
-                                                     GIMP_PARAM_READWRITE));
+  brush_button_props[PROP_BRUSH_PAINT_MODE] = g_param_spec_int ("brush-paint-mode",
+                                                                "Brush paint mode",
+                                                                "The paint mode of the currently selected 
brush",
+                                                                -1, GIMP_LAYER_MODE_LUMINANCE,
+                                                                -1,
+                                                                GIMP_PARAM_READWRITE);
+
+  g_object_class_install_properties (object_class, N_PROPS, brush_button_props);
 
   /**
    * GimpBrushSelectButton::brush-set:
@@ -592,7 +591,7 @@ gimp_brush_select_button_callback (const gchar   *name,
   g_signal_emit (button, brush_button_signals[BRUSH_SET], 0,
                  name, opacity, spacing, paint_mode, width, height, mask_data,
                  dialog_closing);
-  g_object_notify (G_OBJECT (button), "brush-name");
+  g_object_notify_by_pspec (G_OBJECT (button), brush_button_props[PROP_BRUSH_NAME]);
 }
 
 static void
diff --git a/libgimp/gimpfontselectbutton.c b/libgimp/gimpfontselectbutton.c
index ce8cbf8d86..5f994eccdc 100644
--- a/libgimp/gimpfontselectbutton.c
+++ b/libgimp/gimpfontselectbutton.c
@@ -54,7 +54,8 @@ enum
 {
   PROP_0,
   PROP_TITLE,
-  PROP_FONT_NAME
+  PROP_FONT_NAME,
+  N_PROPS
 };
 
 
@@ -102,6 +103,7 @@ static GtkWidget * gimp_font_select_button_create_inside (GimpFontSelectButton *
 static const GtkTargetEntry target = { "application/x-gimp-font-name", 0 };
 
 static guint font_button_signals[LAST_SIGNAL] = { 0 };
+static GParamSpec *font_button_props[N_PROPS] = { NULL, };
 
 
 G_DEFINE_TYPE_WITH_PRIVATE (GimpFontSelectButton, gimp_font_select_button,
@@ -129,13 +131,12 @@ gimp_font_select_button_class_init (GimpFontSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_TITLE,
-                                   g_param_spec_string ("title",
-                                                        "Title",
-                                                        "The title to be used for the font selection popup 
dialog",
-                                                        _("Font Selection"),
-                                                        GIMP_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT_ONLY));
+  font_button_props[PROP_TITLE] = g_param_spec_string ("title",
+                                                       "Title",
+                                                       "The title to be used for the font selection popup 
dialog",
+                                                       _("Font Selection"),
+                                                       GIMP_PARAM_READWRITE |
+                                                       G_PARAM_CONSTRUCT_ONLY);
 
   /**
    * GimpFontSelectButton:font-name:
@@ -144,12 +145,13 @@ gimp_font_select_button_class_init (GimpFontSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_FONT_NAME,
-                                   g_param_spec_string ("font-name",
-                                                        "Font name",
-                                                        "The name of the currently selected font",
-                                                        "Sans-serif",
-                                                        GIMP_PARAM_READWRITE));
+  font_button_props[PROP_FONT_NAME] = g_param_spec_string ("font-name",
+                                                           "Font name",
+                                                           "The name of the currently selected font",
+                                                           "Sans-serif",
+                                                           GIMP_PARAM_READWRITE);
+
+  g_object_class_install_properties (object_class, N_PROPS, font_button_props);
 
   /**
    * GimpFontSelectButton::font-set:
@@ -352,7 +354,7 @@ gimp_font_select_button_callback (const gchar *font_name,
 
   g_signal_emit (button, font_button_signals[FONT_SET], 0,
                  font_name, dialog_closing);
-  g_object_notify (G_OBJECT (button), "font-name");
+  g_object_notify_by_pspec (G_OBJECT (button), font_button_props[PROP_FONT_NAME]);
 }
 
 static void
diff --git a/libgimp/gimpgradientselectbutton.c b/libgimp/gimpgradientselectbutton.c
index b5cf8f5e85..c8ce84d3ea 100644
--- a/libgimp/gimpgradientselectbutton.c
+++ b/libgimp/gimpgradientselectbutton.c
@@ -57,7 +57,8 @@ enum
 {
   PROP_0,
   PROP_TITLE,
-  PROP_GRADIENT_NAME
+  PROP_GRADIENT_NAME,
+  N_PROPS
 };
 
 
@@ -119,6 +120,7 @@ static GtkWidget * gimp_gradient_select_button_create_inside (GimpGradientSelect
 static const GtkTargetEntry target = { "application/x-gimp-gradient-name", 0 };
 
 static guint gradient_button_signals[LAST_SIGNAL] = { 0 };
+static GParamSpec *gradient_button_props[N_PROPS] = { NULL, };
 
 
 G_DEFINE_TYPE_WITH_PRIVATE (GimpGradientSelectButton,
@@ -147,13 +149,12 @@ gimp_gradient_select_button_class_init (GimpGradientSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_TITLE,
-                                   g_param_spec_string ("title",
-                                                        "Title",
-                                                        "The title to be used for the gradient selection 
popup dialog",
-                                                        _("Gradient Selection"),
-                                                        GIMP_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT_ONLY));
+  gradient_button_props[PROP_TITLE] = g_param_spec_string ("title",
+                                                           "Title",
+                                                           "The title to be used for the gradient selection 
popup dialog",
+                                                           _("Gradient Selection"),
+                                                           GIMP_PARAM_READWRITE |
+                                                           G_PARAM_CONSTRUCT_ONLY);
 
   /**
    * GimpGradientSelectButton:gradient-name:
@@ -162,12 +163,13 @@ gimp_gradient_select_button_class_init (GimpGradientSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_GRADIENT_NAME,
-                                   g_param_spec_string ("gradient-name",
-                                                        "Gradient name",
-                                                        "The name of the currently selected gradient",
-                                                        NULL,
-                                                        GIMP_PARAM_READWRITE));
+  gradient_button_props[PROP_GRADIENT_NAME] = g_param_spec_string ("gradient-name",
+                                                                   "Gradient name",
+                                                                   "The name of the currently selected 
gradient",
+                                                                   NULL,
+                                                                   GIMP_PARAM_READWRITE);
+
+  g_object_class_install_properties (object_class, N_PROPS, gradient_button_props);
 
   /**
    * GimpGradientSelectButton::gradient-set:
@@ -398,7 +400,7 @@ gimp_gradient_select_button_callback (const gchar   *gradient_name,
 
   g_signal_emit (button, gradient_button_signals[GRADIENT_SET], 0,
                  gradient_name, n_samples, gradient_data, dialog_closing);
-  g_object_notify (G_OBJECT (button), "gradient-name");
+  g_object_notify_by_pspec (G_OBJECT (button), gradient_button_props[PROP_GRADIENT_NAME]);
 }
 
 static void
diff --git a/libgimp/gimppaletteselectbutton.c b/libgimp/gimppaletteselectbutton.c
index dc191ec792..8143234c6c 100644
--- a/libgimp/gimppaletteselectbutton.c
+++ b/libgimp/gimppaletteselectbutton.c
@@ -64,7 +64,8 @@ enum
 {
   PROP_0,
   PROP_TITLE,
-  PROP_PALETTE_NAME
+  PROP_PALETTE_NAME,
+  N_PROPS
 };
 
 
@@ -101,6 +102,7 @@ static GtkWidget * gimp_palette_select_button_create_inside (GimpPaletteSelectBu
 static const GtkTargetEntry target = { "application/x-gimp-palette-name", 0 };
 
 static guint palette_button_signals[LAST_SIGNAL] = { 0 };
+static GParamSpec *palette_button_props[N_PROPS] = { NULL, };
 
 
 G_DEFINE_TYPE_WITH_PRIVATE (GimpPaletteSelectButton, gimp_palette_select_button,
@@ -128,13 +130,12 @@ gimp_palette_select_button_class_init (GimpPaletteSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_TITLE,
-                                   g_param_spec_string ("title",
-                                                        "Title",
-                                                        "The title to be used for the palette selection 
popup dialog",
-                                                        _("Palette Selection"),
-                                                        GIMP_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT_ONLY));
+  palette_button_props[PROP_TITLE] = g_param_spec_string ("title",
+                                                          "Title",
+                                                          "The title to be used for the palette selection 
popup dialog",
+                                                          _("Palette Selection"),
+                                                          GIMP_PARAM_READWRITE |
+                                                          G_PARAM_CONSTRUCT_ONLY);
 
   /**
    * GimpPaletteSelectButton:palette-name:
@@ -143,12 +144,13 @@ gimp_palette_select_button_class_init (GimpPaletteSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_PALETTE_NAME,
-                                   g_param_spec_string ("palette-name",
+  palette_button_props[PROP_PALETTE_NAME] = g_param_spec_string ("palette-name",
                                                         "Palette name",
                                                         "The name of the currently selected palette",
                                                         NULL,
-                                                        GIMP_PARAM_READWRITE));
+                                                        GIMP_PARAM_READWRITE);
+
+  g_object_class_install_properties (object_class, N_PROPS, palette_button_props);
 
   /**
    * GimpPaletteSelectButton::palette-set:
@@ -352,7 +354,7 @@ gimp_palette_select_button_callback (const gchar *palette_name,
 
   g_signal_emit (button, palette_button_signals[PALETTE_SET], 0,
                  palette_name, dialog_closing);
-  g_object_notify (G_OBJECT (button), "palette-name");
+  g_object_notify_by_pspec (G_OBJECT (button), palette_button_props[PROP_PALETTE_NAME]);
 }
 
 static void
diff --git a/libgimp/gimppatternselectbutton.c b/libgimp/gimppatternselectbutton.c
index 274f42c648..0ef70d1d19 100644
--- a/libgimp/gimppatternselectbutton.c
+++ b/libgimp/gimppatternselectbutton.c
@@ -74,7 +74,8 @@ enum
 {
   PROP_0,
   PROP_TITLE,
-  PROP_PATTERN_NAME
+  PROP_PATTERN_NAME,
+  N_PROPS
 };
 
 
@@ -130,6 +131,7 @@ static GtkWidget * gimp_pattern_select_button_create_inside (GimpPatternSelectBu
 static const GtkTargetEntry target = { "application/x-gimp-pattern-name", 0 };
 
 static guint pattern_button_signals[LAST_SIGNAL] = { 0 };
+static GParamSpec *pattern_button_props[N_PROPS] = { NULL, };
 
 
 G_DEFINE_TYPE_WITH_PRIVATE (GimpPatternSelectButton, gimp_pattern_select_button,
@@ -157,13 +159,12 @@ gimp_pattern_select_button_class_init (GimpPatternSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_TITLE,
-                                   g_param_spec_string ("title",
-                                                        "Title",
-                                                        "The title to be used for the pattern selection 
popup dialog",
-                                                        _("Pattern Selection"),
-                                                        GIMP_PARAM_READWRITE |
-                                                        G_PARAM_CONSTRUCT_ONLY));
+  pattern_button_props[PROP_TITLE] = g_param_spec_string ("title",
+                                                          "Title",
+                                                          "The title to be used for the pattern selection 
popup dialog",
+                                                          _("Pattern Selection"),
+                                                          GIMP_PARAM_READWRITE |
+                                                          G_PARAM_CONSTRUCT_ONLY);
 
   /**
    * GimpPatternSelectButton:pattern-name:
@@ -172,12 +173,13 @@ gimp_pattern_select_button_class_init (GimpPatternSelectButtonClass *klass)
    *
    * Since: 2.4
    */
-  g_object_class_install_property (object_class, PROP_PATTERN_NAME,
-                                   g_param_spec_string ("pattern-name",
-                                                        "Pattern name",
-                                                        "The name of the currently selected pattern",
-                                                        NULL,
-                                                        GIMP_PARAM_READWRITE));
+  pattern_button_props[PROP_PATTERN_NAME] = g_param_spec_string ("pattern-name",
+                                                                 "Pattern name",
+                                                                 "The name of the currently selected 
pattern",
+                                                                 NULL,
+                                                                 GIMP_PARAM_READWRITE);
+
+  g_object_class_install_properties (object_class, N_PROPS, pattern_button_props);
 
   /**
    * GimpPatternSelectButton::pattern-set:
@@ -426,7 +428,7 @@ gimp_pattern_select_button_callback (const gchar  *pattern_name,
 
   g_signal_emit (button, pattern_button_signals[PATTERN_SET], 0,
                  pattern_name, width, height, bytes, dialog_closing);
-  g_object_notify (G_OBJECT (button), "pattern-name");
+  g_object_notify_by_pspec (G_OBJECT (button), pattern_button_props[PROP_PATTERN_NAME]);
 }
 
 static void


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