[gtk+] Use g_object_get_qdata instead of g_object_get_data



commit 29c799a1e77e441160892366355e9a55aed5df40
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Sep 12 09:14:47 2015 -0400

    Use g_object_get_qdata instead of g_object_get_data
    
    This is less expensive.

 gtk/deprecated/gtkstyle.c |   14 ++++++++----
 gtk/gtkcssnode.c          |   13 +++++++++--
 gtk/gtklabel.c            |   46 ++++++++++++++++++++++++++----------------
 gtk/gtksettings.c         |   15 +++++++++----
 gtk/gtktooltip.c          |   48 +++++++++++++++++++++-----------------------
 5 files changed, 80 insertions(+), 56 deletions(-)
---
diff --git a/gtk/deprecated/gtkstyle.c b/gtk/deprecated/gtkstyle.c
index a2405a1..2cad590 100644
--- a/gtk/deprecated/gtkstyle.c
+++ b/gtk/deprecated/gtkstyle.c
@@ -366,6 +366,8 @@ static const GdkColor gtk_default_insensitive_bg = { 0, GTK_GRAY };
 static const GdkColor gtk_default_selected_base =  { 0, GTK_BLUE };
 static const GdkColor gtk_default_active_base =    { 0, GTK_VERY_DARK_GRAY };
 
+static GQuark quark_default_style;
+
 /* --- signals --- */
 static guint realize_signal = 0;
 static guint unrealize_signal = 0;
@@ -507,6 +509,8 @@ gtk_style_class_init (GtkStyleClass *klass)
                                   NULL, NULL,
                                   _gtk_marshal_VOID__VOID,
                                   G_TYPE_NONE, 0);
+
+  quark_default_style = g_quark_from_static_string ("gtk-legacy-default-style");
 }
 
 static void
