gtkhtml r8871 - trunk/gtkhtml
- From: mcrha svn gnome org
- To: svn-commits-list gnome org
- Subject: gtkhtml r8871 - trunk/gtkhtml
- Date: Wed, 18 Jun 2008 16:19:46 +0000 (UTC)
Author: mcrha
Date: Wed Jun 18 16:19:45 2008
New Revision: 8871
URL: http://svn.gnome.org/viewvc/gtkhtml?rev=8871&view=rev
Log:
2008-06-18 Milan Crha <mcrha redhat com>
** Fix for bug #423395
* gtkhtml-private.h: (struct _GtkHTMLPrivate): New property.
* gtkhtml.h: (gtk_html_set_caret_first_focus_anchor):
* gtkhtml.c: (gtk_html_set_caret_first_focus_anchor), (destroy),
(focus), (gtk_html_init): New API to let GtkHTML know where
to place cursor on the first focus event, based on the anchor name.
Modified:
trunk/gtkhtml/ChangeLog
trunk/gtkhtml/gtkhtml-private.h
trunk/gtkhtml/gtkhtml.c
trunk/gtkhtml/gtkhtml.h
Modified: trunk/gtkhtml/gtkhtml-private.h
==============================================================================
--- trunk/gtkhtml/gtkhtml-private.h (original)
+++ trunk/gtkhtml/gtkhtml-private.h Wed Jun 18 16:19:45 2008
@@ -76,6 +76,8 @@
gboolean in_url_test_mode;
gboolean in_key_binding;
+
+ char *caret_first_focus_anchor;
};
void gtk_html_private_calc_scrollbars (GtkHTML *html,
Modified: trunk/gtkhtml/gtkhtml.c
==============================================================================
--- trunk/gtkhtml/gtkhtml.c (original)
+++ trunk/gtkhtml/gtkhtml.c Wed Jun 18 16:19:45 2008
@@ -768,6 +768,7 @@
g_free (html->priv->content_type);
g_free (html->priv->base_url);
+ g_free (html->priv->caret_first_focus_anchor);
g_free (html->priv);
html->priv = NULL;
}
@@ -2264,6 +2265,7 @@
focus (GtkWidget *w, GtkDirectionType direction)
{
HTMLEngine *e = GTK_HTML (w)->engine;
+ GtkHTMLPrivate *priv = GTK_HTML (w)->priv;
if (html_engine_get_editable (e)) {
gboolean rv;
@@ -2280,6 +2282,28 @@
e->shift_selection = FALSE;
}
+ if (!GTK_WIDGET_HAS_FOCUS (w) && e->caret_mode && priv->caret_first_focus_anchor) {
+ int x = 0, y = 0;
+
+ if (html_object_find_anchor (e->clue, priv->caret_first_focus_anchor, &x, &y)) {
+ GtkAdjustment *vadj;
+
+ gtk_widget_grab_focus (w);
+ html_engine_jump_at (e, x, y);
+
+ vadj = GTK_LAYOUT (e->widget)->vadjustment;
+
+ /* scroll to the position on screen if not visible */
+ if (y < vadj->value || y > vadj->value + vadj->page_size)
+ gtk_adjustment_set_value (vadj, y);
+
+ update_primary_selection (GTK_HTML (w));
+ g_signal_emit (GTK_HTML (w), signals [CURSOR_CHANGED], 0);
+
+ return TRUE;
+ }
+ }
+
if (((e->focus_object && !(GTK_WIDGET_HAS_FOCUS (w))) || html_engine_focus (e, direction)) && e->focus_object) {
gint offset;
HTMLObject *obj = html_engine_get_focus_object (e, &offset);
@@ -3270,6 +3294,8 @@
html->priv->in_url_test_mode = FALSE;
html->priv->in_key_binding = FALSE;
+ html->priv->caret_first_focus_anchor = NULL;
+
/* IM Context */
html->priv->im_context = gtk_im_multicontext_new ();
html->priv->need_im_reset = FALSE;
@@ -3913,6 +3939,26 @@
return html->engine->caret_mode;
}
+/**
+ * gtk_html_set_caret_first_focus_anchor:
+ * When setting focus to the GtkHTML first time and is in caret mode,
+ * then looks for an anchor of name @param name and tries to set focus
+ * just after it. If NULL, then behaves as before.
+ *
+ * @param html GtkHTML instance.
+ * @param name Name of the anchor to be set the first focus just after it,
+ * or NULL to not look for the anchor.
+ **/
+void
+gtk_html_set_caret_first_focus_anchor (GtkHTML *html, const char *name)
+{
+ g_return_if_fail (GTK_IS_HTML (html));
+ g_return_if_fail (html->priv != NULL);
+
+ g_free (html->priv->caret_first_focus_anchor);
+ html->priv->caret_first_focus_anchor = g_strdup (name);
+}
+
void
gtk_html_set_animate (GtkHTML *html, gboolean animate)
{
Modified: trunk/gtkhtml/gtkhtml.h
==============================================================================
--- trunk/gtkhtml/gtkhtml.h (original)
+++ trunk/gtkhtml/gtkhtml.h Wed Jun 18 16:19:45 2008
@@ -208,6 +208,9 @@
gboolean caret_mode);
gboolean gtk_html_get_caret_mode (const GtkHTML *html);
+void gtk_html_set_caret_first_focus_anchor (GtkHTML *html,
+ const char *name);
+
/* Animated Images */
void gtk_html_set_animate (GtkHTML *html,
gboolean animate);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]