[gtk+/wip/otte/gtk4: 12/127] API: menu: Remove tearoff support



commit 2efcd6abe54418c80824b08f51b9ada887968684
Author: Benjamin Otte <otte redhat com>
Date:   Mon Sep 5 03:09:20 2016 +0200

    API: menu: Remove tearoff support

 gtk/deprecated/Makefile.inc         |    2 -
 gtk/deprecated/gtkaction.c          |    1 -
 gtk/deprecated/gtktearoffmenuitem.c |  328 ----------------
 gtk/deprecated/gtktearoffmenuitem.h |   81 ----
 gtk/deprecated/gtkuimanager.c       |  175 +---------
 gtk/deprecated/gtkuimanager.h       |    5 -
 gtk/gtk.h                           |    1 -
 gtk/gtkcombobox.c                   |  202 +----------
 gtk/gtkcombobox.h                   |   12 -
 gtk/gtkmenu.c                       |  706 ++---------------------------------
 gtk/gtkmenu.h                       |   15 -
 gtk/gtkmenuitem.c                   |   20 +-
 gtk/gtkmenuprivate.h                |   12 -
 gtk/gtkmenushell.c                  |   21 +-
 gtk/gtktreemenu.c                   |  102 +-----
 gtk/gtktreemenu.h                   |    3 -
 tests/testmerge.c                   |   15 -
 17 files changed, 33 insertions(+), 1668 deletions(-)
---
diff --git a/gtk/deprecated/Makefile.inc b/gtk/deprecated/Makefile.inc
index d2afb95..1eb292a 100644
--- a/gtk/deprecated/Makefile.inc
+++ b/gtk/deprecated/Makefile.inc
@@ -28,7 +28,6 @@ deprecated_h_sources =                        \
        deprecated/gtkstyleproperties.h \
        deprecated/gtksymboliccolor.h   \
        deprecated/gtktable.h           \
-       deprecated/gtktearoffmenuitem.h \
        deprecated/gtkthemingengine.h   \
        deprecated/gtktoggleaction.h    \
        deprecated/gtkuimanager.h       \
@@ -76,7 +75,6 @@ deprecated_c_sources =                        \
        deprecated/gtkstyleproperties.c \
        deprecated/gtksymboliccolor.c   \
        deprecated/gtktable.c           \
-       deprecated/gtktearoffmenuitem.c \
        deprecated/gtkthemingengine.c   \
        deprecated/gtktoggleaction.c    \
        deprecated/gtkuimanager.c       \
diff --git a/gtk/deprecated/gtkaction.c b/gtk/deprecated/gtkaction.c
index e857ab4..caedff4 100644
--- a/gtk/deprecated/gtkaction.c
+++ b/gtk/deprecated/gtkaction.c
@@ -97,7 +97,6 @@
 #include "gtkmarshalers.h"
 #include "gtkmenuitem.h"
 #include "gtkstock.h"
-#include "gtktearoffmenuitem.h"
 #include "gtktoolbutton.h"
 #include "gtktoolbar.h"
 #include "gtkprivate.h"
diff --git a/gtk/deprecated/gtkuimanager.c b/gtk/deprecated/gtkuimanager.c
index a0b4129..86af421 100644
--- a/gtk/deprecated/gtkuimanager.c
+++ b/gtk/deprecated/gtkuimanager.c
@@ -48,7 +48,6 @@
 #include "gtkprivate.h"
 
 #include "gtkuimanager.h"
