* Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
*/
+#include "config.h"
#include "empathy-input-text-view.h"
G_DEFINE_TYPE (EmpathyInputTextView, empathy_input_text_view,
GTK_TYPE_TEXT_VIEW);
+#define MAX_INPUT_HEIGHT 150
+
struct _EmpathyInputTextViewPrivate
{
- gpointer unused;
+ gboolean has_input_vscroll;
};
+static void
+empathy_input_text_view_get_preferred_height (GtkWidget *widget,
+ gint *minimum_height,
+ gint *natural_height)
+{
+ EmpathyInputTextView *self = (EmpathyInputTextView *) widget;
+ GtkWidget *sw;
+
+ GTK_WIDGET_CLASS (empathy_input_text_view_parent_class)->get_preferred_height
+ (widget, minimum_height, natural_height);
+
+ sw = gtk_widget_get_parent (widget);
+ if (*minimum_height >= MAX_INPUT_HEIGHT && !self->priv->has_input_vscroll)
+ {
+ /* Display scroll bar */
+ gtk_widget_set_size_request (sw, -1, MAX_INPUT_HEIGHT);
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_ALWAYS);
+
+ self->priv->has_input_vscroll = TRUE;
+ }
+
+ if (*minimum_height < MAX_INPUT_HEIGHT && self->priv->has_input_vscroll)
+ {
+ /* Hide scroll bar */
+ gtk_widget_set_size_request (sw, -1, -1);
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_NEVER);
+
+ self->priv->has_input_vscroll = FALSE;
+ }
+}
+
static void
empathy_input_text_view_class_init (EmpathyInputTextViewClass *cls)
{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (cls);
+
+ widget_class->get_preferred_height =
+ empathy_input_text_view_get_preferred_height;
+
g_type_class_add_private (cls, sizeof (EmpathyInputTextViewPrivate));
}