diff options
author | Matthias Clasen <mclasen@redhat.com> | 2013-07-31 18:40:52 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2013-08-01 10:55:49 +0200 |
commit | 1198ffb0bc195c6044d4d0efd864ccf093d637c7 (patch) | |
tree | 6256a2782faa591bb71e06b9220081a096c9cf31 | |
parent | c636b21aec3daffbbdc844d889cf4af92b0f5120 (diff) | |
download | gtk+-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.c | 35 | ||||
-rw-r--r-- | gtk/gtkinfobar.ui | 110 |
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> |