-#include "gtktearoffmenuitem.h"
 
 /**
  * SECTION:gtkuimanager
@@ -325,8 +324,6 @@ struct _GtkUIManagerPrivate
   guint last_merge_id;
 
   guint update_tag;  
-
-  gboolean add_tearoffs;
 };
 
 #define NODE_INFO(node) ((Node *)node->data)
@@ -394,8 +391,6 @@ static void     gtk_ui_manager_buildable_custom_tag_end (GtkBuildable        *buildab
                                                         GObject         *child,
                                                         const gchar     *tagname,
                                                         gpointer        *data);
-static void gtk_ui_manager_do_set_add_tearoffs          (GtkUIManager *manager,
-                                                         gboolean      add_tearoffs);
 
 
 
@@ -413,7 +408,6 @@ enum
 enum
 {
   PROP_0,
-  PROP_ADD_TEAROFFS,
   PROP_UI
 };
 
@@ -437,28 +431,6 @@ gtk_ui_manager_class_init (GtkUIManagerClass *klass)
   klass->get_widget = gtk_ui_manager_real_get_widget;
   klass->get_action = gtk_ui_manager_real_get_action;
 
-  /**
-   * GtkUIManager:add-tearoffs:
-   *
-   * The "add-tearoffs" property controls whether generated menus 
-   * have tearoff menu items. 
-   *
-   * Note that this only affects regular menus. Generated popup 
-   * menus never have tearoff menu items.   
-   *
-   * Since: 2.4
-   *
-   * Deprecated: 3.4: Tearoff menus are deprecated and should not
-   *     be used in newly written code.
-   */
-  g_object_class_install_property (gobject_class,
-                                   PROP_ADD_TEAROFFS,
-                                   g_param_spec_boolean ("add-tearoffs",
-                                                        P_("Add tearoffs to menus"),
-                                                        P_("Whether tearoff menu items should be added to 
menus"),
-                                                         FALSE,
-                                                        GTK_PARAM_READWRITE | G_PARAM_DEPRECATED));
-
   g_object_class_install_property (gobject_class,
                                   PROP_UI,
                                   g_param_spec_string ("ui",
@@ -635,7 +607,6 @@ gtk_ui_manager_init (GtkUIManager *manager)
   manager->private_data->action_groups = NULL;
 
   manager->private_data->last_merge_id = 0;
-  manager->private_data->add_tearoffs = FALSE;
 
   merge_id = gtk_ui_manager_new_merge_id (manager);
   node = get_child_node (manager, NULL, NULL, "ui", 2,
@@ -749,13 +720,8 @@ gtk_ui_manager_set_property (GObject         *object,
                             const GValue    *value,
                             GParamSpec      *pspec)
 {
-  GtkUIManager *manager = GTK_UI_MANAGER (object);
- 
   switch (prop_id)
     {
-    case PROP_ADD_TEAROFFS:
-      gtk_ui_manager_do_set_add_tearoffs (manager, g_value_get_boolean (value));
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -772,9 +738,6 @@ gtk_ui_manager_get_property (GObject         *object,
 
   switch (prop_id)
     {
-    case PROP_ADD_TEAROFFS:
-      g_value_set_boolean (value, manager->private_data->add_tearoffs);
-      break;
     case PROP_UI:
       g_value_take_string (value, gtk_ui_manager_get_ui (manager));
       break;
@@ -838,71 +801,6 @@ gtk_ui_manager_new (void)
   return g_object_new (GTK_TYPE_UI_MANAGER, NULL);
 }
 
-
-/**
- * gtk_ui_manager_get_add_tearoffs:
- * @manager: a #GtkUIManager
- * 
- * Returns whether menus generated by this #GtkUIManager
- * will have tearoff menu items. 
- * 
- * Returns: whether tearoff menu items are added
- *
- * Since: 2.4
- *
- * Deprecated: 3.4: Tearoff menus are deprecated and should not
- *     be used in newly written code.
- **/
-gboolean 
-gtk_ui_manager_get_add_tearoffs (GtkUIManager *manager)
-{
-  g_return_val_if_fail (GTK_IS_UI_MANAGER (manager), FALSE);
-  
-  return manager->private_data->add_tearoffs;
-}
-
-
-/**
- * gtk_ui_manager_set_add_tearoffs:
- * @manager: a #GtkUIManager
- * @add_tearoffs: whether tearoff menu items are added
- * 
- * Sets the “add_tearoffs” property, which controls whether menus 
- * generated by this #GtkUIManager will have tearoff menu items. 
- *
- * Note that this only affects regular menus. Generated popup 
- * menus never have tearoff menu items.
- *
- * Since: 2.4
- *
- * Deprecated: 3.4: Tearoff menus are deprecated and should not
- *     be used in newly written code.
- **/
-void
-gtk_ui_manager_set_add_tearoffs (GtkUIManager *manager,
-                                 gboolean      add_tearoffs)
-{
-  g_return_if_fail (GTK_IS_UI_MANAGER (manager));
-
-  gtk_ui_manager_do_set_add_tearoffs (manager, add_tearoffs);
-}
-
-static void
-gtk_ui_manager_do_set_add_tearoffs (GtkUIManager *manager,
-                                    gboolean      add_tearoffs)
-{
-  add_tearoffs = add_tearoffs != FALSE;
-
-  if (add_tearoffs != manager->private_data->add_tearoffs)
-    {
-      manager->private_data->add_tearoffs = add_tearoffs;
-
-      dirty_all_nodes (manager);
-
-      g_object_notify (G_OBJECT (manager), "add-tearoffs");
-    }
-}
-
 static void
 cb_proxy_connect_proxy (GtkActionGroup *group, 
                         GtkAction      *action,
@@ -2289,7 +2187,6 @@ find_menu_position (GNode      *node,
   if (node->prev == NULL)
     {
       GNode *parent;
-      GList *siblings;
 
       parent = node->parent;
       switch (NODE_INFO (parent)->type)
@@ -2303,18 +2200,6 @@ find_menu_position (GNode      *node,
          menushell = NODE_INFO (parent)->proxy;
          if (GTK_IS_MENU_ITEM (menushell))
            menushell = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menushell));
-         siblings = gtk_container_get_children (GTK_CONTAINER (menushell));
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-         if (siblings != NULL && GTK_IS_TEAROFF_MENU_ITEM (siblings->data))
-           pos = 1;
-         else
-           pos = 0;
-
-G_GNUC_END_IGNORE_DEPRECATIONS
-
-         g_list_free (siblings);
          break;
        case NODE_TYPE_MENU_PLACEHOLDER:
          menushell = gtk_widget_get_parent (NODE_INFO (parent)->proxy);
@@ -2495,9 +2380,7 @@ update_smart_separators (GtkWidget *proxy)
            {
              last = NULL;
 
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-             if (GTK_IS_TEAROFF_MENU_ITEM (cur->data) || cur->data == filler)
+             if (cur->data == filler)
                visible = FALSE;
              else
                {
@@ -2505,8 +2388,6 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
                  empty = FALSE;
                }
 
-G_GNUC_END_IGNORE_DEPRECATIONS
-
            }
 
          cur = cur->next;
@@ -2596,35 +2477,7 @@ update_node (GtkUIManager *manager,
    * we only have to update the tearoff menu items.
    */
   if (info->proxy != NULL && action == info->action)
-    {
-      if (info->type == NODE_TYPE_MENU)
-       {
-         GtkWidget *menu;
-         GList *siblings;
-
-         if (GTK_IS_MENU (info->proxy))
-           menu = info->proxy;
-         else
-           menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (info->proxy));
-         siblings = gtk_container_get_children (GTK_CONTAINER (menu));
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-         if (siblings != NULL && GTK_IS_TEAROFF_MENU_ITEM (siblings->data))
-           {
-             if (manager->private_data->add_tearoffs && !in_popup)
-               gtk_widget_show (GTK_WIDGET (siblings->data));
-             else
-               gtk_widget_hide (GTK_WIDGET (siblings->data));
-           }
-
-G_GNUC_END_IGNORE_DEPRECATIONS
-
-         g_list_free (siblings);
-       }
-
-      goto recurse_children;
-    }
+    goto recurse_children;
   
   switch (info->type)
     {
@@ -2650,7 +2503,6 @@ G_GNUC_END_IGNORE_DEPRECATIONS
       {
        GtkWidget *prev_submenu = NULL;
        GtkWidget *menu = NULL;
-       GList *siblings;
 
        /* remove the proxy if it is of the wrong type ... */
        if (info->proxy &&  
@@ -2688,18 +2540,11 @@ G_GNUC_END_IGNORE_DEPRECATIONS
 
             if (!menu)
               {
-                GtkWidget *tearoff;
                 GtkWidget *filler;
 
                 menu = gtk_menu_new ();
                 gtk_widget_set_name (menu, info->name);
 
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-                tearoff = gtk_tearoff_menu_item_new ();
-G_GNUC_END_IGNORE_DEPRECATIONS
-
-                gtk_widget_set_no_show_all (tearoff, TRUE);
-                gtk_menu_shell_append (GTK_MENU_SHELL (menu), tearoff);
                 filler = gtk_menu_item_new_with_label (_("Empty"));
                 g_object_set_data (G_OBJECT (filler),
                                    I_("gtk-empty-menu-item"),
@@ -2748,22 +2593,6 @@ G_GNUC_END_IGNORE_DEPRECATIONS
          menu = info->proxy;
        else
          menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (info->proxy));
-
-       siblings = gtk_container_get_children (GTK_CONTAINER (menu));
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-       if (siblings != NULL && GTK_IS_TEAROFF_MENU_ITEM (siblings->data))
-         {
-           if (manager->private_data->add_tearoffs && !in_popup)
-             gtk_widget_show (GTK_WIDGET (siblings->data));
-           else
-             gtk_widget_hide (GTK_WIDGET (siblings->data));
-         }
-
-G_GNUC_END_IGNORE_DEPRECATIONS
-
-       g_list_free (siblings);
       }
       break;
     case NODE_TYPE_UNDECIDED:
diff --git a/gtk/deprecated/gtkuimanager.h b/gtk/deprecated/gtkuimanager.h
index 714d8ef..371d7cc 100644
--- a/gtk/deprecated/gtkuimanager.h
+++ b/gtk/deprecated/gtkuimanager.h
@@ -128,11 +128,6 @@ GDK_DEPRECATED_IN_3_10
 GType          gtk_ui_manager_get_type            (void) G_GNUC_CONST;
 GDK_DEPRECATED_IN_3_10
 GtkUIManager  *gtk_ui_manager_new                 (void);
-GDK_DEPRECATED_IN_3_4
-void           gtk_ui_manager_set_add_tearoffs    (GtkUIManager          *manager,
-                                                   gboolean               add_tearoffs);
-GDK_DEPRECATED_IN_3_4
-gboolean       gtk_ui_manager_get_add_tearoffs    (GtkUIManager          *manager);
 
 GDK_DEPRECATED_IN_3_10
 void           gtk_ui_manager_insert_action_group (GtkUIManager          *manager,
diff --git a/gtk/gtk.h b/gtk/gtk.h
index cdc4648..518b882 100644
--- a/gtk/gtk.h
+++ b/gtk/gtk.h
@@ -273,7 +273,6 @@
 #include <gtk/deprecated/gtkstyleproperties.h>
 #include <gtk/deprecated/gtksymboliccolor.h>
 #include <gtk/deprecated/gtktable.h>
-#include <gtk/deprecated/gtktearoffmenuitem.h>
 #include <gtk/deprecated/gtkthemingengine.h>
 #include <gtk/deprecated/gtktoggleaction.h>
 #include <gtk/deprecated/gtkuimanager.h>
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index 63d130f..c40dd6b 100644
--- a/gtk/gtkcombobox.c
+++ b/gtk/gtkcombobox.c
@@ -36,7 +36,6 @@
 #include "gtkmenuprivate.h"
 #include "gtkmenushellprivate.h"
 #include "gtkscrolledwindow.h"
-#include "deprecated/gtktearoffmenuitem.h"
 #include "gtktogglebutton.h"
 #include "gtktreeselection.h"
 #include "gtkwidgetpath.h"
@@ -170,7 +169,6 @@ struct _GtkComboBoxPrivate
 
   guint popup_in_progress : 1;
   guint popup_shown : 1;
-  guint add_tearoffs : 1;
   guint has_frame : 1;
   guint is_cell_renderer : 1;
   guint editing_canceled : 1;
@@ -184,8 +182,6 @@ struct _GtkComboBoxPrivate
   GDestroyNotify              row_separator_destroy;
 
   GdkDevice *grab_pointer;
-
-  gchar *tearoff_title;
 };
 
 /* While debugging this evil code, I have learned that
@@ -250,8 +246,6 @@ enum {
   PROP_ROW_SPAN_COLUMN,
   PROP_COLUMN_SPAN_COLUMN,
   PROP_ACTIVE,
-  PROP_ADD_TEAROFFS,
-  PROP_TEAROFF_TITLE,
   PROP_HAS_FRAME,
   PROP_POPUP_SHOWN,
   PROP_BUTTON_SENSITIVITY,
@@ -385,7 +379,6 @@ static void     gtk_combo_box_list_popup_resize    (GtkComboBox      *combo_box)
 
 /* menu */
 static void     gtk_combo_box_menu_setup           (GtkComboBox      *combo_box);
-static void     gtk_combo_box_update_title         (GtkComboBox      *combo_box);
 static void     gtk_combo_box_menu_destroy         (GtkComboBox      *combo_box);
 
 
@@ -997,26 +990,6 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
                                                      GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
 
   /**
-   * GtkComboBox:add-tearoffs:
-   *
-   * The add-tearoffs property controls whether generated menus
-   * have tearoff menu items.
-   *
-   * Note that this only affects menu style combo boxes.
-   *
-   * Since: 2.6
-   *
-   * Deprecated: 3.10
-   */
-  g_object_class_install_property (object_class,
-                                   PROP_ADD_TEAROFFS,
-                                   g_param_spec_boolean ("add-tearoffs",
-                                                         P_("Add tearoffs to menus"),
-                                                         P_("Whether dropdowns should have a tearoff menu 
item"),
-                                                         FALSE,
-                                                         
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED));
-
-  /**
    * GtkComboBox:has-frame:
    *
    * The has-frame property controls whether a frame
@@ -1033,25 +1006,6 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
                                                          GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
 
   /**
-   * GtkComboBox:tearoff-title:
-   *
-   * A title that may be displayed by the window manager
-   * when the popup is torn-off.
-   *
-   * Since: 2.10
-   *
-   * Deprecated: 3.10
-   */
-  g_object_class_install_property (object_class,
-                                   PROP_TEAROFF_TITLE,
-                                   g_param_spec_string ("tearoff-title",
-                                                        P_("Tearoff Title"),
-                                                        P_("A title that may be displayed by the window 
manager when the popup is torn-off"),
-                                                        NULL,
-                                                        
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY|G_PARAM_DEPRECATED));
-
-
-  /**
    * GtkComboBox:popup-shown:
    *
    * Whether the combo boxes dropdown is popped up.
@@ -1303,7 +1257,6 @@ gtk_combo_box_init (GtkComboBox *combo_box)
   priv->row_column = -1;
 
   priv->popup_shown = FALSE;
-  priv->add_tearoffs = FALSE;
   priv->has_frame = TRUE;
   priv->is_cell_renderer = FALSE;
   priv->editing_canceled = FALSE;
@@ -1366,12 +1319,6 @@ gtk_combo_box_set_property (GObject      *object,
       gtk_combo_box_set_active (combo_box, g_value_get_int (value));
       break;
 
-    case PROP_ADD_TEAROFFS:
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      gtk_combo_box_set_add_tearoffs (combo_box, g_value_get_boolean (value));
-G_GNUC_END_IGNORE_DEPRECATIONS;
-      break;
-
     case PROP_HAS_FRAME:
       if (priv->has_frame != g_value_get_boolean (value))
         {
@@ -1383,12 +1330,6 @@ G_GNUC_END_IGNORE_DEPRECATIONS;
         }
       break;
 
-    case PROP_TEAROFF_TITLE:
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      gtk_combo_box_set_title (combo_box, g_value_get_string (value));
-G_GNUC_END_IGNORE_DEPRECATIONS;
-      break;
-
     case PROP_POPUP_SHOWN:
       if (g_value_get_boolean (value))
         gtk_combo_box_popup (combo_box);
@@ -1483,22 +1424,10 @@ gtk_combo_box_get_property (GObject    *object,
         g_value_set_int (value, gtk_combo_box_get_active (combo_box));
         break;
 
-      case PROP_ADD_TEAROFFS:
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-        g_value_set_boolean (value, gtk_combo_box_get_add_tearoffs (combo_box));
-G_GNUC_END_IGNORE_DEPRECATIONS;
-        break;
-
       case PROP_HAS_FRAME:
         g_value_set_boolean (value, priv->has_frame);
         break;
 
-      case PROP_TEAROFF_TITLE:
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-        g_value_set_string (value, gtk_combo_box_get_title (combo_box));
-G_GNUC_END_IGNORE_DEPRECATIONS;
-        break;
-
       case PROP_POPUP_SHOWN:
         g_value_set_boolean (value, priv->popup_shown);
         break;
@@ -2126,9 +2055,6 @@ gtk_combo_box_menu_popup (GtkComboBox    *combo_box,
       path = gtk_tree_row_reference_get_path (priv->active_row);
       active_item = gtk_tree_path_get_indices (path)[0];
       gtk_tree_path_free (path);
-
-      if (priv->add_tearoffs)
-        active_item++;
     }
 
   /* FIXME handle nested menus better */
@@ -2756,7 +2682,6 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box)
   _gtk_tree_menu_set_wrap_width (GTK_TREE_MENU (menu), priv->wrap_width);
   _gtk_tree_menu_set_row_span_column (GTK_TREE_MENU (menu), priv->row_column);
   _gtk_tree_menu_set_column_span_column (GTK_TREE_MENU (menu), priv->col_column);
-  _gtk_tree_menu_set_tearoff (GTK_TREE_MENU (menu), priv->add_tearoffs);
 
   g_signal_connect (menu, "menu-activate",
                     G_CALLBACK (gtk_combo_box_menu_activate), combo_box);
@@ -2770,7 +2695,7 @@ gtk_combo_box_menu_setup (GtkComboBox *combo_box)
                     G_CALLBACK (gtk_combo_box_menu_key_press), combo_box);
   gtk_combo_box_set_popup_widget (combo_box, menu);
 
-  gtk_combo_box_update_title (combo_box);
+  gtk_combo_box_check_appearance (combo_box);
 }
 
 static void
@@ -4338,7 +4263,6 @@ gtk_combo_box_finalize (GObject *object)
 {
   GtkComboBox *combo_box = GTK_COMBO_BOX (object);
 
-  g_free (combo_box->priv->tearoff_title);
   g_clear_object (&combo_box->priv->gadget);
 
   G_OBJECT_CLASS (gtk_combo_box_parent_class)->finalize (object);
@@ -4472,130 +4396,6 @@ gtk_combo_box_start_editing (GtkCellEditable *cell_editable,
     }
 }
 
-
-/**
- * gtk_combo_box_get_add_tearoffs:
- * @combo_box: a #GtkComboBox
- *
- * Gets the current value of the :add-tearoffs property.
- *
- * Returns: the current value of the :add-tearoffs property.
- *
- * Deprecated: 3.10
- */
-gboolean
-gtk_combo_box_get_add_tearoffs (GtkComboBox *combo_box)
-{
-  g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), FALSE);
-
-  return combo_box->priv->add_tearoffs;
-}
-
-/**
- * gtk_combo_box_set_add_tearoffs:
- * @combo_box: a #GtkComboBox
- * @add_tearoffs: %TRUE to add tearoff menu items
- *
- * Sets whether the popup menu should have a tearoff
- * menu item.
- *
- * Since: 2.6
- *
- * Deprecated: 3.10
- */
-void
-gtk_combo_box_set_add_tearoffs (GtkComboBox *combo_box,
-                                gboolean     add_tearoffs)
-{
-  GtkComboBoxPrivate *priv;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-
-  priv = combo_box->priv;
-  add_tearoffs = add_tearoffs != FALSE;
-
-  if (priv->add_tearoffs != add_tearoffs)
-    {
-      priv->add_tearoffs = add_tearoffs;
-      gtk_combo_box_check_appearance (combo_box);
-
-      if (GTK_IS_TREE_MENU (priv->popup_widget))
-        _gtk_tree_menu_set_tearoff (GTK_TREE_MENU (priv->popup_widget),
-                                    priv->add_tearoffs);
-
-      g_object_notify (G_OBJECT (combo_box), "add-tearoffs");
-    }
-}
-
-/**
- * gtk_combo_box_get_title:
- * @combo_box: a #GtkComboBox
- *
- * Gets the current title of the menu in tearoff mode. See
- * gtk_combo_box_set_add_tearoffs().
- *
- * Returns: the menu’s title in tearoff mode. This is an internal copy of the
- * string which must not be freed.
- *
- * Since: 2.10
- *
- * Deprecated: 3.10
- */
-const gchar*
-gtk_combo_box_get_title (GtkComboBox *combo_box)
-{
-  g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), NULL);
-
-  return combo_box->priv->tearoff_title;
-}
-
-static void
-gtk_combo_box_update_title (GtkComboBox *combo_box)
-{
-  GtkComboBoxPrivate *priv = combo_box->priv;
-
-  gtk_combo_box_check_appearance (combo_box);
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-  if (priv->popup_widget && GTK_IS_MENU (priv->popup_widget))
-    gtk_menu_set_title (GTK_MENU (priv->popup_widget), priv->tearoff_title);
-G_GNUC_END_IGNORE_DEPRECATIONS
-}
-
-/**
- * gtk_combo_box_set_title:
- * @combo_box: a #GtkComboBox
- * @title: a title for the menu in tearoff mode
- *
- * Sets the menu’s title in tearoff mode.
- *
- * Since: 2.10
- *
- * Deprecated: 3.10
- */
-void
-gtk_combo_box_set_title (GtkComboBox *combo_box,
-                         const gchar *title)
-{
-  GtkComboBoxPrivate *priv;
-
-  g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
-
-  priv = combo_box->priv;
-
-  if (strcmp (title ? title : "",
-              priv->tearoff_title ? priv->tearoff_title : "") != 0)
-    {
-      g_free (priv->tearoff_title);
-      priv->tearoff_title = g_strdup (title);
-
-      gtk_combo_box_update_title (combo_box);
-
-      g_object_notify (G_OBJECT (combo_box), "tearoff-title");
-    }
-}
-
-
 /**
  * gtk_combo_box_set_popup_fixed_width:
  * @combo_box: a #GtkComboBox
diff --git a/gtk/gtkcombobox.h b/gtk/gtkcombobox.h
index 6ba9b57..d7c859c 100644
--- a/gtk/gtkcombobox.h
+++ b/gtk/gtkcombobox.h
@@ -107,18 +107,6 @@ GDK_AVAILABLE_IN_ALL
 void          gtk_combo_box_set_column_span_column (GtkComboBox *combo_box,
                                                     gint         column_span);
 
-GDK_DEPRECATED_IN_3_10
-gboolean      gtk_combo_box_get_add_tearoffs       (GtkComboBox *combo_box);
-GDK_DEPRECATED_IN_3_10
-void          gtk_combo_box_set_add_tearoffs       (GtkComboBox *combo_box,
-                                                    gboolean     add_tearoffs);
-
-GDK_DEPRECATED_IN_3_10
-const gchar * gtk_combo_box_get_title              (GtkComboBox *combo_box);
-GDK_DEPRECATED_IN_3_10
-void          gtk_combo_box_set_title              (GtkComboBox *combo_box,
-                                                    const gchar *title);
-
 GDK_DEPRECATED_IN_3_20_FOR(gtk_widget_get_focus_on_click)
 gboolean      gtk_combo_box_get_focus_on_click     (GtkComboBox *combo);
 GDK_DEPRECATED_IN_3_20_FOR(gtk_widget_set_focus_on_click)
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index 8636bab..3e10e76 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -133,9 +133,6 @@
 #include "gtkstylecontextprivate.h"
 #include "gtkcssstylepropertyprivate.h"
 
-#include "deprecated/gtktearoffmenuitem.h"
-
-
 #include "a11y/gtkmenuaccessible.h"
 #include "gdk/gdk-private.h"
 
@@ -272,15 +269,11 @@ static void     gtk_menu_select_item       (GtkMenuShell     *menu_shell,
 static void     gtk_menu_real_insert       (GtkMenuShell     *menu_shell,
                                             GtkWidget        *child,
                                             gint              position);
-static void     gtk_menu_scrollbar_changed (GtkAdjustment    *adjustment,
-                                            GtkMenu          *menu);
 static void     gtk_menu_handle_scrolling  (GtkMenu          *menu,
                                             gint              event_x,
                                             gint              event_y,
                                             gboolean          enter,
                                             gboolean          motion);
-static void     gtk_menu_set_tearoff_hints (GtkMenu          *menu,
-                                            gint             width);
 static gboolean gtk_menu_focus             (GtkWidget        *widget,
                                             GtkDirectionType direction);
 static gint     gtk_menu_get_popup_delay   (GtkMenuShell     *menu_shell);
@@ -302,14 +295,9 @@ static void gtk_menu_deactivate     (GtkMenuShell      *menu_shell);
 static void gtk_menu_show_all       (GtkWidget         *widget);
 static void gtk_menu_position       (GtkMenu           *menu,
                                      gboolean           set_scroll_offset);
-static void gtk_menu_reparent       (GtkMenu           *menu,
-                                     GtkWidget         *new_parent,
-                                     gboolean           unrealize);
 static void gtk_menu_remove         (GtkContainer      *menu,
                                      GtkWidget         *widget);
 
-static void gtk_menu_update_title   (GtkMenu           *menu);
-
 static void       menu_grab_transfer_window_destroy (GtkMenu *menu);
 static GdkWindow *menu_grab_transfer_window_get     (GtkMenu *menu);
 
@@ -682,39 +670,6 @@ gtk_menu_class_init (GtkMenuClass *class)
                                                         GTK_PARAM_READWRITE));
 
   /**
-   * GtkMenu:tearoff-title:
-   *
-   * A title that may be displayed by the window manager when this
-   * menu is torn-off.
-   *
-   * Deprecated: 3.10
-   **/
-  g_object_class_install_property (gobject_class,
-                                   PROP_TEAROFF_TITLE,
-                                   g_param_spec_string ("tearoff-title",
-                                                        P_("Tearoff Title"),
-                                                        P_("A title that may be displayed by the window 
manager when this menu is torn-off"),
-                                                        NULL,
-                                                        GTK_PARAM_READWRITE | G_PARAM_DEPRECATED));
-
-  /**
-   * GtkMenu:tearoff-state:
-   *
-   * A boolean that indicates whether the menu is torn-off.
-   *
-   * Since: 2.6
-   *
-   * Deprecated: 3.10
-   **/
-  g_object_class_install_property (gobject_class,
-                                   PROP_TEAROFF_STATE,
-                                   g_param_spec_boolean ("tearoff-state",
-                                                         P_("Tearoff State"),
-                                                         P_("A boolean that indicates whether the menu is 
torn-off"),
-                                                         FALSE,
-                                                         GTK_PARAM_READWRITE | G_PARAM_DEPRECATED));
-
-  /**
    * GtkMenu:monitor:
    *
    * The monitor the menu will be popped up on.
@@ -1123,16 +1078,6 @@ gtk_menu_set_property (GObject      *object,
           gtk_menu_attach_to_widget (menu, widget, NULL);
       }
       break;
-    case PROP_TEAROFF_STATE:
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      gtk_menu_set_tearoff_state (menu, g_value_get_boolean (value));
-G_GNUC_END_IGNORE_DEPRECATIONS;
-      break;
-    case PROP_TEAROFF_TITLE:
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      gtk_menu_set_title (menu, g_value_get_string (value));
-G_GNUC_END_IGNORE_DEPRECATIONS;
-      break;
     case PROP_MONITOR:
       gtk_menu_set_monitor (menu, g_value_get_int (value));
       break;
@@ -1195,16 +1140,6 @@ gtk_menu_get_property (GObject     *object,
     case PROP_ATTACH_WIDGET:
       g_value_set_object (value, gtk_menu_get_attach_widget (menu));
       break;
-    case PROP_TEAROFF_STATE:
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      g_value_set_boolean (value, gtk_menu_get_tearoff_state (menu));
-G_GNUC_END_IGNORE_DEPRECATIONS;
-      break;
-    case PROP_TEAROFF_TITLE:
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      g_value_set_string (value, gtk_menu_get_title (menu));
-G_GNUC_END_IGNORE_DEPRECATIONS;
-      break;
     case PROP_MONITOR:
       g_value_set_int (value, gtk_menu_get_monitor (menu));
       break;
@@ -1436,13 +1371,8 @@ gtk_menu_destroy (GtkWidget *widget)
       gtk_widget_destroy (priv->toplevel);
     }
 
-  if (priv->tearoff_window)
-    gtk_widget_destroy (priv->tearoff_window);
-
   g_clear_pointer (&priv->heights, g_free);
 
-  g_clear_pointer (&priv->title, g_free);
-
   if (priv->position_func_data_destroy)
     {
       priv->position_func_data_destroy (priv->position_func_data);
@@ -1477,12 +1407,6 @@ menu_change_screen (GtkMenu   *menu,
         return;
     }
 
-  if (priv->torn_off)
-    {
-      gtk_window_set_screen (GTK_WINDOW (priv->tearoff_window), new_screen);
-      gtk_menu_position (menu, TRUE);
-    }
-
   gtk_window_set_screen (GTK_WINDOW (priv->toplevel), new_screen);
   priv->monitor_num = -1;
 }
@@ -1570,9 +1494,6 @@ gtk_menu_attach_to_widget (GtkMenu           *menu,
 
   _gtk_widget_update_parent_muxer (GTK_WIDGET (menu));
 
-  /* Fallback title for menu comes from attach widget */
-  gtk_menu_update_title (menu);
-
   g_object_notify (G_OBJECT (menu), "attach-widget");
 }
 
@@ -1652,9 +1573,6 @@ gtk_menu_detach (GtkMenu *menu)
 
   _gtk_widget_update_parent_muxer (GTK_WIDGET (menu));
 
-  /* Fallback title for menu comes from attach widget */
-  gtk_menu_update_title (menu);
-
   g_object_notify (G_OBJECT (menu), "attach-widget");
   g_object_unref (menu);
 }
@@ -1718,46 +1636,6 @@ gtk_menu_real_insert (GtkMenuShell *menu_shell,
   menu_queue_resize (menu);
 }
 
-static void
-gtk_menu_tearoff_bg_copy (GtkMenu *menu)
-{
-  GtkMenuPrivate *priv = menu->priv;
-  gint width, height;
-
-  if (priv->torn_off)
-    {
-      GdkWindow *window;
-      cairo_surface_t *surface;
-      cairo_pattern_t *pattern;
-      cairo_t *cr;
-
-      priv->tearoff_active = FALSE;
-      priv->saved_scroll_offset = priv->scroll_offset;
-
-      window = gtk_widget_get_window (priv->tearoff_window);
-      width = gdk_window_get_width (window);
-      height = gdk_window_get_height (window);
-
-      surface = gdk_window_create_similar_surface (window,
-                                                   CAIRO_CONTENT_COLOR,
-                                                   width,
-                                                   height);
-
-      cr = cairo_create (surface);
-      gdk_cairo_set_source_window (cr, window, 0, 0);
-      cairo_paint (cr);
-      cairo_destroy (cr);
-
-      gtk_widget_set_size_request (priv->tearoff_window, width, height);
-
-      pattern = cairo_pattern_create_for_surface (surface);
-      gdk_window_set_background_pattern (window, pattern);
-
-      cairo_pattern_destroy (pattern);
-      cairo_surface_destroy (surface);
-    }
-}
-
 static gboolean
 popup_grab_on_window (GdkWindow *window,
                       GdkDevice *pointer)
@@ -1936,13 +1814,6 @@ gtk_menu_popup_internal (GtkMenu             *menu,
   else
     menu_shell->priv->ignore_enter = TRUE;
 
-  if (priv->torn_off)
-    {
-      gtk_menu_tearoff_bg_copy (menu);
-
-      gtk_menu_reparent (menu, priv->toplevel, FALSE);
-    }
-
   parent_toplevel = NULL;
   if (parent_menu_shell)
     parent_toplevel = gtk_widget_get_toplevel (parent_menu_shell);
@@ -2475,7 +2346,6 @@ gtk_menu_popdown (GtkMenu *menu)
 {
   GtkMenuPrivate *priv;
   GtkMenuShell *menu_shell;
-  GdkDevice *pointer;
 
   g_return_if_fail (GTK_IS_MENU (menu));
 
@@ -2510,35 +2380,7 @@ gtk_menu_popdown (GtkMenu *menu)
       gtk_window_set_transient_for (GTK_WINDOW (priv->toplevel), NULL);
     }
 
-  pointer = _gtk_menu_shell_get_grab_device (menu_shell);
-
-  if (priv->torn_off)
-    {
-      gtk_widget_set_size_request (priv->tearoff_window, -1, -1);
-
-      if (gtk_bin_get_child (GTK_BIN (priv->toplevel)))
-        {
-          gtk_menu_reparent (menu, priv->tearoff_hbox, TRUE);
-        }
-      else
-        {
-          /* We popped up the menu from the tearoff, so we need to
-           * release the grab - we aren't actually hiding the menu.
-           */
-          if (menu_shell->priv->have_xgrab && pointer)
-            gdk_seat_ungrab (gdk_device_get_seat (pointer));
-        }
-
-      /* gtk_menu_popdown is called each time a menu item is selected from
-       * a torn off menu. Only scroll back to the saved position if the
-       * non-tearoff menu was popped down.
-       */
-      if (!priv->tearoff_active)
-        gtk_menu_scroll_to (menu, priv->saved_scroll_offset);
-      priv->tearoff_active = TRUE;
-    }
-  else
-    gtk_widget_hide (GTK_WIDGET (menu));
+  gtk_widget_hide (GTK_WIDGET (menu));
 
   menu_shell->priv->have_xgrab = FALSE;
 
@@ -2804,299 +2646,10 @@ gtk_menu_reposition (GtkMenu *menu)
 {
   g_return_if_fail (GTK_IS_MENU (menu));
 
-  if (!menu->priv->torn_off && gtk_widget_is_drawable (GTK_WIDGET (menu)))
+  if (gtk_widget_is_drawable (GTK_WIDGET (menu)))
     gtk_menu_position (menu, FALSE);
 }
 
-static void
-gtk_menu_scrollbar_changed (GtkAdjustment *adjustment,
-                            GtkMenu       *menu)
-{
-  double value;
-
-  value = gtk_adjustment_get_value (adjustment);
-  if (menu->priv->scroll_offset != value)
-    gtk_menu_scroll_to (menu, value);
-}
-
-static void
-gtk_menu_set_tearoff_hints (GtkMenu *menu,
-                            gint     width)
-{
-  GtkMenuPrivate *priv = menu->priv;
-  GdkGeometry geometry_hints;
-
-  if (!priv->tearoff_window)
-    return;
-
-  if (gtk_widget_get_visible (priv->tearoff_scrollbar))
-    {
-      GtkRequisition requisition;
-
-      gtk_widget_get_preferred_size (priv->tearoff_scrollbar,
-                                     &requisition, NULL);
-      width += requisition.width;
-    }
-
-  geometry_hints.min_width = width;
-  geometry_hints.max_width = width;
-
-  geometry_hints.min_height = 0;
-  geometry_hints.max_height = priv->requested_height;
-
-  gtk_window_set_geometry_hints (GTK_WINDOW (priv->tearoff_window),
-                                 NULL,
-                                 &geometry_hints,
-                                 GDK_HINT_MAX_SIZE|GDK_HINT_MIN_SIZE);
-}
-
-static void
-gtk_menu_update_title (GtkMenu *menu)
-{
-  GtkMenuPrivate *priv = menu->priv;
-
-  if (priv->tearoff_window)
-    {
-      const gchar *title;
-      GtkWidget *attach_widget;
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      title = gtk_menu_get_title (menu);
-G_GNUC_END_IGNORE_DEPRECATIONS;
-      if (!title)
-        {
-          attach_widget = gtk_menu_get_attach_widget (menu);
-          if (GTK_IS_MENU_ITEM (attach_widget))
-            {
-              GtkWidget *child = gtk_bin_get_child (GTK_BIN (attach_widget));
-              if (GTK_IS_LABEL (child))
-                title = gtk_label_get_text (GTK_LABEL (child));
-            }
-        }
-
-      if (title)
-        gtk_window_set_title (GTK_WINDOW (priv->tearoff_window), title);
-    }
-}
-
-static GtkWidget*
-gtk_menu_get_toplevel (GtkWidget *menu)
-{
-  GtkWidget *attach, *toplevel;
-
-  attach = gtk_menu_get_attach_widget (GTK_MENU (menu));
-
-  if (GTK_IS_MENU_ITEM (attach))
-    attach = gtk_widget_get_parent (attach);
-
-  if (GTK_IS_MENU (attach))
-    return gtk_menu_get_toplevel (attach);
-  else if (GTK_IS_WIDGET (attach))
-    {
-      toplevel = gtk_widget_get_toplevel (attach);
-      if (gtk_widget_is_toplevel (toplevel))
-        return toplevel;
-    }
-
-  return NULL;
-}
-
-static void
-tearoff_window_destroyed (GtkWidget *widget,
-                          GtkMenu   *menu)
-{
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-  gtk_menu_set_tearoff_state (menu, FALSE);
-G_GNUC_END_IGNORE_DEPRECATIONS;
-}
-
-/**
- * gtk_menu_set_tearoff_state:
- * @menu: a #GtkMenu
- * @torn_off: If %TRUE, menu is displayed as a tearoff menu.
- *
- * Changes the tearoff state of the menu.  A menu is normally
- * displayed as drop down menu which persists as long as the menu is
- * active.  It can also be displayed as a tearoff menu which persists
- * until it is closed or reattached.
- *
- * Deprecated: 3.10
- */
-void
-gtk_menu_set_tearoff_state (GtkMenu  *menu,
-                            gboolean  torn_off)
-{
-  GtkMenuPrivate *priv = menu->priv;
-  gint height;
-
-  g_return_if_fail (GTK_IS_MENU (menu));
-
-  if (priv->torn_off != torn_off)
-    {
-      priv->torn_off = torn_off;
-      priv->tearoff_active = torn_off;
-
-      if (priv->torn_off)
-        {
-          if (gtk_widget_get_visible (GTK_WIDGET (menu)))
-            gtk_menu_popdown (menu);
-
-          if (!priv->tearoff_window)
-            {
-              GtkWidget *toplevel;
-
-              priv->tearoff_window = g_object_new (GTK_TYPE_WINDOW,
-                                                   "type", GTK_WINDOW_TOPLEVEL,
-                                                   "screen", gtk_widget_get_screen (priv->toplevel),
-                                                   "app-paintable", TRUE,
-                                                   NULL);
-
-              gtk_window_set_type_hint (GTK_WINDOW (priv->tearoff_window),
-                                        GDK_WINDOW_TYPE_HINT_MENU);
-              gtk_window_set_mnemonic_modifier (GTK_WINDOW (priv->tearoff_window), 0);
-              g_signal_connect (priv->tearoff_window, "destroy",
-                                G_CALLBACK (tearoff_window_destroyed), menu);
-              g_signal_connect (priv->tearoff_window, "event",
-                                G_CALLBACK (gtk_menu_window_event), menu);
-
-              gtk_menu_update_title (menu);
-
-              gtk_widget_realize (priv->tearoff_window);
-
-              toplevel = gtk_menu_get_toplevel (GTK_WIDGET (menu));
-              if (toplevel != NULL)
-                gtk_window_set_transient_for (GTK_WINDOW (priv->tearoff_window),
-                                              GTK_WINDOW (toplevel));
-
-              priv->tearoff_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-              gtk_container_add (GTK_CONTAINER (priv->tearoff_window),
-                                 priv->tearoff_hbox);
-
-              height = gdk_window_get_height (gtk_widget_get_window (GTK_WIDGET (menu)));
-              priv->tearoff_adjustment = gtk_adjustment_new (0,
-                                                             0, priv->requested_height,
-                                                             MENU_SCROLL_STEP2,
-                                                             height/2,
-                                                             height);
-              g_object_connect (priv->tearoff_adjustment,
-                                "signal::value-changed", gtk_menu_scrollbar_changed, menu,
-                                NULL);
-              priv->tearoff_scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, 
priv->tearoff_adjustment);
-
-              gtk_box_pack_end (GTK_BOX (priv->tearoff_hbox),
-                                priv->tearoff_scrollbar,
-                                FALSE, FALSE, 0);
-
-              if (gtk_adjustment_get_upper (priv->tearoff_adjustment) > height)
-                gtk_widget_show (priv->tearoff_scrollbar);
-
-              gtk_widget_show (priv->tearoff_hbox);
-            }
-
-          gtk_menu_reparent (menu, priv->tearoff_hbox, FALSE);
-
-          /* Update menu->requisition */
-          gtk_widget_get_preferred_size (GTK_WIDGET (menu), NULL, NULL);
-
-          gtk_menu_set_tearoff_hints (menu, gdk_window_get_width (gtk_widget_get_window (GTK_WIDGET 
(menu))));
-
-          gtk_widget_realize (priv->tearoff_window);
-          gtk_menu_position (menu, TRUE);
-
-          gtk_widget_show (GTK_WIDGET (menu));
-          gtk_widget_show (priv->tearoff_window);
-
-          gtk_menu_scroll_to (menu, 0);
-
-        }
-      else
-        {
-          gtk_widget_hide (GTK_WIDGET (menu));
-          gtk_widget_hide (priv->tearoff_window);
-          if (GTK_IS_CONTAINER (priv->toplevel))
-            gtk_menu_reparent (menu, priv->toplevel, FALSE);
-          gtk_widget_destroy (priv->tearoff_window);
-
-          priv->tearoff_window = NULL;
-          priv->tearoff_hbox = NULL;
-          priv->tearoff_scrollbar = NULL;
-          priv->tearoff_adjustment = NULL;
-        }
-
-      g_object_notify (G_OBJECT (menu), "tearoff-state");
-    }
-}
-
-/**
- * gtk_menu_get_tearoff_state:
- * @menu: a #GtkMenu
- *
- * Returns whether the menu is torn off.
- * See gtk_menu_set_tearoff_state().
- *
- * Returns: %TRUE if the menu is currently torn off.
- *
- * Deprecated: 3.10
- */
-gboolean
-gtk_menu_get_tearoff_state (GtkMenu *menu)
-{
-  g_return_val_if_fail (GTK_IS_MENU (menu), FALSE);
-
-  return menu->priv->torn_off;
-}
-
-/**
- * gtk_menu_set_title:
- * @menu: a #GtkMenu
- * @title: a string containing the title for the menu
- *
- * Sets the title string for the menu.
- *
- * The title is displayed when the menu is shown as a tearoff
- * menu. If @title is %NULL, the menu will see if it is attached
- * to a parent menu item, and if so it will try to use the same
- * text as that menu item’s label.
- *
- * Deprecated: 3.10
- */
-void
-gtk_menu_set_title (GtkMenu     *menu,
-                    const gchar *title)
-{
-  GtkMenuPrivate *priv = menu->priv;
-  char *old_title;
-
-  g_return_if_fail (GTK_IS_MENU (menu));
-
-  old_title = priv->title;
-  priv->title = g_strdup (title);
-  g_free (old_title);
-
-  gtk_menu_update_title (menu);
-  g_object_notify (G_OBJECT (menu), "tearoff-title");
-}
-
-/**
- * gtk_menu_get_title:
- * @menu: a #GtkMenu
- *
- * Returns the title of the menu. See gtk_menu_set_title().
- *
- * Returns: the title of the menu, or %NULL if the menu
- *     has no title set on it. This string is owned by GTK+
- *     and should not be modified or freed.
- *
- * Deprecated: 3.10
- **/
-const gchar *
-gtk_menu_get_title (GtkMenu *menu)
-{
-  g_return_val_if_fail (GTK_IS_MENU (menu), NULL);
-
-  return menu->priv->title;
-}
-
 /**
  * gtk_menu_reorder_child:
  * @menu: a #GtkMenu
@@ -3471,13 +3024,6 @@ gtk_menu_size_allocate (GtkWidget     *widget,
                              &arrow_allocation, -1,
                              &clip);
 
-  if (!priv->tearoff_active)
-    {
-      y += arrow_border.top;
-      height -= arrow_border.top;
-      height -= arrow_border.bottom;
-    }
-
   width = MAX (1, width);
   height = MAX (1, height);
 
@@ -3547,36 +3093,6 @@ gtk_menu_size_allocate (GtkWidget     *widget,
           w = gtk_menu_get_n_columns (menu) * base_width;
           gdk_window_resize (priv->bin_window, w, h);
         }
-
-      if (priv->tearoff_active)
-        {
-          if (height >= priv->requested_height)
-            {
-              if (gtk_widget_get_visible (priv->tearoff_scrollbar))
-                {
-                  gtk_widget_hide (priv->tearoff_scrollbar);
-                  gtk_menu_set_tearoff_hints (menu, allocation->width);
-
-                  gtk_menu_scroll_to (menu, 0);
-                }
-            }
-          else
-            {
-              gtk_adjustment_configure (priv->tearoff_adjustment,
-                                        gtk_adjustment_get_value (priv->tearoff_adjustment),
-                                        0,
-                                        priv->requested_height,
-                                        gtk_adjustment_get_step_increment (priv->tearoff_adjustment),
-                                        gtk_adjustment_get_page_increment (priv->tearoff_adjustment),
-                                        allocation->height);
-
-              if (!gtk_widget_get_visible (priv->tearoff_scrollbar))
-                {
-                  gtk_widget_show (priv->tearoff_scrollbar);
-                  gtk_menu_set_tearoff_hints (menu, allocation->width);
-                }
-            }
-        }
     }
 }
 
@@ -3603,10 +3119,10 @@ gtk_menu_draw (GtkWidget *widget,
       gtk_render_frame (context, cr, 0, 0,
                         width, height);
 
-      if (priv->upper_arrow_visible && !priv->tearoff_active)
+      if (priv->upper_arrow_visible)
         gtk_css_gadget_draw (priv->top_arrow_gadget, cr);
 
-      if (priv->lower_arrow_visible && !priv->tearoff_active)
+      if (priv->lower_arrow_visible)
         gtk_css_gadget_draw (priv->bottom_arrow_gadget, cr);
     }
 
@@ -3742,12 +3258,6 @@ gtk_menu_get_preferred_width (GtkWidget *widget,
 
   *minimum_size = min_width;
   *natural_size = nat_width;
-
-  /* Don't resize the tearoff if it is not active,
-   * because it won't redraw (it is only a background pixmap).
-   */
-  if (priv->tearoff_active)
-    gtk_menu_set_tearoff_hints (menu, min_width);
 }
 
 static void
@@ -4252,7 +3762,7 @@ gtk_menu_handle_scrolling (GtkMenu *menu,
   get_arrows_sensitive_area (menu, &rect, NULL);
 
   in_arrow = FALSE;
-  if (priv->upper_arrow_visible && !priv->tearoff_active &&
+  if (priv->upper_arrow_visible &&
       (x >= rect.x) && (x < rect.x + rect.width) &&
       (y >= rect.y) && (y < rect.y + rect.height))
     {
@@ -4263,7 +3773,7 @@ gtk_menu_handle_scrolling (GtkMenu *menu,
     {
       gboolean arrow_pressed = FALSE;
 
-      if (priv->upper_arrow_visible && !priv->tearoff_active)
+      if (priv->upper_arrow_visible)
         {
           scroll_fast = (y < rect.y + MENU_SCROLL_FAST_ZONE);
 
@@ -4326,7 +3836,7 @@ gtk_menu_handle_scrolling (GtkMenu *menu,
   get_arrows_sensitive_area (menu, NULL, &rect);
 
   in_arrow = FALSE;
-  if (priv->lower_arrow_visible && !priv->tearoff_active &&
+  if (priv->lower_arrow_visible &&
       (x >= rect.x) && (x < rect.x + rect.width) &&
       (y >= rect.y) && (y < rect.y + rect.height))
     {
@@ -4337,7 +3847,7 @@ gtk_menu_handle_scrolling (GtkMenu *menu,
     {
       gboolean arrow_pressed = FALSE;
 
-      if (priv->lower_arrow_visible && !priv->tearoff_active)
+      if (priv->lower_arrow_visible)
         {
           scroll_fast = (y > rect.y + rect.height - MENU_SCROLL_FAST_ZONE);
 
@@ -5094,14 +4604,7 @@ gtk_menu_position_legacy (GtkMenu  *menu,
       scroll_offset += arrow_border.top;
     }
 
-  gtk_window_move (GTK_WINDOW (GTK_MENU_SHELL (menu)->priv->active ? priv->toplevel : priv->tearoff_window),
-                   x, y);
-
-  if (!GTK_MENU_SHELL (menu)->priv->active)
-    {
-      gtk_window_resize (GTK_WINDOW (priv->tearoff_window),
-                         requisition.width, requisition.height);
-    }
+  gtk_window_move (GTK_WINDOW (priv->toplevel), x, y);
 
   if (set_scroll_offset)
     priv->scroll_offset = scroll_offset;
@@ -5243,18 +4746,14 @@ gtk_menu_scroll_to (GtkMenu *menu,
 {
   GtkMenuPrivate *priv = menu->priv;
   GtkCssNode *top_arrow_node, *bottom_arrow_node;
-  GtkBorder arrow_border, padding;
+  GtkBorder padding;
   GtkWidget *widget;
   gint x, y;
   gint view_width, view_height;
   gint border_width;
-  gint menu_height;
 
   widget = GTK_WIDGET (menu);
 
-  if (priv->tearoff_active && priv->tearoff_adjustment)
-    gtk_adjustment_set_value (priv->tearoff_adjustment, offset);
-
   /* Move/resize the viewport according to arrows: */
   view_width = gtk_widget_get_allocated_width (widget);
   view_height = gtk_widget_get_allocated_height (widget);
@@ -5265,92 +4764,10 @@ gtk_menu_scroll_to (GtkMenu *menu,
 
   view_width -= (2 * border_width) + padding.left + padding.right;
   view_height -= (2 * border_width) + padding.top + padding.bottom;
-  menu_height = priv->requested_height - (2 * border_width) - padding.top - padding.bottom;
 
   x = border_width + padding.left;
   y = border_width + padding.top;
 
-  if (!priv->tearoff_active)
-    {
-      if (view_height < menu_height               ||
-          (offset > 0 && priv->scroll_offset > 0) ||
-          (offset < 0 && priv->scroll_offset < 0))
-        {
-          GtkStateFlags upper_arrow_previous_state = priv->upper_arrow_state;
-          GtkStateFlags lower_arrow_previous_state = priv->lower_arrow_state;
-
-          if (!priv->upper_arrow_visible || !priv->lower_arrow_visible)
-            gtk_widget_queue_draw (GTK_WIDGET (menu));
-
-          priv->upper_arrow_visible = priv->lower_arrow_visible = TRUE;
-
-          get_arrows_border (menu, &arrow_border);
-          y += arrow_border.top;
-          view_height -= arrow_border.top;
-          view_height -= arrow_border.bottom;
-
-          if (offset <= 0)
-            priv->upper_arrow_state |= GTK_STATE_FLAG_INSENSITIVE;
-          else
-            {
-              priv->upper_arrow_state &= ~(GTK_STATE_FLAG_INSENSITIVE);
-
-              if (priv->upper_arrow_prelight)
-                priv->upper_arrow_state |= GTK_STATE_FLAG_PRELIGHT;
-              else
-                priv->upper_arrow_state &= ~(GTK_STATE_FLAG_PRELIGHT);
-            }
-
-          if (offset >= menu_height - view_height)
-            priv->lower_arrow_state |= GTK_STATE_FLAG_INSENSITIVE;
-          else
-            {
-              priv->lower_arrow_state &= ~(GTK_STATE_FLAG_INSENSITIVE);
-
-              if (priv->lower_arrow_prelight)
-                priv->lower_arrow_state |= GTK_STATE_FLAG_PRELIGHT;
-              else
-                priv->lower_arrow_state &= ~(GTK_STATE_FLAG_PRELIGHT);
-            }
-
-          if ((priv->upper_arrow_state != upper_arrow_previous_state) ||
-              (priv->lower_arrow_state != lower_arrow_previous_state))
-            gtk_widget_queue_draw (GTK_WIDGET (menu));
-
-          if ((upper_arrow_previous_state & GTK_STATE_FLAG_INSENSITIVE) == 0 &&
-              (priv->upper_arrow_state & GTK_STATE_FLAG_INSENSITIVE) != 0)
-            {
-              /* At the upper border, possibly remove timeout */
-              if (priv->scroll_step < 0)
-                {
-                  gtk_menu_stop_scrolling (menu);
-                  gtk_widget_queue_draw (GTK_WIDGET (menu));
-                }
-            }
-
-          if ((lower_arrow_previous_state & GTK_STATE_FLAG_INSENSITIVE) == 0 &&
-              (priv->lower_arrow_state & GTK_STATE_FLAG_INSENSITIVE) != 0)
-            {
-              /* At the lower border, possibly remove timeout */
-              if (priv->scroll_step > 0)
-                {
-                  gtk_menu_stop_scrolling (menu);
-                  gtk_widget_queue_draw (GTK_WIDGET (menu));
-                }
-            }
-        }
-      else if (priv->upper_arrow_visible || priv->lower_arrow_visible)
-        {
-          offset = 0;
-
-          priv->upper_arrow_visible = priv->lower_arrow_visible = FALSE;
-          priv->upper_arrow_prelight = priv->lower_arrow_prelight = FALSE;
-
-          gtk_menu_stop_scrolling (menu);
-          gtk_widget_queue_draw (GTK_WIDGET (menu));
-        }
-    }
-
   top_arrow_node = gtk_css_gadget_get_node (priv->top_arrow_gadget);
   gtk_css_node_set_visible (top_arrow_node, priv->upper_arrow_visible);
   gtk_css_node_set_state (top_arrow_node, priv->upper_arrow_state);
@@ -5452,8 +4869,7 @@ gtk_menu_scroll_item_visible (GtkMenuShell *menu_shell,
           arrow_height = 0;
 
           get_arrows_border (menu, &arrow_border);
-          if (!priv->tearoff_active)
-            arrow_height = arrow_border.top + arrow_border.bottom;
+          arrow_height = arrow_border.top + arrow_border.bottom;
 
           if (child_offset + child_height > y + height - arrow_height)
             {
@@ -5483,67 +4899,6 @@ gtk_menu_select_item (GtkMenuShell *menu_shell,
 }
 
 
-/* Reparent the menu, taking care of the refcounting
- *
- * If unrealize is true we force a unrealize while reparenting the parent.
- * This can help eliminate flicker in some cases.
- *
- * What happens is that when the menu is unrealized and then re-realized,
- * the allocations are as follows:
- *
- *  parent - 1x1 at (0,0)
- *  child1 - 100x20 at (0,0)
- *  child2 - 100x20 at (0,20)
- *  child3 - 100x20 at (0,40)
- *
- * That is, the parent is small but the children are full sized. Then,
- * when the queued_resize gets processed, the parent gets resized to
- * full size.
- *
- * But in order to eliminate flicker when scrolling, gdkgeometry-x11.c
- * contains the following logic:
- *
- * - if a move or resize operation on a window would change the clip
- *   region on the children, then before the window is resized
- *   the background for children is temporarily set to None, the
- *   move/resize done, and the background for the children restored.
- *
- * So, at the point where the parent is resized to final size, the
- * background for the children is temporarily None, and thus they
- * are not cleared to the background color and the previous background
- * (the image of the menu) is left in place.
- */
-static void
-gtk_menu_reparent (GtkMenu   *menu,
-                   GtkWidget *new_parent,
-                   gboolean   unrealize)
-{
-  GObject *object = G_OBJECT (menu);
-  GtkWidget *widget = GTK_WIDGET (menu);
-  gboolean was_floating = g_object_is_floating (object);
-
-  g_object_ref_sink (object);
-
-  if (unrealize)
-    {
-      g_object_ref (object);
-      gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (widget)), widget);
-      gtk_container_add (GTK_CONTAINER (new_parent), widget);
-      g_object_unref (object);
-    }
-  else
-    {
-      G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-      gtk_widget_reparent (widget, new_parent);
-      G_GNUC_END_IGNORE_DEPRECATIONS;
-    }
-
-  if (was_floating)
-    g_object_force_floating (object);
-  else
-    g_object_unref (object);
-}
-
 static void
 gtk_menu_show_all (GtkWidget *widget)
 {
@@ -5804,11 +5159,10 @@ gtk_menu_move_current (GtkMenuShell         *menu_shell,
 static gint
 get_visible_size (GtkMenu *menu)
 {
-  GtkMenuPrivate *priv = menu->priv;
   GtkAllocation allocation;
   GtkWidget *widget = GTK_WIDGET (menu);
   GtkContainer *container = GTK_CONTAINER (menu);
-  GtkBorder padding;
+  GtkBorder padding, arrow_border;
   gint menu_height;
 
   gtk_widget_get_allocation (widget, &allocation);
@@ -5818,14 +5172,9 @@ get_visible_size (GtkMenu *menu)
                  (2 * gtk_container_get_border_width (container)) -
                  padding.top - padding.bottom);
 
-  if (!priv->tearoff_active)
-    {
-      GtkBorder arrow_border;
-
-      get_arrows_border (menu, &arrow_border);
-      menu_height -= arrow_border.top;
-      menu_height -= arrow_border.bottom;
-    }
+  get_arrows_border (menu, &arrow_border);
+  menu_height -= arrow_border.top;
+  menu_height -= arrow_border.bottom;
 
   return menu_height;
 }
@@ -5864,14 +5213,8 @@ child_at (GtkMenu *menu,
             {
               child = children->data;
 
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-              if (child_offset + child_requisition.height > y &&
-                  !GTK_IS_TEAROFF_MENU_ITEM (child))
+              if (child_offset + child_requisition.height > y)
                 return child;
-
-G_GNUC_END_IGNORE_DEPRECATIONS
-
             }
 
           child_offset += child_requisition.height;
@@ -5886,7 +5229,7 @@ get_menu_height (GtkMenu *menu)
 {
   GtkMenuPrivate *priv = menu->priv;
   GtkWidget *widget = GTK_WIDGET (menu);
-  GtkBorder padding;
+  GtkBorder padding, arrow_border;
   gint height;
 
   get_menu_padding (widget, &padding);
@@ -5895,14 +5238,9 @@ get_menu_height (GtkMenu *menu)
   height -= (gtk_container_get_border_width (GTK_CONTAINER (widget)) * 2) +
     padding.top + padding.bottom;
 
-  if (!priv->tearoff_active)
-    {
-      GtkBorder arrow_border;
-
-      get_arrows_border (menu, &arrow_border);
-      height -= arrow_border.top;
-      height -= arrow_border.bottom;
-    }
+  get_arrows_border (menu, &arrow_border);
+  height -= arrow_border.top;
+  height -= arrow_border.bottom;
 
   return height;
 }
@@ -5942,7 +5280,7 @@ gtk_menu_real_move_scroll (GtkMenu       *menu,
           }
 
         menu_shell->priv->ignore_enter = TRUE;
-        old_upper_arrow_visible = priv->upper_arrow_visible && !priv->tearoff_active;
+        old_upper_arrow_visible = priv->upper_arrow_visible;
         old_offset = priv->scroll_offset;
 
         new_offset = priv->scroll_offset + step;
@@ -5953,7 +5291,7 @@ gtk_menu_real_move_scroll (GtkMenu       *menu,
         if (menu_shell->priv->active_menu_item)
           {
             GtkWidget *new_child;
-            gboolean new_upper_arrow_visible = priv->upper_arrow_visible && !priv->tearoff_active;
+            gboolean new_upper_arrow_visible = priv->upper_arrow_visible;
             GtkBorder arrow_border;
 
             get_arrows_border (menu, &arrow_border);
diff --git a/gtk/gtkmenu.h b/gtk/gtkmenu.h
index 70c7c2f..9737c02 100644
--- a/gtk/gtkmenu.h
+++ b/gtk/gtkmenu.h
@@ -219,21 +219,6 @@ void          gtk_menu_detach                (GtkMenu             *menu);
 GDK_AVAILABLE_IN_ALL
 GtkWidget* gtk_menu_get_attach_widget    (GtkMenu             *menu);
 
-GDK_DEPRECATED_IN_3_10
-void       gtk_menu_set_tearoff_state     (GtkMenu             *menu,
-                                           gboolean             torn_off);
-GDK_DEPRECATED_IN_3_10
-gboolean   gtk_menu_get_tearoff_state     (GtkMenu             *menu);
-
-/* This sets the window manager title for the window that
- * appears when a menu is torn off
- */
-GDK_DEPRECATED_IN_3_10
-void          gtk_menu_set_title          (GtkMenu             *menu,
-                                           const gchar         *title);
-GDK_DEPRECATED_IN_3_10
-const gchar * gtk_menu_get_title          (GtkMenu             *menu);
-
 GDK_AVAILABLE_IN_ALL
 void       gtk_menu_reorder_child         (GtkMenu             *menu,
                                            GtkWidget           *child,
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
index 09f7d54..c9e2e91 100644
--- a/gtk/gtkmenuitem.c
+++ b/gtk/gtkmenuitem.c
@@ -46,7 +46,6 @@
 #include "gtksettings.h"
 #include "gtktypebuiltins.h"
 #include "a11y/gtkmenuitemaccessible.h"
-#include "deprecated/gtktearoffmenuitem.h"
 #include "gtkstylecontextprivate.h"
 #include "gtkcssstylepropertyprivate.h"
 
@@ -1257,8 +1256,8 @@ activatable_update_label (GtkMenuItem *menu_item, GtkAction *action)
  * @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.
+ * the only visible children are “filler” menu items which were
+ * inserted to mark the menu as empty.
  * 
  * This function is used by #GtkAction.
  *
@@ -1282,18 +1281,11 @@ gtk_menu_is_empty (GtkWidget *menu)
     {
       if (gtk_widget_get_visible (cur->data))
        {
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-         if (!GTK_IS_TEAROFF_MENU_ITEM (cur->data) &&
-             !g_object_get_data (cur->data, "gtk-empty-menu-item"))
+         if (!g_object_get_data (cur->data, "gtk-empty-menu-item"))
             {
              result = FALSE;
               break;
             }
-
-G_GNUC_END_IGNORE_DEPRECATIONS
-
        }
       cur = cur->next;
     }
@@ -1757,8 +1749,7 @@ gtk_real_menu_item_select (GtkMenuItem *menu_item)
   if ((!source_device ||
        gdk_device_get_source (source_device) != GDK_SOURCE_TOUCHSCREEN) &&
       priv->submenu &&
-      (!gtk_widget_get_mapped (priv->submenu) ||
-       GTK_MENU (priv->submenu)->priv->tearoff_active))
+      !gtk_widget_get_mapped (priv->submenu))
     {
       _gtk_menu_item_popup_submenu (GTK_WIDGET (menu_item), TRUE);
     }
@@ -2088,8 +2079,7 @@ gtk_menu_item_popup_timeout (gpointer data)
 
   parent = gtk_widget_get_parent (GTK_WIDGET (menu_item));
 
-  if ((GTK_IS_MENU_SHELL (parent) && GTK_MENU_SHELL (parent)->priv->active) ||
-      (GTK_IS_MENU (parent) && GTK_MENU (parent)->priv->torn_off))
+  if (GTK_IS_MENU_SHELL (parent) && GTK_MENU_SHELL (parent)->priv->active)
     {
       gtk_menu_item_real_popup_submenu (GTK_WIDGET (menu_item), info->trigger_event, TRUE);
       if (info->trigger_event &&
diff --git a/gtk/gtkmenuprivate.h b/gtk/gtkmenuprivate.h
index 92c4de6..c61a49e 100644
--- a/gtk/gtkmenuprivate.h
+++ b/gtk/gtkmenuprivate.h
@@ -72,11 +72,6 @@ struct _GtkMenuPrivate
    */
   GtkWidget *toplevel;
 
-  GtkWidget     *tearoff_window;
-  GtkWidget     *tearoff_hbox;
-  GtkWidget     *tearoff_scrollbar;
-  GtkAdjustment *tearoff_adjustment;
-
   GdkWindow *view_window;
   GdkWindow *bin_window;
 
@@ -90,11 +85,6 @@ struct _GtkMenuPrivate
   guint scroll_timeout;
 
   guint needs_destruction_ref : 1;
-  guint torn_off              : 1;
-  /* The tearoff is active when it is torn off and the not-torn-off
-   * menu is not popped up.
-   */
-  guint tearoff_active        : 1;
   guint scroll_fast           : 1;
 
   guint upper_arrow_visible   : 1;
@@ -122,8 +112,6 @@ struct _GtkMenuPrivate
   gint n_rows;
   gint n_columns;
 
-  gchar *title;
-
  /* Arrow states */
   GtkStateFlags lower_arrow_state;
   GtkStateFlags upper_arrow_state;
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index a68389e..e15102a 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -77,8 +77,6 @@
 #include "gtkwidgetprivate.h"
 #include "gtklabelprivate.h"
 
-#include "deprecated/gtktearoffmenuitem.h"
-
 #include "a11y/gtkmenushellaccessible.h"
 
 
@@ -1449,9 +1447,7 @@ gtk_menu_shell_move_selected (GtkMenuShell  *menu_shell,
  *                    should be %FALSE if the menu is being
  *                    popped up initially.
  *
- * Select the first visible or selectable child of the menu shell;
- * don’t select tearoff items unless the only item is a tearoff
- * item.
+ * Select the first visible or selectable child of the menu shell.
  *
  * Since: 2.2
  */
@@ -1472,14 +1468,6 @@ gtk_menu_shell_select_first (GtkMenuShell *menu_shell,
           _gtk_menu_item_is_selectable (child))
         {
           to_select = child;
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-          if (!GTK_IS_TEAROFF_MENU_ITEM (child))
-            break;
-
-G_GNUC_END_IGNORE_DEPRECATIONS
-
         }
 
       tmp_list = tmp_list->next;
@@ -1506,13 +1494,6 @@ _gtk_menu_shell_select_last (GtkMenuShell *menu_shell,
           _gtk_menu_item_is_selectable (child))
         {
           to_select = child;
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-          if (!GTK_IS_TEAROFF_MENU_ITEM (child))
-            break;
-
-G_GNUC_END_IGNORE_DEPRECATIONS
         }
 
       tmp_list = tmp_list->prev;
diff --git a/gtk/gtktreemenu.c b/gtk/gtktreemenu.c
index 057bc96..60eaa2e 100644
--- a/gtk/gtktreemenu.c
+++ b/gtk/gtktreemenu.c
@@ -49,8 +49,6 @@
 #define GDK_DEPRECATED
 #define GDK_DEPRECATED_FOR(f)
 
-#include "deprecated/gtktearoffmenuitem.h"
-
 /* GObjectClass */
 static void      gtk_tree_menu_constructed                    (GObject            *object);
 static void      gtk_tree_menu_dispose                        (GObject            *object);
@@ -170,7 +168,6 @@ struct _GtkTreeMenuPrivate
 
   /* Flags */
   guint32              menu_with_header : 1;
-  guint32              tearoff     : 1;
 
   /* Row separators */
   GtkTreeViewRowSeparatorFunc row_separator_func;
@@ -183,7 +180,6 @@ enum {
   PROP_MODEL,
   PROP_ROOT,
   PROP_CELL_AREA,
-  PROP_TEAROFF,
   PROP_WRAP_WIDTH,
   PROP_ROW_SPAN_COL,
   PROP_COL_SPAN_COL
@@ -310,21 +306,6 @@ _gtk_tree_menu_class_init (GtkTreeMenuClass *class)
                                                         GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
   /*
-   * GtkTreeMenu:tearoff:
-   *
-   * Specifies whether this menu comes with a leading tearoff menu item
-   *
-   * Since: 3.0
-   */
-  g_object_class_install_property (object_class,
-                                   PROP_TEAROFF,
-                                   g_param_spec_boolean ("tearoff",
-                                                         P_("Tearoff"),
-                                                         P_("Whether the menu has a tearoff item"),
-                                                         FALSE,
-                                                         GTK_PARAM_READWRITE));
-
-  /*
    * GtkTreeMenu:wrap-width:
    *
    * If wrap-width is set to a positive value, the list will be
@@ -477,10 +458,6 @@ gtk_tree_menu_set_property (GObject            *object,
       gtk_tree_menu_set_area (menu, (GtkCellArea *)g_value_get_object (value));
       break;
 
-    case PROP_TEAROFF:
-      _gtk_tree_menu_set_tearoff (menu, g_value_get_boolean (value));
-      break;
-
     case PROP_WRAP_WIDTH:
       _gtk_tree_menu_set_wrap_width (menu, g_value_get_int (value));
       break;
@@ -522,10 +499,6 @@ gtk_tree_menu_get_property (GObject            *object,
       g_value_set_object (value, priv->area);
       break;
 
-    case PROP_TEAROFF:
-      g_value_set_boolean (value, priv->tearoff);
-      break;
-
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -706,7 +679,7 @@ gtk_tree_menu_get_path_item (GtkTreeMenu          *menu,
                 item = child;
             }
         }
-      else if (!GTK_IS_TEAROFF_MENU_ITEM (child))
+      else
         {
           GtkWidget *view = gtk_bin_get_child (GTK_BIN (child));
 
@@ -845,7 +818,7 @@ find_empty_submenu (GtkTreeMenu  *menu)
 
       /* Separators dont get submenus, if it already has a submenu then let
        * the submenu handle inserted rows */
-      if (!GTK_IS_SEPARATOR_MENU_ITEM (child) && !GTK_IS_TEAROFF_MENU_ITEM (child))
+      if (!GTK_IS_SEPARATOR_MENU_ITEM (child))
         {
           GtkWidget *view = gtk_bin_get_child (GTK_BIN (child));
 
@@ -896,12 +869,6 @@ row_inserted_cb (GtkTreeModel     *model,
           if (priv->menu_with_header)
             index += 2;
 
-          /* Index after the tearoff item for the root menu if
-           * there is a tearoff item
-           */
-          if (priv->root == NULL && priv->tearoff)
-            index += 1;
-
           item = gtk_tree_menu_create_item (menu, iter, FALSE);
           gtk_menu_shell_insert (GTK_MENU_SHELL (menu), item, index);
 
@@ -1386,20 +1353,6 @@ gtk_tree_menu_populate (GtkTreeMenu *menu)
     }
   else
     {
-      /* Tearoff menu items only go in the root menu */
-      if (priv->tearoff)
-        {
-          menu_item = gtk_tearoff_menu_item_new ();
-          gtk_widget_show (menu_item);
-
-          if (priv->wrap_width > 0)
-            gtk_menu_attach (GTK_MENU (menu), menu_item, 0, priv->wrap_width, 0, 1);
-          else
-            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
-
-          prev = menu_item;
-        }
-
       valid = gtk_tree_model_iter_children (priv->model, &iter, NULL);
     }
 
@@ -1665,57 +1618,6 @@ _gtk_tree_menu_get_root (GtkTreeMenu *menu)
 }
 
 /*
- * _gtk_tree_menu_get_tearoff:
- * @menu: a #GtkTreeMenu
- *
- * Gets whether this menu is build with a leading tearoff menu item.
- *
- * Returns: %TRUE if the menu has a tearoff item.
- *
- * Since: 3.0
- */
-gboolean
-_gtk_tree_menu_get_tearoff (GtkTreeMenu *menu)
-{
-  GtkTreeMenuPrivate *priv;
-
-  g_return_val_if_fail (GTK_IS_TREE_MENU (menu), FALSE);
-
-  priv = menu->priv;
-
-  return priv->tearoff;
-}
-
-/*
- * _gtk_tree_menu_set_tearoff:
- * @menu: a #GtkTreeMenu
- * @tearoff: whether the menu should have a leading tearoff menu item.
- *
- * Sets whether this menu has a leading tearoff menu item.
- *
- * Since: 3.0
- */
-void
-_gtk_tree_menu_set_tearoff (GtkTreeMenu *menu,
-                            gboolean     tearoff)
-{
-  GtkTreeMenuPrivate *priv;
-
-  g_return_if_fail (GTK_IS_TREE_MENU (menu));
-
-  priv = menu->priv;
-
-  if (priv->tearoff != tearoff)
-    {
-      priv->tearoff = tearoff;
-
-      rebuild_menu (menu);
-
-      g_object_notify (G_OBJECT (menu), "tearoff");
-    }
-}
-
-/*
  * _gtk_tree_menu_get_wrap_width:
  * @menu: a #GtkTreeMenu
  *
diff --git a/gtk/gtktreemenu.h b/gtk/gtktreemenu.h
index fa0f4ad..dc80a5d 100644
--- a/gtk/gtktreemenu.h
+++ b/gtk/gtktreemenu.h
@@ -79,9 +79,6 @@ GtkTreeModel         *_gtk_tree_menu_get_model                      (GtkTreeMenu
 void                  _gtk_tree_menu_set_root                       (GtkTreeMenu         *menu,
                                                                      GtkTreePath         *path);
 GtkTreePath          *_gtk_tree_menu_get_root                       (GtkTreeMenu         *menu);
-gboolean              _gtk_tree_menu_get_tearoff                    (GtkTreeMenu         *menu);
-void                  _gtk_tree_menu_set_tearoff                    (GtkTreeMenu         *menu,
-                                                                     gboolean             tearoff);
 gint                  _gtk_tree_menu_get_wrap_width                 (GtkTreeMenu         *menu);
 void                  _gtk_tree_menu_set_wrap_width                 (GtkTreeMenu         *menu,
                                                                      gint                 width);
diff --git a/tests/testmerge.c b/tests/testmerge.c
index ee0b38f..ef39067 100644
--- a/tests/testmerge.c
+++ b/tests/testmerge.c
@@ -75,17 +75,6 @@ dump_toplevels (GtkWidget    *button,
   g_slist_free (toplevels);
 }
 
-static void
-toggle_tearoffs (GtkWidget    *button, 
-                GtkUIManager *merge)
-{
-  gboolean add_tearoffs;
-
-  add_tearoffs = gtk_ui_manager_get_add_tearoffs (merge);
-  
-  gtk_ui_manager_set_add_tearoffs (merge, !add_tearoffs);
-}
-
 static gint
 delayed_toggle_dynamic (GtkUIManager *merge)
 {
@@ -677,10 +666,6 @@ main (int argc, char **argv)
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
     }
 
-  button = gtk_check_button_new_with_label ("Tearoffs");
-  g_signal_connect (button, "clicked", G_CALLBACK (toggle_tearoffs), merge);
-  gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-
   button = gtk_check_button_new_with_label ("Dynamic");
   g_signal_connect (button, "clicked", G_CALLBACK (toggle_dynamic), merge);
   gtk_box_pack_end (GTK_BOX (vbox), button, FALSE, FALSE, 0);


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