Deprecate GtkInfoBar
authorMatthias Clasen <mclasen@redhat.com>
Tue, 22 Nov 2022 20:10:48 +0000 (15:10 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 23 Nov 2022 18:00:09 +0000 (13:00 -0500)
This widget has a dialog-like API, which is something
we want to get rid of in GTK 5, and libadwaita has
a replacement with AdwBanner incoming.

demos/gtk-demo/infobar.c
docs/reference/gtk/migrating-4to5.md
gtk/deprecated/gtkinfobar.c [new file with mode: 0644]
gtk/deprecated/gtkinfobar.h [new file with mode: 0644]
gtk/deprecated/meson.build
gtk/gtk.h
gtk/gtkinfobar.c [deleted file]
gtk/gtkinfobar.h [deleted file]
gtk/meson.build
po/POTFILES.in

index d484e856cb8515ee0289f2f92e9e52cf76edeabb..9491588f8d8825c5208418926d735d5526fdfab1 100644 (file)
@@ -7,6 +7,8 @@
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+
 static void
 on_bar_response (GtkInfoBar *info_bar,
                  int         response_id,
index 6c2110aa3325fd6eebf148fce999bf3e78f621b1..a6bf2262d87d0dc93cad5a8bfa32d4f6b055fac0 100644 (file)
@@ -97,3 +97,11 @@ is much reduced, and it has awkward, archaice APIs. Therefore,
 it is dropped. The recommended replacement is to just create
 your own window and add buttons as required, either in the header
 or elsewhere.
+
+## GtkInfoBar is going away
+
+GtkInfoBar had a dialog API, and with dialogs going away, it was time to
+retire it. If you need such a widget, it is relatively trivial to create one
+using a [class@Gtk.Revealer] with labels and buttons.
+
+Other libraries, such as libadwaita, may provide replacements as well.
diff --git a/gtk/deprecated/gtkinfobar.c b/gtk/deprecated/gtkinfobar.c
new file mode 100644 (file)
index 0000000..cc2c0c1
--- /dev/null
@@ -0,0 +1,1275 @@
+/*
+ * gtkinfobar.c
+ * This file is part of GTK
+ *
+ * Copyright (C) 2005 - Paolo Maggi
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Modified by the gedit Team, 2005. See the AUTHORS file for a
+ * list of people on the gtk Team.
+ * See the gedit ChangeLog files for a list of changes.
+ *
+ * Modified by the GTK+ team, 2008-2009.
+ */
+
+
+#include "config.h"
+
+#include <stdlib.h>
+
+#include "gtkinfobar.h"
+#include "gtkbuildable.h"
+#include "gtkbuilderprivate.h"
+#include "gtkbox.h"
+#include "gtklabel.h"
+#include "gtkbutton.h"
+#include "gtkenums.h"
+#include "deprecated/gtkdialog.h"
+#include "gtkrevealer.h"
+#include "gtkprivate.h"
+#include "gtktypebuiltins.h"
+#include "gtkwidgetprivate.h"
+#include "gtkbinlayout.h"
+#include "gtkgestureclick.h"
+
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+
+/**
+ * GtkInfoBar:
+ *
+ * `GtkInfoBar` can be show messages to the user without a dialog.
+ *
+ * ![An example GtkInfoBar](info-bar.png)
+ *
+ * It is often temporarily shown at the top or bottom of a document.
+ * In contrast to [class@Gtk.Dialog], which has an action area at the
+ * bottom, `GtkInfoBar` has an action area at the side.
+ *
+ * The API of `GtkInfoBar` is very similar to `GtkDialog`, allowing you
+ * to add buttons to the action area with [method@Gtk.InfoBar.add_button]
+ * or [ctor@Gtk.InfoBar.new_with_buttons]. The sensitivity of action widgets
+ * can be controlled with [method@Gtk.InfoBar.set_response_sensitive].
+ *
+ * To add widgets to the main content area of a `GtkInfoBar`, use
+ * [method@Gtk.InfoBar.add_child].
+ *
+ * Similar to [class@Gtk.MessageDialog], the contents of a `GtkInfoBar`
+ * can by classified as error message, warning, informational message, etc,
+ * by using [method@Gtk.InfoBar.set_message_type]. GTK may use the message
+ * type to determine how the message is displayed.
+ *
+ * A simple example for using a `GtkInfoBar`:
+ * ```c
+ * GtkWidget *message_label;
+ * GtkWidget *widget;
+ * GtkWidget *grid;
+ * GtkInfoBar *bar;
+ *
+ * // set up info bar
+ * widget = gtk_info_bar_new ();
+ * bar = GTK_INFO_BAR (widget);
+ * grid = gtk_grid_new ();
+ *
+ * message_label = gtk_label_new ("");
+ * gtk_info_bar_add_child (bar, message_label);
+ * gtk_info_bar_add_button (bar,
+ *                          _("_OK"),
+ *                          GTK_RESPONSE_OK);
+ * g_signal_connect (bar,
+ *                   "response",
+ *                   G_CALLBACK (gtk_widget_hide),
+ *                   NULL);
+ * gtk_grid_attach (GTK_GRID (grid),
+ *                  widget,
+ *                  0, 2, 1, 1);
+ *
+ * // ...
+ *
+ * // show an error message
+ * gtk_label_set_text (GTK_LABEL (message_label), "An error occurred!");
+ * gtk_info_bar_set_message_type (bar, GTK_MESSAGE_ERROR);
+ * gtk_widget_show (bar);
+ * ```
+ *
+ * # GtkInfoBar as GtkBuildable
+ *
+ * `GtkInfoBar` supports a custom `<action-widgets>` element, which can contain
+ * multiple `<action-widget>` elements. The “response” attribute specifies a
+ * numeric response, and the content of the element is the id of widget
+ * (which should be a child of the dialogs @action_area).
+ *
+ * `GtkInfoBar` supports adding action widgets by specifying “action” as
+ * the “type” attribute of a `<child>` element. The widget will be added
+ * either to the action area. The response id has to be associated
+ * with the action widget using the `<action-widgets>` element.
+ *
+ * # CSS nodes
+ *
+ * `GtkInfoBar` has a single CSS node with name infobar. The node may get
+ * one of the style classes .info, .warning, .error or .question, depending
+ * on the message type.
+ * If the info bar shows a close button, that button will have the .close
+ * style class applied.
+ *
+ * Deprecated: 4.10: There is no replacement in GTK for an "info bar" widget;
+ *   you can use [class@Gtk.Revealer] with a [class@GtkBox] containing a
+ *   [class@Gtk.Label] and an optional [class@Gtk.Button], according to
+ *   your application's design.
+ */
+
+enum
+{
+  PROP_0,
+  PROP_MESSAGE_TYPE,
+  PROP_SHOW_CLOSE_BUTTON,
+  PROP_REVEALED,
+  LAST_PROP
+};
+
+typedef struct _GtkInfoBarClass GtkInfoBarClass;
+
+struct _GtkInfoBar
+{
+  GtkWidget parent_instance;
+
+  GtkWidget *content_area;
+  GtkWidget *action_area;
+  GtkWidget *close_button;
+  GtkWidget *revealer;
+
+  GtkMessageType message_type;
+  int default_response;
+  gboolean default_response_sensitive;
+};
+
+struct _GtkInfoBarClass
+{
+  GtkWidgetClass parent_class;
+
+  void (* response) (GtkInfoBar *info_bar, int response_id);
+  void (* close)    (GtkInfoBar *info_bar);
+};
+
+typedef struct _ResponseData ResponseData;
+
+struct _ResponseData
+{
+  int response_id;
+  gulong handler_id;
+};
+
+enum
+{
+  RESPONSE,
+  CLOSE,
+  LAST_SIGNAL
+};
+
+static GParamSpec *props[LAST_PROP] = { NULL, };
+static guint signals[LAST_SIGNAL];
+
+static void     gtk_info_bar_set_property (GObject        *object,
+                                           guint           prop_id,
+                                           const GValue   *value,
+                                           GParamSpec     *pspec);
+static void     gtk_info_bar_get_property (GObject        *object,
+                                           guint           prop_id,
+                                           GValue         *value,
+                                           GParamSpec     *pspec);
+static void     gtk_info_bar_buildable_interface_init   (GtkBuildableIface  *iface);
+static gboolean gtk_info_bar_buildable_custom_tag_start (GtkBuildable       *buildable,
+                                                         GtkBuilder         *builder,
+                                                         GObject            *child,
+                                                         const char         *tagname,
+                                                         GtkBuildableParser *parser,
+                                                         gpointer           *data);
+static void     gtk_info_bar_buildable_custom_finished  (GtkBuildable       *buildable,
+                                                         GtkBuilder         *builder,
+                                                         GObject            *child,
+                                                         const char         *tagname,
+                                                         gpointer            user_data);
+static void      gtk_info_bar_buildable_add_child       (GtkBuildable *buildable,
+                                                         GtkBuilder   *builder,
+                                                         GObject      *child,
+                                                         const char   *type);
+
+
+
+G_DEFINE_TYPE_WITH_CODE (GtkInfoBar, gtk_info_bar, GTK_TYPE_WIDGET,
+                         G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
+                                                gtk_info_bar_buildable_interface_init))
+
+static void
+gtk_info_bar_set_property (GObject      *object,
+                           guint         prop_id,
+                           const GValue *value,
+                           GParamSpec   *pspec)
+{
+  GtkInfoBar *info_bar = GTK_INFO_BAR (object);
+
+  switch (prop_id)
+    {
+    case PROP_MESSAGE_TYPE:
+      gtk_info_bar_set_message_type (info_bar, g_value_get_enum (value));
+      break;
+    case PROP_SHOW_CLOSE_BUTTON:
+      gtk_info_bar_set_show_close_button (info_bar, g_value_get_boolean (value));
+      break;
+    case PROP_REVEALED:
+      gtk_info_bar_set_revealed (info_bar, g_value_get_boolean (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+gtk_info_bar_get_property (GObject    *object,
+                           guint       prop_id,
+                           GValue     *value,
+                           GParamSpec *pspec)
+{
+  GtkInfoBar *info_bar = GTK_INFO_BAR (object);
+
+  switch (prop_id)
+    {
+    case PROP_MESSAGE_TYPE:
+      g_value_set_enum (value, gtk_info_bar_get_message_type (info_bar));
+      break;
+    case PROP_SHOW_CLOSE_BUTTON:
+      g_value_set_boolean (value, gtk_info_bar_get_show_close_button (info_bar));
+      break;
+    case PROP_REVEALED:
+      g_value_set_boolean (value, gtk_info_bar_get_revealed (info_bar));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+response_data_free (gpointer data)
+{
+  g_slice_free (ResponseData, data);
+}
+
+static ResponseData *
+get_response_data (GtkWidget *widget,
+                   gboolean   create)
+{
+  ResponseData *ad = g_object_get_data (G_OBJECT (widget),
+                                        "gtk-info-bar-response-data");
+
+  if (ad == NULL && create)
+    {
+      ad = g_slice_new (ResponseData);
+
+      g_object_set_data_full (G_OBJECT (widget),
+                              I_("gtk-info-bar-response-data"),
+                              ad,
+                              response_data_free);
+    }
+
+  return ad;
+}
+
+static void
+clear_response_data (GtkWidget *widget)
+{
+  ResponseData *data;
+
+  data = get_response_data (widget, FALSE);
+  g_signal_handler_disconnect (widget, data->handler_id);
+  g_object_set_data (G_OBJECT (widget), "gtk-info-bar-response-data", NULL);
+}
+
+static GtkWidget *
+find_button (GtkInfoBar *info_bar,
+             int         response_id)
+{
+  GtkWidget *child;
+
+  for (child = gtk_widget_get_first_child (info_bar->action_area);
+       child != NULL;
+       child = gtk_widget_get_next_sibling (child))
+    {
+      ResponseData *rd = get_response_data (child, FALSE);
+
+      if (rd && rd->response_id == response_id)
+        return child;
+    }
+
+  return NULL;
+}
+
+static void
+gtk_info_bar_close (GtkInfoBar *info_bar)
+{
+  if (!gtk_widget_get_visible (info_bar->close_button) &&
+      !find_button (info_bar, GTK_RESPONSE_CANCEL))
+    return;
+
+  gtk_info_bar_response (GTK_INFO_BAR (info_bar),
+                         GTK_RESPONSE_CANCEL);
+}
+
+static void
+gtk_info_bar_dispose (GObject *object)
+{
+  GtkInfoBar *self = GTK_INFO_BAR (object);
+
+  g_clear_pointer (&self->revealer, gtk_widget_unparent);
+
+  G_OBJECT_CLASS (gtk_info_bar_parent_class)->dispose (object);
+}
+
+static void
+gtk_info_bar_class_init (GtkInfoBarClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+  object_class->get_property = gtk_info_bar_get_property;
+  object_class->set_property = gtk_info_bar_set_property;
+  object_class->dispose = gtk_info_bar_dispose;
+
+  klass->close = gtk_info_bar_close;
+
+  /**
+   * GtkInfoBar:message-type: (attributes org.gtk.Property.get=gtk_info_bar_get_message_type org.gtk.Property.set=gtk_info_bar_set_message_type)
+   *
+   * The type of the message.
+   *
+   * The type may be used to determine the appearance of the info bar.
+   */
+  props[PROP_MESSAGE_TYPE] =
+    g_param_spec_enum ("message-type", NULL, NULL,
+                       GTK_TYPE_MESSAGE_TYPE,
+                       GTK_MESSAGE_INFO,
+                       GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
+
+  /**
+   * GtkInfoBar:show-close-button: (attributes org.gtk.Property.get=gtk_info_bar_get_show_close_button org.gtk.Property.set=gtk_info_bar_set_show_close_button)
+   *
+   * Whether to include a standard close button.
+   */
+  props[PROP_SHOW_CLOSE_BUTTON] =
+    g_param_spec_boolean ("show-close-button", NULL, NULL,
+                          FALSE,
+                          GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
+
+  /**
+   * GtkInfoBar:revealed: (attributes org.gtk.Property.get=gtk_info_bar_get_revealed org.gtk.Property.set=gtk_info_bar_set_revealed)
+   *
+   * Whether the info bar shows its contents.
+   */
+  props[PROP_REVEALED] =
+    g_param_spec_boolean ("revealed", NULL, NULL,
+                          TRUE,
+                          GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
+  g_object_class_install_properties (object_class, LAST_PROP, props);
+
+  /**
+   * GtkInfoBar::response:
+   * @info_bar: the object on which the signal is emitted
+   * @response_id: the response ID
+   *
+   * Emitted when an action widget is clicked.
+   *
+   * The signal is also emitted when the application programmer
+   * calls [method@Gtk.InfoBar.response]. The @response_id depends
+   * on which action widget was clicked.
+   */
+  signals[RESPONSE] = g_signal_new (I_("response"),
+                                    G_OBJECT_CLASS_TYPE (klass),
+                                    G_SIGNAL_RUN_LAST,
+                                    G_STRUCT_OFFSET (GtkInfoBarClass, response),
+                                    NULL, NULL,
+                                    NULL,
+                                    G_TYPE_NONE, 1,
+                                    G_TYPE_INT);
+
+  /**
+   * GtkInfoBar::close:
+   *
+   * Gets emitted when the user uses a keybinding to dismiss the info bar.
+   *
+   * The ::close signal is a [keybinding signal](class.SignalAction.html).
+   *
+   * The default binding for this signal is the Escape key.
+   */
+  signals[CLOSE] =  g_signal_new (I_("close"),
+                                  G_OBJECT_CLASS_TYPE (klass),
+                                  G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                                  G_STRUCT_OFFSET (GtkInfoBarClass, close),
+                                  NULL, NULL,
+                                  NULL,
+                                  G_TYPE_NONE, 0);
+
+  gtk_widget_class_add_binding_signal (widget_class,
+                                       GDK_KEY_Escape, 0,
+                                       "close",
+                                       NULL);
+
+  gtk_widget_class_set_css_name (widget_class, I_("infobar"));
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
+}
+
+static void
+close_button_clicked_cb (GtkWidget  *button,
+                         GtkInfoBar *info_bar)
+{
+  gtk_info_bar_response (GTK_INFO_BAR (info_bar), GTK_RESPONSE_CLOSE);
+}
+
+static void
+click_released_cb (GtkGestureClick *gesture,
+                   guint            n_press,
+                   double           x,
+                   double           y,
+                   GtkInfoBar      *info_bar)
+{
+  if (info_bar->default_response && info_bar->default_response_sensitive)
+    gtk_info_bar_response (info_bar, info_bar->default_response);
+}
+
+static void
+gtk_info_bar_init (GtkInfoBar *info_bar)
+{
+  GtkWidget *widget = GTK_WIDGET (info_bar);
+  GtkWidget *main_box;
+  GtkGesture *gesture;
+
+  /* message-type is a CONSTRUCT property, so we init to a value
+   * different from its default to trigger its property setter
+   * during construction */
+  info_bar->message_type = GTK_MESSAGE_OTHER;
+
+  info_bar->revealer = gtk_revealer_new ();
+  gtk_revealer_set_reveal_child (GTK_REVEALER (info_bar->revealer), TRUE);
+  gtk_widget_set_parent (info_bar->revealer, widget);
+
+  main_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  gtk_revealer_set_child (GTK_REVEALER (info_bar->revealer), main_box);
+
+  info_bar->content_area = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  gtk_widget_set_hexpand (info_bar->content_area, TRUE);
+  gtk_box_append (GTK_BOX (main_box), info_bar->content_area);
+
+  info_bar->action_area = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  gtk_widget_set_halign (info_bar->action_area, GTK_ALIGN_END);
+  gtk_widget_set_valign (info_bar->action_area, GTK_ALIGN_CENTER);
+  gtk_box_append (GTK_BOX (main_box), info_bar->action_area);
+
+  info_bar->close_button = gtk_button_new_from_icon_name ("window-close-symbolic");
+  gtk_widget_hide (info_bar->close_button);
+  gtk_widget_set_valign (info_bar->close_button, GTK_ALIGN_CENTER);
+  gtk_widget_add_css_class (info_bar->close_button, "close");
+  gtk_box_append (GTK_BOX (main_box), info_bar->close_button);
+  g_signal_connect (info_bar->close_button, "clicked",
+                    G_CALLBACK (close_button_clicked_cb), info_bar);
+
+  gesture = gtk_gesture_click_new ();
+  gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_PRIMARY);
+  g_signal_connect (gesture, "released", G_CALLBACK (click_released_cb), widget);
+  gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture));
+}
+
+static GtkBuildableIface *parent_buildable_iface;
+
+static void
+gtk_info_bar_buildable_interface_init (GtkBuildableIface *iface)
+{
+  parent_buildable_iface = g_type_interface_peek_parent (iface);
+
+  iface->add_child = gtk_info_bar_buildable_add_child;
+  iface->custom_tag_start = gtk_info_bar_buildable_custom_tag_start;
+  iface->custom_finished = gtk_info_bar_buildable_custom_finished;
+}
+
+static int
+get_response_for_widget (GtkInfoBar *info_bar,
+                         GtkWidget  *widget)
+{
+  ResponseData *rd;
+
+  rd = get_response_data (widget, FALSE);
+  if (!rd)
+    return GTK_RESPONSE_NONE;
+  else
+    return rd->response_id;
+}
+
+static void
+action_widget_activated (GtkWidget  *widget,
+                         GtkInfoBar *info_bar)
+{
+  int response_id;
+
+  response_id = get_response_for_widget (info_bar, widget);
+  gtk_info_bar_response (info_bar, response_id);
+}
+
+/**
+ * gtk_info_bar_add_action_widget:
+ * @info_bar: a `GtkInfoBar`
+ * @child: an activatable widget
+ * @response_id: response ID for @child
+ *
+ * Add an activatable widget to the action area of a `GtkInfoBar`.
+ *
+ * This also connects a signal handler that will emit the
+ * [signal@Gtk.InfoBar::response] signal on the message area
+ * when the widget is activated. The widget is appended to the
+ * end of the message areas action area.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_add_action_widget (GtkInfoBar *info_bar,
+                                GtkWidget  *child,
+                                int         response_id)
+{
+  ResponseData *ad;
+  guint signal_id;
+
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+  g_return_if_fail (GTK_IS_WIDGET (child));
+
+  ad = get_response_data (child, TRUE);
+
+  G_DEBUG_HERE();
+  ad->response_id = response_id;
+
+  if (GTK_IS_BUTTON (child))
+    signal_id = g_signal_lookup ("clicked", GTK_TYPE_BUTTON);
+  else
+    signal_id = gtk_widget_class_get_activate_signal (GTK_WIDGET_GET_CLASS (child));
+
+  if (signal_id)
+    {
+      GClosure *closure;
+
+      closure = g_cclosure_new_object (G_CALLBACK (action_widget_activated),
+                                       G_OBJECT (info_bar));
+      ad->handler_id = g_signal_connect_closure_by_id (child, signal_id, 0, closure, FALSE);
+    }
+  else
+    g_warning ("Only 'activatable' widgets can be packed into the action area of a GtkInfoBar");
+
+  gtk_box_append (GTK_BOX (info_bar->action_area), child);
+}
+
+/**
+ * gtk_info_bar_remove_action_widget:
+ * @info_bar: a `GtkInfoBar`
+ * @widget: an action widget to remove
+ *
+ * Removes a widget from the action area of @info_bar.
+ *
+ * The widget must have been put there by a call to
+ * [method@Gtk.InfoBar.add_action_widget] or [method@Gtk.InfoBar.add_button].
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_remove_action_widget (GtkInfoBar *info_bar,
+                                   GtkWidget  *widget)
+{
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (gtk_widget_get_parent (widget) == info_bar->action_area);
+
+  clear_response_data (widget);
+
+  gtk_box_remove (GTK_BOX (info_bar->action_area), widget);
+}
+
+/**
+ * gtk_info_bar_add_button:
+ * @info_bar: a `GtkInfoBar`
+ * @button_text: text of button
+ * @response_id: response ID for the button
+ *
+ * Adds a button with the given text.
+ *
+ * Clicking the button will emit the [signal@Gtk.InfoBar::response]
+ * signal with the given response_id. The button is appended to the
+ * end of the info bars's action area. The button widget is returned,
+ * but usually you don't need it.
+ *
+ * Returns: (transfer none) (type Gtk.Button): the `GtkButton` widget
+ * that was added
+ *
+ * Deprecated: 4.10
+ */
+GtkWidget*
+gtk_info_bar_add_button (GtkInfoBar  *info_bar,
+                         const char *button_text,
+                         int          response_id)
+{
+  GtkWidget *button;
+
+  g_return_val_if_fail (GTK_IS_INFO_BAR (info_bar), NULL);
+  g_return_val_if_fail (button_text != NULL, NULL);
+
+  button = gtk_button_new_with_label (button_text);
+  gtk_button_set_use_underline (GTK_BUTTON (button), TRUE);
+
+  gtk_widget_show (button);
+
+  gtk_info_bar_add_action_widget (info_bar, button, response_id);
+
+  return button;
+}
+
+static void
+add_buttons_valist (GtkInfoBar  *info_bar,
+                    const char *first_button_text,
+                    va_list      args)
+{
+  const char * text;
+  int response_id;
+
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+
+  if (first_button_text == NULL)
+    return;
+
+  text = first_button_text;
+  response_id = va_arg (args, int);
+
+  while (text != NULL)
+    {
+      gtk_info_bar_add_button (info_bar, text, response_id);
+
+      text = va_arg (args, char *);
+      if (text == NULL)
+        break;
+
+      response_id = va_arg (args, int);
+    }
+}
+
+/**
+ * gtk_info_bar_add_buttons:
+ * @info_bar: a `GtkInfoBar`
+ * @first_button_text: button text
+ * @...: response ID for first button, then more text-response_id pairs,
+ *   ending with %NULL
+ *
+ * Adds multiple buttons.
+ *
+ * This is the same as calling [method@Gtk.InfoBar.add_button]
+ * repeatedly. The variable argument list should be %NULL-terminated
+ * as with [ctor@Gtk.InfoBar.new_with_buttons]. Each button must have both
+ * text and response ID.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_add_buttons (GtkInfoBar  *info_bar,
+                          const char *first_button_text,
+                          ...)
+{
+  va_list args;
+
+  va_start (args, first_button_text);
+  add_buttons_valist (info_bar, first_button_text, args);
+  va_end (args);
+}
+
+/**
+ * gtk_info_bar_new:
+ *
+ * Creates a new `GtkInfoBar` object.
+ *
+ * Returns: a new `GtkInfoBar` object
+ *
+ * Deprecated: 4.10
+ */
+GtkWidget *
+gtk_info_bar_new (void)
+{
+   return g_object_new (GTK_TYPE_INFO_BAR, NULL);
+}
+
+/**
+ * gtk_info_bar_new_with_buttons:
+ * @first_button_text: (nullable): ext to go in first button
+ * @...: response ID for first button, then additional buttons, ending
+ *    with %NULL
+ *
+ * Creates a new `GtkInfoBar` with buttons.
+ *
+ * Button text/response ID pairs should be listed, with a %NULL pointer
+ * ending the list. A response ID can be any positive number,
+ * or one of the values in the `GtkResponseType` enumeration. If the
+ * user clicks one of these dialog buttons, GtkInfoBar will emit
+ * the [signal@Gtk.InfoBar::response] signal with the corresponding
+ * response ID.
+ *
+ * Returns: a new `GtkInfoBar`
+ *
+ * Deprecated: 4.10
+ */
+GtkWidget*
+gtk_info_bar_new_with_buttons (const char *first_button_text,
+                               ...)
+{
+  GtkInfoBar *info_bar;
+  va_list args;
+
+  info_bar = GTK_INFO_BAR (gtk_info_bar_new ());
+
+  va_start (args, first_button_text);
+  add_buttons_valist (info_bar, first_button_text, args);
+  va_end (args);
+
+  return GTK_WIDGET (info_bar);
+}
+
+static void
+update_default_response (GtkInfoBar *info_bar,
+                         int         response_id,
+                         gboolean    sensitive)
+{
+  info_bar->default_response = response_id;
+  info_bar->default_response_sensitive = sensitive;
+
+  if (response_id && sensitive)
+    gtk_widget_add_css_class (GTK_WIDGET (info_bar), "action");
+  else
+    gtk_widget_remove_css_class (GTK_WIDGET (info_bar), "action");
+}
+
+/**
+ * gtk_info_bar_set_response_sensitive:
+ * @info_bar: a `GtkInfoBar`
+ * @response_id: a response ID
+ * @setting: TRUE for sensitive
+ *
+ * Sets the sensitivity of action widgets for @response_id.
+ *
+ * Calls `gtk_widget_set_sensitive (widget, setting)` for each
+ * widget in the info bars’s action area with the given @response_id.
+ * A convenient way to sensitize/desensitize buttons.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_set_response_sensitive (GtkInfoBar *info_bar,
+                                     int         response_id,
+                                     gboolean    setting)
+{
+  GtkWidget *child;
+
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+
+  for (child = gtk_widget_get_first_child (info_bar->action_area);
+       child != NULL;
+       child = gtk_widget_get_next_sibling (child))
+    {
+      ResponseData *rd = get_response_data (child, FALSE);
+
+      if (rd && rd->response_id == response_id)
+        gtk_widget_set_sensitive (child, setting);
+    }
+
+  if (response_id == info_bar->default_response)
+    update_default_response (info_bar, response_id, setting);
+}
+
+/**
+ * gtk_info_bar_set_default_response:
+ * @info_bar: a `GtkInfoBar`
+ * @response_id: a response ID
+ *
+ * Sets the last widget in the info bar’s action area with
+ * the given response_id as the default widget for the dialog.
+ *
+ * Pressing “Enter” normally activates the default widget.
+ *
+ * Note that this function currently requires @info_bar to
+ * be added to a widget hierarchy.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_set_default_response (GtkInfoBar *info_bar,
+                                   int         response_id)
+{
+  GtkWidget *child;
+  GtkWidget *window;
+  gboolean sensitive = TRUE;
+
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+
+  window = gtk_widget_get_ancestor (GTK_WIDGET (info_bar), GTK_TYPE_WINDOW);
+
+  for (child = gtk_widget_get_first_child (info_bar->action_area);
+       child != NULL;
+       child = gtk_widget_get_next_sibling (child))
+    {
+      ResponseData *rd = get_response_data (child, FALSE);
+
+      if (rd && rd->response_id == response_id)
+        {
+          gtk_window_set_default_widget (GTK_WINDOW (window), child);
+          sensitive = gtk_widget_get_sensitive (child);
+          break;
+        }
+    }
+
+  update_default_response (info_bar, response_id, sensitive);
+}
+
+/**
+ * gtk_info_bar_response:
+ * @info_bar: a `GtkInfoBar`
+ * @response_id: a response ID
+ *
+ * Emits the “response” signal with the given @response_id.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_response (GtkInfoBar *info_bar,
+                       int         response_id)
+{
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+
+  g_signal_emit (info_bar, signals[RESPONSE], 0, response_id);
+}
+
+typedef struct
+{
+  char *name;
+  int response_id;
+  int line;
+  int col;
+} ActionWidgetInfo;
+
+typedef struct
+{
+  GtkInfoBar *info_bar;
+  GtkBuilder *builder;
+  GSList *items;
+  int response_id;
+  gboolean is_text;
+  GString *string;
+  int line;
+  int col;
+} SubParserData;
+
+static void
+action_widget_info_free (gpointer data)
+{
+  ActionWidgetInfo *item = data;
+
+  g_free (item->name);
+  g_free (item);
+}
+
+static void
+parser_start_element (GtkBuildableParseContext  *context,
+                      const char                *element_name,
+                      const char               **names,
+                      const char               **values,
+                      gpointer                   user_data,
+                      GError                   **error)
+{
+  SubParserData *data = (SubParserData*)user_data;
+
+  if (strcmp (element_name, "action-widget") == 0)
+    {
+      const char *response;
+      GValue gvalue = G_VALUE_INIT;
+
+      if (!_gtk_builder_check_parent (data->builder, context, "action-widgets", error))
+        return;
+
+      if (!g_markup_collect_attributes (element_name, names, values, error,
+                                        G_MARKUP_COLLECT_STRING, "response", &response,
+                                        G_MARKUP_COLLECT_INVALID))
+        {
+          _gtk_builder_prefix_error (data->builder, context, error);
+          return;
+        }
+
+      if (!gtk_builder_value_from_string_type (data->builder, GTK_TYPE_RESPONSE_TYPE, response, &gvalue, error))
+        {
+          _gtk_builder_prefix_error (data->builder, context, error);
+          return;
+        }
+
+      data->response_id = g_value_get_enum (&gvalue);
+      data->is_text = TRUE;
+      g_string_set_size (data->string, 0);
+      gtk_buildable_parse_context_get_position (context, &data->line, &data->col);
+    }
+  else if (strcmp (element_name, "action-widgets") == 0)
+    {
+      if (!_gtk_builder_check_parent (data->builder, context, "object", error))
+        return;
+
+      if (!g_markup_collect_attributes (element_name, names, values, error,
+                                        G_MARKUP_COLLECT_INVALID, NULL, NULL,
+                                        G_MARKUP_COLLECT_INVALID))
+        _gtk_builder_prefix_error (data->builder, context, error);
+    }
+  else
+    {
+      _gtk_builder_error_unhandled_tag (data->builder, context,
+                                        "GtkInfoBar", element_name,
+                                        error);
+    }
+}
+
+static void
+parser_text_element (GtkBuildableParseContext  *context,
+                     const char                *text,
+                     gsize                      text_len,
+                     gpointer                   user_data,
+                     GError                   **error)
+{
+  SubParserData *data = (SubParserData*)user_data;
+
+  if (data->is_text)
+    g_string_append_len (data->string, text, text_len);
+}
+
+static void
+parser_end_element (GtkBuildableParseContext  *context,
+                    const char                *element_name,
+                    gpointer                   user_data,
+                    GError                   **error)
+{
+  SubParserData *data = (SubParserData*)user_data;
+
+  if (data->is_text)
+    {
+      ActionWidgetInfo *item;
+
+      item = g_new (ActionWidgetInfo, 1);
+      item->name = g_strdup (data->string->str);
+      item->response_id = data->response_id;
+      item->line = data->line;
+      item->col = data->col;
+
+      data->items = g_slist_prepend (data->items, item);
+      data->is_text = FALSE;
+    }
+}
+
+static const GtkBuildableParser sub_parser =
+{
+  parser_start_element,
+  parser_end_element,
+  parser_text_element,
+};
+
+gboolean
+gtk_info_bar_buildable_custom_tag_start (GtkBuildable       *buildable,
+                                         GtkBuilder         *builder,
+                                         GObject            *child,
+                                         const char         *tagname,
+                                         GtkBuildableParser *parser,
+                                         gpointer           *parser_data)
+{
+  SubParserData *data;
+
+  if (parent_buildable_iface->custom_tag_start (buildable, builder, child,
+                                                tagname, parser, parser_data))
+    return TRUE;
+
+  if (!child && strcmp (tagname, "action-widgets") == 0)
+    {
+      data = g_slice_new0 (SubParserData);
+      data->info_bar = GTK_INFO_BAR (buildable);
+      data->builder = builder;
+      data->string = g_string_new ("");
+      data->items = NULL;
+
+      *parser = sub_parser;
+      *parser_data = data;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+static void
+gtk_info_bar_buildable_custom_finished (GtkBuildable *buildable,
+                                        GtkBuilder   *builder,
+                                        GObject      *child,
+                                        const char   *tagname,
+                                        gpointer      user_data)
+{
+  GtkInfoBar *info_bar = GTK_INFO_BAR (buildable);
+  GSList *l;
+  SubParserData *data;
+  GObject *object;
+  ResponseData *ad;
+  guint signal_id;
+
+  if (strcmp (tagname, "action-widgets"))
+    {
+      parent_buildable_iface->custom_finished (buildable, builder, child,
+                                               tagname, user_data);
+      return;
+    }
+
+  data = (SubParserData*)user_data;
+  data->items = g_slist_reverse (data->items);
+
+  for (l = data->items; l; l = l->next)
+    {
+      ActionWidgetInfo *item = l->data;
+
+      object = _gtk_builder_lookup_object (builder, item->name, item->line, item->col);
+      if (!object)
+        continue;
+
+      ad = get_response_data (GTK_WIDGET (object), TRUE);
+      ad->response_id = item->response_id;
+
+      if (GTK_IS_BUTTON (object))
+        signal_id = g_signal_lookup ("clicked", GTK_TYPE_BUTTON);
+      else
+        signal_id = gtk_widget_class_get_activate_signal (GTK_WIDGET_GET_CLASS (object));
+
+      if (signal_id)
+        {
+          GClosure *closure;
+
+          closure = g_cclosure_new_object (G_CALLBACK (action_widget_activated),
+                                           G_OBJECT (info_bar));
+          g_signal_connect_closure_by_id (object, signal_id, 0, closure, FALSE);
+        }
+    }
+
+  g_slist_free_full (data->items, action_widget_info_free);
+  g_string_free (data->string, TRUE);
+  g_slice_free (SubParserData, data);
+}
+
+static void
+gtk_info_bar_buildable_add_child (GtkBuildable *buildable,
+                                  GtkBuilder   *builder,
+                                  GObject      *child,
+                                  const char   *type)
+{
+  GtkInfoBar *info_bar = GTK_INFO_BAR (buildable);
+
+  if (!type && GTK_IS_WIDGET (child))
+    gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), GTK_WIDGET (child));
+  else if (g_strcmp0 (type, "action") == 0)
+    gtk_box_append (GTK_BOX (info_bar->action_area), GTK_WIDGET (child));
+  else
+    parent_buildable_iface->add_child (buildable, builder, child, type);
+}
+
+/**
+ * gtk_info_bar_set_message_type: (attributes org.gtk.Method.set_property=message-type)
+ * @info_bar: a `GtkInfoBar`
+ * @message_type: a `GtkMessageType`
+ *
+ * Sets the message type of the message area.
+ *
+ * GTK uses this type to determine how the message is displayed.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_set_message_type (GtkInfoBar     *info_bar,
+                               GtkMessageType  message_type)
+{
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+
+  if (info_bar->message_type != message_type)
+    {
+      const char *type_class[] = {
+        "info",
+        "warning",
+        "question",
+        "error",
+        NULL
+      };
+
+      if (type_class[info_bar->message_type])
+        gtk_widget_remove_css_class (GTK_WIDGET (info_bar), type_class[info_bar->message_type]);
+
+      info_bar->message_type = message_type;
+
+      gtk_widget_queue_draw (GTK_WIDGET (info_bar));
+
+      if (type_class[info_bar->message_type])
+        gtk_widget_add_css_class (GTK_WIDGET (info_bar), type_class[info_bar->message_type]);
+
+      g_object_notify_by_pspec (G_OBJECT (info_bar), props[PROP_MESSAGE_TYPE]);
+    }
+}
+
+/**
+ * gtk_info_bar_get_message_type: (attributes org.gtk.Method.get_property=message-type)
+ * @info_bar: a `GtkInfoBar`
+ *
+ * Returns the message type of the message area.
+ *
+ * Returns: the message type of the message area.
+ *
+ * Deprecated: 4.10
+ */
+GtkMessageType
+gtk_info_bar_get_message_type (GtkInfoBar *info_bar)
+{
+  g_return_val_if_fail (GTK_IS_INFO_BAR (info_bar), GTK_MESSAGE_OTHER);
+
+  return info_bar->message_type;
+}
+
+
+/**
+ * gtk_info_bar_set_show_close_button: (attributes org.gtk.Method.set_property=show-close-button)
+ * @info_bar: a `GtkInfoBar`
+ * @setting: %TRUE to include a close button
+ *
+ * If true, a standard close button is shown.
+ *
+ * When clicked it emits the response %GTK_RESPONSE_CLOSE.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_set_show_close_button (GtkInfoBar *info_bar,
+                                    gboolean    setting)
+{
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+
+  if (setting == gtk_info_bar_get_show_close_button (info_bar))
+    return;
+
+  gtk_widget_set_visible (info_bar->close_button, setting);
+  g_object_notify_by_pspec (G_OBJECT (info_bar), props[PROP_SHOW_CLOSE_BUTTON]);
+}
+
+/**
+ * gtk_info_bar_get_show_close_button: (attributes org.gtk.Method.get_property=show-close-button)
+ * @info_bar: a `GtkInfoBar`
+ *
+ * Returns whether the widget will display a standard close button.
+ *
+ * Returns: %TRUE if the widget displays standard close button
+ *
+ * Deprecated: 4.10
+ */
+gboolean
+gtk_info_bar_get_show_close_button (GtkInfoBar *info_bar)
+{
+  g_return_val_if_fail (GTK_IS_INFO_BAR (info_bar), FALSE);
+
+  return gtk_widget_get_visible (info_bar->close_button);
+}
+
+/**
+ * gtk_info_bar_set_revealed: (attributes org.gtk.Method.set_property=revealed)
+ * @info_bar: a `GtkInfoBar`
+ * @revealed: The new value of the property
+ *
+ * Sets whether the `GtkInfoBar` is revealed.
+ *
+ * Changing this will make @info_bar reveal or conceal
+ * itself via a sliding transition.
+ *
+ * Note: this does not show or hide @info_bar in the
+ * [property@Gtk.Widget:visible] sense, so revealing has no effect
+ * if [property@Gtk.Widget:visible] is %FALSE.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_set_revealed (GtkInfoBar *info_bar,
+                           gboolean    revealed)
+{
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+
+  if (revealed == gtk_revealer_get_reveal_child (GTK_REVEALER (info_bar->revealer)))
+    return;
+
+  gtk_revealer_set_reveal_child (GTK_REVEALER (info_bar->revealer), revealed);
+  g_object_notify_by_pspec (G_OBJECT (info_bar), props[PROP_REVEALED]);
+}
+
+/**
+ * gtk_info_bar_get_revealed: (attributes org.gtk.Method.get_property=revealed)
+ * @info_bar: a `GtkInfoBar`
+ *
+ * Returns whether the info bar is currently revealed.
+ *
+ * Returns: the current value of the [property@Gtk.InfoBar:revealed] property
+ *
+ * Deprecated: 4.10
+ */
+gboolean
+gtk_info_bar_get_revealed (GtkInfoBar *info_bar)
+{
+  g_return_val_if_fail (GTK_IS_INFO_BAR (info_bar), FALSE);
+
+  return gtk_revealer_get_reveal_child (GTK_REVEALER (info_bar->revealer));
+}
+
+/**
+ * gtk_info_bar_add_child:
+ * @info_bar: a `GtkInfoBar`
+ * @widget: the child to be added
+ *
+ * Adds a widget to the content area of the info bar.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_add_child (GtkInfoBar *info_bar,
+                        GtkWidget  *widget)
+{
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  gtk_box_append (GTK_BOX (info_bar->content_area), widget);
+}
+
+/**
+ * gtk_info_bar_remove_child:
+ * @info_bar: a `GtkInfoBar`
+ * @widget: a child that has been added to the content area
+ *
+ * Removes a widget from the content area of the info bar.
+ *
+ * Deprecated: 4.10
+ */
+void
+gtk_info_bar_remove_child (GtkInfoBar *info_bar,
+                           GtkWidget  *widget)
+{
+  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  gtk_box_remove (GTK_BOX (info_bar->content_area), widget);
+}
diff --git a/gtk/deprecated/gtkinfobar.h b/gtk/deprecated/gtkinfobar.h
new file mode 100644 (file)
index 0000000..d88d595
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * gtkinfobar.h
+ * This file is part of GTK
+ *
+ * Copyright (C) 2005 - Paolo Maggi
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Modified by the gedit Team, 2005. See the gedit AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the gedit ChangeLog files for a list of changes.
+ *
+ * Modified by the GTK+ Team, 2008-2009.
+ */
+
+#ifndef __GTK_INFO_BAR_H__
+#define __GTK_INFO_BAR_H__
+
+#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
+#error "Only <gtk/gtk.h> can be included directly."
+#endif
+
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkenums.h>
+
+G_BEGIN_DECLS
+
+#define GTK_TYPE_INFO_BAR              (gtk_info_bar_get_type())
+#define GTK_INFO_BAR(obj)              (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INFO_BAR, GtkInfoBar))
+#define GTK_IS_INFO_BAR(obj)           (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INFO_BAR))
+
+typedef struct _GtkInfoBar GtkInfoBar;
+
+GDK_AVAILABLE_IN_ALL
+GType          gtk_info_bar_get_type               (void) G_GNUC_CONST;
+GDK_DEPRECATED_IN_4_10
+GtkWidget     *gtk_info_bar_new                    (void);
+
+GDK_DEPRECATED_IN_4_10
+GtkWidget     *gtk_info_bar_new_with_buttons       (const char     *first_button_text,
+                                                    ...);
+
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_add_action_widget      (GtkInfoBar     *info_bar,
+                                                    GtkWidget      *child,
+                                                    int             response_id);
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_remove_action_widget   (GtkInfoBar     *info_bar,
+                                                    GtkWidget      *widget);
+GDK_DEPRECATED_IN_4_10
+GtkWidget     *gtk_info_bar_add_button             (GtkInfoBar     *info_bar,
+                                                    const char     *button_text,
+                                                    int             response_id);
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_add_buttons            (GtkInfoBar     *info_bar,
+                                                    const char     *first_button_text,
+                                                    ...);
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_add_child              (GtkInfoBar     *info_bar,
+                                                    GtkWidget      *widget);
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_remove_child           (GtkInfoBar     *info_bar,
+                                                    GtkWidget      *widget);
+
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_set_response_sensitive (GtkInfoBar     *info_bar,
+                                                    int             response_id,
+                                                    gboolean        setting);
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_set_default_response   (GtkInfoBar     *info_bar,
+                                                    int             response_id);
+
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_response               (GtkInfoBar     *info_bar,
+                                                    int             response_id);
+
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_set_message_type       (GtkInfoBar     *info_bar,
+                                                    GtkMessageType  message_type);
+GDK_DEPRECATED_IN_4_10
+GtkMessageType gtk_info_bar_get_message_type       (GtkInfoBar     *info_bar);
+
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_set_show_close_button  (GtkInfoBar     *info_bar,
+                                                    gboolean        setting);
+GDK_DEPRECATED_IN_4_10
+gboolean       gtk_info_bar_get_show_close_button  (GtkInfoBar     *info_bar);
+
+GDK_DEPRECATED_IN_4_10
+void           gtk_info_bar_set_revealed           (GtkInfoBar     *info_bar,
+                                                    gboolean        revealed);
+GDK_DEPRECATED_IN_4_10
+gboolean       gtk_info_bar_get_revealed           (GtkInfoBar     *info_bar);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkInfoBar, g_object_unref)
+
+G_END_DECLS
+
+#endif  /* __GTK_INFO_BAR_H__  */
index 4749be6085c430e7e63ae680b6bdc40b22f1a8b3..600934b02d6d6f8777ef08617aefaf34835c08b3 100644 (file)
@@ -29,6 +29,7 @@ gtk_deprecated_sources = [
   'deprecated/gtkfontbutton.c',
   'deprecated/gtkfontchooser.c',
   'deprecated/gtkiconview.c',
+  'deprecated/gtkinfobar.c',
   'deprecated/gtkliststore.c',
   'deprecated/gtkrender.c',
   'deprecated/gtkstylecontext.c',
@@ -83,6 +84,7 @@ gtk_deprecated_headers = [
   'deprecated/gtkfontchooserdialog.h',
   'deprecated/gtkfontchooserwidget.h',
   'deprecated/gtkiconview.h',
+  'deprecated/gtkinfobar.h',
   'deprecated/gtkliststore.h',
   'deprecated/gtkmessagedialog.h',
   'deprecated/gtkrender.h',
index 10c03f308620234eeee280226a456507860dc21b..16263a59d91570b6dde1cf50a994f862daa8030a 100644 (file)
--- a/gtk/gtk.h
+++ b/gtk/gtk.h
 #include <gtk/gtkimcontext.h>
 #include <gtk/gtkimcontextsimple.h>
 #include <gtk/gtkimmulticontext.h>
-#include <gtk/gtkinfobar.h>
+#include <gtk/deprecated/gtkinfobar.h>
 #include <gtk/gtkinscription.h>
 #include <gtk/gtklabel.h>
 #include <gtk/gtklayoutmanager.h>
diff --git a/gtk/gtkinfobar.c b/gtk/gtkinfobar.c
deleted file mode 100644 (file)
index 82b27a9..0000000
+++ /dev/null
@@ -1,1234 +0,0 @@
-/*
- * gtkinfobar.c
- * This file is part of GTK
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gtk Team.
- * See the gedit ChangeLog files for a list of changes.
- *
- * Modified by the GTK+ team, 2008-2009.
- */
-
-
-#include "config.h"
-
-#include <stdlib.h>
-
-#include "gtkinfobar.h"
-#include "gtkbuildable.h"
-#include "gtkbuilderprivate.h"
-#include "gtkbox.h"
-#include "gtklabel.h"
-#include "gtkbutton.h"
-#include "gtkenums.h"
-#include "deprecated/gtkdialog.h"
-#include "gtkrevealer.h"
-#include "gtkprivate.h"
-#include "gtktypebuiltins.h"
-#include "gtkwidgetprivate.h"
-#include "gtkbinlayout.h"
-#include "gtkgestureclick.h"
-
-/**
- * GtkInfoBar:
- *
- * `GtkInfoBar` can be show messages to the user without a dialog.
- *
- * ![An example GtkInfoBar](info-bar.png)
- *
- * It is often temporarily shown at the top or bottom of a document.
- * In contrast to [class@Gtk.Dialog], which has an action area at the
- * bottom, `GtkInfoBar` has an action area at the side.
- *
- * The API of `GtkInfoBar` is very similar to `GtkDialog`, allowing you
- * to add buttons to the action area with [method@Gtk.InfoBar.add_button]
- * or [ctor@Gtk.InfoBar.new_with_buttons]. The sensitivity of action widgets
- * can be controlled with [method@Gtk.InfoBar.set_response_sensitive].
- *
- * To add widgets to the main content area of a `GtkInfoBar`, use
- * [method@Gtk.InfoBar.add_child].
- *
- * Similar to [class@Gtk.MessageDialog], the contents of a `GtkInfoBar`
- * can by classified as error message, warning, informational message, etc,
- * by using [method@Gtk.InfoBar.set_message_type]. GTK may use the message
- * type to determine how the message is displayed.
- *
- * A simple example for using a `GtkInfoBar`:
- * ```c
- * GtkWidget *message_label;
- * GtkWidget *widget;
- * GtkWidget *grid;
- * GtkInfoBar *bar;
- *
- * // set up info bar
- * widget = gtk_info_bar_new ();
- * bar = GTK_INFO_BAR (widget);
- * grid = gtk_grid_new ();
- *
- * message_label = gtk_label_new ("");
- * gtk_info_bar_add_child (bar, message_label);
- * gtk_info_bar_add_button (bar,
- *                          _("_OK"),
- *                          GTK_RESPONSE_OK);
- * g_signal_connect (bar,
- *                   "response",
- *                   G_CALLBACK (gtk_widget_hide),
- *                   NULL);
- * gtk_grid_attach (GTK_GRID (grid),
- *                  widget,
- *                  0, 2, 1, 1);
- *
- * // ...
- *
- * // show an error message
- * gtk_label_set_text (GTK_LABEL (message_label), "An error occurred!");
- * gtk_info_bar_set_message_type (bar, GTK_MESSAGE_ERROR);
- * gtk_widget_show (bar);
- * ```
- *
- * # GtkInfoBar as GtkBuildable
- *
- * `GtkInfoBar` supports a custom `<action-widgets>` element, which can contain
- * multiple `<action-widget>` elements. The “response” attribute specifies a
- * numeric response, and the content of the element is the id of widget
- * (which should be a child of the dialogs @action_area).
- *
- * `GtkInfoBar` supports adding action widgets by specifying “action” as
- * the “type” attribute of a `<child>` element. The widget will be added
- * either to the action area. The response id has to be associated
- * with the action widget using the `<action-widgets>` element.
- *
- * # CSS nodes
- *
- * `GtkInfoBar` has a single CSS node with name infobar. The node may get
- * one of the style classes .info, .warning, .error or .question, depending
- * on the message type.
- * If the info bar shows a close button, that button will have the .close
- * style class applied.
- */
-
-enum
-{
-  PROP_0,
-  PROP_MESSAGE_TYPE,
-  PROP_SHOW_CLOSE_BUTTON,
-  PROP_REVEALED,
-  LAST_PROP
-};
-
-typedef struct _GtkInfoBarClass GtkInfoBarClass;
-
-struct _GtkInfoBar
-{
-  GtkWidget parent_instance;
-
-  GtkWidget *content_area;
-  GtkWidget *action_area;
-  GtkWidget *close_button;
-  GtkWidget *revealer;
-
-  GtkMessageType message_type;
-  int default_response;
-  gboolean default_response_sensitive;
-};
-
-struct _GtkInfoBarClass
-{
-  GtkWidgetClass parent_class;
-
-  void (* response) (GtkInfoBar *info_bar, int response_id);
-  void (* close)    (GtkInfoBar *info_bar);
-};
-
-typedef struct _ResponseData ResponseData;
-
-struct _ResponseData
-{
-  int response_id;
-  gulong handler_id;
-};
-
-enum
-{
-  RESPONSE,
-  CLOSE,
-  LAST_SIGNAL
-};
-
-static GParamSpec *props[LAST_PROP] = { NULL, };
-static guint signals[LAST_SIGNAL];
-
-static void     gtk_info_bar_set_property (GObject        *object,
-                                           guint           prop_id,
-                                           const GValue   *value,
-                                           GParamSpec     *pspec);
-static void     gtk_info_bar_get_property (GObject        *object,
-                                           guint           prop_id,
-                                           GValue         *value,
-                                           GParamSpec     *pspec);
-static void     gtk_info_bar_buildable_interface_init   (GtkBuildableIface  *iface);
-static gboolean gtk_info_bar_buildable_custom_tag_start (GtkBuildable       *buildable,
-                                                         GtkBuilder         *builder,
-                                                         GObject            *child,
-                                                         const char         *tagname,
-                                                         GtkBuildableParser *parser,
-                                                         gpointer           *data);
-static void     gtk_info_bar_buildable_custom_finished  (GtkBuildable       *buildable,
-                                                         GtkBuilder         *builder,
-                                                         GObject            *child,
-                                                         const char         *tagname,
-                                                         gpointer            user_data);
-static void      gtk_info_bar_buildable_add_child       (GtkBuildable *buildable,
-                                                         GtkBuilder   *builder,
-                                                         GObject      *child,
-                                                         const char   *type);
-
-
-
-G_DEFINE_TYPE_WITH_CODE (GtkInfoBar, gtk_info_bar, GTK_TYPE_WIDGET,
-                         G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
-                                                gtk_info_bar_buildable_interface_init))
-
-static void
-gtk_info_bar_set_property (GObject      *object,
-                           guint         prop_id,
-                           const GValue *value,
-                           GParamSpec   *pspec)
-{
-  GtkInfoBar *info_bar = GTK_INFO_BAR (object);
-
-  switch (prop_id)
-    {
-    case PROP_MESSAGE_TYPE:
-      gtk_info_bar_set_message_type (info_bar, g_value_get_enum (value));
-      break;
-    case PROP_SHOW_CLOSE_BUTTON:
-      gtk_info_bar_set_show_close_button (info_bar, g_value_get_boolean (value));
-      break;
-    case PROP_REVEALED:
-      gtk_info_bar_set_revealed (info_bar, g_value_get_boolean (value));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-gtk_info_bar_get_property (GObject    *object,
-                           guint       prop_id,
-                           GValue     *value,
-                           GParamSpec *pspec)
-{
-  GtkInfoBar *info_bar = GTK_INFO_BAR (object);
-
-  switch (prop_id)
-    {
-    case PROP_MESSAGE_TYPE:
-      g_value_set_enum (value, gtk_info_bar_get_message_type (info_bar));
-      break;
-    case PROP_SHOW_CLOSE_BUTTON:
-      g_value_set_boolean (value, gtk_info_bar_get_show_close_button (info_bar));
-      break;
-    case PROP_REVEALED:
-      g_value_set_boolean (value, gtk_info_bar_get_revealed (info_bar));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-response_data_free (gpointer data)
-{
-  g_slice_free (ResponseData, data);
-}
-
-static ResponseData *
-get_response_data (GtkWidget *widget,
-                   gboolean   create)
-{
-  ResponseData *ad = g_object_get_data (G_OBJECT (widget),
-                                        "gtk-info-bar-response-data");
-
-  if (ad == NULL && create)
-    {
-      ad = g_slice_new (ResponseData);
-
-      g_object_set_data_full (G_OBJECT (widget),
-                              I_("gtk-info-bar-response-data"),
-                              ad,
-                              response_data_free);
-    }
-
-  return ad;
-}
-
-static void
-clear_response_data (GtkWidget *widget)
-{
-  ResponseData *data;
-
-  data = get_response_data (widget, FALSE);
-  g_signal_handler_disconnect (widget, data->handler_id);
-  g_object_set_data (G_OBJECT (widget), "gtk-info-bar-response-data", NULL);
-}
-
-static GtkWidget *
-find_button (GtkInfoBar *info_bar,
-             int         response_id)
-{
-  GtkWidget *child;
-
-  for (child = gtk_widget_get_first_child (info_bar->action_area);
-       child != NULL;
-       child = gtk_widget_get_next_sibling (child))
-    {
-      ResponseData *rd = get_response_data (child, FALSE);
-
-      if (rd && rd->response_id == response_id)
-        return child;
-    }
-
-  return NULL;
-}
-
-static void
-gtk_info_bar_close (GtkInfoBar *info_bar)
-{
-  if (!gtk_widget_get_visible (info_bar->close_button) &&
-      !find_button (info_bar, GTK_RESPONSE_CANCEL))
-    return;
-
-  gtk_info_bar_response (GTK_INFO_BAR (info_bar),
-                         GTK_RESPONSE_CANCEL);
-}
-
-static void
-gtk_info_bar_dispose (GObject *object)
-{
-  GtkInfoBar *self = GTK_INFO_BAR (object);
-
-  g_clear_pointer (&self->revealer, gtk_widget_unparent);
-
-  G_OBJECT_CLASS (gtk_info_bar_parent_class)->dispose (object);
-}
-
-static void
-gtk_info_bar_class_init (GtkInfoBarClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-  object_class->get_property = gtk_info_bar_get_property;
-  object_class->set_property = gtk_info_bar_set_property;
-  object_class->dispose = gtk_info_bar_dispose;
-
-  klass->close = gtk_info_bar_close;
-
-  /**
-   * GtkInfoBar:message-type: (attributes org.gtk.Property.get=gtk_info_bar_get_message_type org.gtk.Property.set=gtk_info_bar_set_message_type)
-   *
-   * The type of the message.
-   *
-   * The type may be used to determine the appearance of the info bar.
-   */
-  props[PROP_MESSAGE_TYPE] =
-    g_param_spec_enum ("message-type", NULL, NULL,
-                       GTK_TYPE_MESSAGE_TYPE,
-                       GTK_MESSAGE_INFO,
-                       GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
-
-  /**
-   * GtkInfoBar:show-close-button: (attributes org.gtk.Property.get=gtk_info_bar_get_show_close_button org.gtk.Property.set=gtk_info_bar_set_show_close_button)
-   *
-   * Whether to include a standard close button.
-   */
-  props[PROP_SHOW_CLOSE_BUTTON] =
-    g_param_spec_boolean ("show-close-button", NULL, NULL,
-                          FALSE,
-                          GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
-
-  /**
-   * GtkInfoBar:revealed: (attributes org.gtk.Property.get=gtk_info_bar_get_revealed org.gtk.Property.set=gtk_info_bar_set_revealed)
-   *
-   * Whether the info bar shows its contents.
-   */
-  props[PROP_REVEALED] =
-    g_param_spec_boolean ("revealed", NULL, NULL,
-                          TRUE,
-                          GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
-
-  g_object_class_install_properties (object_class, LAST_PROP, props);
-
-  /**
-   * GtkInfoBar::response:
-   * @info_bar: the object on which the signal is emitted
-   * @response_id: the response ID
-   *
-   * Emitted when an action widget is clicked.
-   *
-   * The signal is also emitted when the application programmer
-   * calls [method@Gtk.InfoBar.response]. The @response_id depends
-   * on which action widget was clicked.
-   */
-  signals[RESPONSE] = g_signal_new (I_("response"),
-                                    G_OBJECT_CLASS_TYPE (klass),
-                                    G_SIGNAL_RUN_LAST,
-                                    G_STRUCT_OFFSET (GtkInfoBarClass, response),
-                                    NULL, NULL,
-                                    NULL,
-                                    G_TYPE_NONE, 1,
-                                    G_TYPE_INT);
-
-  /**
-   * GtkInfoBar::close:
-   *
-   * Gets emitted when the user uses a keybinding to dismiss the info bar.
-   *
-   * The ::close signal is a [keybinding signal](class.SignalAction.html).
-   *
-   * The default binding for this signal is the Escape key.
-   */
-  signals[CLOSE] =  g_signal_new (I_("close"),
-                                  G_OBJECT_CLASS_TYPE (klass),
-                                  G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                                  G_STRUCT_OFFSET (GtkInfoBarClass, close),
-                                  NULL, NULL,
-                                  NULL,
-                                  G_TYPE_NONE, 0);
-
-  gtk_widget_class_add_binding_signal (widget_class,
-                                       GDK_KEY_Escape, 0,
-                                       "close",
-                                       NULL);
-
-  gtk_widget_class_set_css_name (widget_class, I_("infobar"));
-  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
-}
-
-static void
-close_button_clicked_cb (GtkWidget  *button,
-                         GtkInfoBar *info_bar)
-{
-  gtk_info_bar_response (GTK_INFO_BAR (info_bar), GTK_RESPONSE_CLOSE);
-}
-
-static void
-click_released_cb (GtkGestureClick *gesture,
-                   guint            n_press,
-                   double           x,
-                   double           y,
-                   GtkInfoBar      *info_bar)
-{
-  if (info_bar->default_response && info_bar->default_response_sensitive)
-    gtk_info_bar_response (info_bar, info_bar->default_response);
-}
-
-static void
-gtk_info_bar_init (GtkInfoBar *info_bar)
-{
-  GtkWidget *widget = GTK_WIDGET (info_bar);
-  GtkWidget *main_box;
-  GtkGesture *gesture;
-
-  /* message-type is a CONSTRUCT property, so we init to a value
-   * different from its default to trigger its property setter
-   * during construction */
-  info_bar->message_type = GTK_MESSAGE_OTHER;
-
-  info_bar->revealer = gtk_revealer_new ();
-  gtk_revealer_set_reveal_child (GTK_REVEALER (info_bar->revealer), TRUE);
-  gtk_widget_set_parent (info_bar->revealer, widget);
-
-  main_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-  gtk_revealer_set_child (GTK_REVEALER (info_bar->revealer), main_box);
-
-  info_bar->content_area = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-  gtk_widget_set_hexpand (info_bar->content_area, TRUE);
-  gtk_box_append (GTK_BOX (main_box), info_bar->content_area);
-
-  info_bar->action_area = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-  gtk_widget_set_halign (info_bar->action_area, GTK_ALIGN_END);
-  gtk_widget_set_valign (info_bar->action_area, GTK_ALIGN_CENTER);
-  gtk_box_append (GTK_BOX (main_box), info_bar->action_area);
-
-  info_bar->close_button = gtk_button_new_from_icon_name ("window-close-symbolic");
-  gtk_widget_hide (info_bar->close_button);
-  gtk_widget_set_valign (info_bar->close_button, GTK_ALIGN_CENTER);
-  gtk_widget_add_css_class (info_bar->close_button, "close");
-  gtk_box_append (GTK_BOX (main_box), info_bar->close_button);
-  g_signal_connect (info_bar->close_button, "clicked",
-                    G_CALLBACK (close_button_clicked_cb), info_bar);
-
-  gesture = gtk_gesture_click_new ();
-  gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_PRIMARY);
-  g_signal_connect (gesture, "released", G_CALLBACK (click_released_cb), widget);
-  gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture));
-}
-
-static GtkBuildableIface *parent_buildable_iface;
-
-static void
-gtk_info_bar_buildable_interface_init (GtkBuildableIface *iface)
-{
-  parent_buildable_iface = g_type_interface_peek_parent (iface);
-
-  iface->add_child = gtk_info_bar_buildable_add_child;
-  iface->custom_tag_start = gtk_info_bar_buildable_custom_tag_start;
-  iface->custom_finished = gtk_info_bar_buildable_custom_finished;
-}
-
-static int
-get_response_for_widget (GtkInfoBar *info_bar,
-                         GtkWidget  *widget)
-{
-  ResponseData *rd;
-
-  rd = get_response_data (widget, FALSE);
-  if (!rd)
-    return GTK_RESPONSE_NONE;
-  else
-    return rd->response_id;
-}
-
-static void
-action_widget_activated (GtkWidget  *widget,
-                         GtkInfoBar *info_bar)
-{
-  int response_id;
-
-  response_id = get_response_for_widget (info_bar, widget);
-  gtk_info_bar_response (info_bar, response_id);
-}
-
-/**
- * gtk_info_bar_add_action_widget:
- * @info_bar: a `GtkInfoBar`
- * @child: an activatable widget
- * @response_id: response ID for @child
- *
- * Add an activatable widget to the action area of a `GtkInfoBar`.
- *
- * This also connects a signal handler that will emit the
- * [signal@Gtk.InfoBar::response] signal on the message area
- * when the widget is activated. The widget is appended to the
- * end of the message areas action area.
- */
-void
-gtk_info_bar_add_action_widget (GtkInfoBar *info_bar,
-                                GtkWidget  *child,
-                                int         response_id)
-{
-  ResponseData *ad;
-  guint signal_id;
-
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-  g_return_if_fail (GTK_IS_WIDGET (child));
-
-  ad = get_response_data (child, TRUE);
-
-  G_DEBUG_HERE();
-  ad->response_id = response_id;
-
-  if (GTK_IS_BUTTON (child))
-    signal_id = g_signal_lookup ("clicked", GTK_TYPE_BUTTON);
-  else
-    signal_id = gtk_widget_class_get_activate_signal (GTK_WIDGET_GET_CLASS (child));
-
-  if (signal_id)
-    {
-      GClosure *closure;
-
-      closure = g_cclosure_new_object (G_CALLBACK (action_widget_activated),
-                                       G_OBJECT (info_bar));
-      ad->handler_id = g_signal_connect_closure_by_id (child, signal_id, 0, closure, FALSE);
-    }
-  else
-    g_warning ("Only 'activatable' widgets can be packed into the action area of a GtkInfoBar");
-
-  gtk_box_append (GTK_BOX (info_bar->action_area), child);
-}
-
-/**
- * gtk_info_bar_remove_action_widget:
- * @info_bar: a `GtkInfoBar`
- * @widget: an action widget to remove
- *
- * Removes a widget from the action area of @info_bar.
- *
- * The widget must have been put there by a call to
- * [method@Gtk.InfoBar.add_action_widget] or [method@Gtk.InfoBar.add_button].
- */
-void
-gtk_info_bar_remove_action_widget (GtkInfoBar *info_bar,
-                                   GtkWidget  *widget)
-{
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-  g_return_if_fail (GTK_IS_WIDGET (widget));
-  g_return_if_fail (gtk_widget_get_parent (widget) == info_bar->action_area);
-
-  clear_response_data (widget);
-
-  gtk_box_remove (GTK_BOX (info_bar->action_area), widget);
-}
-
-/**
- * gtk_info_bar_add_button:
- * @info_bar: a `GtkInfoBar`
- * @button_text: text of button
- * @response_id: response ID for the button
- *
- * Adds a button with the given text.
- *
- * Clicking the button will emit the [signal@Gtk.InfoBar::response]
- * signal with the given response_id. The button is appended to the
- * end of the info bars's action area. The button widget is returned,
- * but usually you don't need it.
- *
- * Returns: (transfer none) (type Gtk.Button): the `GtkButton` widget
- * that was added
- */
-GtkWidget*
-gtk_info_bar_add_button (GtkInfoBar  *info_bar,
-                         const char *button_text,
-                         int          response_id)
-{
-  GtkWidget *button;
-
-  g_return_val_if_fail (GTK_IS_INFO_BAR (info_bar), NULL);
-  g_return_val_if_fail (button_text != NULL, NULL);
-
-  button = gtk_button_new_with_label (button_text);
-  gtk_button_set_use_underline (GTK_BUTTON (button), TRUE);
-
-  gtk_widget_show (button);
-
-  gtk_info_bar_add_action_widget (info_bar, button, response_id);
-
-  return button;
-}
-
-static void
-add_buttons_valist (GtkInfoBar  *info_bar,
-                    const char *first_button_text,
-                    va_list      args)
-{
-  const char * text;
-  int response_id;
-
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-
-  if (first_button_text == NULL)
-    return;
-
-  text = first_button_text;
-  response_id = va_arg (args, int);
-
-  while (text != NULL)
-    {
-      gtk_info_bar_add_button (info_bar, text, response_id);
-
-      text = va_arg (args, char *);
-      if (text == NULL)
-        break;
-
-      response_id = va_arg (args, int);
-    }
-}
-
-/**
- * gtk_info_bar_add_buttons:
- * @info_bar: a `GtkInfoBar`
- * @first_button_text: button text
- * @...: response ID for first button, then more text-response_id pairs,
- *   ending with %NULL
- *
- * Adds multiple buttons.
- *
- * This is the same as calling [method@Gtk.InfoBar.add_button]
- * repeatedly. The variable argument list should be %NULL-terminated
- * as with [ctor@Gtk.InfoBar.new_with_buttons]. Each button must have both
- * text and response ID.
- */
-void
-gtk_info_bar_add_buttons (GtkInfoBar  *info_bar,
-                          const char *first_button_text,
-                          ...)
-{
-  va_list args;
-
-  va_start (args, first_button_text);
-  add_buttons_valist (info_bar, first_button_text, args);
-  va_end (args);
-}
-
-/**
- * gtk_info_bar_new:
- *
- * Creates a new `GtkInfoBar` object.
- *
- * Returns: a new `GtkInfoBar` object
- */
-GtkWidget *
-gtk_info_bar_new (void)
-{
-   return g_object_new (GTK_TYPE_INFO_BAR, NULL);
-}
-
-/**
- * gtk_info_bar_new_with_buttons:
- * @first_button_text: (nullable): ext to go in first button
- * @...: response ID for first button, then additional buttons, ending
- *    with %NULL
- *
- * Creates a new `GtkInfoBar` with buttons.
- *
- * Button text/response ID pairs should be listed, with a %NULL pointer
- * ending the list. A response ID can be any positive number,
- * or one of the values in the `GtkResponseType` enumeration. If the
- * user clicks one of these dialog buttons, GtkInfoBar will emit
- * the [signal@Gtk.InfoBar::response] signal with the corresponding
- * response ID.
- *
- * Returns: a new `GtkInfoBar`
- */
-GtkWidget*
-gtk_info_bar_new_with_buttons (const char *first_button_text,
-                               ...)
-{
-  GtkInfoBar *info_bar;
-  va_list args;
-
-  info_bar = GTK_INFO_BAR (gtk_info_bar_new ());
-
-  va_start (args, first_button_text);
-  add_buttons_valist (info_bar, first_button_text, args);
-  va_end (args);
-
-  return GTK_WIDGET (info_bar);
-}
-
-static void
-update_default_response (GtkInfoBar *info_bar,
-                         int         response_id,
-                         gboolean    sensitive)
-{
-  info_bar->default_response = response_id;
-  info_bar->default_response_sensitive = sensitive;
-
-  if (response_id && sensitive)
-    gtk_widget_add_css_class (GTK_WIDGET (info_bar), "action");
-  else
-    gtk_widget_remove_css_class (GTK_WIDGET (info_bar), "action");
-}
-
-/**
- * gtk_info_bar_set_response_sensitive:
- * @info_bar: a `GtkInfoBar`
- * @response_id: a response ID
- * @setting: TRUE for sensitive
- *
- * Sets the sensitivity of action widgets for @response_id.
- *
- * Calls `gtk_widget_set_sensitive (widget, setting)` for each
- * widget in the info bars’s action area with the given @response_id.
- * A convenient way to sensitize/desensitize buttons.
- */
-void
-gtk_info_bar_set_response_sensitive (GtkInfoBar *info_bar,
-                                     int         response_id,
-                                     gboolean    setting)
-{
-  GtkWidget *child;
-
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-
-  for (child = gtk_widget_get_first_child (info_bar->action_area);
-       child != NULL;
-       child = gtk_widget_get_next_sibling (child))
-    {
-      ResponseData *rd = get_response_data (child, FALSE);
-
-      if (rd && rd->response_id == response_id)
-        gtk_widget_set_sensitive (child, setting);
-    }
-
-  if (response_id == info_bar->default_response)
-    update_default_response (info_bar, response_id, setting);
-}
-
-/**
- * gtk_info_bar_set_default_response:
- * @info_bar: a `GtkInfoBar`
- * @response_id: a response ID
- *
- * Sets the last widget in the info bar’s action area with
- * the given response_id as the default widget for the dialog.
- *
- * Pressing “Enter” normally activates the default widget.
- *
- * Note that this function currently requires @info_bar to
- * be added to a widget hierarchy.
- */
-void
-gtk_info_bar_set_default_response (GtkInfoBar *info_bar,
-                                   int         response_id)
-{
-  GtkWidget *child;
-  GtkWidget *window;
-  gboolean sensitive = TRUE;
-
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-
-  window = gtk_widget_get_ancestor (GTK_WIDGET (info_bar), GTK_TYPE_WINDOW);
-
-  for (child = gtk_widget_get_first_child (info_bar->action_area);
-       child != NULL;
-       child = gtk_widget_get_next_sibling (child))
-    {
-      ResponseData *rd = get_response_data (child, FALSE);
-
-      if (rd && rd->response_id == response_id)
-        {
-          gtk_window_set_default_widget (GTK_WINDOW (window), child);
-          sensitive = gtk_widget_get_sensitive (child);
-          break;
-        }
-    }
-
-  update_default_response (info_bar, response_id, sensitive);
-}
-
-/**
- * gtk_info_bar_response:
- * @info_bar: a `GtkInfoBar`
- * @response_id: a response ID
- *
- * Emits the “response” signal with the given @response_id.
- */
-void
-gtk_info_bar_response (GtkInfoBar *info_bar,
-                       int         response_id)
-{
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-
-  g_signal_emit (info_bar, signals[RESPONSE], 0, response_id);
-}
-
-typedef struct
-{
-  char *name;
-  int response_id;
-  int line;
-  int col;
-} ActionWidgetInfo;
-
-typedef struct
-{
-  GtkInfoBar *info_bar;
-  GtkBuilder *builder;
-  GSList *items;
-  int response_id;
-  gboolean is_text;
-  GString *string;
-  int line;
-  int col;
-} SubParserData;
-
-static void
-action_widget_info_free (gpointer data)
-{
-  ActionWidgetInfo *item = data;
-
-  g_free (item->name);
-  g_free (item);
-}
-
-static void
-parser_start_element (GtkBuildableParseContext  *context,
-                      const char                *element_name,
-                      const char               **names,
-                      const char               **values,
-                      gpointer                   user_data,
-                      GError                   **error)
-{
-  SubParserData *data = (SubParserData*)user_data;
-
-  if (strcmp (element_name, "action-widget") == 0)
-    {
-      const char *response;
-      GValue gvalue = G_VALUE_INIT;
-
-      if (!_gtk_builder_check_parent (data->builder, context, "action-widgets", error))
-        return;
-
-      if (!g_markup_collect_attributes (element_name, names, values, error,
-                                        G_MARKUP_COLLECT_STRING, "response", &response,
-                                        G_MARKUP_COLLECT_INVALID))
-        {
-          _gtk_builder_prefix_error (data->builder, context, error);
-          return;
-        }
-
-      if (!gtk_builder_value_from_string_type (data->builder, GTK_TYPE_RESPONSE_TYPE, response, &gvalue, error))
-        {
-          _gtk_builder_prefix_error (data->builder, context, error);
-          return;
-        }
-
-      data->response_id = g_value_get_enum (&gvalue);
-      data->is_text = TRUE;
-      g_string_set_size (data->string, 0);
-      gtk_buildable_parse_context_get_position (context, &data->line, &data->col);
-    }
-  else if (strcmp (element_name, "action-widgets") == 0)
-    {
-      if (!_gtk_builder_check_parent (data->builder, context, "object", error))
-        return;
-
-      if (!g_markup_collect_attributes (element_name, names, values, error,
-                                        G_MARKUP_COLLECT_INVALID, NULL, NULL,
-                                        G_MARKUP_COLLECT_INVALID))
-        _gtk_builder_prefix_error (data->builder, context, error);
-    }
-  else
-    {
-      _gtk_builder_error_unhandled_tag (data->builder, context,
-                                        "GtkInfoBar", element_name,
-                                        error);
-    }
-}
-
-static void
-parser_text_element (GtkBuildableParseContext  *context,
-                     const char                *text,
-                     gsize                      text_len,
-                     gpointer                   user_data,
-                     GError                   **error)
-{
-  SubParserData *data = (SubParserData*)user_data;
-
-  if (data->is_text)
-    g_string_append_len (data->string, text, text_len);
-}
-
-static void
-parser_end_element (GtkBuildableParseContext  *context,
-                    const char                *element_name,
-                    gpointer                   user_data,
-                    GError                   **error)
-{
-  SubParserData *data = (SubParserData*)user_data;
-
-  if (data->is_text)
-    {
-      ActionWidgetInfo *item;
-
-      item = g_new (ActionWidgetInfo, 1);
-      item->name = g_strdup (data->string->str);
-      item->response_id = data->response_id;
-      item->line = data->line;
-      item->col = data->col;
-
-      data->items = g_slist_prepend (data->items, item);
-      data->is_text = FALSE;
-    }
-}
-
-static const GtkBuildableParser sub_parser =
-{
-  parser_start_element,
-  parser_end_element,
-  parser_text_element,
-};
-
-gboolean
-gtk_info_bar_buildable_custom_tag_start (GtkBuildable       *buildable,
-                                         GtkBuilder         *builder,
-                                         GObject            *child,
-                                         const char         *tagname,
-                                         GtkBuildableParser *parser,
-                                         gpointer           *parser_data)
-{
-  SubParserData *data;
-
-  if (parent_buildable_iface->custom_tag_start (buildable, builder, child,
-                                                tagname, parser, parser_data))
-    return TRUE;
-
-  if (!child && strcmp (tagname, "action-widgets") == 0)
-    {
-      data = g_slice_new0 (SubParserData);
-      data->info_bar = GTK_INFO_BAR (buildable);
-      data->builder = builder;
-      data->string = g_string_new ("");
-      data->items = NULL;
-
-      *parser = sub_parser;
-      *parser_data = data;
-      return TRUE;
-    }
-
-  return FALSE;
-}
-
-static void
-gtk_info_bar_buildable_custom_finished (GtkBuildable *buildable,
-                                        GtkBuilder   *builder,
-                                        GObject      *child,
-                                        const char   *tagname,
-                                        gpointer      user_data)
-{
-  GtkInfoBar *info_bar = GTK_INFO_BAR (buildable);
-  GSList *l;
-  SubParserData *data;
-  GObject *object;
-  ResponseData *ad;
-  guint signal_id;
-
-  if (strcmp (tagname, "action-widgets"))
-    {
-      parent_buildable_iface->custom_finished (buildable, builder, child,
-                                               tagname, user_data);
-      return;
-    }
-
-  data = (SubParserData*)user_data;
-  data->items = g_slist_reverse (data->items);
-
-  for (l = data->items; l; l = l->next)
-    {
-      ActionWidgetInfo *item = l->data;
-
-      object = _gtk_builder_lookup_object (builder, item->name, item->line, item->col);
-      if (!object)
-        continue;
-
-      ad = get_response_data (GTK_WIDGET (object), TRUE);
-      ad->response_id = item->response_id;
-
-      if (GTK_IS_BUTTON (object))
-        signal_id = g_signal_lookup ("clicked", GTK_TYPE_BUTTON);
-      else
-        signal_id = gtk_widget_class_get_activate_signal (GTK_WIDGET_GET_CLASS (object));
-
-      if (signal_id)
-        {
-          GClosure *closure;
-
-          closure = g_cclosure_new_object (G_CALLBACK (action_widget_activated),
-                                           G_OBJECT (info_bar));
-          g_signal_connect_closure_by_id (object, signal_id, 0, closure, FALSE);
-        }
-    }
-
-  g_slist_free_full (data->items, action_widget_info_free);
-  g_string_free (data->string, TRUE);
-  g_slice_free (SubParserData, data);
-}
-
-static void
-gtk_info_bar_buildable_add_child (GtkBuildable *buildable,
-                                  GtkBuilder   *builder,
-                                  GObject      *child,
-                                  const char   *type)
-{
-  GtkInfoBar *info_bar = GTK_INFO_BAR (buildable);
-
-  if (!type && GTK_IS_WIDGET (child))
-    gtk_info_bar_add_child (GTK_INFO_BAR (info_bar), GTK_WIDGET (child));
-  else if (g_strcmp0 (type, "action") == 0)
-    gtk_box_append (GTK_BOX (info_bar->action_area), GTK_WIDGET (child));
-  else
-    parent_buildable_iface->add_child (buildable, builder, child, type);
-}
-
-/**
- * gtk_info_bar_set_message_type: (attributes org.gtk.Method.set_property=message-type)
- * @info_bar: a `GtkInfoBar`
- * @message_type: a `GtkMessageType`
- *
- * Sets the message type of the message area.
- *
- * GTK uses this type to determine how the message is displayed.
- */
-void
-gtk_info_bar_set_message_type (GtkInfoBar     *info_bar,
-                               GtkMessageType  message_type)
-{
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-
-  if (info_bar->message_type != message_type)
-    {
-      const char *type_class[] = {
-        "info",
-        "warning",
-        "question",
-        "error",
-        NULL
-      };
-
-      if (type_class[info_bar->message_type])
-        gtk_widget_remove_css_class (GTK_WIDGET (info_bar), type_class[info_bar->message_type]);
-
-      info_bar->message_type = message_type;
-
-      gtk_widget_queue_draw (GTK_WIDGET (info_bar));
-
-      if (type_class[info_bar->message_type])
-        gtk_widget_add_css_class (GTK_WIDGET (info_bar), type_class[info_bar->message_type]);
-
-      g_object_notify_by_pspec (G_OBJECT (info_bar), props[PROP_MESSAGE_TYPE]);
-    }
-}
-
-/**
- * gtk_info_bar_get_message_type: (attributes org.gtk.Method.get_property=message-type)
- * @info_bar: a `GtkInfoBar`
- *
- * Returns the message type of the message area.
- *
- * Returns: the message type of the message area.
- */
-GtkMessageType
-gtk_info_bar_get_message_type (GtkInfoBar *info_bar)
-{
-  g_return_val_if_fail (GTK_IS_INFO_BAR (info_bar), GTK_MESSAGE_OTHER);
-
-  return info_bar->message_type;
-}
-
-
-/**
- * gtk_info_bar_set_show_close_button: (attributes org.gtk.Method.set_property=show-close-button)
- * @info_bar: a `GtkInfoBar`
- * @setting: %TRUE to include a close button
- *
- * If true, a standard close button is shown.
- *
- * When clicked it emits the response %GTK_RESPONSE_CLOSE.
- */
-void
-gtk_info_bar_set_show_close_button (GtkInfoBar *info_bar,
-                                    gboolean    setting)
-{
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-
-  if (setting == gtk_info_bar_get_show_close_button (info_bar))
-    return;
-
-  gtk_widget_set_visible (info_bar->close_button, setting);
-  g_object_notify_by_pspec (G_OBJECT (info_bar), props[PROP_SHOW_CLOSE_BUTTON]);
-}
-
-/**
- * gtk_info_bar_get_show_close_button: (attributes org.gtk.Method.get_property=show-close-button)
- * @info_bar: a `GtkInfoBar`
- *
- * Returns whether the widget will display a standard close button.
- *
- * Returns: %TRUE if the widget displays standard close button
- */
-gboolean
-gtk_info_bar_get_show_close_button (GtkInfoBar *info_bar)
-{
-  g_return_val_if_fail (GTK_IS_INFO_BAR (info_bar), FALSE);
-
-  return gtk_widget_get_visible (info_bar->close_button);
-}
-
-/**
- * gtk_info_bar_set_revealed: (attributes org.gtk.Method.set_property=revealed)
- * @info_bar: a `GtkInfoBar`
- * @revealed: The new value of the property
- *
- * Sets whether the `GtkInfoBar` is revealed.
- *
- * Changing this will make @info_bar reveal or conceal
- * itself via a sliding transition.
- *
- * Note: this does not show or hide @info_bar in the
- * [property@Gtk.Widget:visible] sense, so revealing has no effect
- * if [property@Gtk.Widget:visible] is %FALSE.
- */
-void
-gtk_info_bar_set_revealed (GtkInfoBar *info_bar,
-                           gboolean    revealed)
-{
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-
-  if (revealed == gtk_revealer_get_reveal_child (GTK_REVEALER (info_bar->revealer)))
-    return;
-
-  gtk_revealer_set_reveal_child (GTK_REVEALER (info_bar->revealer), revealed);
-  g_object_notify_by_pspec (G_OBJECT (info_bar), props[PROP_REVEALED]);
-}
-
-/**
- * gtk_info_bar_get_revealed: (attributes org.gtk.Method.get_property=revealed)
- * @info_bar: a `GtkInfoBar`
- *
- * Returns whether the info bar is currently revealed.
- *
- * Returns: the current value of the [property@Gtk.InfoBar:revealed] property
- */
-gboolean
-gtk_info_bar_get_revealed (GtkInfoBar *info_bar)
-{
-  g_return_val_if_fail (GTK_IS_INFO_BAR (info_bar), FALSE);
-
-  return gtk_revealer_get_reveal_child (GTK_REVEALER (info_bar->revealer));
-}
-
-/**
- * gtk_info_bar_add_child:
- * @info_bar: a `GtkInfoBar`
- * @widget: the child to be added
- *
- * Adds a widget to the content area of the info bar.
- */
-void
-gtk_info_bar_add_child (GtkInfoBar *info_bar,
-                        GtkWidget  *widget)
-{
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-  g_return_if_fail (GTK_IS_WIDGET (widget));
-
-  gtk_box_append (GTK_BOX (info_bar->content_area), widget);
-}
-
-/**
- * gtk_info_bar_remove_child:
- * @info_bar: a `GtkInfoBar`
- * @widget: a child that has been added to the content area
- *
- * Removes a widget from the content area of the info bar.
- */
-void
-gtk_info_bar_remove_child (GtkInfoBar *info_bar,
-                           GtkWidget  *widget)
-{
-  g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
-  g_return_if_fail (GTK_IS_WIDGET (widget));
-
-  gtk_box_remove (GTK_BOX (info_bar->content_area), widget);
-}
diff --git a/gtk/gtkinfobar.h b/gtk/gtkinfobar.h
deleted file mode 100644 (file)
index 11c8529..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * gtkinfobar.h
- * This file is part of GTK
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the gedit AUTHORS file for a
- * list of people on the gedit Team.
- * See the gedit ChangeLog files for a list of changes.
- *
- * Modified by the GTK+ Team, 2008-2009.
- */
-
-#ifndef __GTK_INFO_BAR_H__
-#define __GTK_INFO_BAR_H__
-
-#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
-#error "Only <gtk/gtk.h> can be included directly."
-#endif
-
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkenums.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_INFO_BAR              (gtk_info_bar_get_type())
-#define GTK_INFO_BAR(obj)              (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_INFO_BAR, GtkInfoBar))
-#define GTK_IS_INFO_BAR(obj)           (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_INFO_BAR))
-
-typedef struct _GtkInfoBar GtkInfoBar;
-
-GDK_AVAILABLE_IN_ALL
-GType          gtk_info_bar_get_type               (void) G_GNUC_CONST;
-GDK_AVAILABLE_IN_ALL
-GtkWidget     *gtk_info_bar_new                    (void);
-
-GDK_AVAILABLE_IN_ALL
-GtkWidget     *gtk_info_bar_new_with_buttons       (const char     *first_button_text,
-                                                    ...);
-
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_add_action_widget      (GtkInfoBar     *info_bar,
-                                                    GtkWidget      *child,
-                                                    int             response_id);
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_remove_action_widget   (GtkInfoBar     *info_bar,
-                                                    GtkWidget      *widget);
-GDK_AVAILABLE_IN_ALL
-GtkWidget     *gtk_info_bar_add_button             (GtkInfoBar     *info_bar,
-                                                    const char     *button_text,
-                                                    int             response_id);
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_add_buttons            (GtkInfoBar     *info_bar,
-                                                    const char     *first_button_text,
-                                                    ...);
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_add_child              (GtkInfoBar     *info_bar,
-                                                    GtkWidget      *widget);
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_remove_child           (GtkInfoBar     *info_bar,
-                                                    GtkWidget      *widget);
-
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_set_response_sensitive (GtkInfoBar     *info_bar,
-                                                    int             response_id,
-                                                    gboolean        setting);
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_set_default_response   (GtkInfoBar     *info_bar,
-                                                    int             response_id);
-
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_response               (GtkInfoBar     *info_bar,
-                                                    int             response_id);
-
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_set_message_type       (GtkInfoBar     *info_bar,
-                                                    GtkMessageType  message_type);
-GDK_AVAILABLE_IN_ALL
-GtkMessageType gtk_info_bar_get_message_type       (GtkInfoBar     *info_bar);
-
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_set_show_close_button  (GtkInfoBar     *info_bar,
-                                                    gboolean        setting);
-GDK_AVAILABLE_IN_ALL
-gboolean       gtk_info_bar_get_show_close_button  (GtkInfoBar     *info_bar);
-
-GDK_AVAILABLE_IN_ALL
-void           gtk_info_bar_set_revealed           (GtkInfoBar     *info_bar,
-                                                    gboolean        revealed);
-GDK_AVAILABLE_IN_ALL
-gboolean       gtk_info_bar_get_revealed           (GtkInfoBar     *info_bar);
-
-G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkInfoBar, g_object_unref)
-
-G_END_DECLS
-
-#endif  /* __GTK_INFO_BAR_H__  */
index 648d56cea9dfd50884b245240ac64017863e0109..971d59fd8cdfb26b2891da801cab734c0ab08076 100644 (file)
@@ -261,7 +261,6 @@ gtk_public_sources = files([
   'gtkimcontextsimple.c',
   'gtkimmodule.c',
   'gtkimmulticontext.c',
-  'gtkinfobar.c',
   'gtkinscription.c',
   'gtklabel.c',
   'gtklayoutchild.c',
@@ -509,7 +508,6 @@ gtk_public_headers = files([
   'gtkimcontextsimple.h',
   'gtkimmodule.h',
   'gtkimmulticontext.h',
-  'gtkinfobar.h',
   'gtkinscription.h',
   'gtklabel.h',
   'gtklayoutchild.h',
index 86b86af74a7d626d12d33f12a0d2c06834670ab6..dce5c8db584c6d925d0412c2942d98013e78674c 100644 (file)
@@ -211,7 +211,7 @@ gtk/gtkimcontext.c
 gtk/gtkimcontextsimple.c
 gtk/gtkimmodule.c
 gtk/gtkimmulticontext.c
-gtk/gtkinfobar.c
+gtk/deprecated/gtkinfobar.c
 gtk/gtklabel.c
 gtk/gtklevelbar.c
 gtk/gtklinkbutton.c