@@ -4015,14 +4019,14 @@ gtk_widget_get_default_style_for_screen (GdkScreen *screen)
 {
   GtkStyle *default_style;
 
-  default_style = g_object_get_data (G_OBJECT (screen), "gtk-legacy-default-style");
+  default_style = g_object_get_qdata (G_OBJECT (screen), quark_default_style);
   if (default_style == NULL)
     {
       default_style = gtk_style_new ();
-      g_object_set_data_full (G_OBJECT (screen),
-                              I_("gtk-legacy-default-style"),
-                              default_style,
-                              g_object_unref);
+      g_object_set_qdata_full (G_OBJECT (screen),
+                               quark_default_style,
+                               default_style,
+                               g_object_unref);
     }
 
   return default_style;
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index 67236b7..6603155 100644
--- a/gtk/gtkcssnode.c
+++ b/gtk/gtkcssnode.c
@@ -52,6 +52,8 @@ enum {
 static guint cssnode_signals[LAST_SIGNAL] = { 0 };
 static GParamSpec *cssnode_properties[NUM_PROPERTIES];
 
+static GQuark quark_global_cache;
+
 static GtkStyleProviderPrivate *
 gtk_css_node_get_style_provider_or_null (GtkCssNode *cssnode)
 {
@@ -214,7 +216,7 @@ lookup_in_global_parent_cache (GtkCssNode                  *node,
       !may_use_global_parent_cache (node))
     return NULL;
 
-  cache = g_object_get_data (G_OBJECT (parent), "gtk-global-cache");
+  cache = g_object_get_qdata (G_OBJECT (parent), quark_global_cache);
   if (cache == NULL)
     return NULL;
 
@@ -289,14 +291,17 @@ store_in_global_parent_cache (GtkCssNode                  *node,
   if (!may_be_stored_in_parent_cache (style))
     return;
 
-  cache = g_object_get_data (G_OBJECT (parent), "gtk-global-cache");
+  cache = g_object_get_qdata (G_OBJECT (parent), quark_global_cache);
   if (cache == NULL)
     {
       cache = g_hash_table_new_full (gtk_global_parent_cache_hash,
                                      gtk_global_parent_cache_equal,
                                      gtk_global_parent_cache_free,
                                      g_object_unref);
-      g_object_set_data_full (G_OBJECT (parent), "gtk-global-cache", cache, (GDestroyNotify) 
g_hash_table_destroy);
+      g_object_set_qdata_full (G_OBJECT (parent),
+                               quark_global_cache,
+                               cache,
+                               (GDestroyNotify) g_hash_table_destroy);
     }
 
   g_hash_table_insert (cache,
@@ -522,6 +527,8 @@ gtk_css_node_class_init (GtkCssNodeClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  quark_global_cache = g_quark_from_static_string ("gtk-global-cache");
+
   object_class->get_property = gtk_css_node_get_property;
   object_class->set_property = gtk_css_node_set_property;
   object_class->dispose = gtk_css_node_dispose;
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 9319c7c..6a639fd 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -364,6 +364,12 @@ static GParamSpec *label_props[NUM_PROPERTIES] = { NULL, };
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
+static GQuark quark_shortcuts_connected;
+static GQuark quark_mnemonic_menu;
+static GQuark quark_mnemonics_visible_connected;
+static GQuark quark_gtk_signal;
+static GQuark quark_link;
+
 static void gtk_label_set_property      (GObject          *object,
                                         guint             prop_id,
                                         const GValue     *value,
@@ -700,7 +706,7 @@ gtk_label_class_init (GtkLabelClass *class)
      * Since: 2.18
      */
     signals[ACTIVATE_CURRENT_LINK] =
-      g_signal_new_class_handler ("activate-current-link",
+      g_signal_new_class_handler (I_("activate-current-link"),
                                   G_TYPE_FROM_CLASS (gobject_class),
                                   G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
                                   G_CALLBACK (gtk_label_activate_current_link),
@@ -722,7 +728,7 @@ gtk_label_class_init (GtkLabelClass *class)
      * Since: 2.18
      */
     signals[ACTIVATE_LINK] =
-      g_signal_new ("activate-link",
+      g_signal_new (I_("activate-link"),
                     G_TYPE_FROM_CLASS (gobject_class),
                     G_SIGNAL_RUN_LAST,
                     G_STRUCT_OFFSET (GtkLabelClass, activate_link),
@@ -1139,6 +1145,12 @@ gtk_label_class_init (GtkLabelClass *class)
                                "activate-current-link", 0);
 
   gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LABEL_ACCESSIBLE);
+
+  quark_shortcuts_connected = g_quark_from_static_string ("gtk-label-shortcuts-connected");
+  quark_mnemonic_menu = g_quark_from_static_string ("gtk-mnemonic-menu");
+  quark_mnemonics_visible_connected = g_quark_from_static_string ("gtk-label-mnemonics-visible-connected");
+  quark_gtk_signal = g_quark_from_static_string ("gtk-signal");
+  quark_link = g_quark_from_static_string ("link");
 }
 
 static void 
@@ -1795,7 +1807,7 @@ gtk_label_setup_mnemonic (GtkLabel *label,
   GtkWidget *toplevel;
   GtkWidget *mnemonic_menu;
   
-  mnemonic_menu = g_object_get_data (G_OBJECT (label), "gtk-mnemonic-menu");
+  mnemonic_menu = g_object_get_qdata (G_OBJECT (label), quark_mnemonic_menu);
   
   if (last_key != GDK_KEY_VoidSymbol)
     {
@@ -1846,7 +1858,7 @@ gtk_label_setup_mnemonic (GtkLabel *label,
     }
   
  done:
-  g_object_set_data (G_OBJECT (label), I_("gtk-mnemonic-menu"), mnemonic_menu);
+  g_object_set_qdata (G_OBJECT (label), quark_mnemonic_menu, mnemonic_menu);
 }
 
 static void
@@ -1965,8 +1977,7 @@ gtk_label_screen_changed (GtkWidget *widget,
   settings = gtk_widget_get_settings (widget);
 
   shortcuts_connected =
-    GPOINTER_TO_INT (g_object_get_data (G_OBJECT (settings),
-                                        "gtk-label-shortcuts-connected"));
+    GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT (settings), quark_shortcuts_connected));
 
   if (! shortcuts_connected)
     {
@@ -1977,7 +1988,7 @@ gtk_label_screen_changed (GtkWidget *widget,
                         G_CALLBACK (label_shortcut_setting_changed),
                         NULL);
 
-      g_object_set_data (G_OBJECT (settings), "gtk-label-shortcuts-connected",
+      g_object_set_qdata (G_OBJECT (settings), quark_shortcuts_connected,
                          GINT_TO_POINTER (TRUE));
     }
 
@@ -5027,8 +5038,7 @@ connect_mnemonics_visible_notify (GtkLabel *label)
     gtk_window_get_mnemonics_visible (GTK_WINDOW (toplevel));
 
   connected =
-    GPOINTER_TO_INT (g_object_get_data (G_OBJECT (toplevel),
-                                        "gtk-label-mnemonics-visible-connected"));
+    GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT (toplevel), quark_mnemonics_visible_connected));
 
   if (!connected)
     {
@@ -5036,9 +5046,9 @@ connect_mnemonics_visible_notify (GtkLabel *label)
                         "notify::mnemonics-visible",
                         G_CALLBACK (label_mnemonics_visible_changed),
                         label);
-      g_object_set_data (G_OBJECT (toplevel),
-                         "gtk-label-mnemonics-visible-connected",
-                         GINT_TO_POINTER (1));
+      g_object_set_qdata (G_OBJECT (toplevel),
+                          quark_mnemonics_visible_connected,
+                          GINT_TO_POINTER (1));
     }
 }
 
@@ -6440,7 +6450,7 @@ static void
 activate_cb (GtkWidget *menuitem,
             GtkLabel  *label)
 {
-  const gchar *signal = g_object_get_data (G_OBJECT (menuitem), "gtk-signal");
+  const gchar *signal = g_object_get_qdata (G_OBJECT (menuitem), quark_gtk_signal);
   g_signal_emit_by_name (label, signal);
 }
 
@@ -6453,7 +6463,7 @@ append_action_signal (GtkLabel     *label,
 {
   GtkWidget *menuitem = gtk_menu_item_new_with_mnemonic (text);
 
-  g_object_set_data (G_OBJECT (menuitem), I_("gtk-signal"), (char *)signal);
+  g_object_set_qdata (G_OBJECT (menuitem), quark_gtk_signal, (char *)signal);
   g_signal_connect (menuitem, "activate",
                    G_CALLBACK (activate_cb), label);
 
@@ -6518,7 +6528,7 @@ open_link_activate_cb (GtkMenuItem *menuitem,
 {
   GtkLabelLink *link;
 
-  link = g_object_get_data (G_OBJECT (menuitem), "link");
+  link = g_object_get_qdata (G_OBJECT (menuitem), quark_link);
   emit_activate_link (label, link);
 }
 
@@ -6529,7 +6539,7 @@ copy_link_activate_cb (GtkMenuItem *menuitem,
   GtkLabelLink *link;
   GtkClipboard *clipboard;
 
-  link = g_object_get_data (G_OBJECT (menuitem), "link");
+  link = g_object_get_qdata (G_OBJECT (menuitem), quark_link);
   clipboard = gtk_widget_get_clipboard (GTK_WIDGET (label), GDK_SELECTION_CLIPBOARD);
   gtk_clipboard_set_text (clipboard, link->uri, -1);
 }
@@ -6581,7 +6591,7 @@ gtk_label_do_popup (GtkLabel       *label,
     {
       /* Open Link */
       menuitem = gtk_menu_item_new_with_mnemonic (_("_Open Link"));
-      g_object_set_data (G_OBJECT (menuitem), "link", link);
+      g_object_set_qdata (G_OBJECT (menuitem), quark_link, link);
       gtk_widget_show (menuitem);
       gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
@@ -6590,7 +6600,7 @@ gtk_label_do_popup (GtkLabel       *label,
 
       /* Copy Link Address */
       menuitem = gtk_menu_item_new_with_mnemonic (_("Copy _Link Address"));
-      g_object_set_data (G_OBJECT (menuitem), "link", link);
+      g_object_set_qdata (G_OBJECT (menuitem), quark_link, link);
       gtk_widget_show (menuitem);
       gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 9fc1d38..7f52d61 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -269,6 +269,7 @@ static const gchar default_color_palette[] =
 
 /* --- variables --- */
 static GQuark            quark_property_parser = 0;
+static GQuark            quark_gtk_settings = 0;
 static GSList           *object_list = NULL;
 static guint             class_n_properties = 0;
 
@@ -367,6 +368,8 @@ gtk_settings_class_init (GtkSettingsClass *class)
   gobject_class->notify = gtk_settings_notify;
 
   quark_property_parser = g_quark_from_static_string ("gtk-rc-property-parser");
+  quark_gtk_settings = g_quark_from_static_string ("gtk-settings");
+
   result = settings_install_property_parser (class,
                                              g_param_spec_int ("gtk-double-click-time",
                                                                P_("Double Click Time"),
@@ -1849,7 +1852,7 @@ gtk_settings_get_for_screen (GdkScreen *screen)
 
   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
 
-  settings = g_object_get_data (G_OBJECT (screen), "gtk-settings");
+  settings = g_object_get_qdata (G_OBJECT (screen), quark_gtk_settings);
   if (!settings)
     {
 #ifdef GDK_WINDOWING_QUARTZ
@@ -1874,8 +1877,10 @@ gtk_settings_get_for_screen (GdkScreen *screen)
 #endif
         settings = g_object_new (GTK_TYPE_SETTINGS, NULL);
       settings->priv->screen = screen;
-      g_object_set_data_full (G_OBJECT (screen), I_("gtk-settings"),
-                              settings, g_object_unref);
+      g_object_set_qdata_full (G_OBJECT (screen),
+                               quark_gtk_settings,
+                               settings,
+                               g_object_unref);
 
       settings_init_style (settings);
       settings_update_modules (settings);
@@ -2231,7 +2236,7 @@ settings_install_property_parser (GtkSettingsClass   *class,
       priv->property_values[class_n_properties - 1].source = GTK_SETTINGS_SOURCE_DEFAULT;
       g_object_notify_by_pspec (G_OBJECT (settings), pspec);
 
-      qvalue = g_datalist_get_data (&priv->queued_settings, pspec->name);
+      qvalue = g_datalist_id_dup_data (&priv->queued_settings, g_param_spec_get_name_quark (pspec), NULL, 
NULL);
       if (qvalue)
         apply_queued_setting (settings, pspec, qvalue);
     }
@@ -2343,7 +2348,7 @@ gtk_settings_set_property_value_internal (GtkSettings            *settings,
   name_quark = g_quark_from_string (name);
   g_free (name);
 
-  qvalue = g_datalist_id_get_data (&priv->queued_settings, name_quark);
+  qvalue = g_datalist_id_dup_data (&priv->queued_settings, name_quark, NULL, NULL);
   if (!qvalue)
     {
       qvalue = g_slice_new0 (GtkSettingsValuePrivate);
diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
index a5e4f55..45e3e59 100644
--- a/gtk/gtktooltip.c
+++ b/gtk/gtktooltip.c
@@ -150,6 +150,7 @@ static void       gtk_tooltip_display_closed       (GdkDisplay      *display,
 static void       gtk_tooltip_set_last_window      (GtkTooltip      *tooltip,
                                                    GdkWindow       *window);
 
+static GQuark quark_current_tooltip;
 
 G_DEFINE_TYPE (GtkTooltip, gtk_tooltip, G_TYPE_OBJECT);
 
@@ -161,6 +162,8 @@ gtk_tooltip_class_init (GtkTooltipClass *klass)
   object_class = G_OBJECT_CLASS (klass);
 
   object_class->dispose = gtk_tooltip_dispose;
+
+  quark_current_tooltip = g_quark_from_static_string ("gdk-display-current-tooltip");
 }
 
 static void
@@ -868,6 +871,7 @@ static gint
 tooltip_browse_mode_expired (gpointer data)
 {
   GtkTooltip *tooltip;
+  GdkDisplay *display;
 
   tooltip = GTK_TOOLTIP (data);
 
@@ -875,8 +879,8 @@ tooltip_browse_mode_expired (gpointer data)
   tooltip->browse_mode_timeout_id = 0;
 
   /* destroy tooltip */
-  g_object_set_data (G_OBJECT (gtk_widget_get_display (tooltip->window)),
-                    "gdk-display-current-tooltip", NULL);
+  display = gtk_widget_get_display (tooltip->window);
+  g_object_set_qdata (G_OBJECT (display), quark_current_tooltip, NULL);
 
   return FALSE;
 }
@@ -886,7 +890,7 @@ gtk_tooltip_display_closed (GdkDisplay *display,
                            gboolean    was_error,
                            GtkTooltip *tooltip)
 {
-  g_object_set_data (G_OBJECT (display), "gdk-display-current-tooltip", NULL);
+  g_object_set_qdata (G_OBJECT (display), quark_current_tooltip, NULL);
 }
 
 static void
@@ -1209,8 +1213,7 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
   GtkTooltip *tooltip;
   gboolean return_value = FALSE;
 
-  tooltip = g_object_get_data (G_OBJECT (display),
-                               "gdk-display-current-tooltip");
+  tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip);
 
   if (tooltip->keyboard_mode_enabled)
     {
@@ -1338,8 +1341,7 @@ tooltip_popup_timeout (gpointer data)
   GtkTooltip *tooltip;
 
   display = GDK_DISPLAY (data);
-  tooltip = g_object_get_data (G_OBJECT (display),
-                              "gdk-display-current-tooltip");
+  tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip);
 
   /* This usually does not happen.  However, it does occur in language
    * bindings were reference counting of objects behaves differently.
@@ -1360,8 +1362,7 @@ gtk_tooltip_start_delay (GdkDisplay *display)
   guint timeout;
   GtkTooltip *tooltip;
 
-  tooltip = g_object_get_data (G_OBJECT (display),
-                              "gdk-display-current-tooltip");
+  tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip);
 
   if (!tooltip || GTK_TOOLTIP_VISIBLE (tooltip))
     return;
@@ -1392,8 +1393,7 @@ _gtk_tooltip_focus_in (GtkWidget *widget)
 
   /* Get current tooltip for this display */
   display = gtk_widget_get_display (widget);
-  tooltip = g_object_get_data (G_OBJECT (display),
-                              "gdk-display-current-tooltip");
+  tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip);
 
   /* Check if keyboard mode is enabled at this moment */
   if (!tooltip || !tooltip->keyboard_mode_enabled)
@@ -1444,8 +1444,7 @@ _gtk_tooltip_focus_out (GtkWidget *widget)
 
   /* Get current tooltip for this display */
   display = gtk_widget_get_display (widget);
-  tooltip = g_object_get_data (G_OBJECT (display),
-                              "gdk-display-current-tooltip");
+  tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip);
 
   if (!tooltip || !tooltip->keyboard_mode_enabled)
     return;
@@ -1466,15 +1465,15 @@ _gtk_tooltip_toggle_keyboard_mode (GtkWidget *widget)
   GtkTooltip *tooltip;
 
   display = gtk_widget_get_display (widget);
-  tooltip = g_object_get_data (G_OBJECT (display),
-                              "gdk-display-current-tooltip");
+  tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip);
 
   if (!tooltip)
     {
       tooltip = g_object_new (GTK_TYPE_TOOLTIP, NULL);
-      g_object_set_data_full (G_OBJECT (display),
-                             "gdk-display-current-tooltip",
-                             tooltip, g_object_unref);
+      g_object_set_qdata_full (G_OBJECT (display),
+                              quark_current_tooltip,
+                              tooltip,
+                               g_object_unref);
       g_signal_connect (display, "closed",
                        G_CALLBACK (gtk_tooltip_display_closed),
                        tooltip);
@@ -1506,8 +1505,7 @@ _gtk_tooltip_hide (GtkWidget *widget)
   GtkTooltip *tooltip;
 
   display = gtk_widget_get_display (widget);
-  tooltip = g_object_get_data (G_OBJECT (display),
-                              "gdk-display-current-tooltip");
+  tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip);
 
   if (!tooltip || !GTK_TOOLTIP_VISIBLE (tooltip) || !tooltip->tooltip_widget)
     return;
@@ -1550,8 +1548,7 @@ _gtk_tooltip_handle_event (GdkEvent *event)
   /* Returns coordinates relative to has_tooltip_widget's allocation. */
   has_tooltip_widget = find_topmost_widget_coords_from_event (event, &x, &y);
   display = gdk_window_get_display (event->any.window);
-  current_tooltip = g_object_get_data (G_OBJECT (display),
-                                      "gdk-display-current-tooltip");
+  current_tooltip = g_object_get_qdata (G_OBJECT (display), quark_current_tooltip);
 
   if (current_tooltip)
     {
@@ -1657,9 +1654,10 @@ _gtk_tooltip_handle_event (GdkEvent *event)
          {
            /* Need a new tooltip for this display */
            current_tooltip = g_object_new (GTK_TYPE_TOOLTIP, NULL);
-           g_object_set_data_full (G_OBJECT (display),
-                                   "gdk-display-current-tooltip",
-                                   current_tooltip, g_object_unref);
+           g_object_set_qdata_full (G_OBJECT (display),
+                                    quark_current_tooltip,
+                                    current_tooltip,
+                                     g_object_unref);
            g_signal_connect (display, "closed",
                              G_CALLBACK (gtk_tooltip_display_closed),
                              current_tooltip);


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