[gtk+/wip/action-helper] action-rework: don't create unneded action muxers for menus



commit 04ec9f443c2c65cb3025e2f3cff7cccf61b45d6e
Author: Lars Uebernickel <lars uebernickel canonical com>
Date:   Fri Aug 17 18:26:45 2012 +0200

    action-rework: don't create unneded action muxers for menus

 gtk/gtkmenu.c          |   14 ++++----------
 gtk/gtkwidget.c        |   21 ++++++++++++++-------
 gtk/gtkwidgetprivate.h |    1 +
 3 files changed, 19 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index f39cbc2..2cfee5f 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -1182,8 +1182,6 @@ gtk_menu_attach_to_widget (GtkMenu           *menu,
 {
   GtkMenuAttachData *data;
   GList *list;
-  GActionMuxer *actions;
-  GActionMuxer *attach_actions;
 
   g_return_if_fail (GTK_IS_MENU (menu));
   g_return_if_fail (GTK_IS_WIDGET (attach_widget));
@@ -1206,10 +1204,6 @@ gtk_menu_attach_to_widget (GtkMenu           *menu,
                     G_CALLBACK (attach_widget_screen_changed), menu);
   attach_widget_screen_changed (attach_widget, NULL, menu);
 
-  actions = _gtk_widget_get_action_muxer (GTK_WIDGET (menu));
-  attach_actions = _gtk_widget_get_action_muxer (attach_widget);
-  g_action_muxer_set_parent (actions, attach_actions);
-
   data->detacher = detacher;
   g_object_set_data (G_OBJECT (menu), I_(attach_data_key), data);
   list = g_object_steal_data (G_OBJECT (attach_widget), ATTACHED_MENUS);
@@ -1225,6 +1219,8 @@ gtk_menu_attach_to_widget (GtkMenu           *menu,
   /* Attach the widget to the toplevel window. */
   gtk_window_set_attached_to (GTK_WINDOW (menu->priv->toplevel), attach_widget);
 
+  _gtk_widget_update_parent_muxer (GTK_WIDGET (menu));
+
   /* Fallback title for menu comes from attach widget */
   gtk_menu_update_title (menu);
 
@@ -1265,7 +1261,6 @@ gtk_menu_detach (GtkMenu *menu)
 {
   GtkMenuAttachData *data;
   GList *list;
-  GActionMuxer *actions;
 
   g_return_if_fail (GTK_IS_MENU (menu));
 
@@ -1278,9 +1273,6 @@ gtk_menu_detach (GtkMenu *menu)
     }
   g_object_set_data (G_OBJECT (menu), I_(attach_data_key), NULL);
 
-  actions = _gtk_widget_get_action_muxer (GTK_WIDGET (menu));
-  g_action_muxer_set_parent (actions, NULL);
-
   /* Detach the toplevel window. */
   gtk_window_set_attached_to (GTK_WINDOW (menu->priv->toplevel), NULL);
 
@@ -1303,6 +1295,8 @@ gtk_menu_detach (GtkMenu *menu)
 
   g_slice_free (GtkMenuAttachData, data);
 
+  _gtk_widget_update_parent_muxer (GTK_WIDGET (menu));
+
   /* Fallback title for menu comes from attach widget */
   gtk_menu_update_title (menu);
 
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index a78b240..60a1451 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -632,7 +632,6 @@ static void             gtk_widget_real_get_width_for_height    (GtkWidget
                                                                  gint             *natural_width);
 static void             gtk_widget_real_state_flags_changed     (GtkWidget        *widget,
                                                                  GtkStateFlags     old_state);
-static void             gtk_widget_update_parent_muxer          (GtkWidget        *widget);
 static const GtkWidgetAuxInfo* _gtk_widget_get_aux_info_or_defaults (GtkWidget *widget);
 static GtkWidgetAuxInfo* gtk_widget_get_aux_info                (GtkWidget        *widget,
                                                                  gboolean          create);
@@ -3895,7 +3894,7 @@ gtk_widget_unparent (GtkWidget *widget)
   if (priv->context)
     gtk_style_context_set_parent (priv->context, NULL);
 
-  gtk_widget_update_parent_muxer (widget);
+  _gtk_widget_update_parent_muxer (widget);
 
   g_signal_emit (widget, widget_signals[PARENT_SET], 0, old_parent);
   if (toplevel)
@@ -6695,8 +6694,8 @@ gtk_widget_real_state_flags_changed (GtkWidget     *widget,
   gtk_widget_update_pango_context (widget);
 }
 
-static void
-gtk_widget_update_parent_muxer (GtkWidget *widget)
+void
+_gtk_widget_update_parent_muxer (GtkWidget *widget)
 {
   GActionMuxer *muxer;
   GtkWidget *parent;
@@ -6707,7 +6706,11 @@ gtk_widget_update_parent_muxer (GtkWidget *widget)
 
   muxer = _gtk_widget_get_action_muxer (widget);
 
-  parent = gtk_widget_get_parent (widget);
+  if (GTK_IS_MENU (widget))
+      parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+  else
+      parent = gtk_widget_get_parent (widget);
+
   parent_muxer = parent ? _gtk_widget_get_action_muxer (parent) : NULL;
 
   g_action_muxer_set_parent (muxer, parent_muxer);
@@ -7983,7 +7986,7 @@ gtk_widget_set_parent (GtkWidget *widget,
     gtk_style_context_set_parent (priv->context,
                                   gtk_widget_get_style_context (parent));
 
-  gtk_widget_update_parent_muxer (widget);
+  _gtk_widget_update_parent_muxer (widget);
 
   g_signal_emit (widget, widget_signals[PARENT_SET], 0, NULL);
   if (priv->parent->priv->anchored)
@@ -14102,7 +14105,11 @@ _gtk_widget_get_action_muxer (GtkWidget *widget)
       GtkWidget *parent;
       GActionMuxer *parent_actions;
 
-      parent = gtk_widget_get_parent (widget);
+      if (GTK_IS_MENU (widget))
+        parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+      else
+        parent = gtk_widget_get_parent (widget);
+
       parent_actions = parent ? _gtk_widget_get_action_muxer (parent) : NULL;
 
       widget->priv->muxer = g_action_muxer_new (parent_actions);
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 5bccdc7..c7c0cfe 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -179,6 +179,7 @@ void              _gtk_widget_invalidate_style_context     (GtkWidget    *widget
                                                             GtkCssChange  change);
 void              _gtk_widget_style_context_invalidated    (GtkWidget    *widget);
 
+void              _gtk_widget_update_parent_muxer          (GtkWidget    *widget);
 GActionMuxer *    _gtk_widget_get_action_muxer             (GtkWidget    *widget);
 
 G_END_DECLS



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