[Kazehakase-cvs] CVS update: kazehakase/src/khtml

Back to archive index

Hiroyuki Ikezoe ikezo****@users*****
Fri Mar 16 10:18:48 JST 2007


Index: kazehakase/src/khtml/kz-khtml.c
diff -u kazehakase/src/khtml/kz-khtml.c:1.21 kazehakase/src/khtml/kz-khtml.c:1.22
--- kazehakase/src/khtml/kz-khtml.c:1.21	Thu Mar 15 11:45:35 2007
+++ kazehakase/src/khtml/kz-khtml.c	Fri Mar 16 10:18:48 2007
@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
- *  $Id: kz-khtml.c,v 1.21 2007/03/15 02:45:35 ikezoe Exp $
+ *  $Id: kz-khtml.c,v 1.22 2007/03/16 01:18:48 ikezoe Exp $
  */
 
 #include <glib/gi18n.h>
@@ -26,12 +26,12 @@
 #include "kz-khtml.h"
 #include "gobject-utils.h"
 
-
 typedef struct _KzKHTMLPrivate	KzKHTMLPrivate;
 struct _KzKHTMLPrivate
 {
 	gint cur_requests;
 	gint total_requests;
+	gchar *link_message;
 };
 #define KZ_KHTML_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), KZ_TYPE_KHTML, KzKHTMLPrivate))
 
@@ -40,6 +40,14 @@
 static void kz_khtml_init         (KzKHTML      *khtml);
 static void kz_khtml_dispose      (GObject      *object);
 
+#if 0
+/* widget class */
+static gboolean button_press      (GtkWidget        *widget,
+                                   GdkEventButton   *event);
+static gboolean button_release    (GtkWidget        *widget,
+                                   GdkEventButton   *event);
+#endif
+
 /* khtml class */
 static void         kz_khtml_status           (Webi *khtml,
 					       WebiLoadStatus *status);
@@ -53,6 +61,11 @@
 					       WebiAuthArgs* args);
 static gboolean     kz_khtml_req_new_window   (Webi     *khtml,
 					       Webi     *newkhtml);
+static void         kz_khtml_mouse_over       (Webi        *khtml,
+					       const gchar *link_title,
+					       const gchar *link_label,
+					       const gchar *link_url,
+					       const gchar *link_target);
 
 /* embed iface */
 static void         kz_khtml_load_url         (KzEmbed      *kzembed,
@@ -61,9 +74,8 @@
 static const gchar *kz_khtml_get_title        (KzEmbed      *kzembed);
 static const gchar *kz_khtml_get_location     (KzEmbed      *kzembed);
 static gchar       *kz_khtml_ensure_title     (KzEmbed      *kzembed);
-#if 0
 static gchar       *kz_khtml_get_link_message (KzEmbed      *kzembed);
-#endif
+
 static void         kz_khtml_reload           (KzEmbed      *kzembed,
 					       KzEmbedReloadFlag flags);
 static void         kz_khtml_stop_load        (KzEmbed      *kzembed);
@@ -71,7 +83,27 @@
 static void         kz_khtml_go_forward       (KzEmbed      *kzembed);
 static gboolean     kz_khtml_can_go_back      (KzEmbed      *kzembed);
 static gboolean     kz_khtml_can_go_forward   (KzEmbed      *kzembed);
-
+static gboolean     kz_khtml_can_go_nav_link  (KzEmbed      *kzembed,
+					       KzEmbedNavLink link);
+static void         kz_khtml_go_nav_link      (KzEmbed      *kzembed,
+					       KzEmbedNavLink link);
+static void         kz_khtml_set_nth_nav_link (KzEmbed      *kzembed,
+					       KzEmbedNavLink link,
+					       KzNavi       *navi,
+					       guint         n);
+static KzNavi      *kz_khtml_get_nth_nav_link (KzEmbed      *kzembed,
+					       KzEmbedNavLink link,
+					       guint         n);
+static GList       *kz_khtml_get_nav_links    (KzEmbed      *kzembed,
+					       KzEmbedNavLink link);
+
+static gboolean     kz_khtml_can_cut_selection  (KzEmbed      *kzembed);
+static gboolean     kz_khtml_can_copy_selection (KzEmbed      *kzembed);
+static gboolean     kz_khtml_can_paste          (KzEmbed      *kzembed);
+static void         kz_khtml_cut_selection      (KzEmbed      *kzembed);
+static void         kz_khtml_copy_selection     (KzEmbed      *kzembed);
+static void         kz_khtml_paste              (KzEmbed      *kzembed);
+static void         kz_khtml_select_all         (KzEmbed      *kzembed);
 
 static gdouble      kz_khtml_get_progress     (KzEmbed      *kzembed);
 
@@ -84,9 +116,6 @@
 					       const char   *keyword,
 					       gboolean      backward);
 
