diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index fda704f86668cbe0fceeb95ae2505b3a3aad7716..2fbeb378d187613a1cff59fd2ae814889787e07a 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -127,7 +127,7 @@ incoming_message_cb(DBusGProxy *proxy UNUSED, const gchar* callID UNUSED, // Get the call information. Does this call exist? callable_obj_t * c = calllist_get (current_calls, callID); - im_widget_add_message (NULL, msg); + im_widget_add_message (c, msg); if (c) { notify_incoming_message (callID, msg); } else { diff --git a/sflphone-client-gnome/src/imwindow.c b/sflphone-client-gnome/src/imwindow.c index 69bae4df72b4284155249f4d75b038f34f4f5bb3..eb20ca626b4ca9c49b6f5706964270164af666d9 100644 --- a/sflphone-client-gnome/src/imwindow.c +++ b/sflphone-client-gnome/src/imwindow.c @@ -119,7 +119,7 @@ im_window_get() } void -im_window_add(GtkWidget *widget) +im_window_add (GtkWidget *widget) { if (im_window_get()) { gtk_box_pack_start (GTK_BOX (im_vbox), widget, TRUE /*expand*/, diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c index 91f70c5d5b5e0a84b65969747fd21a44d9cc4e20..c3b917d01f6c2233e7f856061faccaab333e789c 100644 --- a/sflphone-client-gnome/src/uimanager.c +++ b/sflphone-client-gnome/src/uimanager.c @@ -509,22 +509,15 @@ call_hold(void* foo UNUSED) call_im (void* foo UNUSED) { callable_obj_t * selectedCall = calltab_get_selected_call(current_calls); - static IMWidget *im = NULL; - /*if (!im) { - im = im_widget_new(); - im_window_add(im); - } else { - im_widget_add_message(im, "hello from call_im"); - }*/ - + if (selectedCall) { if (selectedCall->_im_widget == NULL) { printf("Call IM with call %s\n", selectedCall->_callID); im = im_widget_new(); im_window_add (im); - im->callID = selectedCall->_callID; + im->call = selectedCall; selectedCall->_im_widget = im; } } diff --git a/sflphone-client-gnome/src/widget/imwidget.c b/sflphone-client-gnome/src/widget/imwidget.c index 983961f5bae031b0368302b7ccd25a61987c8a01..58b90508199992fd7662476f4493c772541e5a14 100644 --- a/sflphone-client-gnome/src/widget/imwidget.c +++ b/sflphone-client-gnome/src/widget/imwidget.c @@ -29,33 +29,40 @@ #include "imwidget.h" #include <JavaScriptCore/JavaScript.h> +#include <gdk/gdkkeysyms.h> #define WEBKIT_DIR "file://" DATA_DIR "/webkit/" static IMWidget *_this; -void -im_widget_add_message (GtkWidget *widget, const gchar *message) + void +im_widget_add_message (callable_obj_t *call, const gchar *message) { - IMWidget *im = IM_WIDGET(widget); - - /* Prepare and execute the Javascript code */ - gchar *script = g_strdup_printf("add_message('%s');", message); - webkit_web_view_execute_script (WEBKIT_WEB_VIEW (_this->web_view), script); - // webkit_web_view_execute_script (WEBKIT_WEB_VIEW(im->web_view), script); + /* use the widget for this specific call, if exists */ + IMWidget *im = IM_WIDGET (call->_im_widget); // IM_WIDGET(widget); + + if (im) { + + /* Create the main instant messaging window */ + // im_window_add (im); - /* Cleanup */ - g_free(script); + /* Prepare and execute the Javascript code */ + gchar *script = g_strdup_printf("add_message('%s', '%s', '%s', '%s');", message, call->_peer_name, call->_peer_number, call->_peer_info); + webkit_web_view_execute_script (WEBKIT_WEB_VIEW(_this->web_view), script); + + /* Cleanup */ + g_free(script); + } } static gboolean web_view_nav_requested_cb( - WebKitWebView *web_view, - WebKitWebFrame *frame, - WebKitNetworkRequest *request, - WebKitWebNavigationAction *navigation_action, - WebKitWebPolicyDecision *policy_decision, - gpointer user_data) + WebKitWebView *web_view, + WebKitWebFrame *frame, + WebKitNetworkRequest *request, + WebKitWebNavigationAction *navigation_action, + WebKitWebPolicyDecision *policy_decision, + gpointer user_data) { const gchar *uri = webkit_network_request_get_uri(request); @@ -69,35 +76,50 @@ web_view_nav_requested_cb( return TRUE; } -static void -on_SendMessage_click (void) { - - /* Get all the text in the buffer */ + static gboolean +on_Textview_changed (GtkWidget *widget, GdkEventKey *event, gpointer user_data) +{ + GtkTextIter start, end; + /* Get all the text in the buffer */ GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (_this->textarea)); - gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &start, &end); - gchar *message = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); + + if (event->type == GDK_KEY_PRESS){ + + switch (event->keyval) + { + case GDK_Return: + + if (gtk_text_buffer_get_char_count (buffer) != 0 ) + { + gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &start, &end); + gchar *message = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); - if (g_strcasecmp (message, "") != 0 ) - { - /* Display our own message in the chat window */ - im_widget_add_message (GTK_WIDGET (_this), message); + /* Display our own message in the chat window */ + im_widget_add_message (_this->call, message); - /* Send the message to the peer */ - dbus_send_text_message (_this->callID, message); + /* Send the message to the peer */ + dbus_send_text_message (_this->call->_callID, message); - /* Empty the buffer */ - gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &start, &end); + /* Empty the buffer */ + gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &start, &end); + + } + return TRUE; + } } + + return FALSE; } -static void + + static void im_widget_class_init(IMWidgetClass *klass) { } -static void + static void im_widget_init (IMWidget *im) { @@ -108,19 +130,19 @@ im_widget_init (IMWidget *im) /* A bar with the entry text and the button to send the message */ GtkWidget *hbox = gtk_hbox_new (FALSE, 10); - GtkWidget *button_SendMessage = gtk_button_new_with_label("Send"); gtk_text_view_set_editable(GTK_TEXT_VIEW(im->textarea), TRUE); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(textscrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(textscrollwin), GTK_POLICY_NEVER, GTK_POLICY_NEVER); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(webscrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_widget_set_size_request(GTK_WIDGET (textscrollwin), -1, 20); + gtk_widget_set_size_request(GTK_WIDGET (im->textarea), -1, 20); + gtk_container_add (GTK_CONTAINER (textscrollwin), im->textarea); gtk_container_add (GTK_CONTAINER (webscrollwin), im->web_view); gtk_container_add (GTK_CONTAINER (hbox), textscrollwin); - gtk_container_add (GTK_CONTAINER (hbox), button_SendMessage); - gtk_box_pack_start(GTK_BOX(im), webscrollwin, TRUE, TRUE, 5); - gtk_box_pack_end(GTK_BOX(im), hbox, FALSE, FALSE, 1); - // gtk_box_pack_end(GTK_BOX(im), textscrollwin, TRUE, TRUE, 5); + gtk_box_pack_start (GTK_BOX(im), webscrollwin, TRUE, TRUE, 5); + gtk_box_pack_end (GTK_BOX(im), hbox, FALSE, FALSE, 2); g_signal_connect (im->web_view, "navigation-policy-decision-requested", G_CALLBACK (web_view_nav_requested_cb), NULL); - g_signal_connect(button_SendMessage, "clicked", G_CALLBACK(on_SendMessage_click), NULL); + g_signal_connect(im->textarea, "key-press-event", G_CALLBACK (on_Textview_changed), NULL); g_signal_connect (G_OBJECT (webscrollwin), "destroy", G_CALLBACK (gtk_main_quit), NULL); im->web_frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(im->web_view)); @@ -131,13 +153,13 @@ im_widget_init (IMWidget *im) _this = im; } -GtkWidget * + GtkWidget * im_widget_new() { return GTK_WIDGET (g_object_new (IM_WIDGET_TYPE, NULL)); } -GType + GType im_widget_get_type(void) { static GType im_widget_type = 0; @@ -157,10 +179,10 @@ im_widget_get_type(void) }; im_widget_type = g_type_register_static( - GTK_TYPE_VBOX, - "IMWidget", - &im_widget_info, - 0); + GTK_TYPE_VBOX, + "IMWidget", + &im_widget_info, + 0); } return im_widget_type; diff --git a/sflphone-client-gnome/src/widget/imwidget.h b/sflphone-client-gnome/src/widget/imwidget.h index 018fa48ee4474442650eacad33599dbe395bcb41..7a250b43f8046710eeea75049302b2946c099321 100644 --- a/sflphone-client-gnome/src/widget/imwidget.h +++ b/sflphone-client-gnome/src/widget/imwidget.h @@ -32,6 +32,7 @@ #define __IM_WIDGET_H__ #include <gtk/gtk.h> +#include <callable_obj.h> #include <webkit/webkit.h> G_BEGIN_DECLS @@ -52,7 +53,7 @@ struct _IMWidget { /* Private */ GtkWidget *textarea; GtkWidget *web_view; - gchar *callID; /* The callID attached to this conversation */ + callable_obj_t *call; /* The call attached to this conversation */ WebKitWebFrame *web_frame; // Our web frame JSGlobalContextRef js_context; // The frame's global JS context JSObjectRef js_global; // The frame's global context JS object @@ -64,7 +65,7 @@ struct _IMWidgetClass { GType im_widget_get_type(void) G_GNUC_CONST; GtkWidget *im_widget_new(void); -void im_widget_add_message(GtkWidget *im, const gchar *message); +void im_widget_add_message (callable_obj_t *c, const gchar *message); G_END_DECLS diff --git a/sflphone-client-gnome/webkit/Makefile.am b/sflphone-client-gnome/webkit/Makefile.am index 557eafdc2e9c5c06b2ea6da9c52fdc56407cba6c..7d546f48406ade69060b6c86cbe9a085013c8e6c 100644 --- a/sflphone-client-gnome/webkit/Makefile.am +++ b/sflphone-client-gnome/webkit/Makefile.am @@ -5,4 +5,7 @@ EXTRA_DIST = $(im_DATA) webkitdir = $(datadir)/sflphone/webkit imdir = $(webkitdir)/im -im_DATA = im/im.js im/im.html im/im.css +im_DATA = im/im.js \ + im/im.html \ + im/im.css \ + im/sflphone.png diff --git a/sflphone-client-gnome/webkit/im/im.css b/sflphone-client-gnome/webkit/im/im.css index 28cf9a6516f81425e50506fae04e4773ec702f01..fb030d1db16a9ec21bc700c6ba3db351d9c402bc 100644 --- a/sflphone-client-gnome/webkit/im/im.css +++ b/sflphone-client-gnome/webkit/im/im.css @@ -1,8 +1,21 @@ .message { -webkit-border-radius: 5px; - background: #f2f2f2; + background: rgba(242, 242, 242, 0.75); color: #777; padding: 1em; -webkit-box-shadow: 2px 2px 5px #000; margin: 20px; +overflow: auto; +} + +* { + font-size: 1em; +} + +.page { + +} + +body { + background: #fbfdfe url(sflphone.png) no-repeat top right; } diff --git a/sflphone-client-gnome/webkit/im/im.html b/sflphone-client-gnome/webkit/im/im.html index 0e17ee5cbf5ea8ab2874dfb18c37a37b98864926..da25848f71c905a7e2a5f1f0e9762642613b6929 100644 --- a/sflphone-client-gnome/webkit/im/im.html +++ b/sflphone-client-gnome/webkit/im/im.html @@ -5,6 +5,8 @@ <link rel="stylesheet" type="text/css" href="im.css" /> </head> <body> - <div id="messages"></div> + <div class='page'> + <div id="messages"></div> + </div> </body> </html> diff --git a/sflphone-client-gnome/webkit/im/im.js b/sflphone-client-gnome/webkit/im/im.js index 41fb15b365890d5f83b4e347521d34d7b46abb31..7ac134f4c8f6e33e5c1faef7ff8d6ac913b785aa 100644 --- a/sflphone-client-gnome/webkit/im/im.js +++ b/sflphone-client-gnome/webkit/im/im.js @@ -15,9 +15,9 @@ function linkify(text){ } -function add_message (message) +function add_message (message, peer_name, peer_number, peer_info) { var msgBody = document.getElementById ('messages'); - msgBody.innerHTML = '<div class="message">' + linkify (message) + '</div>' + msgBody.innerHTML; + msgBody.innerHTML = msgBody.innerHTML + '<div class="message"><div class="peername">' + peer_name + '</div><div class="peernumber">' + peer_number + '</div>' + linkify (message) + '</div>' ; }