X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fhelmpot%2FguiGTK.c;h=906daf2b60f55253333fbc75cf3d75e092210aef;hb=4167cea65ca58897d1a3dbb81ff95de5074700cc;hp=4384f3cef2c5d8cbc8b20d81034f7bf0db5fceee;hpb=75967c868f11708ad64e881dbe15a38718e441b7;p=helm.git diff --git a/helm/helmpot/guiGTK.c b/helm/helmpot/guiGTK.c index 4384f3cef..906daf2b6 100644 --- a/helm/helmpot/guiGTK.c +++ b/helm/helmpot/guiGTK.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000, Luca Padovani . + * Copyright (C) 2000-2002, Luca Padovani . * * This file is part of HelmPot, a minimal browser for HELM. * @@ -213,8 +213,6 @@ GUI_load_document(const gchar* name) klass = (GtkMathViewClass*) gtk_type_class(gtk_math_view_get_type()); g_return_val_if_fail(klass != NULL, -1); - gdk_window_set_cursor(main_area->window, pot_cursor); - loading = TRUE; res = gtk_math_view_load(math_view, name); gdk_window_set_cursor(main_area->window, normal_cursor); loading = FALSE; @@ -307,7 +305,7 @@ help_about(GtkWidget* widget, gpointer data) GtkWidget* ok; dialog = gtk_dialog_new(); - label = gtk_label_new("\n HELM PoT \n Copyright (C) 2001 Luca Padovani \n"); + label = gtk_label_new("\n HELM PoT \n Copyright (C) 2001-2002 Luca Padovani \n"); ok = gtk_button_new_with_label("Close"); gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", @@ -462,7 +460,7 @@ save_as(GtkWidget* widget) } PRIVATE void -element_changed(GtkMathView* math_view, mDOMNodeRef node) +element_changed(GtkMathView* math_view, GdomeElement* elem) { g_return_if_fail(math_view != NULL); g_return_if_fail(main_area != NULL); @@ -470,10 +468,30 @@ element_changed(GtkMathView* math_view, mDOMNodeRef node) /* fprintf(stderr, "node changed: %p %s\n", node, (node != NULL) ? mdom_node_get_name(node) : "-"); */ if (!loading) { - while (node != NULL && !mdom_node_has_attribute_ns(node, DOM_CONST_STRING("href"), XLINK_NS_URI)) - node = mdom_node_get_parent(node); - - if (node != NULL) { + GdomeException exc = 0; + GdomeDOMString* namespaceURI = gdome_str_mkref(XLINK_NS_URI); + GdomeDOMString* localName = gdome_str_mkref("href"); + + if (elem != NULL) { + gdome_el_ref(elem, &exc); + g_assert(exc == 0); + } + + while (elem != NULL && !gdome_el_hasAttributeNS(elem, namespaceURI, localName, &exc)) { + GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(elem, &exc)); + g_assert(exc == 0); + gdome_el_unref(elem, &exc); + g_assert(exc == 0); + elem = parent; + } + g_assert(exc == 0); + + gdome_str_unref(namespaceURI); + gdome_str_unref(localName); + + if (elem != NULL) { + gdome_el_unref(elem, &exc); + g_assert(exc == 0); gdk_window_set_cursor(main_area->window, link_cursor); } else gdk_window_set_cursor(main_area->window, normal_cursor); @@ -481,27 +499,48 @@ element_changed(GtkMathView* math_view, mDOMNodeRef node) } PRIVATE void -selection_changed(GtkMathView* math_view, mDOMNodeRef node) +selection_changed(GtkMathView* math_view, GdomeElement* elem) { + GdomeException exc = 0; + GdomeDOMString* localName = gdome_str_mkref("xref"); + g_return_if_fail(math_view != NULL); g_return_if_fail(GTK_IS_MATH_VIEW(math_view)); - while (node != NULL && !mdom_node_has_attribute(node, DOM_CONST_STRING("xref"))) - node = mdom_node_get_parent(node); + if (elem != NULL) { + gdome_el_ref(elem, &exc); + g_assert(exc == 0); + } + + while (elem != NULL && !gdome_el_hasAttribute(elem, localName, &exc)) { + GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(elem, &exc)); + g_assert(exc == 0); + gdome_el_unref(elem, &exc); + g_assert(exc == 0); + elem = parent; + } + + gdome_str_unref(localName); - gtk_math_view_set_selection(math_view, node); + gtk_math_view_set_selection(math_view, elem); + if (elem != NULL) { + gdome_el_unref(elem, &exc); + g_assert(exc == 0); + } } PRIVATE void -jump(mDOMConstStringRef href) +jump(GdomeDOMString* href) { pid_t pid; g_return_if_fail(href != NULL); + gdk_window_set_cursor(main_area->window, pot_cursor); + loading = TRUE; pid = fork(); if (pid == -1) exit(-1); if (pid == 0) { - gchar* open_url = g_strdup_printf("openURL(%s,cic)", href); + gchar* open_url = g_strdup_printf("openURL(%s,cic)", href->str); gint fd; close(0); @@ -521,18 +560,40 @@ jump(mDOMConstStringRef href) PRIVATE void clicked(GtkMathView* math_view, gpointer user_data) { - mDOMNodeRef p = gtk_math_view_get_element(math_view); - while (p != NULL && !mdom_node_has_attribute_ns(p, DOM_CONST_STRING("href"), XLINK_NS_URI)) - p = mdom_node_get_parent(p); + GdomeException exc = 0; + GdomeDOMString* namespaceURI = gdome_str_mkref(XLINK_NS_URI); + GdomeDOMString* localName = gdome_str_mkref("href"); + + GdomeElement* p = gtk_math_view_get_element(math_view); + while (p != NULL && !gdome_el_hasAttributeNS(p, namespaceURI, localName, &exc)) { + GdomeElement* parent = gdome_cast_el(gdome_el_parentNode(p, &exc)); + g_assert(exc == 0); + gdome_el_unref(p, &exc); + g_assert(exc == 0); + p = parent; + } + g_assert(exc == 0); if (p != NULL) { - mDOMStringRef href = mdom_node_get_attribute_ns(p, DOM_CONST_STRING("href"), XLINK_NS_URI); + GdomeDOMString* href = gdome_el_getAttributeNS(p, namespaceURI, localName, &exc); + g_assert(exc == 0); g_assert(href != NULL); - jump(C_CONST_STRING(href)); - mdom_string_free(href); - } else if (gtk_math_view_get_action(math_view) != NULL) - gtk_math_view_action_toggle(math_view); + jump(href); + gdome_str_unref(href); + gdome_el_unref(p, &exc); + g_assert(exc == 0); + } else { + p = gtk_math_view_get_action(math_view); + if (p != NULL) { + gtk_math_view_action_toggle(math_view); + gdome_el_unref(p, &exc); + g_assert(exc == 0); + } + } + + gdome_str_unref(namespaceURI); + gdome_str_unref(localName); } PRIVATE void @@ -620,3 +681,4 @@ get_main_menu() return gtk_item_factory_get_widget(item_factory, "
"); } +