[maemo-commits] [maemo-commits] r9506 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Feb 1 13:36:50 EET 2007
- Previous message: [maemo-commits] r9505 - in projects/haf/branches/hildon-libs/hildon-1: . doc examples
- Next message: [maemo-commits] r9507 - in projects/haf/trunk/hildon-theme-layout-4: . rc
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: kris Date: 2007-02-01 13:36:48 +0200 (Thu, 01 Feb 2007) New Revision: 9506 Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeprivate.h projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeview.c Log: 2007-02-01 Kristian Rietveld <kris at imendio.com> A first patch to get pen dragging going. * gtk/gtktreeview.c (gtk_tree_view_class_init), (gtk_tree_view_init), (gtk_tree_view_destroy), (gtk_tree_view_button_press), (gtk_tree_view_button_release), (gtk_tree_view_update_rubber_band_selection), (gtk_tree_view_bin_expose), (gtk_tree_view_set_model): slightly modify the rubber banding code to mimic the pen dragging found in maemo-gtk-2-6. Changes include: disabling drawing the rubber band, do not immediately set the cursor on button press, don't select insensitive rows when rubber banding. * gtk/gtktreeprivate.h (struct _GtkTreePrivate): add queued_select_row field. Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-02-01 09:34:00 UTC (rev 9505) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-02-01 11:36:48 UTC (rev 9506) @@ -1,3 +1,20 @@ +2007-02-01 Kristian Rietveld <kris at imendio.com> + + A first patch to get pen dragging going. + + * gtk/gtktreeview.c (gtk_tree_view_class_init), + (gtk_tree_view_init), (gtk_tree_view_destroy), + (gtk_tree_view_button_press), (gtk_tree_view_button_release), + (gtk_tree_view_update_rubber_band_selection), + (gtk_tree_view_bin_expose), (gtk_tree_view_set_model): slightly + modify the rubber banding code to mimic the pen dragging found + in maemo-gtk-2-6. Changes include: disabling drawing the rubber + band, do not immediately set the cursor on button press, + don't select insensitive rows when rubber banding. + + * gtk/gtktreeprivate.h (struct _GtkTreePrivate): add + queued_select_row field. + 2007-01-30 Michael Natterer <mitch at imendio.com> * gtk/gtkentry.c (gtk_entry_real_activate): port over Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeprivate.h =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeprivate.h 2007-02-01 09:34:00 UTC (rev 9505) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeprivate.h 2007-02-01 11:36:48 UTC (rev 9506) @@ -263,6 +263,11 @@ gboolean tree_lines_enabled; GdkGC *tree_line_gc; + +#ifdef MAEMO_CHANGES + /* Fields for Maemo specific functionality */ + GtkTreeRowReference *queued_select_row; +#endif /* MAEMO_CHANGES */ }; #ifdef __GNUC__ Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeview.c =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeview.c 2007-02-01 09:34:00 UTC (rev 9505) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtktreeview.c 2007-02-01 11:36:48 UTC (rev 9506) @@ -725,7 +725,11 @@ g_param_spec_boolean ("rubber-banding", P_("Rubber Banding"), P_("Whether to enable selection of multiple items by dragging the mouse pointer"), +#ifndef MAEMO_CHANGES FALSE, +#else /* MAEMO_CHANGES */ + TRUE, +#endif /* MAEMO_CHANGES */ GTK_PARAM_READWRITE)); g_object_class_install_property (o_class, @@ -1349,9 +1353,15 @@ #ifdef MAEMO_CHANGES tree_view->priv->level_indentation = 10; + + tree_view->priv->queued_select_row = NULL; #endif /* MAEMO_CHANGES */ +#ifdef MAEMO_CHANGES + tree_view->priv->rubber_banding_enable = TRUE; +#else /* !MAEMO_CHANGES */ tree_view->priv->rubber_banding_enable = FALSE; +#endif /* !MAEMO_CHANGES */ tree_view->priv->grid_lines = GTK_TREE_VIEW_GRID_LINES_NONE; tree_view->priv->tree_lines_enabled = FALSE; @@ -1598,6 +1608,14 @@ tree_view->priv->top_row = NULL; } +#ifdef MAEMO_CHANGES + if (tree_view->priv->queued_select_row != NULL) + { + gtk_tree_row_reference_free (tree_view->priv->queued_select_row); + tree_view->priv->queued_select_row = NULL; + } +#endif /* MAEMO_CHANGES */ + if (tree_view->priv->column_drop_func_data && tree_view->priv->column_drop_func_data_destroy) { @@ -2455,6 +2473,9 @@ gboolean row_double_click = FALSE; gboolean rtl; gboolean node_selected; +#ifdef MAEMO_CHANGES + gboolean node_is_selectable; +#endif /* MAEMO_CHANGES */ /* Empty tree? */ if (tree_view->priv->tree == NULL) @@ -2622,6 +2643,40 @@ gtk_tree_path_free (anchor); } +#ifdef MAEMO_CHANGES + node_selected = GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED); + node_is_selectable = + _gtk_tree_selection_row_is_selectable (tree_view->priv->selection, + node, path); + + /* Save press to possibly begin a drag + */ + if (!column_handled_click && + !tree_view->priv->in_grab && + tree_view->priv->pressed_button < 0) + { + tree_view->priv->pressed_button = event->button; + tree_view->priv->press_start_x = event->x; + tree_view->priv->press_start_y = event->y; + + if (tree_view->priv->rubber_banding_enable + && node_is_selectable + && !node_selected + && tree_view->priv->selection->type == GTK_SELECTION_MULTIPLE) + { + tree_view->priv->press_start_y += tree_view->priv->dy; + tree_view->priv->rubber_band_x = event->x; + tree_view->priv->rubber_band_y = event->y + tree_view->priv->dy; + tree_view->priv->rubber_band_status = RUBBER_BAND_MAYBE_START; + + if ((event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK) + tree_view->priv->rubber_band_ctrl = TRUE; + if ((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) + tree_view->priv->rubber_band_shift = TRUE; + } + } +#endif /* MAEMO_CHANGES */ + /* select */ node_selected = GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED); pre_val = tree_view->priv->vadjustment->value; @@ -2639,7 +2694,48 @@ if (focus_cell) gtk_tree_view_column_focus_cell (column, focus_cell); - if (event->state & GDK_CONTROL_MASK) +#ifdef MAEMO_CHANGES + if (node_is_selectable + && tree_view->priv->rubber_band_status == RUBBER_BAND_OFF + && gtk_tree_selection_get_mode (tree_view->priv->selection) == GTK_SELECTION_MULTIPLE) + { + /* We do not know at this stage if a user is going to do + * a DnD or tap and hold operation, so avoid clearing + * the current selection. + */ + if (tree_view->priv->queued_select_row) + gtk_tree_row_reference_free (tree_view->priv->queued_select_row); + tree_view->priv->queued_select_row = NULL; + + if (node_is_selectable) + { + GtkTreePath *old_cursor_path = NULL; + + /* Do move the focus */ + if (tree_view->priv->cursor) + { + old_cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); + gtk_tree_row_reference_free (tree_view->priv->cursor); + } + + tree_view->priv->cursor = gtk_tree_row_reference_new (tree_view->priv->model, path); + + gtk_tree_view_queue_draw_path (tree_view, path, NULL); + if (old_cursor_path) + { + gtk_tree_view_queue_draw_path (tree_view, + old_cursor_path, NULL); + gtk_tree_path_free (old_cursor_path); + } + + tree_view->priv->queued_select_row = + gtk_tree_row_reference_new (tree_view->priv->model, path); + } + } + /* Else, set the cursor as usual */ + else +#endif /* MAEMO_CHANGES */ + if (event->state & GDK_CONTROL_MASK) { gtk_tree_view_real_set_cursor (tree_view, path, FALSE, TRUE); gtk_tree_view_real_toggle_cursor_row (tree_view); @@ -2668,6 +2764,7 @@ cell_area.y += dval; background_area.y += dval; +#ifndef MAEMO_CHANGES /* Save press to possibly begin a drag */ if (!column_handled_click && @@ -2693,6 +2790,7 @@ tree_view->priv->rubber_band_shift = TRUE; } } +#endif /* !MAEMO_CHANGES */ /* Test if a double click happened on the same row. */ if (event->button == 1) @@ -2916,6 +3014,20 @@ if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_RESIZE)) return gtk_tree_view_button_release_column_resize (widget, event); +#ifdef MAEMO_CHANGES + if (gtk_tree_row_reference_valid (tree_view->priv->queued_select_row)) + { + GtkTreePath *path; + + path = gtk_tree_row_reference_get_path (tree_view->priv->queued_select_row); + gtk_tree_view_real_set_cursor (tree_view, path, TRUE, TRUE); + + gtk_tree_path_free (path); + gtk_tree_row_reference_free (tree_view->priv->queued_select_row); + tree_view->priv->queued_select_row = NULL; + } +#endif /* MAEMO_CHANGES */ + if (tree_view->priv->button_pressed_node == NULL) return FALSE; @@ -3675,6 +3787,24 @@ do { +#ifdef MAEMO_CHANGES + /* Small optimization by assuming insensitive nodes are never + * selected. + */ + if (!GTK_RBNODE_FLAG_SET (start_node, GTK_RBNODE_IS_SELECTED)) + { + GtkTreePath *path; + gboolean selectable; + + path = _gtk_tree_view_find_path (tree_view, start_tree, start_node); + selectable = _gtk_tree_selection_row_is_selectable (tree_view->priv->selection, start_node, path); + gtk_tree_path_free (path); + + if (!selectable) + goto node_not_selectable; + } +#endif /* MAEMO_CHANGES */ + if (select) { if (tree_view->priv->rubber_band_shift) @@ -3709,6 +3839,9 @@ _gtk_tree_view_queue_draw_node (tree_view, start_tree, start_node, NULL); +#ifdef MAEMO_CHANGES +node_not_selectable: +#endif /* MAEMO_CHANGES */ if (start_node == end_node) break; @@ -4818,6 +4951,7 @@ done: gtk_tree_view_draw_grid_lines (tree_view, event, n_visible_columns); +#ifndef MAEMO_CHANGES if (tree_view->priv->rubber_band_status == RUBBER_BAND_ACTIVE) { GdkRectangle *rectangles; @@ -4832,6 +4966,7 @@ g_free (rectangles); } +#endif /* !MAEMO_CHANGES */ if (cursor_path) gtk_tree_path_free (cursor_path); @@ -10751,6 +10886,11 @@ gtk_tree_row_reference_free (tree_view->priv->scroll_to_path); tree_view->priv->scroll_to_path = NULL; +#ifdef MAEMO_CHANGES + gtk_tree_row_reference_free (tree_view->priv->queued_select_row); + tree_view->priv->queued_select_row = NULL; +#endif /* MAEMO_CHANGES */ + tree_view->priv->scroll_to_column = NULL; g_object_unref (tree_view->priv->model);
- Previous message: [maemo-commits] r9505 - in projects/haf/branches/hildon-libs/hildon-1: . doc examples
- Next message: [maemo-commits] r9507 - in projects/haf/trunk/hildon-theme-layout-4: . rc
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]