Skip to content
Snippets Groups Projects
Commit ed1f88b2 authored by Emmanuel Milou's avatar Emmanuel Milou
Browse files

[#960] Display messages in the webkit windows

parent c9a5d094
No related branches found
No related tags found
No related merge requests found
...@@ -127,6 +127,7 @@ incoming_message_cb(DBusGProxy *proxy UNUSED, const gchar* callID UNUSED, ...@@ -127,6 +127,7 @@ incoming_message_cb(DBusGProxy *proxy UNUSED, const gchar* callID UNUSED,
// Get the call information. Does this call exist? // Get the call information. Does this call exist?
callable_obj_t * c = calllist_get (current_calls, callID); callable_obj_t * c = calllist_get (current_calls, callID);
im_widget_add_message (NULL, msg);
if (c) { if (c) {
notify_incoming_message (callID, msg); notify_incoming_message (callID, msg);
} else { } else {
......
...@@ -61,13 +61,14 @@ static gboolean ...@@ -61,13 +61,14 @@ static gboolean
on_delete(GtkWidget * widget UNUSED, gpointer data UNUSED) on_delete(GtkWidget * widget UNUSED, gpointer data UNUSED)
{ {
gtk_widget_hide(GTK_WIDGET(im_window_get())); gtk_widget_hide(GTK_WIDGET(im_window_get()));
// gtk_widget_destroy (GTK_WIDGET(im_window_get()));
return TRUE; return TRUE;
} }
static void static void
im_window_init() im_window_init()
{ {
const char *window_title = "SFLphone VoIP Client"; const char *window_title = "SFLphone VoIP Client - Instant Messaging Module";
gchar *path; gchar *path;
GError *error = NULL; GError *error = NULL;
gboolean ret; gboolean ret;
......
...@@ -32,13 +32,19 @@ ...@@ -32,13 +32,19 @@
#define WEBKIT_DIR "file://" DATA_DIR "/webkit/" #define WEBKIT_DIR "file://" DATA_DIR "/webkit/"
static IMWidget *_this;
void void
im_widget_add_message (GtkWidget *widget, const gchar *message) im_widget_add_message (GtkWidget *widget, const gchar *message)
{ {
IMWidget *im = IM_WIDGET(widget); IMWidget *im = IM_WIDGET(widget);
/* Prepare and execute the Javascript code */
gchar *script = g_strdup_printf("add_message('%s');", message); 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);
webkit_web_view_execute_script(WEBKIT_WEB_VIEW(im->web_view), script); /* Cleanup */
g_free(script); g_free(script);
} }
...@@ -63,6 +69,25 @@ web_view_nav_requested_cb( ...@@ -63,6 +69,25 @@ web_view_nav_requested_cb(
return TRUE; return TRUE;
} }
static void
on_SendMessage_click (void) {
/* Get the text in the buffer */
GtkTextIter start, end;
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 (g_strcasecmp (message, "") != 0 )
{
im_widget_add_message (GTK_WIDGET (_this), message);
/* Empty the buffer */
gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &start, &end);
}
}
static void static void
im_widget_class_init(IMWidgetClass *klass) im_widget_class_init(IMWidgetClass *klass)
{ {
...@@ -71,29 +96,35 @@ im_widget_class_init(IMWidgetClass *klass) ...@@ -71,29 +96,35 @@ im_widget_class_init(IMWidgetClass *klass)
static void static void
im_widget_init(IMWidget *im) im_widget_init(IMWidget *im)
{ {
im->textarea = gtk_text_view_new();
gtk_text_view_set_editable(GTK_TEXT_VIEW(im->textarea), TRUE);
GtkWidget *textscrollwin = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textscrollwin),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(textscrollwin), im->textarea);
im->textarea = gtk_text_view_new ();
im->web_view = webkit_web_view_new(); im->web_view = webkit_web_view_new();
GtkWidget *textscrollwin = gtk_scrolled_window_new(NULL, NULL);
GtkWidget *webscrollwin = gtk_scrolled_window_new (NULL, NULL); GtkWidget *webscrollwin = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(webscrollwin),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(webscrollwin), im->web_view);
g_signal_connect(im->web_view, "navigation-policy-decision-requested",
G_CALLBACK (web_view_nav_requested_cb), NULL);
/* 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(webscrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
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_start(GTK_BOX(im), webscrollwin, TRUE, TRUE, 5);
gtk_box_pack_end(GTK_BOX(im), textscrollwin, 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);
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 (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)); im->web_frame = webkit_web_view_get_main_frame(WEBKIT_WEB_VIEW(im->web_view));
im->js_context = webkit_web_frame_get_global_context(im->web_frame); im->js_context = webkit_web_frame_get_global_context(im->web_frame);
im->js_global = JSContextGetGlobalObject(im->js_context); im->js_global = JSContextGetGlobalObject(im->js_context);
webkit_web_view_open(WEBKIT_WEB_VIEW(im->web_view), "file://" DATA_DIR "/webkit/im/im.html"); webkit_web_view_load_uri (WEBKIT_WEB_VIEW(im->web_view), "file://" DATA_DIR "/webkit/im/im.html");
_this = im;
} }
GtkWidget * GtkWidget *
......
.message { .message {
-webkit-border-radius: 5px; -webkit-border-radius: 5px;
background: green; background: #f2f2f2;
color: white; color: #777;
padding: 1em; padding: 1em;
-webkit-box-shadow: 2px 2px 5px #000;
margin: 20px;
} }
<html> <html>
<head> <head>
<script src="im.js"></script> <script src="im.js"></script>
<script src="jquery-1.4.2.min.js"></script>
<link rel="stylesheet" type="text/css" href="im.css" /> <link rel="stylesheet" type="text/css" href="im.css" />
</head> </head>
<body> <body>
<div id="messages"></div> <div id="messages"></div>
<div class="message">Hello something</div>
<a href="http://www.savoirfairelinux.com/">www.savoirfairelinux.com</a>
</body> </body>
</html> </html>
function add_message (message) function add_message (message)
{ {
alert("Message: " + message); var msgBody = document.getElementById ('messages');
msgBody.innerHTML = '<div class="message">' + message + '</div>' + msgBody.innerHTML;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment