aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-chat.c51
-rw-r--r--libempathy-gtk/empathy-chat.glade1
-rw-r--r--src/empathy-chat-window.c2
3 files changed, 48 insertions, 6 deletions
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index 7079775cf..5533541ff 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -1267,6 +1267,46 @@ chat_create_ui (EmpathyChat *chat)
}
static void
+chat_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ GtkBin *bin = GTK_BIN (widget);
+
+ requisition->width = GTK_CONTAINER (widget)->border_width * 2;
+ requisition->height = GTK_CONTAINER (widget)->border_width * 2;
+
+ if (bin->child && GTK_WIDGET_VISIBLE (bin->child))
+ {
+ GtkRequisition child_requisition;
+
+ gtk_widget_size_request (bin->child, &child_requisition);
+
+ requisition->width += child_requisition.width;
+ requisition->height += child_requisition.height;
+ }
+}
+
+static void
+chat_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ GtkBin *bin = GTK_BIN (widget);
+ GtkAllocation child_allocation;
+
+ widget->allocation = *allocation;
+
+ if (bin->child && GTK_WIDGET_VISIBLE (bin->child))
+ {
+ child_allocation.x = allocation->x + GTK_CONTAINER (widget)->border_width;
+ child_allocation.y = allocation->y + GTK_CONTAINER (widget)->border_width;
+ child_allocation.width = MAX (allocation->width - GTK_CONTAINER (widget)->border_width * 2, 0);
+ child_allocation.height = MAX (allocation->height - GTK_CONTAINER (widget)->border_width * 2, 0);
+
+ gtk_widget_size_allocate (bin->child, &child_allocation);
+ }
+}
+
+static void
chat_finalize (GObject *object)
{
EmpathyChat *chat;
@@ -1294,7 +1334,6 @@ chat_finalize (GObject *object)
g_object_unref (priv->mc);
g_object_unref (priv->log_manager);
-
if (priv->tp_chat) {
g_object_unref (priv->tp_chat);
}
@@ -1323,15 +1362,17 @@ chat_constructed (GObject *object)
static void
empathy_chat_class_init (EmpathyChatClass *klass)
{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = chat_finalize;
object_class->get_property = chat_get_property;
object_class->set_property = chat_set_property;
object_class->constructed = chat_constructed;
+ widget_class->size_request = chat_size_request;
+ widget_class->size_allocate = chat_size_allocate;
+
g_object_class_install_property (object_class,
PROP_TP_CHAT,
g_param_spec_object ("tp-chat",
@@ -1396,7 +1437,7 @@ static void
empathy_chat_init (EmpathyChat *chat)
{
EmpathyChatPriv *priv = GET_PRIV (chat);
- GtkTextBuffer *buffer;
+ GtkTextBuffer *buffer;
chat_create_ui (chat);
diff --git a/libempathy-gtk/empathy-chat.glade b/libempathy-gtk/empathy-chat.glade
index 0a801adc0..9428474b5 100644
--- a/libempathy-gtk/empathy-chat.glade
+++ b/libempathy-gtk/empathy-chat.glade
@@ -3,6 +3,7 @@
<!--*- mode: xml -*-->
<glade-interface>
<widget class="GtkWindow" id="chat_window">
+ <property name="visible">True</property>
<property name="border_width">6</property>
<property name="title" translatable="yes">Group Chat</property>
<property name="icon_name">system-users</property>
diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c
index 6dd55cbae..7e4d1d1cc 100644
--- a/src/empathy-chat-window.c
+++ b/src/empathy-chat-window.c
@@ -1399,6 +1399,7 @@ empathy_chat_window_add_chat (EmpathyChatWindow *window,
child = GTK_WIDGET (chat);
label = chat_window_create_label (window, chat);
+ gtk_widget_show (child);
g_signal_connect (chat, "notify::name",
G_CALLBACK (chat_window_chat_notify_cb),
@@ -1416,7 +1417,6 @@ empathy_chat_window_add_chat (EmpathyChatWindow *window,
gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (priv->notebook), child, TRUE);
gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (priv->notebook), child,
TRUE, TRUE, GTK_PACK_START);
- gtk_widget_show (child);
empathy_debug (DEBUG_DOMAIN,
"Chat added (%d references)",