diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 9 | ||||
-rw-r--r-- | docs/reference/gtk/tmpl/gtktextiter.sgml | 12 | ||||
-rw-r--r-- | gtk/gtkcellrenderertoggle.c | 2 | ||||
-rw-r--r-- | gtk/gtkstyle.c | 7 | ||||
-rw-r--r-- | gtk/gtktreeselection.c | 2 | ||||
-rw-r--r-- | gtk/gtktreeview.c | 182 | ||||
-rw-r--r-- | gtk/gtktreeview.h | 1 |
13 files changed, 152 insertions, 117 deletions
@@ -1,3 +1,12 @@ +Thu Sep 27 16:46:36 2001 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row): only + start editing when you select with a keyboard. + + (gtk_tree_view_button_press_event): much more graceful now. + + * gtk/gtkstyle.c: Draw togglebutton better. + 2001-09-26 Havoc Pennington <hp@redhat.com> * demos/gtk-demo/dialog.c (interactive_dialog_clicked): add demo diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index c20a1a53ec..c02cbc8dd8 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,12 @@ +Thu Sep 27 16:46:36 2001 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row): only + start editing when you select with a keyboard. + + (gtk_tree_view_button_press_event): much more graceful now. + + * gtk/gtkstyle.c: Draw togglebutton better. + 2001-09-26 Havoc Pennington <hp@redhat.com> * demos/gtk-demo/dialog.c (interactive_dialog_clicked): add demo diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index c20a1a53ec..c02cbc8dd8 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +Thu Sep 27 16:46:36 2001 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row): only + start editing when you select with a keyboard. + + (gtk_tree_view_button_press_event): much more graceful now. + + * gtk/gtkstyle.c: Draw togglebutton better. + 2001-09-26 Havoc Pennington <hp@redhat.com> * demos/gtk-demo/dialog.c (interactive_dialog_clicked): add demo diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index c20a1a53ec..c02cbc8dd8 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,12 @@ +Thu Sep 27 16:46:36 2001 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row): only + start editing when you select with a keyboard. + + (gtk_tree_view_button_press_event): much more graceful now. + + * gtk/gtkstyle.c: Draw togglebutton better. + 2001-09-26 Havoc Pennington <hp@redhat.com> * demos/gtk-demo/dialog.c (interactive_dialog_clicked): add demo diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index c20a1a53ec..c02cbc8dd8 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,12 @@ +Thu Sep 27 16:46:36 2001 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row): only + start editing when you select with a keyboard. + + (gtk_tree_view_button_press_event): much more graceful now. + + * gtk/gtkstyle.c: Draw togglebutton better. + 2001-09-26 Havoc Pennington <hp@redhat.com> * demos/gtk-demo/dialog.c (interactive_dialog_clicked): add demo diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index c20a1a53ec..c02cbc8dd8 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +Thu Sep 27 16:46:36 2001 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row): only + start editing when you select with a keyboard. + + (gtk_tree_view_button_press_event): much more graceful now. + + * gtk/gtkstyle.c: Draw togglebutton better. + 2001-09-26 Havoc Pennington <hp@redhat.com> * demos/gtk-demo/dialog.c (interactive_dialog_clicked): add demo diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index c20a1a53ec..c02cbc8dd8 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +Thu Sep 27 16:46:36 2001 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row): only + start editing when you select with a keyboard. + + (gtk_tree_view_button_press_event): much more graceful now. + + * gtk/gtkstyle.c: Draw togglebutton better. + 2001-09-26 Havoc Pennington <hp@redhat.com> * demos/gtk-demo/dialog.c (interactive_dialog_clicked): add demo diff --git a/docs/reference/gtk/tmpl/gtktextiter.sgml b/docs/reference/gtk/tmpl/gtktextiter.sgml index 7e565e46d0..aae67a4ddf 100644 --- a/docs/reference/gtk/tmpl/gtktextiter.sgml +++ b/docs/reference/gtk/tmpl/gtktextiter.sgml @@ -31,18 +31,6 @@ types related to the text widget and how they work together. </para> -@dummy1: -@dummy2: -@dummy3: -@dummy4: -@dummy5: -@dummy6: -@dummy7: -@dummy8: -@dummy9: -@dummy10: -@dummy11: -@dummy12: <!-- ##### FUNCTION gtk_text_iter_get_buffer ##### --> <para> diff --git a/gtk/gtkcellrenderertoggle.c b/gtk/gtkcellrenderertoggle.c index 845266f6e7..05132c625e 100644 --- a/gtk/gtkcellrenderertoggle.c +++ b/gtk/gtkcellrenderertoggle.c @@ -303,7 +303,7 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell, else state = GTK_STATE_ACTIVE; } - else if (celltoggle->activatable) + if (celltoggle->activatable) { state = GTK_STATE_NORMAL; } diff --git a/gtk/gtkstyle.c b/gtk/gtkstyle.c index bc3f092633..3a4cdb8f85 100644 --- a/gtk/gtkstyle.c +++ b/gtk/gtkstyle.c @@ -3013,7 +3013,12 @@ gtk_default_draw_check (GtkStyle *style, if (detail && strcmp (detail, "cellcheck") == 0) { gdk_draw_rectangle (window, - widget->style->fg_gc[state_type], + widget->style->base_gc[state_type], + TRUE, + x, y, + width, height); + gdk_draw_rectangle (window, + widget->style->text_gc[state_type], FALSE, x, y, width, height); diff --git a/gtk/gtktreeselection.c b/gtk/gtktreeselection.c index 3105c86469..a524400068 100644 --- a/gtk/gtktreeselection.c +++ b/gtk/gtktreeselection.c @@ -672,7 +672,7 @@ gtk_tree_selection_select_all (GtkTreeSelection *selection) g_return_if_fail (selection->tree_view != NULL); if (selection->tree_view->priv->tree == NULL) return; - g_return_if_fail (selection->type != GTK_SELECTION_MULTIPLE); + g_return_if_fail (selection->type == GTK_SELECTION_MULTIPLE); if (gtk_tree_selection_real_select_all (selection)) g_signal_emit (G_OBJECT (selection), tree_selection_signals[CHANGED], 0); diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 4963fc5272..6aa5ec47be 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -102,6 +102,7 @@ enum ROW_COLLAPSED, COLUMNS_CHANGED, MOVE_CURSOR, + SELECT_ALL, SELECT_CURSOR_ROW, TOGGLE_CURSOR_ROW, EXPAND_COLLAPSE_CURSOR_ROW, @@ -223,7 +224,9 @@ static void gtk_tree_view_set_adjustments (GtkTreeView *tree static void gtk_tree_view_real_move_cursor (GtkTreeView *tree_view, GtkMovementStep step, gint count); -static void gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view); +static void gtk_tree_view_real_select_all (GtkTreeView *tree_view); +static void gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view, + gboolean start_editing); static void gtk_tree_view_real_toggle_cursor_row (GtkTreeView *tree_view); static void gtk_tree_view_real_expand_collapse_cursor_row (GtkTreeView *tree_view, gboolean logical, @@ -481,6 +484,7 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) class->set_scroll_adjustments = gtk_tree_view_set_adjustments; class->move_cursor = gtk_tree_view_real_move_cursor; + class->select_all = gtk_tree_view_real_select_all; class->select_cursor_row = gtk_tree_view_real_select_cursor_row; class->toggle_cursor_row = gtk_tree_view_real_toggle_cursor_row; class->expand_collapse_cursor_row = gtk_tree_view_real_expand_collapse_cursor_row; @@ -692,14 +696,24 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) gtk_marshal_VOID__ENUM_INT, GTK_TYPE_NONE, 2, GTK_TYPE_MOVEMENT_STEP, GTK_TYPE_INT); + tree_view_signals[SELECT_ALL] = + g_signal_new ("select_all", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST | GTK_RUN_ACTION, + G_STRUCT_OFFSET (GtkTreeViewClass, select_all), + NULL, NULL, + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); + tree_view_signals[SELECT_CURSOR_ROW] = g_signal_new ("select_cursor_row", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST | GTK_RUN_ACTION, G_STRUCT_OFFSET (GtkTreeViewClass, select_cursor_row), NULL, NULL, - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); + gtk_marshal_VOID__BOOLEAN, + GTK_TYPE_NONE, 1, + G_TYPE_BOOLEAN); tree_view_signals[TOGGLE_CURSOR_ROW] = g_signal_new ("toggle_cursor_row", @@ -780,9 +794,13 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_CONTROL_MASK, "toggle_cursor_row", 0); - gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_SHIFT_MASK, "select_cursor_row", 0); + gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK, "select_all", 0); - gtk_binding_entry_add_signal (binding_set, GDK_space, 0, "select_cursor_row", 0); + gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_SHIFT_MASK, "select_cursor_row", 1, + GTK_TYPE_BOOL, TRUE); + + gtk_binding_entry_add_signal (binding_set, GDK_space, 0, "select_cursor_row", 1, + GTK_TYPE_BOOL, TRUE); /* expand and collapse rows */ gtk_binding_entry_add_signal (binding_set, GDK_plus, 0, "expand_collapse_cursor_row", 3, @@ -1535,6 +1553,7 @@ gtk_tree_view_button_press (GtkWidget *widget, gint new_y; gint y_offset; GtkTreeViewColumn *column = NULL; + gint column_handled_click = FALSE; if (!GTK_WIDGET_HAS_FOCUS (widget)) gtk_widget_grab_focus (widget); @@ -1579,11 +1598,6 @@ gtk_tree_view_button_press (GtkWidget *widget, /* Let the column have a chance at selecting it. */ for (list = tree_view->priv->columns; list; list = list->next) { - GtkTreeIter iter; - GtkCellEditable *cell_editable = NULL; - /* FIXME: get the right flags */ - guint flags = 0; - column = list->data; if (!column->visible) @@ -1591,14 +1605,13 @@ gtk_tree_view_button_press (GtkWidget *widget, background_area.width = column->width; if ((background_area.x > (gint) event->x) || - (background_area.y > (gint) event->y) || - (background_area.x + background_area.width <= (gint) event->x) || - (background_area.y + background_area.height <= (gint) event->y)) + (background_area.x + background_area.width <= (gint) event->x)) { background_area.x += background_area.width; continue; } + /* we found the focus column */ cell_area = background_area; cell_area.width -= horizontal_separator; cell_area.height -= vertical_separator; @@ -1610,6 +1623,35 @@ gtk_tree_view_button_press (GtkWidget *widget, cell_area.x += depth*tree_view->priv->tab_offset; cell_area.width -= depth*tree_view->priv->tab_offset; } + break; + } + + if (column == NULL) + return FALSE; + + tree_view->priv->focus_column = column; + if (event->state & GDK_CONTROL_MASK) + { + gtk_tree_view_real_set_cursor (tree_view, path, FALSE); + gtk_tree_view_real_toggle_cursor_row (tree_view); + } + else if (event->state & GDK_SHIFT_MASK) + { + gtk_tree_view_real_set_cursor (tree_view, path, FALSE); + gtk_tree_view_real_select_cursor_row (tree_view, FALSE); + } + else + { + gtk_tree_view_real_set_cursor (tree_view, path, TRUE); + } + + if (event->type == GDK_BUTTON_PRESS && + !event->state) + { + GtkCellEditable *cell_editable = NULL; + /* FIXME: get the right flags */ + guint flags = 0; + GtkTreeIter iter; gtk_tree_model_get_iter (tree_view->priv->model, &iter, path); gtk_tree_view_column_cell_set_cell_data (column, @@ -1638,46 +1680,21 @@ gtk_tree_view_button_press (GtkWidget *widget, flags); } - g_free (path_string); - gtk_tree_path_free (path); - return TRUE; - } - else - { - g_free (path_string); - break; + column_handled_click = TRUE; } + g_free (path_string); } - if (column == NULL) - return FALSE; - - /* The columns didn't want the event. We handle it */ - /* Save press to possibly begin a drag */ - if (tree_view->priv->pressed_button < 0) + if (!column_handled_click && + 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 (event->state & GDK_CONTROL_MASK) - { - gtk_tree_view_real_set_cursor (tree_view, path, FALSE); - gtk_tree_view_real_toggle_cursor_row (tree_view); - } - else if (event->state & GDK_SHIFT_MASK) - { - gtk_tree_view_real_set_cursor (tree_view, path, FALSE); - gtk_tree_view_real_select_cursor_row (tree_view); - } - else - { - gtk_tree_view_real_set_cursor (tree_view, path, TRUE); - } - if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT)) @@ -1692,6 +1709,7 @@ gtk_tree_view_button_press (GtkWidget *widget, gtk_tree_view_row_activated (tree_view, path, column); } + GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS); gtk_tree_path_free (path); return TRUE; } @@ -2668,6 +2686,7 @@ gtk_tree_view_bin_expose (GtkWidget *widget, } if (node == cursor && ((column == tree_view->priv->focus_column && + GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS) && GTK_WIDGET_HAS_FOCUS (widget)) || (column == tree_view->priv->edited_column))) { @@ -4699,61 +4718,6 @@ gtk_tree_view_get_background_xrange (GtkTreeView *tree_view, *x2 = total_width; /* width of 0 */ } } - -static void -gtk_tree_view_get_cell_xrange (GtkTreeView *tree_view, - GtkRBTree *tree, - GtkTreeViewColumn *column, - gint *x1, - gint *x2) -{ - GtkTreeViewColumn *tmp_column = NULL; - gint total_width; - GList *list; - - if (x1) - *x1 = 0; - - if (x2) - *x2 = 0; - - total_width = 0; - for (list = tree_view->priv->columns; list; list = list->next) - { - tmp_column = list->data; - - if (tmp_column == column) - break; - - if (tmp_column->visible) - total_width += tmp_column->width; - } - - if (tmp_column != column) - { - g_warning (G_STRLOC": passed-in column isn't in the tree"); - return; - } - - /* Remember we're getting the cell range, i.e. the cell_area passed - * to the cell renderer. - */ - - if (gtk_tree_view_is_expander_column (tree_view, column)) - total_width += tree_view->priv->tab_offset * _gtk_rbtree_get_depth (tree); - - if (x1) - *x1 = total_width; - - if (x2) - { - if (column->visible) - *x2 = total_width + column->width; - else - *x2 = total_width; /* width of 0 */ - } -} - static void gtk_tree_view_get_arrow_xrange (GtkTreeView *tree_view, gint *x1, @@ -5994,7 +5958,16 @@ gtk_tree_view_move_cursor_start_end (GtkTreeView *tree_view, } static void -gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view) +gtk_tree_view_real_select_all (GtkTreeView *tree_view) +{ + if (tree_view->priv->selection->type != GTK_SELECTION_MULTIPLE) + return; + gtk_tree_selection_select_all (tree_view->priv->selection); +} + +static void +gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view, + gboolean start_editing) { GtkRBTree *cursor_tree = NULL; GtkRBNode *cursor_node = NULL; @@ -6017,7 +5990,9 @@ gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view) return; } - if (tree_view->priv->focus_column) + gtk_get_current_event_state (&state); + + if (start_editing && tree_view->priv->focus_column) { if (gtk_tree_view_start_editing (tree_view, cursor_path)) { @@ -6025,8 +6000,6 @@ gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view) return; } } - - gtk_get_current_event_state (&state); _gtk_tree_selection_internal_select_node (tree_view->priv->selection, cursor_node, cursor_tree, @@ -7979,7 +7952,8 @@ gtk_tree_view_get_cursor (GtkTreeView *tree_view, * @column is not %NULL, then focus is given to the column specified by it. * Additionally, if @column is specified, and @start_editing is %TRUE, then * editing should be started in the specified cell. Keyboard focus is given to - * the widget after this is called. + * the widget after this is called. Please note that editing can only happen + * when the widget is realized. **/ void gtk_tree_view_set_cursor (GtkTreeView *tree_view, @@ -8007,6 +7981,7 @@ gtk_tree_view_set_cursor (GtkTreeView *tree_view, break; } g_return_if_fail (column_in_tree); + tree_view->priv->focus_column = focus_column; if (start_editing) gtk_tree_view_start_editing (tree_view, path); } @@ -9242,6 +9217,9 @@ gtk_tree_view_start_editing (GtkTreeView *tree_view, g_assert (tree_view->priv->focus_column); + if (! GTK_WIDGET_REALIZED (tree_view)) + return FALSE; + if (_gtk_tree_view_find_node (tree_view, cursor_path, &cursor_tree, &cursor_node) || cursor_node == NULL) return FALSE; diff --git a/gtk/gtktreeview.h b/gtk/gtktreeview.h index e627171c4b..0d309d45fa 100644 --- a/gtk/gtktreeview.h +++ b/gtk/gtktreeview.h @@ -89,6 +89,7 @@ struct _GtkTreeViewClass void (* move_cursor) (GtkTreeView *tree_view, GtkMovementStep step, gint count); + void (* select_all) (GtkTreeView *tree_view); void (* select_cursor_row) (GtkTreeView *tree_view); void (* toggle_cursor_row) (GtkTreeView *tree_view); void (* expand_collapse_cursor_row) (GtkTreeView *tree_view, |