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; +} +