]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkuimanager.c
Do without GtkSelectionWindow
[~andy/gtk] / gtk / gtkuimanager.c
index 82c638c4e2bbbd36d7809e017af08c5f269b333a..75189aac3ecc695ec664994f695a554f1f5c795c 100644 (file)
@@ -14,9 +14,7 @@
  * Library General Public License for more details.
  *
  * You should have received a copy of the GNU Library General Public
- * License along with the Gnome Library; see the file COPYING.LIB.  If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 /*
 #include "gtkwindow.h"
 #include "gtkprivate.h"
 
+#undef GDK_DEPRECATED
+#undef GDK_DEPRECATED_FOR
+#define GDK_DEPRECATED
+#define GDK_DEPRECATED_FOR(f)
+
 #include "gtkuimanager.h"
 #include "deprecated/gtktearoffmenuitem.h"
 
  *
  * <example>
  * <title>A UI definition</title>
- * <programlisting>
+ * <programlisting><![CDATA[
  * <ui>
  *   <menubar>
  *     <menu name="FileMenu" action="FileMenuAction">
  *     </placeholder>
  *   </toolbar>
  * </ui>
- * </programlisting>
+ * ]]></programlisting>
  * </example>
  *
  * The constructed widget hierarchy is very similar to the element tree
@@ -711,7 +714,6 @@ gtk_ui_manager_buildable_add_child (GtkBuildable  *buildable,
 
   pos = g_list_length (manager->private_data->action_groups);
 
-  g_object_ref (child);
   gtk_ui_manager_insert_action_group (manager,
                                      GTK_ACTION_GROUP (child),
                                      pos);
@@ -966,6 +968,10 @@ cb_proxy_post_activate (GtkActionGroup *group,
  * with @manager. Actions in earlier groups hide actions with the same 
  * name in later groups. 
  *
+ * If @pos is larger than the number of action groups in @manager, or
+ * negative, @action_group will be inserted at the end of the internal
+ * list.
+ *
  * Since: 2.4
  **/
 void
@@ -1389,17 +1395,16 @@ static gboolean
 free_node (GNode *node)
 {
   Node *info = NODE_INFO (node);
-  
+
   g_list_free_full (info->uifiles, node_ui_reference_free);
+  info->uifiles = NULL;
 
-  if (info->action)
-    g_object_unref (info->action);
-  if (info->proxy)
-    g_object_unref (info->proxy);
-  if (info->extra)
-    g_object_unref (info->extra);
-  g_free (info->name);
+  g_clear_object (&info->action);
+  g_clear_object (&info->proxy);
+  g_clear_object (&info->extra);
+  g_clear_pointer (&info->name, g_free);
   g_slice_free (Node, info);
+  node->data = NULL;
 
   return FALSE;
 }
@@ -2001,6 +2006,41 @@ gtk_ui_manager_add_ui_from_file (GtkUIManager *manager,
   return res;
 }
 
+/**
+ * gtk_ui_manager_add_ui_from_resource:
+ * @manager: a #GtkUIManager object
+ * @resource_path: the resource path of the file to parse
+ * @error: return location for an error
+ *
+ * Parses a resource file containing a <link linkend="XML-UI">UI definition</link> and
+ * merges it with the current contents of @manager.
+ *
+ * Return value: The merge id for the merged UI. The merge id can be used
+ *   to unmerge the UI with gtk_ui_manager_remove_ui(). If an error occurred,
+ *   the return value is 0.
+ *
+ * Since: 3.4
+ **/
+guint
+gtk_ui_manager_add_ui_from_resource (GtkUIManager *manager,
+                                    const gchar  *resource_path,
+                                    GError      **error)
+{
+  GBytes *data;
+  guint res;
+
+  g_return_val_if_fail (GTK_IS_UI_MANAGER (manager), 0);
+
+  data = g_resources_lookup_data (resource_path, 0, error);
+  if (data == NULL)
+    return 0;
+
+  res = add_ui_from_string (manager, g_bytes_get_data (data, NULL), g_bytes_get_size (data), FALSE, error);
+  g_bytes_unref (data);
+
+  return res;
+}
+
 /**
  * gtk_ui_manager_add_ui:
  * @manager: a #GtkUIManager
@@ -2375,50 +2415,6 @@ find_toolbar_position (GNode      *node,
   return TRUE;
 }
 
-/**
- * _gtk_menu_is_empty:
- * @menu: (allow-none): a #GtkMenu or %NULL
- * 
- * Determines whether @menu is empty. A menu is considered empty if it
- * the only visible children are tearoff menu items or "filler" menu 
- * items which were inserted to mark the menu as empty.
- * 
- * This function is used by #GtkAction.
- *
- * Return value: whether @menu is empty.
- **/
-gboolean
-_gtk_menu_is_empty (GtkWidget *menu)
-{
-  GList *children, *cur;
-  gboolean result = TRUE;
-
-  g_return_val_if_fail (menu == NULL || GTK_IS_MENU (menu), TRUE);
-
-  if (!menu)
-    return FALSE;
-
-  children = gtk_container_get_children (GTK_CONTAINER (menu));
-
-  cur = children;
-  while (cur) 
-    {
-      if (gtk_widget_get_visible (cur->data))
-       {
-         if (!GTK_IS_TEAROFF_MENU_ITEM (cur->data) &&
-             !g_object_get_data (cur->data, "gtk-empty-menu-item"))
-            {
-             result = FALSE;
-              break;
-            }
-       }
-      cur = cur->next;
-    }
-  g_list_free (children);
-
-  return result;
-}
-
 enum {
   SEPARATOR_MODE_SMART,
   SEPARATOR_MODE_VISIBLE,