-static WebiClass *parent_class = NULL;
-
-
 G_DEFINE_TYPE_WITH_CODE(KzKHTML, kz_khtml, WEBI_TYPE_WEBI,
                         G_IMPLEMENT_INTERFACE (KZ_TYPE_EMBED,
 					       kz_khtml_iface_init))
@@ -95,14 +124,19 @@
 kz_khtml_class_init (KzKHTMLClass *klass)
 {
 	GObjectClass *object_class;
+	GtkWidgetClass *widget_class;
 	WebiClass *khtml_class;
 
-	parent_class = g_type_class_peek_parent (klass);
+	kz_khtml_parent_class = g_type_class_peek_parent (klass);
 	object_class = (GObjectClass *) klass;
+	widget_class = (GtkWidgetClass *) klass;
 	khtml_class  = (WebiClass *) klass;
 
 	object_class->dispose   = kz_khtml_dispose;
-
+#if 0
+	widget_class->button_press_event   = button_press;
+	widget_class->button_release_event = button_release;
+#endif
 	khtml_class->status     = kz_khtml_status;
 	khtml_class->load_start = kz_khtml_load_start;
 	khtml_class->load_stop  = kz_khtml_load_stop;
@@ -114,6 +148,7 @@
 	khtml_class->req_js_prompt   = kz_khtml_req_js_prompt;
 	khtml_class->req_auth_prompt = kz_khtml_req_auth_prompt;
 	khtml_class->req_new_window  = kz_khtml_req_new_window;
+	khtml_class->mouse_over      = kz_khtml_mouse_over;
 	
 	g_type_class_add_private (object_class, sizeof(KzKHTMLPrivate));
 }
@@ -128,15 +163,15 @@
 	iface->get_title              = kz_khtml_get_title;
 	iface->get_location           = kz_khtml_get_location;
 	iface->ensure_title           = kz_khtml_ensure_title;
-	iface->get_link_message       = NULL;/*kz_khtml_get_link_message*/;
+	iface->get_link_message       = kz_khtml_get_link_message;
 	iface->get_progress           = kz_khtml_get_progress;
-	iface->can_cut_selection      = NULL;
-	iface->can_copy_selection     = NULL;
-	iface->can_paste              = NULL;
-	iface->cut_selection          = NULL;
-	iface->copy_selection         = NULL;
-	iface->paste                  = NULL;
-	iface->select_all             = NULL;
+	iface->can_cut_selection      = kz_khtml_can_cut_selection;
+	iface->can_copy_selection     = kz_khtml_can_copy_selection;
+	iface->can_paste              = kz_khtml_can_paste;
+	iface->cut_selection          = kz_khtml_cut_selection;
+	iface->copy_selection         = kz_khtml_copy_selection;
+	iface->paste                  = kz_khtml_paste;
+	iface->select_all             = kz_khtml_select_all;
 	iface->get_selection_string   = NULL;
 	iface->find                   = kz_khtml_find;
 	iface->incremental_search     = kz_khtml_find; /* tentavie */
@@ -150,17 +185,16 @@
 	iface->stop_load              = kz_khtml_stop_load;
 	iface->go_back                = kz_khtml_go_back;
 	iface->go_forward             = kz_khtml_go_forward;
-/*	iface->go_up                  = NULL; */
 	iface->can_go_back            = kz_khtml_can_go_back;
 	iface->can_go_forward         = kz_khtml_can_go_forward;
-/*	iface->can_go_up              = NULL; */
-	iface->can_go_nav_link        = NULL;
-	iface->go_nav_link            = NULL;
+	iface->can_go_nav_link        = kz_khtml_can_go_nav_link;
+	iface->go_nav_link            = kz_khtml_go_nav_link;
 	iface->append_nav_link        = NULL;
 	iface->set_nav_link           = NULL;
