]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-input-text-view.c
Updated Spanish translation
[empathy.git] / libempathy-gtk / empathy-input-text-view.c
index 73ef32a45160a17656d328282f8e64109a9eb857..d7c24a68dc4a54e89b4c84f4311334f21df58e14 100644 (file)
  *          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));
 }