diff options
Diffstat (limited to 'libempathy-gtk/empathy-chat.c')
-rw-r--r-- | libempathy-gtk/empathy-chat.c | 111 |
1 files changed, 30 insertions, 81 deletions
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 1b2fcccb2..50a370037 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -42,10 +42,8 @@ #include <libempathy/empathy-utils.h> #include "empathy-chat.h" -#include "empathy-chat-window.h" #include "empathy-geometry.h" #include "empathy-conf.h" -#include "empathy-preferences.h" #include "empathy-spell.h" #include "empathy-spell-dialog.h" #include "empathy-ui-utils.h" @@ -67,9 +65,9 @@ struct _EmpathyChatPriv { EmpathyLogManager *log_manager; EmpathyTpChat *tp_chat; - EmpathyChatWindow *window; McAccount *account; MissionControl *mc; + GtkWidget *widget; guint composing_stop_timeout_id; gboolean sensitive; gchar *id; @@ -802,21 +800,20 @@ chat_input_text_buffer_changed_cb (GtkTextBuffer *buffer, if (priv->is_first_char) { GtkRequisition req; gint window_height; - GtkWidget *dialog; + GtkWindow *dialog; GtkAllocation *allocation; /* Save the window's size */ - dialog = empathy_chat_window_get_dialog (priv->window); - gtk_window_get_size (GTK_WINDOW (dialog), - NULL, &window_height); - - gtk_widget_size_request (chat->input_text_view, &req); - - allocation = >K_WIDGET (chat->view)->allocation; - - priv->default_window_height = window_height; - priv->last_input_height = req.height; - priv->padding_height = window_height - req.height - allocation->height; + dialog = empathy_get_toplevel_window (priv->widget); + if (dialog) { + gtk_window_get_size (GTK_WINDOW (dialog), NULL, &window_height); + gtk_widget_size_request (chat->input_text_view, &req); + allocation = >K_WIDGET (chat->view)->allocation; + + priv->default_window_height = window_height; + priv->last_input_height = req.height; + priv->padding_height = window_height - req.height - allocation->height; + } priv->is_first_char = FALSE; } @@ -880,7 +877,7 @@ chat_input_text_buffer_changed_cb (GtkTextBuffer *buffer, } typedef struct { - GtkWidget *window; + GtkWindow *window; gint width; gint height; } ChangeSizeData; @@ -888,8 +885,7 @@ typedef struct { static gboolean chat_change_size_in_idle_cb (ChangeSizeData *data) { - gtk_window_resize (GTK_WINDOW (data->window), - data->width, data->height); + gtk_window_resize (data->window, data->width, data->height); return FALSE; } @@ -920,7 +916,7 @@ chat_text_view_size_allocate_cb (GtkWidget *widget, { EmpathyChatPriv *priv; gint width; - GtkWidget *dialog; + GtkWindow *dialog; ChangeSizeData *data; gint window_height; gint new_height; @@ -960,8 +956,8 @@ chat_text_view_size_allocate_cb (GtkWidget *widget, view_allocation = >K_WIDGET (chat->view)->allocation; - dialog = empathy_chat_window_get_dialog (priv->window); - gtk_window_get_size (GTK_WINDOW (dialog), NULL, ¤t_height); + dialog = empathy_get_toplevel_window (priv->widget); + gtk_window_get_size (dialog, NULL, ¤t_height); new_height = view_allocation->height + priv->padding_height + allocation->height - diff; @@ -976,7 +972,7 @@ chat_text_view_size_allocate_cb (GtkWidget *widget, } /* Restore the window's size */ - gtk_window_get_size (GTK_WINDOW (dialog), &width, NULL); + gtk_window_get_size (dialog, &width, NULL); data = g_new0 (ChangeSizeData, 1); data->window = dialog; @@ -1395,13 +1391,15 @@ empathy_chat_get_status_icon_name (EmpathyChat *chat) GtkWidget * empathy_chat_get_widget (EmpathyChat *chat) { + EmpathyChatPriv *priv = GET_PRIV (chat); + g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL); - if (EMPATHY_CHAT_GET_CLASS (chat)->get_widget) { - return EMPATHY_CHAT_GET_CLASS (chat)->get_widget (chat); + if (!priv->widget && EMPATHY_CHAT_GET_CLASS (chat)->get_widget) { + priv->widget = EMPATHY_CHAT_GET_CLASS (chat)->get_widget (chat); } - return NULL; + return priv->widget; } gboolean @@ -1580,26 +1578,6 @@ empathy_chat_clear (EmpathyChat *chat) } void -empathy_chat_set_window (EmpathyChat *chat, - EmpathyChatWindow *window) -{ - EmpathyChatPriv *priv; - - priv = GET_PRIV (chat); - priv->window = window; -} - -EmpathyChatWindow * -empathy_chat_get_window (EmpathyChat *chat) -{ - EmpathyChatPriv *priv; - - priv = GET_PRIV (chat); - - return priv->window; -} - -void empathy_chat_scroll_down (EmpathyChat *chat) { g_return_if_fail (EMPATHY_IS_CHAT (chat)); @@ -1660,50 +1638,21 @@ empathy_chat_paste (EmpathyChat *chat) gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE); } -void -empathy_chat_present (EmpathyChat *chat) -{ - EmpathyChatPriv *priv; - - g_return_if_fail (EMPATHY_IS_CHAT (chat)); - - priv = GET_PRIV (chat); - - if (priv->window == NULL) { - EmpathyChatWindow *window; - - window = empathy_chat_window_get_default (); - if (!window) { - window = empathy_chat_window_new (); - } - - empathy_chat_window_add_chat (window, chat); - } - - empathy_chat_window_switch_to_chat (priv->window, chat); - empathy_window_present ( - GTK_WINDOW (empathy_chat_window_get_dialog (priv->window)), - TRUE); - - gtk_widget_grab_focus (chat->input_text_view); -} - gboolean empathy_chat_should_play_sound (EmpathyChat *chat) { - EmpathyChatWindow *window; - gboolean play = TRUE; + EmpathyChatPriv *priv = GET_PRIV (chat); + GtkWindow *window; + gboolean has_focus = FALSE; g_return_val_if_fail (EMPATHY_IS_CHAT (chat), FALSE); - window = empathy_chat_get_window (chat); - if (!window) { - return TRUE; + window = empathy_get_toplevel_window (priv->widget); + if (window) { + g_object_get (window, "has-toplevel-focus", &has_focus, NULL); } - play = !empathy_chat_window_has_focus (window); - - return play; + return !has_focus; } gboolean |