[maemo-commits] [maemo-commits] r9303 - in projects/haf/branches/gtk+/maemo-gtk-2-10: . gtk
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Wed Jan 24 16:02:32 EET 2007
- Previous message: [maemo-commits] r9302 - in projects/haf/trunk/sapwood: . src
- Next message: [maemo-commits] r9304 - in projects/haf/trunk/sapwood: . src
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: mitch Date: 2007-01-24 16:02:30 +0200 (Wed, 24 Jan 2007) New Revision: 9303 Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkscrolledwindow.c Log: 2007-01-24 Michael Natterer <mitch at imendio.com> * gtk/gtkscrolledwindow.c (gtk_scrolled_window_size_allocate): port over "keep focussed child visible when size changes". Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-01-24 14:00:58 UTC (rev 9302) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/ChangeLog 2007-01-24 14:02:30 UTC (rev 9303) @@ -1,5 +1,10 @@ 2007-01-24 Michael Natterer <mitch at imendio.com> + * gtk/gtkscrolledwindow.c (gtk_scrolled_window_size_allocate): + port over "keep focussed child visible when size changes". + +2007-01-24 Michael Natterer <mitch at imendio.com> + * gtk/gtkrc.c (gtk_rc_reparse_all_for_settings): port over parsing order change: parse theme and key theme first (makes styles available when parsing with gtk_rc_context_parse_string) Modified: projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkscrolledwindow.c =================================================================== --- projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkscrolledwindow.c 2007-01-24 14:00:58 UTC (rev 9302) +++ projects/haf/branches/gtk+/maemo-gtk-2-10/gtk/gtkscrolledwindow.c 2007-01-24 14:02:30 UTC (rev 9303) @@ -1237,7 +1237,7 @@ allocation->x += widget->style->xthickness; allocation->y += widget->style->ythickness; } - + allocation->width = MAX (1, (gint)widget->allocation.width - allocation->x * 2); allocation->height = MAX (1, (gint)widget->allocation.height - allocation->y * 2); @@ -1249,23 +1249,24 @@ gtk_widget_get_child_requisition (scrolled_window->vscrollbar, &vscrollbar_requisition); is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL; - - if ((!is_rtl && + + if ((!is_rtl && (priv->real_window_placement == GTK_CORNER_TOP_RIGHT || priv->real_window_placement == GTK_CORNER_BOTTOM_RIGHT)) || - (is_rtl && + (is_rtl && (priv->real_window_placement == GTK_CORNER_TOP_LEFT || priv->real_window_placement == GTK_CORNER_BOTTOM_LEFT))) allocation->x += (vscrollbar_requisition.width + scrollbar_spacing); allocation->width = MAX (1, allocation->width - (vscrollbar_requisition.width + scrollbar_spacing)); } + if (scrolled_window->hscrollbar_visible) { GtkRequisition hscrollbar_requisition; gtk_widget_get_child_requisition (scrolled_window->hscrollbar, - &hscrollbar_requisition); - + &hscrollbar_requisition); + if (priv->real_window_placement == GTK_CORNER_BOTTOM_LEFT || priv->real_window_placement == GTK_CORNER_BOTTOM_RIGHT) allocation->y += (hscrollbar_requisition.height + scrollbar_spacing); @@ -1274,7 +1275,85 @@ } } +#ifdef MAEMO_CHANGES + +static gdouble +gtk_scrolled_window_get_focus_movement (GtkScrolledWindow *scrolled_window) +{ + GtkWidget *focus_child; + GtkRange *range; + GtkAdjustment *adj; + gdouble value, new_value; + gint x, y; + gint border_width; + + focus_child = GTK_CONTAINER (scrolled_window)->focus_child; + if (focus_child == NULL) + return 0; + + while (GTK_IS_CONTAINER (focus_child) && + GTK_CONTAINER (focus_child)->focus_child) + { + focus_child = GTK_CONTAINER (focus_child)->focus_child; + } + + if (!gtk_widget_translate_coordinates (focus_child->parent, + GTK_WIDGET (scrolled_window), + focus_child->allocation.x, + focus_child->allocation.y, &x, &y)) + return 0; + + range = GTK_RANGE (scrolled_window->vscrollbar); + adj = range->adjustment; + value = gtk_adjustment_get_value (adj); + + border_width = GTK_CONTAINER (scrolled_window)->border_width; + + x -= border_width; + y -= border_width; + + if (y < 0) + { + /* scroll up */ + new_value = value + y; + if (new_value < adj->lower) + new_value = adj->lower; + } + else if (y + focus_child->allocation.height > adj->page_size) + { + /* scroll down */ + new_value = value + y + focus_child->allocation.height - adj->page_size; + if (new_value > adj->upper - adj->page_size) + new_value = adj->upper - adj->page_size; + } + else + { + new_value = value; + } + + return new_value - value; +} + static void +gtk_scrolled_window_scroll_to_focus (GtkScrolledWindow *scrolled_window) +{ + GtkAdjustment *adj; + gdouble diff; + + diff = gtk_scrolled_window_get_focus_movement (scrolled_window); + if (diff != 0) + { + adj = GTK_RANGE (scrolled_window->vscrollbar)->adjustment; + + gtk_adjustment_set_value (adj, gtk_adjustment_get_value (adj) + diff); + gtk_scrolled_window_set_vadjustment (scrolled_window, + GTK_ADJUSTMENT (adj)); + } +} + +#endif /* MAEMO_CHANGES */ + +static void gtk_scrolled_window_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { @@ -1284,13 +1363,21 @@ GtkAllocation relative_allocation; GtkAllocation child_allocation; gint scrollbar_spacing; - +#ifdef MAEMO_CHANGES + gboolean is_focus_visible; +#endif /* MAEMO_CHANGES */ + g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget)); g_return_if_fail (allocation != NULL); scrolled_window = GTK_SCROLLED_WINDOW (widget); bin = GTK_BIN (scrolled_window); +#ifdef MAEMO_CHANGES + is_focus_visible = + gtk_scrolled_window_get_focus_movement (scrolled_window) == 0; +#endif /* MAEMO_CHANGES */ + scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window); priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window); @@ -1426,6 +1513,11 @@ } gtk_widget_size_allocate (scrolled_window->vscrollbar, &child_allocation); + +#ifdef MAEMO_CHANGES + if (is_focus_visible) + gtk_scrolled_window_scroll_to_focus (scrolled_window); +#endif /* MAEMO_CHANGES */ } else if (GTK_WIDGET_VISIBLE (scrolled_window->vscrollbar)) gtk_widget_hide (scrolled_window->vscrollbar);
- Previous message: [maemo-commits] r9302 - in projects/haf/trunk/sapwood: . src
- Next message: [maemo-commits] r9304 - in projects/haf/trunk/sapwood: . src
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]