Enlightenment CVS committal Author : moom16 Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_scrolled_view.c etk_scrolled_view.h etk_tree.c Log Message: * Improve keyboard navigation in the tree * Update correctly the scrolled view when the scroll size changes =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_scrolled_view.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- etk_scrolled_view.c 21 Dec 2005 16:47:38 -0000 1.9 +++ etk_scrolled_view.c 22 Dec 2005 16:41:14 -0000 1.10 @@ -30,7 +30,7 @@ static void _etk_scrolled_view_vscrollbar_value_changed_cb(Etk_Object *object, double value, void *data); static void _etk_scrolled_view_child_added_cb(Etk_Object *object, void *child, void *data); static void _etk_scrolled_view_child_removed_cb(Etk_Object *object, void *child, void *data); -static void _etk_scrolled_view_child_scroll_size_changed_cb(void *data); +static void _etk_scrolled_view_child_scroll_size_changed_cb(Etk_Object *object, void *data); /************************** * @@ -74,11 +74,11 @@ * @param scrolled_view a scrolled view * @return Returns the hscrollbar of the scrolled view */ -Etk_Widget *etk_scrolled_view_hscrollbar_get(Etk_Scrolled_View *scrolled_view) +Etk_Range *etk_scrolled_view_hscrollbar_get(Etk_Scrolled_View *scrolled_view) { if (!scrolled_view) return NULL; - return scrolled_view->hscrollbar; + return ETK_RANGE(scrolled_view->hscrollbar); } /** @@ -86,11 +86,11 @@ * @param scrolled_view a scrolled view * @return Returns the vscrollbar of the scrolled view */ -Etk_Widget *etk_scrolled_view_vscrollbar_get(Etk_Scrolled_View *scrolled_view) +Etk_Range *etk_scrolled_view_vscrollbar_get(Etk_Scrolled_View *scrolled_view) { if (!scrolled_view) return NULL; - return scrolled_view->vscrollbar; + return ETK_RANGE(scrolled_view->vscrollbar); } /** @@ -451,7 +451,7 @@ { if (!object || !child) return; - etk_signal_connect_swapped("scroll_size_changed", ETK_OBJECT(child), ETK_CALLBACK(_etk_scrolled_view_child_scroll_size_changed_cb), object); + etk_signal_connect("scroll_size_changed", ETK_OBJECT(child), ETK_CALLBACK(_etk_scrolled_view_child_scroll_size_changed_cb), object); } /* Called when a child is removed */ @@ -463,13 +463,19 @@ } /* Called when the scroll size of the child of the scrolled view has changed */ -static void _etk_scrolled_view_child_scroll_size_changed_cb(void *data) +static void _etk_scrolled_view_child_scroll_size_changed_cb(Etk_Object *object, void *data) { - Etk_Widget *scrolled_widget; + Etk_Widget *child; + Etk_Scrolled_View *scrolled_view; + Etk_Size scroll_size; - if (!(scrolled_widget = ETK_WIDGET(data))) + if (!(child = ETK_WIDGET(object)) || !child->scroll_size_get || !(scrolled_view = ETK_SCROLLED_VIEW(data))) return; - etk_widget_redraw_queue(scrolled_widget); + + child->scroll_size_get(child, &scroll_size); + etk_range_range_set(ETK_RANGE(scrolled_view->hscrollbar), 0, scroll_size.w); + etk_range_range_set(ETK_RANGE(scrolled_view->vscrollbar), 0, scroll_size.h); + etk_widget_redraw_queue(ETK_WIDGET(scrolled_view)); } /** @} */ =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_scrolled_view.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- etk_scrolled_view.h 11 Nov 2005 22:48:48 -0000 1.3 +++ etk_scrolled_view.h 22 Dec 2005 16:41:14 -0000 1.4 @@ -50,8 +50,8 @@ Etk_Type *etk_scrolled_view_type_get(); Etk_Widget *etk_scrolled_view_new(); -Etk_Widget *etk_scrolled_view_hscrollbar_get(Etk_Scrolled_View *scrolled_view); -Etk_Widget *etk_scrolled_view_vscrollbar_get(Etk_Scrolled_View *scrolled_view); +Etk_Range *etk_scrolled_view_hscrollbar_get(Etk_Scrolled_View *scrolled_view); +Etk_Range *etk_scrolled_view_vscrollbar_get(Etk_Scrolled_View *scrolled_view); void etk_scrolled_view_add_with_viewport(Etk_Scrolled_View *scrolled_view, Etk_Widget *child); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- etk_tree.c 21 Dec 2005 19:44:49 -0000 1.22 +++ etk_tree.c 22 Dec 2005 16:41:14 -0000 1.23 @@ -594,7 +594,7 @@ tree->use_default_row_height = TRUE; if (etk_widget_theme_object_data_get(tree->grid, "row_height", "%d", &tree->row_height) != 1 || tree->row_height < ETK_TREE_MIN_ROW_HEIGHT) tree->row_height = ETK_TREE_MIN_ROW_HEIGHT; - etk_range_increments_set(ETK_RANGE(etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view))), tree->row_height, 5 * tree->row_height); + etk_range_increments_set(etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view)), tree->row_height, 5 * tree->row_height); } else { @@ -605,7 +605,7 @@ etk_object_notify(ETK_OBJECT(tree), "row_height"); etk_signal_emit_by_name("scroll_size_changed", ETK_OBJECT(tree->grid), NULL); etk_widget_redraw_queue(ETK_WIDGET(tree->grid)); - etk_range_increments_set(ETK_RANGE(etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view))), tree->row_height, 5 * tree->row_height); + etk_range_increments_set(etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view)), tree->row_height, 5 * tree->row_height); } /** @@ -767,11 +767,8 @@ _etk_tree_row_free(tree->root.first_child); tree->last_selected = NULL; - if (!tree->frozen) - { - etk_signal_emit_by_name("scroll_size_changed", ETK_OBJECT(tree->grid), NULL); - etk_widget_redraw_queue(ETK_WIDGET(tree->grid)); - } + etk_signal_emit_by_name("scroll_size_changed", ETK_OBJECT(tree->grid), NULL); + etk_widget_redraw_queue(ETK_WIDGET(tree->grid)); } /** @@ -1102,7 +1099,7 @@ else new_xoffset = row_offset - tree_height + tree->row_height; - etk_range_value_set(ETK_RANGE(etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view))), new_xoffset); + etk_range_value_set(etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view)), new_xoffset); return; } } @@ -1766,7 +1763,7 @@ { if (etk_widget_theme_object_data_get(grid, "row_height", "%d", &tree->row_height) != 1 || tree->row_height < ETK_TREE_MIN_ROW_HEIGHT) tree->row_height = ETK_TREE_MIN_ROW_HEIGHT; - etk_range_increments_set(ETK_RANGE(etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view))), tree->row_height, 5 * tree->row_height); + etk_range_increments_set(etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view)), tree->row_height, 5 * tree->row_height); } if (etk_widget_theme_object_data_get(grid, "cell_margins", "%d %d %d %d", &tree->cell_margins[0], &tree->cell_margins[1], &tree->cell_margins[2], &tree->cell_margins[3]) != 4) @@ -1865,10 +1862,16 @@ static void _etk_tree_key_down_cb(Etk_Object *object, void *event, void *data) { Etk_Event_Key_Up_Down *key_event = event; + Etk_Range *hscrollbar_range; + Etk_Range *vscrollbar_range; + Etk_Bool propagate = FALSE; Etk_Tree *tree; if (!(tree = ETK_TREE(object))) return; + + hscrollbar_range = etk_scrolled_view_hscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view)); + vscrollbar_range = etk_scrolled_view_vscrollbar_get(ETK_SCROLLED_VIEW(tree->scrolled_view)); /* Select the previous visible row */ if (strcmp(key_event->key, "Up") == 0) @@ -1882,7 +1885,6 @@ _etk_tree_row_select(tree, row_to_select, key_event->modifiers); etk_tree_row_scroll_to(row_to_select, FALSE); - etk_widget_event_propagation_stop(); } /* Select the next visible row */ else if (strcmp(key_event->key, "Down") == 0) @@ -1896,20 +1898,24 @@ _etk_tree_row_select(tree, row_to_select, key_event->modifiers); etk_tree_row_scroll_to(row_to_select, FALSE); - etk_widget_event_propagation_stop(); } - /* Expand the row */ else if (strcmp(key_event->key, "Right") == 0 && tree->last_selected && tree->last_selected->selected) - { etk_tree_row_expand(tree->last_selected); - etk_widget_event_propagation_stop(); - } - /* Collapse the row */ else if (strcmp(key_event->key, "Left") == 0 && tree->last_selected && tree->last_selected->selected) - { etk_tree_row_collapse(tree->last_selected); + else if (strcmp(key_event->key, "Home") == 0) + etk_range_value_set(vscrollbar_range, vscrollbar_range->lower); + else if (strcmp(key_event->key, "End") == 0) + etk_range_value_set(vscrollbar_range, vscrollbar_range->upper); + else if (strcmp(key_event->key, "Next") == 0) + etk_range_value_set(vscrollbar_range, vscrollbar_range->value + vscrollbar_range->page_increment); + else if (strcmp(key_event->key, "Prior") == 0) + etk_range_value_set(vscrollbar_range, vscrollbar_range->value - vscrollbar_range->page_increment); + else + propagate = TRUE; + + if (!propagate) etk_widget_event_propagation_stop(); - } } /* Called when the user presses a column header */ ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs