X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpspp-sheet-view.c;h=709adea3918cce671c5ea330f307be89acbda23c;hb=2142f226c9cfb16af69e7bdf297c6dc6f80a5191;hp=e2ca708cf6176c29c130c4cf12a3cf5701c22758;hpb=70702237d6765a3cc276e952919211387eeee87c;p=pspp diff --git a/src/ui/gui/pspp-sheet-view.c b/src/ui/gui/pspp-sheet-view.c index e2ca708cf6..709adea391 100644 --- a/src/ui/gui/pspp-sheet-view.c +++ b/src/ui/gui/pspp-sheet-view.c @@ -1770,7 +1770,9 @@ pspp_sheet_view_size_request (GtkWidget *widget, tmp_list = tmp_list->next; if (gtk_widget_get_visible (child->widget)) - gtk_widget_size_request (child->widget, &child_requisition); + { + gtk_widget_get_preferred_size (child->widget, NULL, &child_requisition); + } } } @@ -2030,6 +2032,9 @@ pspp_sheet_view_size_allocate (GtkWidget *widget, if (allocation->width != old_allocation.width) width_changed = TRUE; + if (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL) + allocation->x += allocation->width - tree_view->priv->width ; + gtk_widget_set_allocation (widget, allocation); /* We size-allocate the columns first because the width of the @@ -2564,11 +2569,14 @@ pspp_sheet_view_button_press (GtkWidget *widget, { gpointer drag_data; - if (gdk_pointer_grab (column->window, FALSE, - GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON1_MOTION_MASK | - GDK_BUTTON_RELEASE_MASK, - NULL, NULL, event->time)) + if (GDK_GRAB_SUCCESS != gdk_device_grab (event->device, + column->window, + GDK_OWNERSHIP_NONE, + FALSE, + GDK_POINTER_MOTION_HINT_MASK | + GDK_BUTTON1_MOTION_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, event->time)) return FALSE; gtk_grab_add (widget); @@ -2684,8 +2692,8 @@ pspp_sheet_view_button_release_column_resize (GtkWidget *widget, PSPP_SHEET_VIEW_UNSET_FLAG (tree_view, PSPP_SHEET_VIEW_IN_COLUMN_RESIZE); gtk_grab_remove (widget); - gdk_display_pointer_ungrab (gdk_window_get_display (event->window), - event->time); + gdk_device_ungrab (event->device, event->time); + return TRUE; } @@ -3199,7 +3207,7 @@ pspp_sheet_view_motion_resize_column (GtkWidget *widget, column = pspp_sheet_view_get_column (tree_view, tree_view->priv->drag_pos); if (event->is_hint || event->window != gtk_widget_get_window (widget)) - gdk_device_get_position (event->device, NULL, &x, NULL); + gtk_widget_get_pointer (widget, &x, NULL); else x = event->x; @@ -3565,7 +3573,7 @@ pspp_sheet_view_update_rubber_band_selection (PsppSheetView *tree_view) #define GDK_RECTANGLE_PTR(X) ((GdkRectangle *)(X)) static void -pspp_sheet_view_update_rubber_band (PsppSheetView *tree_view, GdkDevice *device) +pspp_sheet_view_update_rubber_band (PsppSheetView *tree_view) { gint x, y; cairo_rectangle_int_t old_area; @@ -3579,7 +3587,7 @@ pspp_sheet_view_update_rubber_band (PsppSheetView *tree_view, GdkDevice *device) old_area.width = ABS (tree_view->priv->rubber_band_x - tree_view->priv->press_start_x) + 1; old_area.height = ABS (tree_view->priv->rubber_band_y - tree_view->priv->press_start_y) + 1; - gdk_device_get_position (device, NULL, &x, &y); + gdk_window_get_pointer (tree_view->priv->bin_window, &x, &y, NULL); x = MAX (x, 0); y = MAX (y, 0) + tree_view->priv->dy; @@ -3712,14 +3720,14 @@ pspp_sheet_view_motion_bin_window (GtkWidget *widget, return FALSE; gtk_grab_add (GTK_WIDGET (tree_view)); - pspp_sheet_view_update_rubber_band (tree_view, event->device); + pspp_sheet_view_update_rubber_band (tree_view); tree_view->priv->rubber_band_status = RUBBER_BAND_ACTIVE; } else if (tree_view->priv->rubber_band_status == RUBBER_BAND_ACTIVE) { - pspp_sheet_view_update_rubber_band (tree_view, event->device); - tree_view->priv->drag_device = event->device; + pspp_sheet_view_update_rubber_band (tree_view); + add_scroll_timeout (tree_view); } @@ -3820,35 +3828,30 @@ pspp_sheet_view_draw_vertical_grid_lines (PsppSheetView *tree_view, gint max_y) { GList *list = tree_view->priv->columns; - gint i = 0; - gint current_x = 0; + gint x = 0; if (tree_view->priv->grid_lines != PSPP_SHEET_VIEW_GRID_LINES_VERTICAL && tree_view->priv->grid_lines != PSPP_SHEET_VIEW_GRID_LINES_BOTH) return; /* Only draw the lines for visible rows and columns */ - for (list = tree_view->priv->columns; list; list = list->next, i++) + gboolean rtl = (gtk_widget_get_direction (GTK_WIDGET (tree_view)) == GTK_TEXT_DIR_RTL); + + for (list = (rtl ? g_list_last (tree_view->priv->columns) : g_list_first (tree_view->priv->columns)); + list; + list = (rtl ? list->prev : list->next)) { PsppSheetViewColumn *column = list->data; - gint x; if (! column->visible) continue; - current_x += column->width; - - /* Generally the grid lines should fit within the column, but for the - last visible column we put it just past the end of the column. - (Otherwise horizontal grid lines sometimes stick out by one pixel.) */ - x = current_x; - if (i != n_visible_columns - 1) - x--; + x += column->width; cairo_set_line_width (cr, 1.0); cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE); cairo_move_to (cr, x + 0.5, min_y); - cairo_line_to (cr, x + 0.5, max_y - min_y); + cairo_line_to (cr, x + 0.5, max_y - min_y - 0.5); cairo_stroke (cr); } } @@ -5122,7 +5125,6 @@ validate_visible_area (PsppSheetView *tree_view) GtkTreePath *above_path = NULL; GtkTreeIter iter; int node = -1; - gboolean size_changed = FALSE; gint total_height; gint area_above = 0; gint area_below = 0; @@ -5296,23 +5298,6 @@ validate_visible_area (PsppSheetView *tree_view) pspp_sheet_view_set_top_row (tree_view, above_path, -area_above); pspp_sheet_view_top_row_to_dy (tree_view); - /* update width/height and queue a resize */ - if (size_changed) - { - GtkRequisition requisition; - - /* We temporarily guess a size, under the assumption that it will be the - * same when we get our next size_allocate. If we don't do this, we'll be - * in an inconsistent state if we call top_row_to_dy. */ - - gtk_widget_size_request (GTK_WIDGET (tree_view), &requisition); - gtk_adjustment_set_upper (tree_view->priv->hadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->hadjustment), (gfloat)requisition.width)); - gtk_adjustment_set_upper (tree_view->priv->vadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->vadjustment), (gfloat)requisition.height)); - gtk_adjustment_changed (tree_view->priv->hadjustment); - gtk_adjustment_changed (tree_view->priv->vadjustment); - gtk_widget_queue_resize (GTK_WIDGET (tree_view)); - } - gtk_tree_row_reference_free (tree_view->priv->scroll_to_path); tree_view->priv->scroll_to_path = NULL; @@ -5383,7 +5368,7 @@ do_presize_handler (PsppSheetView *tree_view) if (! gtk_widget_get_realized (GTK_WIDGET (tree_view))) return FALSE; - gtk_widget_size_request (GTK_WIDGET (tree_view), &requisition); + gtk_widget_get_preferred_size (GTK_WIDGET (tree_view), NULL, &requisition); gtk_adjustment_set_upper (tree_view->priv->hadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->hadjustment), (gfloat)requisition.width)); gtk_adjustment_set_upper (tree_view->priv->vadjustment, MAX (gtk_adjustment_get_upper (tree_view->priv->vadjustment), (gfloat)requisition.height)); @@ -5826,9 +5811,7 @@ scroll_row_timeout (gpointer data) pspp_sheet_view_vertical_autoscroll (tree_view); if (tree_view->priv->rubber_band_status == RUBBER_BAND_ACTIVE) - { - pspp_sheet_view_update_rubber_band (tree_view, tree_view->priv->drag_device); - } + pspp_sheet_view_update_rubber_band (tree_view); return TRUE; } @@ -6278,7 +6261,6 @@ pspp_sheet_view_drag_motion (GtkWidget *widget, } else { - tree_view->priv->drag_device = gdk_drag_context_get_device (context); add_scroll_timeout (tree_view); }