ekiga r6694 - trunk/lib/engine/gui/gtk-frontend



Author: jpuydt
Date: Sun Aug 24 22:57:57 2008
New Revision: 6694
URL: http://svn.gnome.org/viewvc/ekiga?rev=6694&view=rev

Log:
Implemented opening a link on click in the chat area, fixing bug #548751

Modified:
   trunk/lib/engine/gui/gtk-frontend/Makefile.am
   trunk/lib/engine/gui/gtk-frontend/chat-area.cpp

Modified: trunk/lib/engine/gui/gtk-frontend/Makefile.am
==============================================================================
--- trunk/lib/engine/gui/gtk-frontend/Makefile.am	(original)
+++ trunk/lib/engine/gui/gtk-frontend/Makefile.am	Sun Aug 24 22:57:57 2008
@@ -5,6 +5,7 @@
 AM_CPPFLAGS = $(XML_CFLAGS) $(SIGC_CFLAGS) $(GTK_CFLAGS)
 
 INCLUDES = \
+	-I$(top_srcdir)/lib/ 					\
 	-I$(top_srcdir)/lib/gui 				\
 	-I$(top_srcdir)/lib/gmconf 				\
 	-I$(top_srcdir)/lib/engine/framework 			\

Modified: trunk/lib/engine/gui/gtk-frontend/chat-area.cpp
==============================================================================
--- trunk/lib/engine/gui/gtk-frontend/chat-area.cpp	(original)
+++ trunk/lib/engine/gui/gtk-frontend/chat-area.cpp	Sun Aug 24 22:57:57 2008
@@ -43,7 +43,9 @@
 #include "gm-text-anchored-tag.h"
 #include "gm-text-smiley.h"
 #include "gm-text-extlink.h"
+
 #include "gm-smileys.h"
+#include "toolbox/toolbox.h"
 
 #include <string.h>
 #include <stdarg.h>
@@ -124,6 +126,12 @@
 
 /* declaration of callbacks */
 
+static void on_extlink_tag_event (GtkTextTag* tag,
+				  GObject* textview,
+				  GdkEvent* event,
+				  GtkTextIter* iter,
+				  gpointer data);
+
 static void on_smiley_activated (GtkMenuItem *item,
 				 gpointer data);
 
@@ -237,6 +245,33 @@
 /* implementation of callbacks */
 
 static void
+on_extlink_tag_event (GtkTextTag* tag,
+		      G_GNUC_UNUSED GObject* textview,
+		      GdkEvent* event,
+		      GtkTextIter* iter,
+		      G_GNUC_UNUSED gpointer data)
+{
+  if (event->type == GDK_BUTTON_PRESS && event->button.button == 1) {
+
+    gchar* link = NULL;
+    GtkTextIter* start = gtk_text_iter_copy (iter);
+    GtkTextIter* end = gtk_text_iter_copy (iter);
+
+    gtk_text_iter_backward_to_tag_toggle (start, tag);
+    gtk_text_iter_forward_to_tag_toggle (end, tag);
+
+    link = gtk_text_buffer_get_slice (gtk_text_iter_get_buffer (iter),
+				      start, end, FALSE);
+
+    gm_open_uri (link);
+
+    g_free (link);
+    gtk_text_iter_free (end);
+    gtk_text_iter_free (start);
+  }
+}
+
+static void
 on_smiley_activated (GtkMenuItem *item,
 		     gpointer data)
 {
@@ -555,6 +590,8 @@
 				    "foreground", "blue",
 				    "underline", PANGO_UNDERLINE_SINGLE,
 				    NULL);
+  g_signal_connect (G_OBJECT (tag), "event",
+		    G_CALLBACK (on_extlink_tag_event), NULL);
   helper = gm_text_extlink_new ("\\<(http[s]?|[s]?ftp)://[^[:blank:]]+\\>", tag);
   gm_text_buffer_enhancer_add_helper (self->priv->enhancer, helper);
   g_object_unref (helper);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]