summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2013-07-31 18:40:52 +0200
committerMatthias Clasen <mclasen@redhat.com>2013-08-01 10:55:49 +0200
commit1198ffb0bc195c6044d4d0efd864ccf093d637c7 (patch)
tree6256a2782faa591bb71e06b9220081a096c9cf31
parentc636b21aec3daffbbdc844d889cf4af92b0f5120 (diff)
downloadgtk+-1198ffb0bc195c6044d4d0efd864ccf093d637c7.tar.gz
Add a revealer to GtkInfoBar
Make GtkInfoBar slide in and out as it is shown or hidden. https://bugzilla.gnome.org/show_bug.cgi?id=704334
-rw-r--r--gtk/gtkinfobar.c35
-rw-r--r--gtk/gtkinfobar.ui110
2 files changed, 97 insertions, 48 deletions
diff --git a/gtk/gtkinfobar.c b/gtk/gtkinfobar.c
index 776adc0930..396a087d19 100644
--- a/gtk/gtkinfobar.c
+++ b/gtk/gtkinfobar.c
@@ -41,6 +41,7 @@
#include "gtkenums.h"
#include "gtkbindings.h"
#include "gtkdialog.h"
+#include "gtkrevealer.h"
#include "gtkintl.h"
#include "gtkprivate.h"
#include "gtkorientable.h"
@@ -127,6 +128,7 @@ struct _GtkInfoBarPrivate
GtkWidget *content_area;
GtkWidget *action_area;
GtkWidget *close_button;
+ GtkWidget *revealer;
gboolean show_close_button;
GtkMessageType message_type;
@@ -378,6 +380,36 @@ gtk_info_bar_draw (GtkWidget *widget,
}
static void
+gtk_info_bar_show (GtkWidget *widget)
+{
+ GtkInfoBarPrivate *priv = GTK_INFO_BAR (widget)->priv;
+
+ GTK_WIDGET_CLASS (gtk_info_bar_parent_class)->show (widget);
+
+ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->revealer), TRUE);
+}
+
+static void
+child_revealed (GObject *object, GParamSpec *pspec, gpointer data)
+{
+ GtkWidget *widget = data;
+
+ GTK_WIDGET_CLASS (gtk_info_bar_parent_class)->hide (widget);
+ g_signal_handlers_disconnect_by_func (object, child_revealed, widget);
+ g_object_notify (G_OBJECT (widget), "visible");
+}
+
+static void
+gtk_info_bar_hide (GtkWidget *widget)
+{
+ GtkInfoBarPrivate *priv = GTK_INFO_BAR (widget)->priv;
+
+ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->revealer), FALSE);
+ g_signal_connect_object (priv->revealer, "notify::child-revealed",
+ G_CALLBACK (child_revealed), widget, 0);
+}
+
+static void
gtk_info_bar_class_init (GtkInfoBarClass *klass)
{
GtkWidgetClass *widget_class;
@@ -394,6 +426,8 @@ gtk_info_bar_class_init (GtkInfoBarClass *klass)
widget_class->get_preferred_width = gtk_info_bar_get_preferred_width;
widget_class->get_preferred_height = gtk_info_bar_get_preferred_height;
widget_class->draw = gtk_info_bar_draw;
+ widget_class->show = gtk_info_bar_show;
+ widget_class->hide = gtk_info_bar_hide;
klass->close = gtk_info_bar_close;
@@ -549,6 +583,7 @@ gtk_info_bar_class_init (GtkInfoBarClass *klass)
gtk_widget_class_bind_template_child_internal_private (widget_class, GtkInfoBar, content_area);
gtk_widget_class_bind_template_child_internal_private (widget_class, GtkInfoBar, action_area);
gtk_widget_class_bind_template_child_internal_private (widget_class, GtkInfoBar, close_button);
+ gtk_widget_class_bind_template_child_internal_private (widget_class, GtkInfoBar, revealer);
}
static void
diff --git a/gtk/gtkinfobar.ui b/gtk/gtkinfobar.ui
index 35e210762f..b5823fa9b4 100644
--- a/gtk/gtkinfobar.ui
+++ b/gtk/gtkinfobar.ui
@@ -5,62 +5,76 @@
<property name="app_paintable">True</property>
<property name="can_focus">False</property>
<child>
- <object class="GtkBox" id="content_area">
+ <object class="GtkRevealer" id="revealer">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="border_width">8</property>
- <property name="spacing">16</property>
<child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButtonBox" id="action_area">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">6</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">6</property>
- <property name="layout_style">end</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="close_button">
- <property name="visible">False</property>
- <property name="can_focus">True</property>
- <property name="border_width">6</property>
- <property name="relief">none</property>
- <style>
- <class name="raised"/>
- <class name="close"/>
- </style>
- <child>
- <object class="GtkImage" id="close_image">
+ <object class="GtkBox" id="content">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="icon_name">window-close-symbolic</property>
+ <property name="border_width">0</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkBox" id="content_area">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">8</property>
+ <property name="spacing">16</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButtonBox" id="action_area">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="close_button">
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">6</property>
+ <property name="relief">none</property>
+ <style>
+ <class name="raised"/>
+ <class name="close"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="close_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">window-close-symbolic</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
</child>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
</child>
</template>
</interface>