]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktreeview.c
Draw no trough for color scales
[~andy/gtk] / gtk / gtktreeview.c
index 59774be98b093f375d30ac1609de52d84027a320..43add5427c7a180b60905d658d0ae91e8e3a11de 100644 (file)
@@ -2906,7 +2906,7 @@ gtk_tree_view_button_press (GtkWidget      *widget,
           tree_view->priv->arrow_prelit &&
          gtk_tree_view_draw_expanders (tree_view))
        {
-         if (event->button == 1)
+         if (event->button == GDK_BUTTON_PRIMARY)
            {
              gtk_grab_add (widget);
              tree_view->priv->button_pressed_node = tree_view->priv->prelight_node;
@@ -3001,7 +3001,7 @@ gtk_tree_view_button_press (GtkWidget      *widget,
       _gtk_tree_view_set_focus_column (tree_view, column);
 
       /* decide if we edit */
-      if (event->type == GDK_BUTTON_PRESS && event->button == 1 &&
+      if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY &&
          !(event->state & gtk_accelerator_get_default_mod_mask ()))
        {
          GtkTreePath *anchor;
@@ -3138,7 +3138,7 @@ gtk_tree_view_button_press (GtkWidget      *widget,
         }
 
       /* Test if a double click happened on the same row. */
-      if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
+      if (event->button == GDK_BUTTON_PRIMARY && event->type == GDK_BUTTON_PRESS)
         {
           int double_click_time, double_click_distance;
 
@@ -3365,7 +3365,7 @@ gtk_tree_view_button_release (GtkWidget      *widget,
   if (tree_view->priv->button_pressed_node == NULL)
     return FALSE;
 
-  if (event->button == 1)
+  if (event->button == GDK_BUTTON_PRIMARY)
     {
       if (tree_view->priv->button_pressed_node == tree_view->priv->prelight_node &&
           tree_view->priv->arrow_prelit)
@@ -4556,17 +4556,10 @@ draw_empty_focus (GtkTreeView *tree_view, cairo_t *cr)
   if (w > 0 && h > 0)
     {
       GtkStyleContext *context;
-      GtkStateFlags state;
 
       context = gtk_widget_get_style_context (widget);
-      state = gtk_widget_get_state_flags (widget);
-
-      gtk_style_context_save (context);
-      gtk_style_context_set_state (context, state);
 
       gtk_render_focus (context, cr, 1, 1, w, h);
-
-      gtk_style_context_restore (context);
     }
 }
 
@@ -4700,7 +4693,6 @@ gtk_tree_view_bin_draw (GtkWidget      *widget,
   GList *first_column, *last_column;
   gint vertical_separator;
   gint horizontal_separator;
-  gint focus_line_width;
   gboolean allow_rules;
   gboolean has_can_focus_cell;
   gboolean rtl;
@@ -4708,18 +4700,15 @@ gtk_tree_view_bin_draw (GtkWidget      *widget,
   gint grid_line_width;
   gboolean draw_vgrid_lines, draw_hgrid_lines;
   GtkStyleContext *context;
-  GtkStateFlags state;
   gboolean parity;
 
   rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
   context = gtk_widget_get_style_context (widget);
-  state = gtk_widget_get_state_flags (widget);
 
   gtk_widget_style_get (widget,
                        "horizontal-separator", &horizontal_separator,
                        "vertical-separator", &vertical_separator,
                        "allow-rules", &allow_rules,
-                       "focus-line-width", &focus_line_width,
                        NULL);
 
   if (tree_view->priv->tree == NULL)
@@ -4744,7 +4733,6 @@ gtk_tree_view_bin_draw (GtkWidget      *widget,
   if (tree_view->priv->height < bin_window_height)
     {
       gtk_style_context_save (context);
-      gtk_style_context_set_state (context, state);
       gtk_style_context_add_class (context, GTK_STYLE_CLASS_CELL);
 
       gtk_render_background (context, cr,
@@ -5186,6 +5174,9 @@ gtk_tree_view_bin_draw (GtkWidget      *widget,
          GtkRBTree *tree = NULL;
          GtkRBNode *node = NULL;
 
+          gtk_style_context_save (context);
+          gtk_style_context_add_class (context, GTK_STYLE_CLASS_DND);
+
           switch (tree_view->priv->drag_dest_pos)
             {
             case GTK_TREE_VIEW_DROP_BEFORE:
@@ -5205,12 +5196,10 @@ gtk_tree_view_bin_draw (GtkWidget      *widget,
              if (tree == NULL)
                break;
 
-              gtk_render_focus (context, cr,
-                               0, gtk_tree_view_get_row_y_offset (tree_view, tree, node)
-                                  - focus_line_width / 2,
-                               gdk_window_get_width (tree_view->priv->bin_window),
-                                gtk_tree_view_get_row_height (tree_view, node)
-                                  - focus_line_width + 1);
+              gtk_render_frame (context, cr,
+                                0, gtk_tree_view_get_row_y_offset (tree_view, tree, node),
+                                gdk_window_get_width (tree_view->priv->bin_window),
+                                gtk_tree_view_get_row_height (tree_view, node));
               break;
             }
 
@@ -5223,6 +5212,8 @@ gtk_tree_view_bin_draw (GtkWidget      *widget,
                                        rtl ? 0 : bin_window_width,
                                        highlight_y);
             }
+
+          gtk_style_context_restore (context);
         }
 
       /* draw the big row-spanning focus rectangle, if needed */
@@ -9035,7 +9026,8 @@ gtk_tree_view_row_deleted (GtkTreeModel *model,
   /* If the cursor row got deleted, move the cursor to the next row */
   if (tree_view->priv->cursor_node &&
       (tree_view->priv->cursor_node == node ||
-       (node->children &&  _gtk_rbtree_contains (node->children, tree_view->priv->cursor_tree))))
+       (node->children && (tree_view->priv->cursor_tree == node->children ||
+                           _gtk_rbtree_contains (node->children, tree_view->priv->cursor_tree)))))
     {
       GtkTreePath *cursor_path;
 
@@ -9862,7 +9854,7 @@ _gtk_tree_view_column_start_drag (GtkTreeView       *tree_view,
   send_event->button.y = -1;
   send_event->button.axes = NULL;
   send_event->button.state = 0;
-  send_event->button.button = 1;
+  send_event->button.button = GDK_BUTTON_PRIMARY;
   send_event->button.x_root = 0;
   send_event->button.y_root = 0;
   gdk_event_set_device (send_event, device);
@@ -10018,17 +10010,50 @@ _gtk_tree_view_get_rbtree (GtkTreeView *tree_view)
   return tree_view->priv->tree;
 }
 
+gboolean
+_gtk_tree_view_get_cursor_node (GtkTreeView  *tree_view,
+                                GtkRBTree   **tree,
+                                GtkRBNode   **node)
+{
+  GtkTreeViewPrivate *priv;
+
+  priv = tree_view->priv;
+
+  if (priv->cursor_node == NULL)
+    return FALSE;
+
+  *tree = priv->cursor_tree;
+  *node = priv->cursor_node;
+
+  return TRUE;
+}
+
 GdkWindow *
 _gtk_tree_view_get_header_window (GtkTreeView *tree_view)
 {
   return tree_view->priv->header_window;
 }
 
+GtkTreeViewColumn *
+_gtk_tree_view_get_focus_column (GtkTreeView *tree_view)
+{
+  return tree_view->priv->focus_column;
+}
+
 void
 _gtk_tree_view_set_focus_column (GtkTreeView       *tree_view,
                                 GtkTreeViewColumn *column)
 {
+  GtkTreeViewColumn *old_column = tree_view->priv->focus_column;
+
+  if (old_column == column)
+    return;
+
   tree_view->priv->focus_column = column;
+
+  _gtk_tree_view_accessible_update_focus_column (tree_view, 
+                                                 old_column,
+                                                 column);
 }
 
 
@@ -10062,7 +10087,7 @@ gtk_tree_view_draw_arrow (GtkTreeView *tree_view,
   gint x2;
   gint vertical_separator;
   gint expander_size;
-  GtkCellRendererState flags;
+  GtkCellRendererState flags = 0;
 
   widget = GTK_WIDGET (tree_view);
   context = gtk_widget_get_style_context (widget);
@@ -10084,24 +10109,19 @@ gtk_tree_view_draw_arrow (GtkTreeView *tree_view,
   area.height = gtk_tree_view_get_cell_area_height (tree_view, node,
                                                     vertical_separator);
 
-  if (!gtk_widget_get_sensitive (widget))
-    state |= GTK_STATE_FLAG_INSENSITIVE;
-  else
-    {
-      flags = 0;
-
-      if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED))
-        flags |= GTK_CELL_RENDERER_SELECTED;
+  if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED))
+    flags |= GTK_CELL_RENDERER_SELECTED;
 
-      state = gtk_cell_renderer_get_state (NULL, widget, flags);
+  if (node == tree_view->priv->prelight_node &&
+      tree_view->priv->arrow_prelit)
+    flags |= GTK_CELL_RENDERER_PRELIT;
 
-      if (node == tree_view->priv->prelight_node &&
-          tree_view->priv->arrow_prelit)
-       state |= GTK_STATE_FLAG_PRELIGHT;
-    }
+  state = gtk_cell_renderer_get_state (NULL, widget, flags);
 
   if (node->children != NULL)
     state |= GTK_STATE_FLAG_ACTIVE;
+  else
+    state &= ~(GTK_STATE_FLAG_ACTIVE);
 
   gtk_style_context_save (context);
 
@@ -10148,8 +10168,7 @@ gtk_tree_view_focus_to_cursor (GtkTreeView *tree_view)
       if (selected_rows)
        {
           cursor_path = gtk_tree_path_copy((const GtkTreePath *)(selected_rows->data));
-         g_list_foreach (selected_rows, (GFunc)gtk_tree_path_free, NULL);
-         g_list_free (selected_rows);
+         g_list_free_full (selected_rows, (GDestroyNotify) gtk_tree_path_free);
         }
       else
        {
@@ -10736,8 +10755,6 @@ gtk_tree_view_real_toggle_cursor_row (GtkTreeView *tree_view)
 {
   GtkRBTree *new_tree = NULL;
   GtkRBNode *new_node = NULL;
-  GtkRBTree *cursor_tree = NULL;
-  GtkRBNode *cursor_node = NULL;
   GtkTreePath *cursor_path = NULL;
 
   if (!gtk_widget_has_focus (GTK_WIDGET (tree_view)))
@@ -10750,8 +10767,8 @@ gtk_tree_view_real_toggle_cursor_row (GtkTreeView *tree_view)
                                                 tree_view->priv->cursor_node);
 
   _gtk_tree_selection_internal_select_node (tree_view->priv->selection,
-                                           cursor_node,
-                                           cursor_tree,
+                                           tree_view->priv->cursor_node,
+                                           tree_view->priv->cursor_tree,
                                            cursor_path,
                                             GTK_TREE_SELECT_MODE_TOGGLE,
                                            FALSE);
@@ -11479,20 +11496,13 @@ gtk_tree_view_set_model (GtkTreeView  *tree_view,
          gtk_tree_view_build_tree (tree_view, tree_view->priv->tree, &iter, 1, FALSE);
           _gtk_tree_view_accessible_add (tree_view, tree_view->priv->tree, NULL);
        }
-
-      if (search_first_focusable_path (tree_view, &path, TRUE, NULL, NULL))
-        {
-          gtk_tree_view_real_set_cursor (tree_view, path, CLEAR_AND_SELECT | CURSOR_INVALID);
-          gtk_tree_path_free (path);
-        }
-      else
-        gtk_tree_view_real_set_cursor (tree_view, NULL, CURSOR_INVALID);
+      gtk_tree_path_free (path);
 
       /*  FIXME: do I need to do this? gtk_tree_view_create_buttons (tree_view); */
       install_presize_handler (tree_view);
     }
-  else
-    gtk_tree_view_real_set_cursor (tree_view, NULL, CURSOR_INVALID);
+
+  gtk_tree_view_real_set_cursor (tree_view, NULL, CURSOR_INVALID);
 
   g_object_notify (G_OBJECT (tree_view), "model");
 
@@ -12922,6 +12932,8 @@ gtk_tree_view_real_collapse_row (GtkTreeView *tree_view,
       cursor_changed = (node->children == tree_view->priv->cursor_tree)
                        || _gtk_rbtree_contains (node->children, tree_view->priv->cursor_tree);
     }
+  else
+    cursor_changed = FALSE;
 
   if (gtk_tree_row_reference_valid (tree_view->priv->anchor))
     {
@@ -13201,6 +13213,10 @@ gtk_tree_view_real_set_cursor (GtkTreeView     *tree_view,
 {
   if (!(flags & CURSOR_INVALID) && tree_view->priv->cursor_node)
     {
+      _gtk_tree_view_accessible_remove_state (tree_view,
+                                              tree_view->priv->cursor_tree,
+                                              tree_view->priv->cursor_node,
+                                              GTK_CELL_RENDERER_FOCUSED);
       _gtk_tree_view_queue_draw_node (tree_view,
                                       tree_view->priv->cursor_tree,
                                       tree_view->priv->cursor_node,
@@ -13263,6 +13279,11 @@ gtk_tree_view_real_set_cursor (GtkTreeView     *tree_view,
                                           tree_view->priv->cursor_node,
                                           NULL);
        }
+
+      _gtk_tree_view_accessible_add_state (tree_view,
+                                           tree_view->priv->cursor_tree,
+                                           tree_view->priv->cursor_node,
+                                           GTK_CELL_RENDERER_FOCUSED);
     }
 
   g_signal_emit (tree_view, tree_view_signals[CURSOR_CHANGED], 0);
@@ -14539,7 +14560,6 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView  *tree_view,
   GtkRBTree    *tree;
   GtkRBNode    *node;
   GtkStyleContext *context;
-  GtkStateFlags state;
   gint cell_offset;
   GList *list;
   GdkRectangle background_area;
@@ -14580,9 +14600,6 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView  *tree_view,
 
   gtk_style_context_save (context);
 
-  state = gtk_widget_get_state_flags (widget);
-  gtk_style_context_set_state (context, state);
-
   gtk_style_context_add_class (context, GTK_STYLE_CLASS_VIEW);
   gtk_style_context_add_region (context, GTK_STYLE_REGION_COLUMN, 0);