-	iface->set_nth_nav_link       = NULL;
+	iface->set_nth_nav_link       = kz_khtml_set_nth_nav_link;
 	iface->get_nav_link           = NULL;
-	iface->get_nth_nav_link       = NULL;
+	iface->get_nth_nav_link       = kz_khtml_get_nth_nav_link;
+	iface->get_nav_links          = kz_khtml_get_nav_links;
 	iface->go_history_index       = NULL;
 	iface->do_command             = NULL;
 	iface->can_do_command         = NULL;
@@ -231,15 +265,42 @@
 	khtml->is_loading = FALSE;
 	priv->cur_requests   = 0;
 	priv->total_requests = 0;
+	priv->link_message   = NULL;
+
+	gtk_widget_show_all(GTK_WIDGET(khtml));
 }
 
 static void
 kz_khtml_dispose (GObject *object)
 {
-	if (G_OBJECT_CLASS (parent_class)->dispose)
-		G_OBJECT_CLASS (parent_class)->dispose(object);
+	KzKHTMLPrivate *priv = KZ_KHTML_GET_PRIVATE(object);
+
+	if (priv->link_message)
+		g_free(priv->link_message);
+	priv->link_message = NULL;
+
+	if (G_OBJECT_CLASS(kz_khtml_parent_class)->dispose)
+		G_OBJECT_CLASS(kz_khtml_parent_class)->dispose(object);
 }
 
+#if 0
+static gboolean
+button_press (GtkWidget *widget, GdkEventButton *event)
+{
+	if (GTK_WIDGET_CLASS(kz_khtml_parent_class)->button_press_event)
+		return  GTK_WIDGET_CLASS(kz_khtml_parent_class)->button_press_event(widget, event);
+
+	return FALSE;
+}
+
+static gboolean
+button_release (GtkWidget *widget, GdkEventButton *event)
+{
+	if (GTK_WIDGET_CLASS(kz_khtml_parent_class)->button_press_event)
+		return GTK_WIDGET_CLASS(kz_khtml_parent_class)->button_press_event(widget, event);
+	return FALSE;
+}
+#endif
 
 GtkWidget *
 kz_khtml_new (const gchar *url)
@@ -359,6 +420,63 @@
 	return TRUE;
 }
 
+static void
+kz_khtml_mouse_over (Webi *khtml,
+		     const gchar *link_title,
+		     const gchar *link_label,
+		     const gchar *link_url,
+		     const gchar *link_target)
+{
+	KzEmbedEventMouse *kzevent;
+	gint ret = FALSE;
+	GdkModifierType state = (GdkModifierType)0;
+	gint x, y;
+	KzKHTMLPrivate *priv;
+	g_return_if_fail(KZ_IS_KHTML(khtml));
+
+	priv = KZ_KHTML_GET_PRIVATE(khtml);
+	kzevent = (KzEmbedEventMouse *) kz_embed_event_new(KZ_EMBED_EVENT_MOUSE);
+	gdk_window_get_pointer(NULL, &x, &y, &state);
+	kzevent->x = x;
+	kzevent->y = y;
+	if (state & GDK_SHIFT_MASK)
+        	kzevent->modifier |= KZ_SHIFT_KEY;
+	if (state & GDK_CONTROL_MASK)
+        	kzevent->modifier |= KZ_CTRL_KEY;
+	if (state & GDK_MOD1_MASK)
+        	kzevent->modifier |= KZ_ALT_KEY;
+	if (state & GDK_META_MASK)
+        	kzevent->modifier |= KZ_META_KEY;
+
+
+	if (!link_url)
+	{
+		if (priv->link_message)
+		{
+			g_free(priv->link_message);
+			priv->link_message = NULL;
+			g_signal_emit_by_name(khtml, "kz-link-message");
+		}
+	}
+	else	
+	{
+		KzEmbedEvent *info = (KzEmbedEvent *) kzevent;
+		info->context = KZ_CONTEXT_LINK;
+		info->link = g_strdup(link_url);
+		info->linktext = g_strdup(link_label);
+
+		if (priv->link_message)
+			g_free(priv->link_message);
+
+		priv->link_message = g_strdup(link_url);
+
+		g_signal_emit_by_name(khtml, "kz-link-message");
+	}
+
+	g_signal_emit_by_name(khtml, "kz-dom-mouse-over",
+			      kzevent, &ret);
+	kz_embed_event_free((KzEmbedEvent *) kzevent);
+}
 
 static gboolean
 kz_khtml_is_loading (KzEmbed *kzembed)
