From: Carlos Garcia Campos Date: Mon, 9 Jul 2007 17:14:00 +0000 (+0000) Subject: Update also the region of the current selected button when clicking on X-Git-Tag: EVINCE_0_9_2~2 X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=9716be33110255e599ee94a1364ee1c3bbd3b307;p=evince.git Update also the region of the current selected button when clicking on 2007-07-09 Carlos Garcia Campos * shell/ev-view.c: (ev_view_form_field_button_create_widget): Update also the region of the current selected button when clicking on another button if they are radio buttons. svn path=/trunk/; revision=2566 --- diff --git a/ChangeLog b/ChangeLog index eeceffe5..3e8ffd09 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-07-09 Carlos Garcia Campos + + * shell/ev-view.c: (ev_view_form_field_button_create_widget): + + Update also the region of the current selected button when + clicking on another button if they are radio buttons. + 2007-07-09 Carlos Garcia Campos * shell/ev-pixbuf-cache.[ch]: (ev_pixbuf_cache_class_init), diff --git a/shell/ev-view.c b/shell/ev-view.c index 44af4212..0bbef7db 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -1637,14 +1637,13 @@ ev_view_form_field_button_create_widget (EvView *view, EvFormField *field) { EvFormFieldButton *field_button = EV_FORM_FIELD_BUTTON (field); + GdkRegion *field_region; switch (field_button->type) { case EV_FORM_FIELD_BUTTON_PUSH: - break; - case EV_FORM_FIELD_BUTTON_CHECK: - case EV_FORM_FIELD_BUTTON_RADIO: { - gboolean state; - GdkRegion *field_region; + return NULL; + case EV_FORM_FIELD_BUTTON_CHECK: { + gboolean state; field_region = ev_view_form_field_get_region (view, field); @@ -1652,15 +1651,56 @@ ev_view_form_field_button_create_widget (EvView *view, field); ev_document_forms_form_field_button_set_state (EV_DOCUMENT_FORMS (view->document), field, !state); - ev_pixbuf_cache_reload_page (view->pixbuf_cache, - field_region, - field->page, - view->rotation, - view->scale); - gdk_region_destroy (field_region); + } + break; + + case EV_FORM_FIELD_BUTTON_RADIO: { + gboolean state; + GList *forms_mapping, *l; + + state = ev_document_forms_form_field_button_get_state (EV_DOCUMENT_FORMS (view->document), + field); + if (state && field_button->state) + return NULL; + + field_region = ev_view_form_field_get_region (view, field); + + /* For radio buttons we need to update also the region for the + * current selected item + */ + forms_mapping = ev_pixbuf_cache_get_form_field_mapping (view->pixbuf_cache, + field->page); + for (l = forms_mapping; l; l = g_list_next (l)) { + EvFormField *radio = ((EvFormFieldMapping *)(l->data))->field; + GdkRegion *radio_region; + + if (radio->id == field->id) + continue; + + /* FIXME: only buttons in the same group should be updated */ + if (!EV_IS_FORM_FIELD_BUTTON (radio) || + EV_FORM_FIELD_BUTTON (radio)->type != EV_FORM_FIELD_BUTTON_RADIO || + EV_FORM_FIELD_BUTTON (radio)->state != TRUE) + continue; + + radio_region = ev_view_form_field_get_region (view, radio); + gdk_region_union (field_region, radio_region); + gdk_region_destroy (radio_region); + } + + ev_document_forms_form_field_button_set_state (EV_DOCUMENT_FORMS (view->document), + field, TRUE); + field_button->state = TRUE; } break; } + + ev_pixbuf_cache_reload_page (view->pixbuf_cache, + field_region, + field->page, + view->rotation, + view->scale); + gdk_region_destroy (field_region); return NULL; }