Cody Russell has proposed merging 
lp:~bratsche/appmenu-gtk/after-startup-additions into lp:appmenu-gtk.

Requested reviews:
  Canonical Desktop Experience Team (canonical-dx-team)
Related bugs:
  #646794 menu items added by gedit plugins not shown
  https://bugs.launchpad.net/bugs/646794

-- 
https://code.launchpad.net/~bratsche/appmenu-gtk/after-startup-additions/+merge/36817
Your team ayatana-commits is subscribed to branch lp:appmenu-gtk.
=== modified file 'src/bridge.c'
--- src/bridge.c	2010-09-23 18:49:58 +0000
+++ src/bridge.c	2010-09-28 03:11:00 +0000
@@ -109,6 +109,9 @@
 
 static GHashTable *rebuild_ids = NULL;
 
+
+static gboolean after_startup = FALSE;
+
 static void
 app_menu_bridge_setup_proxy (AppMenuBridge *bridge)
 {
@@ -1230,6 +1233,14 @@
     }
 }
 
+gboolean
+startup_timeout (gpointer data)
+{
+  after_startup = TRUE;
+
+  return FALSE;
+}
+
 static void
 app_menu_bridge_insert (UbuntuMenuProxy *proxy,
                         GtkWidget       *parent,
@@ -1241,6 +1252,8 @@
   GtkWidget            *toplevel = NULL;
   gboolean              append = FALSE;
 
+  g_timeout_add (500, (GSourceFunc)startup_timeout, NULL);
+
   if (GTK_IS_TEAROFF_MENU_ITEM (child))
     return;
 
@@ -1260,10 +1273,30 @@
     }
   else if (GTK_IS_MENU (parent))
     {
-      GtkWidget *attach;
+      GtkWidget *attach = NULL;
+      GList *tmp = NULL;
+      AppWindowContext *context = NULL;
 
       g_object_get (parent, "attach-widget", &attach, NULL);
 
+      /* First attempt to setup the menuitem immediately if possible. */
+      for (tmp = bridge->priv->windows; tmp != NULL; tmp = tmp->next)
+        {
+          context = (AppWindowContext *)tmp->data;
+
+          DbusmenuMenuitem *mi = (DbusmenuMenuitem *)g_hash_table_lookup (context->lookup, attach);
+
+          if (mi != NULL)
+            {
+              DbusmenuMenuitem *child_dmi = construct_dbusmenu_for_widget (child, FALSE);
+
+              dbusmenu_menuitem_child_add_position (mi,
+                                                    child_dmi,
+                                                    position);
+              return;
+            }
+        }
+
       if (attach == NULL)
         {
           g_signal_connect (G_OBJECT (parent),
@@ -1274,8 +1307,6 @@
         }
       else
         {
-          toplevel = gtk_widget_get_toplevel (attach);
-
           rebuild (bridge, toplevel);
         }
     }

_______________________________________________
Mailing list: https://launchpad.net/~ayatana-commits
Post to     : ayatana-commits@lists.launchpad.net
Unsubscribe : https://launchpad.net/~ayatana-commits
More help   : https://help.launchpad.net/ListHelp

Reply via email to