@@ -395,17 +513,13 @@
 	return webi_get_location(WEBI(kzembed));
 }
 
-
-#if 0
 static gchar *
 kz_khtml_get_link_message (KzEmbed *kzembed)
 {
 	g_return_val_if_fail(KZ_IS_KHTML(kzembed), NULL);
 
-	return g_strdup(webi_get_status_text(WEBI(kzembed)));
+	return g_strdup(KZ_KHTML_GET_PRIVATE(kzembed)->link_message);
 }
-#endif
-
 
 static gchar *
 kz_khtml_ensure_title (KzEmbed *kzembed)
@@ -423,7 +537,6 @@
 	return g_strdup(_("No title"));
 }
 
-#warning FIXME! use flags
 static void
 kz_khtml_reload (KzEmbed *kzembed, KzEmbedReloadFlag flags)
 {
@@ -478,6 +591,52 @@
 }
 
 
+static gboolean
+kz_khtml_can_go_nav_link (KzEmbed *kzembed, KzEmbedNavLink link)
+{
+	g_return_val_if_fail(KZ_IS_KHTML(kzembed), FALSE);
+
+	return FALSE;
+}
+
+static void
+kz_khtml_go_nav_link (KzEmbed *kzembed, KzEmbedNavLink link)
+{
+	g_return_if_fail(KZ_IS_KHTML(kzembed));
+
+	return;
+}
+
+static void
+kz_khtml_set_nth_nav_link (KzEmbed *kzembed,
+			   KzEmbedNavLink link,
+			   KzNavi *navi,
+			   guint n)
+{
+	g_return_if_fail(KZ_IS_KHTML(kzembed));
+
+	return;
+}
+
+static KzNavi *
+kz_khtml_get_nth_nav_link (KzEmbed *kzembed,
+			   KzEmbedNavLink link,
+			   guint n)
+{
+	g_return_val_if_fail(KZ_IS_KHTML(kzembed), NULL);
+
+	return NULL;
+}
+
+static GList *
+kz_khtml_get_nav_links (KzEmbed *kzembed,
+			KzEmbedNavLink link)
+{
+	g_return_val_if_fail(KZ_IS_KHTML(kzembed), NULL);
+
+	return NULL;
+}
+
 static gdouble
 kz_khtml_get_progress (KzEmbed *kzembed)
 {
@@ -542,3 +701,57 @@
 
 	return webi_find(WEBI(kzembed), keyword, FALSE, backward); 
 }
+
+static gboolean
+kz_khtml_can_cut_selection (KzEmbed *kzembed)
+{
+	g_return_val_if_fail(KZ_IS_KHTML(kzembed), FALSE);
+
+	/* not implemented yet */
+	return FALSE;
+}
+
+static gboolean
+kz_khtml_can_copy_selection (KzEmbed *kzembed)
+{
+	g_return_val_if_fail(KZ_IS_KHTML(kzembed), FALSE);
+	/* not implemented yet */
+	return FALSE;
+}
+
+static gboolean
+kz_khtml_can_paste (KzEmbed *kzembed)
+{
+	g_return_val_if_fail(KZ_IS_KHTML(kzembed), FALSE);
+	/* not implemented yet */
+	return FALSE;
+}
+
+static void
+kz_khtml_cut_selection (KzEmbed *kzembed)
+{
+	/* not implemented yet */
+	return;
+}
+
+static void
+kz_khtml_copy_selection (KzEmbed *kzembed)
+{
+	/* not implemented yet */
+	return;
+}
+
+static void
+kz_khtml_paste (KzEmbed *kzembed)
+{
+	/* not implemented yet */
+	return;
+}
+
+static void
+kz_khtml_select_all (KzEmbed *kzembed)
+{
+	/* not implemented yet */
+	return;
+}
+


More information about the Kazehakase-cvs mailing list
Back to archive index