aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/table/e-table.c39
-rw-r--r--widgets/table/e-tree.c55
-rw-r--r--widgets/table/e-tree.h4
3 files changed, 73 insertions, 25 deletions
diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c
index 4a2edcb6f1..a61ec0fea9 100644
--- a/widgets/table/e-table.c
+++ b/widgets/table/e-table.c
@@ -257,12 +257,28 @@ et_focus (GtkContainer *container, GtkDirectionType direction)
}
static void
+set_header_canvas_width (ETable *e_table)
+{
+ double oldwidth, oldheight, width;
+
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->table_canvas),
+ NULL, NULL, &width, NULL);
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->header_canvas),
+ NULL, NULL, &oldwidth, &oldheight);
+
+ if (oldwidth != width ||
+ oldheight != E_TABLE_HEADER_ITEM (e_table->header_item)->height - 1)
+ gnome_canvas_set_scroll_region (
+ GNOME_CANVAS (e_table->header_canvas),
+ 0, 0, width, /* COLUMN_HEADER_HEIGHT - 1 */
+ E_TABLE_HEADER_ITEM (e_table->header_item)->height - 1);
+
+}
+
+static void
header_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc, ETable *e_table)
{
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_table->header_canvas),
- 0, 0, alloc->width - 1, /* COLUMN_HEADER_HEIGHT - 1 */
- E_TABLE_HEADER_ITEM (e_table->header_item)->height - 1);
+ set_header_canvas_width (e_table);
/* When the header item is created ->height == 0,
as the font is only created when everything is realized.
@@ -321,6 +337,7 @@ table_canvas_reflow_idle (ETable *e_table)
{
gdouble height, width;
gdouble item_height;
+ gdouble oldheight, oldwidth;
GtkAllocation *alloc = &(GTK_WIDGET (e_table->table_canvas)->allocation);
gtk_object_get (GTK_OBJECT (e_table->canvas_vbox),
@@ -331,11 +348,17 @@ table_canvas_reflow_idle (ETable *e_table)
height = MAX ((int)height, alloc->height);
width = MAX((int)width, alloc->width);
/* I have no idea why this needs to be -1, but it works. */
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_table->table_canvas),
- 0, 0, width - 1, height - 1);
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_table->table_canvas),
+ NULL, NULL, &oldwidth, &oldheight);
+
+ if (oldwidth != width - 1 ||
+ oldheight != height - 1) {
+ gnome_canvas_set_scroll_region (GNOME_CANVAS (e_table->table_canvas),
+ 0, 0, width - 1, height - 1);
+ set_header_canvas_width (e_table);
+ }
gtk_object_set (GTK_OBJECT (e_table->white_item),
- "y1", item_height + 1,
+ "y1", item_height,
"x2", width,
"y2", height,
NULL);
diff --git a/widgets/table/e-tree.c b/widgets/table/e-tree.c
index d73c63d144..5263271557 100644
--- a/widgets/table/e-tree.c
+++ b/widgets/table/e-tree.c
@@ -174,7 +174,7 @@ e_tree_init (GtkObject *object)
e_tree->drag_source_button_press_event_id = 0;
e_tree->drag_source_motion_notify_event_id = 0;
- e_tree->selection = e_table_selection_model_new();
+ e_tree->selection = E_SELECTION_MODEL(e_table_selection_model_new());
e_tree->spec = NULL;
}
@@ -206,12 +206,28 @@ et_focus (GtkContainer *container, GtkDirectionType direction)
}
static void
+set_header_canvas_width (ETree *e_tree)
+{
+ double oldwidth, oldheight, width;
+
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->table_canvas),
+ NULL, NULL, &width, NULL);
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->header_canvas),
+ NULL, NULL, &oldwidth, &oldheight);
+
+ if (oldwidth != width ||
+ oldheight != E_TABLE_HEADER_ITEM (e_tree->header_item)->height - 1)
+ gnome_canvas_set_scroll_region (
+ GNOME_CANVAS (e_tree->header_canvas),
+ 0, 0, width, /* COLUMN_HEADER_HEIGHT - 1 */
+ E_TABLE_HEADER_ITEM (e_tree->header_item)->height - 1);
+
+}
+
+static void
header_canvas_size_allocate (GtkWidget *widget, GtkAllocation *alloc, ETree *e_tree)
{
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_tree->header_canvas),
- 0, 0, alloc->width - 1, /* COLUMN_HEADER_HEIGHT - 1 */
- E_TABLE_HEADER_ITEM (e_tree->header_item)->height - 1);
+ set_header_canvas_width (e_tree);
/* When the header item is created ->height == 0,
as the font is only created when everything is realized.
@@ -259,6 +275,7 @@ tree_canvas_reflow_idle (ETree *e_tree)
{
gdouble height, width;
gdouble item_height;
+ gdouble oldheight, oldwidth;
GtkAllocation *alloc = &(GTK_WIDGET (e_tree->table_canvas)->allocation);
gtk_object_get (GTK_OBJECT (e_tree->item),
@@ -269,11 +286,17 @@ tree_canvas_reflow_idle (ETree *e_tree)
height = MAX ((int)height, alloc->height);
width = MAX((int)width, alloc->width);
/* I have no idea why this needs to be -1, but it works. */
- gnome_canvas_set_scroll_region (
- GNOME_CANVAS (e_tree->table_canvas),
- 0, 0, width - 1, height - 1);
+ gnome_canvas_get_scroll_region (GNOME_CANVAS (e_tree->table_canvas),
+ NULL, NULL, &oldwidth, &oldheight);
+
+ if (oldwidth != width - 1 ||
+ oldheight != height - 1) {
+ gnome_canvas_set_scroll_region (GNOME_CANVAS (e_tree->table_canvas),
+ 0, 0, width - 1, height - 1);
+ set_header_canvas_width (e_tree);
+ }
gtk_object_set (GTK_OBJECT (e_tree->white_item),
- "y1", item_height + 1,
+ "y1", item_height,
"x2", width,
"y2", height,
NULL);
@@ -415,10 +438,12 @@ item_key_press (ETableItem *eti, int row, int col, GdkEvent *event, ETree *et)
return_val = 1;
break;
case '=':
+ case GDK_Right:
path = e_tree_table_adapter_node_at_row(et->etta, row);
e_tree_table_adapter_node_set_expanded (et->etta, path, TRUE);
break;
case '-':
+ case GDK_Left:
path = e_tree_table_adapter_node_at_row(et->etta, row);
e_tree_table_adapter_node_set_expanded (et->etta, path, FALSE);
break;
@@ -747,12 +772,6 @@ et_real_construct (ETree *e_tree, ETreeModel *etm, ETableExtras *ete,
e_tree->etta = E_TREE_TABLE_ADAPTER(e_tree_table_adapter_new(E_TREE_MODEL(e_tree->sorted)));
- gtk_object_set(GTK_OBJECT(e_tree->selection),
- "model", E_TABLE_MODEL(e_tree->etta),
- "selection_mode", specification->selection_mode,
- "cursor_mode", specification->cursor_mode,
- NULL);
-
gtk_widget_push_visual (gdk_rgb_get_visual ());
gtk_widget_push_colormap (gdk_rgb_get_cmap ());
@@ -761,6 +780,12 @@ et_real_construct (ETree *e_tree, ETreeModel *etm, ETableExtras *ete,
gtk_object_set (GTK_OBJECT (e_tree->selection),
"model", e_tree->etta,
"sorter", e_tree->sorter,
+#if 0
+ "ets", e_tree->sorted,
+ "model", e_tree->model,
+#endif
+ "selection_mode", specification->selection_mode,
+ "cursor_mode", specification->cursor_mode,
NULL);
gtk_signal_connect(GTK_OBJECT(e_tree->selection), "selection_changed",
diff --git a/widgets/table/e-tree.h b/widgets/table/e-tree.h
index 6b8f71789c..3ff63e315a 100644
--- a/widgets/table/e-tree.h
+++ b/widgets/table/e-tree.h
@@ -9,7 +9,7 @@
#include <gal/e-table/e-table-group.h>
#include <gal/e-table/e-table-sort-info.h>
#include <gal/e-table/e-table-item.h>
-#include <gal/e-table/e-table-selection-model.h>
+#include <gal/e-table/e-tree-selection-model.h>
#include <gal/e-table/e-table-extras.h>
#include <gal/e-table/e-table-specification.h>
#include <gal/widgets/e-printable.h>
@@ -41,7 +41,7 @@ typedef struct {
ETableSortInfo *sort_info;
ESorter *sorter;
- ETableSelectionModel *selection;
+ ESelectionModel *selection;
ETableSpecification *spec;
int reflow_idle_id;