diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 5 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 5 | ||||
-rw-r--r-- | gtk/gtkhpaned.c | 32 | ||||
-rw-r--r-- | gtk/gtkpaned.c | 55 |
7 files changed, 94 insertions, 18 deletions
@@ -1,3 +1,8 @@ +Fri Sep 19 18:15:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping + (#96632) + Fri Sep 19 13:24:54 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktreeview.c (gtk_tree_view_get_cursor): Improve diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index eb1dcfcbe8..dff289a954 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Fri Sep 19 18:15:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping + (#96632) + Fri Sep 19 13:24:54 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktreeview.c (gtk_tree_view_get_cursor): Improve diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index eb1dcfcbe8..dff289a954 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Fri Sep 19 18:15:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping + (#96632) + Fri Sep 19 13:24:54 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktreeview.c (gtk_tree_view_get_cursor): Improve diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index eb1dcfcbe8..dff289a954 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Fri Sep 19 18:15:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping + (#96632) + Fri Sep 19 13:24:54 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktreeview.c (gtk_tree_view_get_cursor): Improve diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index eb1dcfcbe8..dff289a954 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Fri Sep 19 18:15:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping + (#96632) + Fri Sep 19 13:24:54 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktreeview.c (gtk_tree_view_get_cursor): Improve diff --git a/gtk/gtkhpaned.c b/gtk/gtkhpaned.c index 2987058210..31c6b1bc51 100644 --- a/gtk/gtkhpaned.c +++ b/gtk/gtkhpaned.c @@ -138,6 +138,15 @@ gtk_hpaned_size_request (GtkWidget *widget, } static void +flip_child (GtkWidget *widget, GtkAllocation *child_pos) +{ + gint x = widget->allocation.x; + gint width = widget->allocation.width; + + child_pos->x = 2 * x + width - child_pos->x - child_pos->width; +} + +static void gtk_hpaned_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { @@ -171,6 +180,21 @@ gtk_hpaned_size_allocate (GtkWidget *widget, paned->handle_pos.y = widget->allocation.y + border_width; paned->handle_pos.width = handle_size; paned->handle_pos.height = MAX (1, widget->allocation.height - 2 * border_width); + + child1_allocation.height = child2_allocation.height = MAX (1, (gint) allocation->height - border_width * 2); + child1_allocation.width = MAX (1, paned->child1_size); + child1_allocation.x = widget->allocation.x + border_width; + child1_allocation.y = child2_allocation.y = widget->allocation.y + border_width; + + child2_allocation.x = child1_allocation.x + paned->child1_size + paned->handle_pos.width; + child2_allocation.width = MAX (1, widget->allocation.x + widget->allocation.width - child2_allocation.x - border_width); + + if (gtk_widget_get_direction (GTK_WIDGET (widget)) == GTK_TEXT_DIR_RTL) + { + flip_child (widget, &(child2_allocation)); + flip_child (widget, &(child1_allocation)); + flip_child (widget, &(paned->handle_pos)); + } if (GTK_WIDGET_REALIZED (widget)) { @@ -183,14 +207,6 @@ gtk_hpaned_size_allocate (GtkWidget *widget, paned->handle_pos.height); } - child1_allocation.height = child2_allocation.height = MAX (1, (gint) allocation->height - border_width * 2); - child1_allocation.width = MAX (1, paned->child1_size); - child1_allocation.x = widget->allocation.x + border_width; - child1_allocation.y = child2_allocation.y = widget->allocation.y + border_width; - - child2_allocation.x = child1_allocation.x + paned->child1_size + paned->handle_pos.width; - child2_allocation.width = MAX (1, widget->allocation.x + widget->allocation.width - child2_allocation.x - border_width); - /* Now allocate the childen, making sure, when resizing not to * overlap the windows */ diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index 58dfd9ed2f..c064d752e7 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -733,6 +733,18 @@ gtk_paned_expose (GtkWidget *widget, return FALSE; } +static gboolean +is_rtl (GtkPaned *paned) +{ + if (paned->orientation == GTK_ORIENTATION_VERTICAL && + gtk_widget_get_direction (GTK_WIDGET (paned)) == GTK_TEXT_DIR_RTL) + { + return TRUE; + } + + return FALSE; +} + static void update_drag (GtkPaned *paned) { @@ -745,9 +757,23 @@ update_drag (GtkPaned *paned) else gtk_widget_get_pointer (GTK_WIDGET (paned), &pos, NULL); - gtk_widget_style_get (GTK_WIDGET (paned), "handle_size", &handle_size, NULL); + pos -= paned->drag_pos; + + if (is_rtl (paned)) + { + gtk_widget_style_get (GTK_WIDGET (paned), + "handle_size", &handle_size, + NULL); + + size = GTK_WIDGET (paned)->allocation.width - pos - handle_size; + } + else + { + size = pos; + } + + size -= GTK_CONTAINER (paned)->border_width; - size = pos - GTK_CONTAINER (paned)->border_width - paned->drag_pos; size = CLAMP (size, paned->min_position, paned->max_position); if (size != paned->child1_size) @@ -1332,7 +1358,7 @@ gtk_paned_cycle_child_focus (GtkPaned *paned, { GList *cycle_chain = NULL; GList *list; - + GtkDirectionType direction = reversed? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD; /* ignore f6 if the handle is focused */ @@ -1429,38 +1455,40 @@ gtk_paned_move_handle (GtkPaned *paned, { gint old_position; gint new_position; + gint increment; enum { SINGLE_STEP_SIZE = 1, PAGE_STEP_SIZE = 75 }; - old_position = gtk_paned_get_position (paned); + new_position = old_position = gtk_paned_get_position (paned); + increment = 0; switch (scroll) { case GTK_SCROLL_STEP_LEFT: case GTK_SCROLL_STEP_UP: case GTK_SCROLL_STEP_BACKWARD: - new_position = old_position - SINGLE_STEP_SIZE; + increment = - SINGLE_STEP_SIZE; break; case GTK_SCROLL_STEP_RIGHT: case GTK_SCROLL_STEP_DOWN: case GTK_SCROLL_STEP_FORWARD: - new_position = old_position + SINGLE_STEP_SIZE; + increment = SINGLE_STEP_SIZE; break; case GTK_SCROLL_PAGE_LEFT: case GTK_SCROLL_PAGE_UP: case GTK_SCROLL_PAGE_BACKWARD: - new_position = old_position - PAGE_STEP_SIZE; + increment = - PAGE_STEP_SIZE; break; case GTK_SCROLL_PAGE_RIGHT: case GTK_SCROLL_PAGE_DOWN: case GTK_SCROLL_PAGE_FORWARD: - new_position = old_position + PAGE_STEP_SIZE; + increment = PAGE_STEP_SIZE; break; case GTK_SCROLL_START: @@ -1470,11 +1498,18 @@ gtk_paned_move_handle (GtkPaned *paned, case GTK_SCROLL_END: new_position = paned->max_position; break; - + default: - new_position = old_position; break; } + + if (increment) + { + if (is_rtl (paned)) + increment = -increment; + + new_position = old_position + increment; + } new_position = CLAMP (new_position, paned->min_position, paned->max_position); |