summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--ChangeLog.pre-2-09
-rw-r--r--ChangeLog.pre-2-109
-rw-r--r--ChangeLog.pre-2-29
-rw-r--r--ChangeLog.pre-2-49
-rw-r--r--ChangeLog.pre-2-69
-rw-r--r--ChangeLog.pre-2-89
-rw-r--r--docs/reference/gtk/tmpl/gtktextiter.sgml12
-rw-r--r--gtk/gtkcellrenderertoggle.c2
-rw-r--r--gtk/gtkstyle.c7
-rw-r--r--gtk/gtktreeselection.c2
-rw-r--r--gtk/gtktreeview.c182
-rw-r--r--gtk/gtktreeview.h1
13 files changed, 152 insertions, 117 deletions
diff --git a/ChangeLog b/ChangeLog
index c20a1a53ec..c02cbc8dd8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,