[empathy] move size-requst handling in input-text-view
- From: Guillaume Desmottes <gdesmott src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy] move size-requst handling in input-text-view
- Date: Thu, 11 Nov 2010 14:14:08 +0000 (UTC)
commit 379f636d605a99f04fbd29481ff755e783f34707
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date: Thu Nov 11 14:41:05 2010 +0100
move size-requst handling in input-text-view
libempathy-gtk/empathy-chat.c | 38 -----------------------
libempathy-gtk/empathy-input-text-view.c | 49 +++++++++++++++++++++++++++++-
2 files changed, 48 insertions(+), 39 deletions(-)
---
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index 7c238f0..04e7862 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -61,7 +61,6 @@
#define CHAT_DIR_CREATE_MODE (S_IRUSR | S_IWUSR | S_IXUSR)
#define CHAT_FILE_CREATE_MODE (S_IRUSR | S_IWUSR)
#define IS_ENTER(v) (v == GDK_KEY_Return || v == GDK_KEY_ISO_Enter || v == GDK_KEY_KP_Enter)
-#define MAX_INPUT_HEIGHT 150
#define COMPOSING_STOP_TIMEOUT 5
#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChat)
@@ -1610,40 +1609,6 @@ chat_text_view_focus_in_event_cb (GtkWidget *widget,
return TRUE;
}
-static gboolean
-chat_input_set_size_request_idle (gpointer sw)
-{
- gtk_widget_set_size_request (sw, -1, MAX_INPUT_HEIGHT);
-
- return FALSE;
-}
-
-static void
-chat_input_size_request_cb (GtkWidget *widget,
- GtkRequisition *requisition,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- GtkWidget *sw;
-
- sw = gtk_widget_get_parent (widget);
- if (requisition->height >= MAX_INPUT_HEIGHT && !priv->has_input_vscroll) {
- g_idle_add (chat_input_set_size_request_idle, sw);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_NEVER,
- GTK_POLICY_ALWAYS);
- priv->has_input_vscroll = TRUE;
- }
-
- if (requisition->height < MAX_INPUT_HEIGHT && priv->has_input_vscroll) {
- gtk_widget_set_size_request (sw, -1, -1);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_NEVER,
- GTK_POLICY_NEVER);
- priv->has_input_vscroll = FALSE;
- }
-}
-
static void
chat_input_realize_cb (GtkWidget *widget,
EmpathyChat *chat)
@@ -2594,9 +2559,6 @@ chat_create_ui (EmpathyChat *chat)
g_signal_connect (chat->input_text_view, "key-press-event",
G_CALLBACK (chat_input_key_press_event_cb),
chat);
- g_signal_connect (chat->input_text_view, "size-request",
- G_CALLBACK (chat_input_size_request_cb),
- chat);
g_signal_connect (chat->input_text_view, "realize",
G_CALLBACK (chat_input_realize_cb),
chat);
diff --git a/libempathy-gtk/empathy-input-text-view.c b/libempathy-gtk/empathy-input-text-view.c
index 73ef32a..4b9a611 100644
--- a/libempathy-gtk/empathy-input-text-view.c
+++ b/libempathy-gtk/empathy-input-text-view.c
@@ -30,14 +30,61 @@
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 gboolean
+chat_input_set_size_request_idle (gpointer sw)
+{
+ gtk_widget_set_size_request (sw, -1, MAX_INPUT_HEIGHT);
+
+ return FALSE;
+}
+
+static void
+empathy_input_text_view_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ EmpathyInputTextView *self = (EmpathyInputTextView *) widget;
+ GtkWidget *sw;
+
+ sw = gtk_widget_get_parent (widget);
+ if (requisition->height >= MAX_INPUT_HEIGHT && !self->priv->has_input_vscroll)
+ {
+ /* Display scroll bar */
+ g_idle_add (chat_input_set_size_request_idle, sw);
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_ALWAYS);
+
+ self->priv->has_input_vscroll = TRUE;
+ }
+
+ if (requisition->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->size_request = empathy_input_text_view_size_request;
+
g_type_class_add_private (cls, sizeof (EmpathyInputTextViewPrivate));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]