#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"
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;
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;
}
}
typedef struct {
- GtkWidget *window;
+ GtkWindow *window;
gint width;
gint height;
} ChangeSizeData;
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;
}
{
EmpathyChatPriv *priv;
gint width;
- GtkWidget *dialog;
+ GtkWindow *dialog;
ChangeSizeData *data;
gint window_height;
gint new_height;
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;
}
/* 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;
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
empathy_chat_view_clear (chat->view);
}
-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)
{
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