* 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, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
/*
#include "config.h"
+#include "gtkstatusbar.h"
+
+#include "gtkboxprivate.h"
#include "gtkframe.h"
#include "gtklabel.h"
#include "gtkmarshalers.h"
-#include "gtkstatusbar.h"
#include "gtkwindow.h"
#include "gtkprivate.h"
#include "gtkintl.h"
#include "gtkbuildable.h"
+#include "gtkorientable.h"
#include "gtktypebuiltins.h"
+#include "a11y/gtkstatusbaraccessible.h"
/**
* SECTION:gtkstatusbar
static guint statusbar_signals[SIGNAL_LAST] = { 0 };
-G_DEFINE_TYPE_WITH_CODE (GtkStatusbar, gtk_statusbar, GTK_TYPE_HBOX,
+G_DEFINE_TYPE_WITH_CODE (GtkStatusbar, gtk_statusbar, GTK_TYPE_BOX,
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
gtk_statusbar_buildable_interface_init));
GTK_PARAM_READABLE));
g_type_class_add_private (class, sizeof (GtkStatusbarPrivate));
+
+ gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_STATUSBAR_ACCESSIBLE);
}
static void
priv->label = gtk_label_new ("");
gtk_label_set_single_line_mode (GTK_LABEL (priv->label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.5);
+ gtk_widget_set_halign (priv->label, GTK_ALIGN_START);
+ gtk_widget_set_valign (priv->label, GTK_ALIGN_CENTER);
gtk_label_set_ellipsize (GTK_LABEL (priv->label), PANGO_ELLIPSIZE_END);
gtk_container_add (GTK_CONTAINER (message_area), priv->label);
gtk_widget_show (priv->label);
return id;
}
+static GtkStatusbarMsg *
+gtk_statusbar_msg_create (GtkStatusbar *statusbar,
+ guint context_id,
+ const gchar *text)
+{
+ GtkStatusbarMsg *msg;
+
+ msg = g_slice_new (GtkStatusbarMsg);
+ msg->text = g_strdup (text);
+ msg->context_id = context_id;
+ msg->message_id = statusbar->priv->seq_message_id++;
+
+ return msg;
+}
+
+static void
+gtk_statusbar_msg_free (GtkStatusbarMsg *msg)
+{
+ g_free (msg->text);
+ g_slice_free (GtkStatusbarMsg, msg);
+}
+
/**
* gtk_statusbar_push:
* @statusbar: a #GtkStatusbar
priv = statusbar->priv;
- msg = g_slice_new (GtkStatusbarMsg);
- msg->text = g_strdup (text);
- msg->context_id = context_id;
- msg->message_id = priv->seq_message_id++;
-
+ msg = gtk_statusbar_msg_create (statusbar, context_id, text);
priv->messages = g_slist_prepend (priv->messages, msg);
g_signal_emit (statusbar,
/**
* gtk_statusbar_pop:
- * @statusbar: a #GtkStatusBar
+ * @statusbar: a #GtkStatusbar
* @context_id: a context identifier
*
- * Removes the first message in the #GtkStatusBar's stack
+ * Removes the first message in the #GtkStatusbar's stack
* with the given context id.
*
* Note that this may not change the displayed message, if
if (msg->context_id == context_id)
{
- priv->messages = g_slist_remove_link (priv->messages,
- list);
- g_free (msg->text);
- g_slice_free (GtkStatusbarMsg, msg);
+ priv->messages = g_slist_remove_link (priv->messages, list);
+ gtk_statusbar_msg_free (msg);
g_slist_free_1 (list);
break;
}
/**
* gtk_statusbar_remove:
- * @statusbar: a #GtkStatusBar
+ * @statusbar: a #GtkStatusbar
* @context_id: a context identifier
* @message_id: a message identifier, as returned by gtk_statusbar_push()
*
msg->message_id == message_id)
{
priv->messages = g_slist_remove_link (priv->messages, list);
- g_free (msg->text);
- g_slice_free (GtkStatusbarMsg, msg);
+ gtk_statusbar_msg_free (msg);
g_slist_free_1 (list);
break;
/**
* gtk_statusbar_remove_all:
- * @statusbar: a #GtkStatusBar
+ * @statusbar: a #GtkStatusbar
* @context_id: a context identifier
*
* Forces the removal of all messages from a statusbar's
else
prev->next = list->next;
- g_free (msg->text);
- g_slice_free (GtkStatusbarMsg, msg);
+ gtk_statusbar_msg_free (msg);
g_slist_free_1 (list);
if (prev == NULL)
/**
* gtk_statusbar_get_message_area:
- * @statusbar: a #GtkStatusBar
+ * @statusbar: a #GtkStatusbar
*
* Retrieves the box containing the label widget.
*
{
GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
GtkStatusbarPrivate *priv = statusbar->priv;
- GSList *list;
- for (list = priv->messages; list; list = list->next)
- {
- GtkStatusbarMsg *msg;
-
- msg = list->data;
- g_free (msg->text);
- g_slice_free (GtkStatusbarMsg, msg);
- }
- g_slist_free (priv->messages);
+ g_slist_free_full (priv->messages, (GDestroyNotify) gtk_statusbar_msg_free);
priv->messages = NULL;
- for (list = priv->keys; list; list = list->next)
- g_free (list->data);
- g_slist_free (priv->keys);
+ g_slist_free_full (priv->keys, g_free);
priv->keys = NULL;
GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->destroy (widget);
gtk_window_resize_grip_is_visible (GTK_WINDOW (window)))
{
gtk_window_get_resize_grip_area (GTK_WINDOW (window), &rect);
- if (gtk_widget_translate_coordinates (gtk_widget_get_parent (widget),
- window,
- allocation->x,
- allocation->y,
- &x,
- &y))
+ if (gtk_widget_translate_coordinates (widget, window, 0, 0, &x, &y))
{
translated_rect.x = x;
translated_rect.y = y;