summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2000-02-17 22:12:25 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-02-17 22:12:25 +0000
commitab1deac87fa395332b73daf8e2e4c893e23be3e4 (patch)
tree6ecac4c8b00d557df9d0a0a4ee8a9f9c0a80e7dc
parentd0f73034cf5e6c5b7f52ce7d31bd3b3d8cca0d4c (diff)
downloadgtk+-ab1deac87fa395332b73daf8e2e4c893e23be3e4.tar.gz
Add patch from Jonathan Blandford and Anders Carlsson to change the Paned
Thu Feb 17 17:10:12 2000 Owen Taylor <otaylor@redhat.com> * gtk/gt{h,k,}vpaned.[ch]: Add patch from Jonathan Blandford and Anders Carlsson to change the Paned widgets so that they can be dragged from anywhere along the length. Also change the way that this is drawn to make this apparent. * gtk/gtkoptionmenu.c (gtk_option_menu_get_history): Apply patch from George Lebl to check that option_menu->menu is present before getting history.
-rw-r--r--ChangeLog11
-rw-r--r--ChangeLog.pre-2-011
-rw-r--r--ChangeLog.pre-2-1011
-rw-r--r--ChangeLog.pre-2-211
-rw-r--r--ChangeLog.pre-2-411
-rw-r--r--ChangeLog.pre-2-611
-rw-r--r--ChangeLog.pre-2-811
-rw-r--r--docs/Changes-1.4.txt4
-rw-r--r--gtk/gtkhpaned.c293
-rw-r--r--gtk/gtkhpaned.h15
-rw-r--r--gtk/gtkoptionmenu.c13
-rw-r--r--gtk/gtkpaned.c272
-rw-r--r--gtk/gtkpaned.h40
-rw-r--r--gtk/gtkvpaned.c311
-rw-r--r--gtk/gtkvpaned.h13
15 files changed, 576 insertions, 462 deletions
diff --git a/ChangeLog b/ChangeLog
index 587d40e11b..0e3f512a90 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Thu Feb 17 17:10:12 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gt{h,k,}vpaned.[ch]: Add patch from Jonathan Blandford
+ and Anders Carlsson to change the Paned widgets so that they
+ can be dragged from anywhere along the length. Also change
+ the way that this is drawn to make this apparent.
+
+ * gtk/gtkoptionmenu.c (gtk_option_menu_get_history): Apply patch
+ from George Lebl to check that option_menu->menu is present
+ before getting history.
+
2000-02-14 Tor Lillqvist <tml@iki.fi>
* gdk/gdkdraw.c (gdk_draw_segments): Move the test for no segments
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 587d40e11b..0e3f512a90 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,14 @@
+Thu Feb 17 17:10:12 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gt{h,k,}vpaned.[ch]: Add patch from Jonathan Blandford
+ and Anders Carlsson to change the Paned widgets so that they
+ can be dragged from anywhere along the length. Also change
+ the way that this is drawn to make this apparent.
+
+ * gtk/gtkoptionmenu.c (gtk_option_menu_get_history): Apply patch
+ from George Lebl to check that option_menu->menu is present
+ before getting history.
+
2000-02-14 Tor Lillqvist <tml@iki.fi>
* gdk/gdkdraw.c (gdk_draw_segments): Move the test for no segments
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 587d40e11b..0e3f512a90 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,14 @@
+Thu Feb 17 17:10:12 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gt{h,k,}vpaned.[ch]: Add patch from Jonathan Blandford
+ and Anders Carlsson to change the Paned widgets so that they
+ can be dragged from anywhere along the length. Also change
+ the way that this is drawn to make this apparent.
+
+ * gtk/gtkoptionmenu.c (gtk_option_menu_get_history): Apply patch
+ from George Lebl to check that option_menu->menu is present
+ before getting history.
+
2000-02-14 Tor Lillqvist <tml@iki.fi>
* gdk/gdkdraw.c (gdk_draw_segments): Move the test for no segments
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 587d40e11b..0e3f512a90 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,14 @@
+Thu Feb 17 17:10:12 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gt{h,k,}vpaned.[ch]: Add patch from Jonathan Blandford
+ and Anders Carlsson to change the Paned widgets so that they
+ can be dragged from anywhere along the length. Also change
+ the way that this is drawn to make this apparent.
+
+ * gtk/gtkoptionmenu.c (gtk_option_menu_get_history): Apply patch
+ from George Lebl to check that option_menu->menu is present
+ before getting history.
+
2000-02-14 Tor Lillqvist <tml@iki.fi>
* gdk/gdkdraw.c (gdk_draw_segments): Move the test for no segments
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 587d40e11b..0e3f512a90 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,14 @@
+Thu Feb 17 17:10:12 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gt{h,k,}vpaned.[ch]: Add patch from Jonathan Blandford
+ and Anders Carlsson to change the Paned widgets so that they
+ can be dragged from anywhere along the length. Also change
+ the way that this is drawn to make this apparent.
+
+ * gtk/gtkoptionmenu.c (gtk_option_menu_get_history): Apply patch
+ from George Lebl to check that option_menu->menu is present
+ before getting history.
+
2000-02-14 Tor Lillqvist <tml@iki.fi>
* gdk/gdkdraw.c (gdk_draw_segments): Move the test for no segments
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 587d40e11b..0e3f512a90 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,14 @@
+Thu Feb 17 17:10:12 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gt{h,k,}vpaned.[ch]: Add patch from Jonathan Blandford
+ and Anders Carlsson to change the Paned widgets so that they
+ can be dragged from anywhere along the length. Also change
+ the way that this is drawn to make this apparent.
+
+ * gtk/gtkoptionmenu.c (gtk_option_menu_get_history): Apply patch
+ from George Lebl to check that option_menu->menu is present
+ before getting history.
+
2000-02-14 Tor Lillqvist <tml@iki.fi>
* gdk/gdkdraw.c (gdk_draw_segments): Move the test for no segments
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 587d40e11b..0e3f512a90 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,14 @@
+Thu Feb 17 17:10:12 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gt{h,k,}vpaned.[ch]: Add patch from Jonathan Blandford
+ and Anders Carlsson to change the Paned widgets so that they
+ can be dragged from anywhere along the length. Also change
+ the way that this is drawn to make this apparent.
+
+ * gtk/gtkoptionmenu.c (gtk_option_menu_get_history): Apply patch
+ from George Lebl to check that option_menu->menu is present
+ before getting history.
+
2000-02-14 Tor Lillqvist <tml@iki.fi>
* gdk/gdkdraw.c (gdk_draw_segments): Move the test for no segments
diff --git a/docs/Changes-1.4.txt b/docs/Changes-1.4.txt
index 6de4d63810..8e88c57e5e 100644
--- a/docs/Changes-1.4.txt
+++ b/docs/Changes-1.4.txt
@@ -9,3 +9,7 @@ Incompatible Changes from GTK+-1.2 to GTK+-1.4:
match what we do for glib, and other similar cases.
- The detail arguments in the GtkStyleClass structure are now 'const gchar *'.
+
+- gtk_paned_set_gutter_size() has been removed, since the small handle tab
+ has been changed to include the entire area previously occupied by
+ the gutter.
diff --git a/gtk/gtkhpaned.c b/gtk/gtkhpaned.c
index a561288055..b757907f67 100644
--- a/gtk/gtkhpaned.c
+++ b/gtk/gtkhpaned.c
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* GTK - The GIMP Toolkit
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
@@ -25,24 +26,22 @@
*/
#include "gtkhpaned.h"
-#include "gtkmain.h"
-#include "gtksignal.h"
-
-static void gtk_hpaned_class_init (GtkHPanedClass *klass);
-static void gtk_hpaned_init (GtkHPaned *hpaned);
-static void gtk_hpaned_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
-static void gtk_hpaned_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
-static void gtk_hpaned_draw (GtkWidget *widget,
- GdkRectangle *area);
-static void gtk_hpaned_xor_line (GtkPaned *paned);
-static gint gtk_hpaned_button_press (GtkWidget *widget,
- GdkEventButton *event);
-static gint gtk_hpaned_button_release (GtkWidget *widget,
- GdkEventButton *event);
-static gint gtk_hpaned_motion (GtkWidget *widget,
- GdkEventMotion *event);
+
+static void gtk_hpaned_class_init (GtkHPanedClass *klass);
+static void gtk_hpaned_init (GtkHPaned *hpaned);
+static void gtk_hpaned_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void gtk_hpaned_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static void gtk_hpaned_draw (GtkWidget *widget,
+ GdkRectangle *area);
+static void gtk_hpaned_xor_line (GtkPaned *paned);
+static gboolean gtk_hpaned_button_press (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean gtk_hpaned_button_release (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean gtk_hpaned_motion (GtkWidget *widget,
+ GdkEventMotion *event);
GtkType
gtk_hpaned_get_type (void)
@@ -59,8 +58,8 @@ gtk_hpaned_get_type (void)
(GtkClassInitFunc) gtk_hpaned_class_init,
(GtkObjectInitFunc) gtk_hpaned_init,
/* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
};
hpaned_type = gtk_type_unique (GTK_TYPE_PANED, &hpaned_info);
@@ -74,7 +73,7 @@ gtk_hpaned_class_init (GtkHPanedClass *class)
{
GtkWidgetClass *widget_class;
- widget_class = (GtkWidgetClass*) class;
+ widget_class = (GtkWidgetClass *) class;
widget_class->size_request = gtk_hpaned_size_request;
widget_class->size_allocate = gtk_hpaned_size_allocate;
@@ -87,9 +86,17 @@ gtk_hpaned_class_init (GtkHPanedClass *class)
static void
gtk_hpaned_init (GtkHPaned *hpaned)
{
+ GtkPaned *paned;
+
+ g_return_if_fail (hpaned != NULL);
+ g_return_if_fail (GTK_IS_PANED (hpaned));
+
+ paned = GTK_PANED (hpaned);
+
+ paned->cursor_type = GDK_SB_H_DOUBLE_ARROW;
}
-GtkWidget*
+GtkWidget *
gtk_hpaned_new (void)
{
GtkHPaned *hpaned;
@@ -130,7 +137,7 @@ gtk_hpaned_size_request (GtkWidget *widget,
requisition->width += child_requisition.width;
}
- requisition->width += GTK_CONTAINER (paned)->border_width * 2 + paned->gutter_size;
+ requisition->width += GTK_CONTAINER (paned)->border_width * 2 + paned->handle_size;
requisition->height += GTK_CONTAINER (paned)->border_width * 2;
}
@@ -143,7 +150,6 @@ gtk_hpaned_size_allocate (GtkWidget *widget,
GtkRequisition child2_requisition;
GtkAllocation child1_allocation;
GtkAllocation child2_allocation;
- GdkRectangle old_groove_rectangle;
guint16 border_width;
g_return_if_fail (widget != NULL);
@@ -164,72 +170,52 @@ gtk_hpaned_size_allocate (GtkWidget *widget,
gtk_widget_get_child_requisition (paned->child2, &child2_requisition);
else
child2_requisition.width = 0;
-
+
gtk_paned_compute_position (paned,
widget->allocation.width
- - paned->gutter_size
+ - paned->handle_size
- 2 * border_width,
child1_requisition.width,
child2_requisition.width);
-
+
/* Move the handle before the children so we don't get extra expose events */
- paned->handle_xpos = paned->child1_size + border_width + paned->gutter_size / 2 - paned->handle_size / 2;
- paned->handle_ypos = allocation->height - border_width - 2*paned->handle_size;
+ paned->handle_xpos = paned->child1_size + border_width;
+ paned->handle_ypos = 0;
+ paned->handle_width = paned->handle_size;
+ paned->handle_height = widget->allocation.height;
if (GTK_WIDGET_REALIZED (widget))
{
gdk_window_move_resize (widget->window,
allocation->x, allocation->y,
- allocation->width, allocation->height);
-
- gdk_window_move (paned->handle, paned->handle_xpos, paned->handle_ypos);
+ allocation->width,
+ allocation->height);
+
+ gdk_window_move_resize (paned->handle,
+ paned->handle_xpos,
+ paned->handle_ypos,
+ paned->handle_size,
+ paned->handle_height);
}
- child1_allocation.height = child2_allocation.height = MAX (1, (gint)allocation->height - border_width * 2);
+ child1_allocation.height = child2_allocation.height = MAX (1, (gint) allocation->height - border_width * 2);
child1_allocation.width = paned->child1_size;
child1_allocation.x = border_width;
child1_allocation.y = child2_allocation.y = border_width;
-
- old_groove_rectangle = paned->groove_rectangle;
-
- paned->groove_rectangle.x = child1_allocation.x
- + child1_allocation.width + paned->gutter_size / 2 - 1;
- paned->groove_rectangle.y = 0;
- paned->groove_rectangle.width = 2;
- paned->groove_rectangle.height = allocation->height;
-
- if (GTK_WIDGET_DRAWABLE (widget) &&
- ((paned->groove_rectangle.x != old_groove_rectangle.x) ||
- (paned->groove_rectangle.y != old_groove_rectangle.y) ||
- (paned->groove_rectangle.width != old_groove_rectangle.width) ||
- (paned->groove_rectangle.height != old_groove_rectangle.height)))
- {
- gtk_widget_queue_clear_area (widget,
- old_groove_rectangle.x,
- old_groove_rectangle.y,
- old_groove_rectangle.width,
- old_groove_rectangle.height);
- gtk_widget_queue_draw_area (widget,
- paned->groove_rectangle.x,
- paned->groove_rectangle.y,
- paned->groove_rectangle.width,
- paned->groove_rectangle.height);
- }
-
- child2_allocation.x = paned->groove_rectangle.x + paned->gutter_size / 2 + 1;
- child2_allocation.width = MAX (1, (gint)allocation->width
- - child2_allocation.x - border_width);
-
+
+ child2_allocation.x = child1_allocation.x + child1_allocation.width + paned->handle_width;
+ child2_allocation.width = MAX (1, (gint) allocation->width - child2_allocation.x - border_width);
+
/* Now allocate the childen, making sure, when resizing not to
* overlap the windows */
- if (GTK_WIDGET_MAPPED(widget) &&
+ if (GTK_WIDGET_MAPPED (widget) &&
paned->child1 && GTK_WIDGET_VISIBLE (paned->child1) &&
paned->child1->allocation.width < child1_allocation.width)
{
if (paned->child2 && GTK_WIDGET_VISIBLE (paned->child2))
gtk_widget_size_allocate (paned->child2, &child2_allocation);
- gtk_widget_size_allocate (paned->child1, &child1_allocation);
+ gtk_widget_size_allocate (paned->child1, &child1_allocation);
}
else
{
@@ -242,7 +228,7 @@ gtk_hpaned_size_allocate (GtkWidget *widget,
static void
gtk_hpaned_draw (GtkWidget *widget,
- GdkRectangle *area)
+ GdkRectangle *area)
{
GtkPaned *paned;
GdkRectangle handle_area, child_area;
@@ -251,52 +237,97 @@ gtk_hpaned_draw (GtkWidget *widget,
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_PANED (widget));
- if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget))
+ if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget))
{
- gint width, height;
-
paned = GTK_PANED (widget);
border_width = GTK_CONTAINER (paned)->border_width;
gdk_window_clear_area (widget->window,
- area->x, area->y, area->width, area->height);
+ area->x, area->y, area->width,
+ area->height);
- /* Redraw the handle
- */
- gdk_window_get_size (paned->handle, &width, &height);
-
handle_area.x = paned->handle_xpos;
handle_area.y = paned->handle_ypos;
- handle_area.width = width;
- handle_area.height = height;
+ handle_area.width = paned->handle_size;
+ handle_area.height = paned->handle_height;
if (gdk_rectangle_intersect (&handle_area, area, &child_area))
{
- child_area.x -= handle_area.x;
- child_area.y -= handle_area.y;
- gtk_paint_box (widget->style, paned->handle,
- GTK_WIDGET_STATE(widget),
- GTK_SHADOW_OUT,
- &child_area, widget, "paned",
- 0, 0,
- width, height);
+ if (widget->allocation.height > 2)
+ {
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_size/2,
+ paned->handle_height/2);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_size/2 - 1,
+ paned->handle_height/2 - 1);
+ }
+ if (widget->allocation.height > 11)
+ {
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_size/2,
+ paned->handle_height/2 + 5);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_size/2 - 1,
+ paned->handle_height/2 + 4);
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_size/2,
+ paned->handle_height/2 - 5);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_size/2 - 1,
+ paned->handle_height/2 - 6);
+ }
+ if (widget->allocation.height > 20)
+ {
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_size/2,
+ paned->handle_height/2 - 10);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_size/2 - 1,
+ paned->handle_height/2 - 11);
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_size/2,
+ paned->handle_height/2 + 10);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_size/2 - 1,
+ paned->handle_height/2 + 9);
+ }
+ if (widget->allocation.height > 30)
+ {
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_size/2,
+ paned->handle_height/2 - 15);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_size/2 - 1,
+ paned->handle_height/2 - 16);
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_size/2,
+ paned->handle_height/2 + 15);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_size/2 - 1,
+ paned->handle_height/2 + 14);
+ }
}
-
- /* Redraw the groove
- */
- gtk_paint_vline(widget->style, widget->window, GTK_STATE_NORMAL,
- area, widget, "hpaned",
- 0, widget->allocation.height - 1,
- border_width + paned->child1_size + paned->gutter_size / 2 - 1);
/* Redraw the children
*/
- if (paned->child1 &&
- gtk_widget_intersect (paned->child1, area, &child_area))
- gtk_widget_draw (paned->child1, &child_area);
- if (paned->child2 &&
- gtk_widget_intersect (paned->child2, area, &child_area))
- gtk_widget_draw (paned->child2, &child_area);
-
+ if (paned->child1 && gtk_widget_intersect (paned->child1, area, &child_area))
+ gtk_widget_draw(paned->child1, &child_area);
+ if (paned->child2 && gtk_widget_intersect(paned->child2, area, &child_area))
+ gtk_widget_draw(paned->child2, &child_area);
}
}
@@ -315,12 +346,14 @@ gtk_hpaned_xor_line (GtkPaned *paned)
values.subwindow_mode = GDK_INCLUDE_INFERIORS;
paned->xor_gc = gdk_gc_new_with_values (widget->window,
&values,
- GDK_GC_FUNCTION |
- GDK_GC_SUBWINDOW);
+ GDK_GC_FUNCTION | GDK_GC_SUBWINDOW);
}
+ gdk_gc_set_line_attributes (paned->xor_gc, 2, GDK_LINE_SOLID,
+ GDK_CAP_NOT_LAST, GDK_JOIN_BEVEL);
+
xpos = paned->child1_size
- + GTK_CONTAINER (paned)->border_width + paned->gutter_size / 2;
+ + GTK_CONTAINER (paned)->border_width + paned->handle_size / 2;
gdk_draw_line (widget->window, paned->xor_gc,
xpos,
@@ -329,44 +362,49 @@ gtk_hpaned_xor_line (GtkPaned *paned)
widget->allocation.height - 1);
}
-static gint
-gtk_hpaned_button_press (GtkWidget *widget, GdkEventButton *event)
+static gboolean
+gtk_hpaned_button_press (GtkWidget *widget,
+ GdkEventButton *event)
{
GtkPaned *paned;
- g_return_val_if_fail (widget != NULL,FALSE);
- g_return_val_if_fail (GTK_IS_PANED (widget),FALSE);
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_PANED (widget), FALSE);
paned = GTK_PANED (widget);
if (!paned->in_drag &&
- (event->window == paned->handle) && (event->button == 1))
+ event->window == paned->handle && event->button == 1)
{
paned->in_drag = TRUE;
/* We need a server grab here, not gtk_grab_add(), since
* we don't want to pass events on to the widget's children */
- gdk_pointer_grab (paned->handle, FALSE,
- GDK_POINTER_MOTION_HINT_MASK
- | GDK_BUTTON1_MOTION_MASK
- | GDK_BUTTON_RELEASE_MASK,
- NULL, NULL, event->time);
+ gdk_pointer_grab(paned->handle, FALSE,
+ GDK_POINTER_MOTION_HINT_MASK
+ | GDK_BUTTON1_MOTION_MASK
+ | GDK_BUTTON_RELEASE_MASK,
+ NULL, NULL, event->time);
paned->child1_size += event->x - paned->handle_size / 2;
paned->child1_size = CLAMP (paned->child1_size, 0,
- widget->allocation.width - paned->gutter_size
- - 2 * GTK_CONTAINER (paned)->border_width);
+ widget->allocation.width
+ - paned->handle_size
+ - 2 * GTK_CONTAINER (paned)->border_width);
gtk_hpaned_xor_line (paned);
+
+ return TRUE;
}
- return TRUE;
+ return FALSE;
}
-static gint
-gtk_hpaned_button_release (GtkWidget *widget, GdkEventButton *event)
+static gboolean
+gtk_hpaned_button_release (GtkWidget *widget,
+ GdkEventButton *event)
{
GtkPaned *paned;
- g_return_val_if_fail (widget != NULL,FALSE);
- g_return_val_if_fail (GTK_IS_PANED (widget),FALSE);
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_PANED (widget), FALSE);
paned = GTK_PANED (widget);
@@ -377,13 +415,16 @@ gtk_hpaned_button_release (GtkWidget *widget, GdkEventButton *event)
paned->position_set = TRUE;
gdk_pointer_ungrab (event->time);
gtk_widget_queue_resize (GTK_WIDGET (paned));
+
+ return TRUE;
}
- return TRUE;
+ return FALSE;
}
-static gint
-gtk_hpaned_motion (GtkWidget *widget, GdkEventMotion *event)
+static gboolean
+gtk_hpaned_motion (GtkWidget *widget,
+ GdkEventMotion *event)
{
GtkPaned *paned;
gint x;
@@ -400,12 +441,10 @@ gtk_hpaned_motion (GtkWidget *widget, GdkEventMotion *event)
if (paned->in_drag)
{
- gint size = x - GTK_CONTAINER (paned)->border_width - paned->gutter_size/2;
-
+ gint size = x - GTK_CONTAINER (paned)->border_width - paned->handle_size / 2;
+
gtk_hpaned_xor_line (paned);
- paned->child1_size = CLAMP (size,
- paned->min_position,
- paned->max_position);
+ paned->child1_size = CLAMP (size, paned->min_position, paned->max_position);
gtk_hpaned_xor_line (paned);
}
diff --git a/gtk/gtkhpaned.h b/gtk/gtkhpaned.h
index 2b3e3b0969..3b5a593a06 100644
--- a/gtk/gtkhpaned.h
+++ b/gtk/gtkhpaned.h
@@ -18,7 +18,7 @@
*/
/*
- * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
+ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GTK+ Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
@@ -27,16 +27,12 @@
#ifndef __GTK_HPANED_H__
#define __GTK_HPANED_H__
-
-#include <gdk/gdk.h>
#include <gtk/gtkpaned.h>
-
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
-
#define GTK_TYPE_HPANED (gtk_hpaned_get_type ())
#define GTK_HPANED(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_HPANED, GtkHPaned))
#define GTK_HPANED_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_HPANED, GtkHPanedClass))
@@ -45,8 +41,8 @@ extern "C" {
#define GTK_HPANED_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_HPANED, GtkHPanedClass))
-typedef struct _GtkHPaned GtkHPaned;
-typedef struct _GtkHPanedClass GtkHPanedClass;
+typedef struct _GtkHPaned GtkHPaned;
+typedef struct _GtkHPanedClass GtkHPanedClass;
struct _GtkHPaned
{
@@ -58,14 +54,11 @@ struct _GtkHPanedClass
GtkPanedClass parent_class;
};
-
GtkType gtk_hpaned_get_type (void);
-GtkWidget* gtk_hpaned_new (void);
-
+GtkWidget *gtk_hpaned_new (void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
-
#endif /* __GTK_HPANED_H__ */
diff --git a/gtk/gtkoptionmenu.c b/gtk/gtkoptionmenu.c
index c4d4009e07..c3ea92ada6 100644
--- a/gtk/gtkoptionmenu.c
+++ b/gtk/gtkoptionmenu.c
@@ -250,12 +250,17 @@ gtk_option_menu_get_history (GtkOptionMenu *option_menu)
GtkWidget *active_widget;
g_return_val_if_fail (GTK_IS_OPTION_MENU (option_menu), -1);
-
- active_widget = gtk_menu_get_active (GTK_MENU (option_menu->menu));
- if (active_widget)
- return g_list_index (GTK_MENU_SHELL (option_menu->menu)->children,
+ if (option_menu->menu)
+ {
+ active_widget = gtk_menu_get_active (GTK_MENU (option_menu->menu));
+
+ if (active_widget)
+ return g_list_index (GTK_MENU_SHELL (option_menu->menu)->children,
active_widget);
+ else
+ return -1;
+ }
else
return -1;
}
diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c
index 3a6929fc0b..e3b262d177 100644
--- a/gtk/gtkpaned.c
+++ b/gtk/gtkpaned.c
@@ -18,7 +18,7 @@
*/
/*
- * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
+ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GTK+ Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
@@ -28,34 +28,32 @@
enum {
ARG_0,
- ARG_HANDLE_SIZE,
- ARG_GUTTER_SIZE
+ ARG_HANDLE_SIZE
};
-static void gtk_paned_class_init (GtkPanedClass *klass);
-static void gtk_paned_init (GtkPaned *paned);
-static void gtk_paned_set_arg (GtkObject *object,
- GtkArg *arg,
- guint arg_id);
-static void gtk_paned_get_arg (GtkObject *object,
- GtkArg *arg,
- guint arg_id);
-static void gtk_paned_realize (GtkWidget *widget);
-static void gtk_paned_map (GtkWidget *widget);
-static void gtk_paned_unmap (GtkWidget *widget);
-static void gtk_paned_unrealize (GtkWidget *widget);
-static gint gtk_paned_expose (GtkWidget *widget,
- GdkEventExpose *event);
-static void gtk_paned_add (GtkContainer *container,
- GtkWidget *widget);
-static void gtk_paned_remove (GtkContainer *container,
- GtkWidget *widget);
-static void gtk_paned_forall (GtkContainer *container,
- gboolean include_internals,
- GtkCallback callback,
- gpointer callback_data);
-static GtkType gtk_paned_child_type (GtkContainer *container);
-
+static void gtk_paned_class_init (GtkPanedClass *klass);
+static void gtk_paned_init (GtkPaned *paned);
+static void gtk_paned_set_arg (GtkObject *object,
+ GtkArg *arg,
+ guint arg_id);
+static void gtk_paned_get_arg (GtkObject *object,
+ GtkArg *arg,
+ guint arg_id);
+static void gtk_paned_realize (GtkWidget *widget);
+static void gtk_paned_map (GtkWidget *widget);
+static void gtk_paned_unmap (GtkWidget *widget);
+static void gtk_paned_unrealize (GtkWidget *widget);
+static gint gtk_paned_expose (GtkWidget *widget,
+ GdkEventExpose *event);
+static void gtk_paned_add (GtkContainer *container,
+ GtkWidget *widget);
+static void gtk_paned_remove (GtkContainer *container,
+ GtkWidget *widget);
+static void gtk_paned_forall (GtkContainer *container,
+ gboolean include_internals,
+ GtkCallback callback,
+ gpointer callback_data);
+static GtkType gtk_paned_child_type (GtkContainer *container);
static GtkContainerClass *parent_class = NULL;
@@ -76,9 +74,9 @@ gtk_paned_get_type (void)
(GtkObjectInitFunc) gtk_paned_init,
/* reserved_1 */ NULL,
/* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
+ (GtkClassInitFunc) NULL,
};
-
+
paned_type = gtk_type_unique (GTK_TYPE_CONTAINER, &paned_info);
}
@@ -91,13 +89,13 @@ gtk_paned_class_init (GtkPanedClass *class)
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
GtkContainerClass *container_class;
-
- object_class = (GtkObjectClass*) class;
- widget_class = (GtkWidgetClass*) class;
- container_class = (GtkContainerClass*) class;
-
+
+ object_class = (GtkObjectClass *) class;
+ widget_class = (GtkWidgetClass *) class;
+ container_class = (GtkContainerClass *) class;
+
parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
-
+
object_class->set_arg = gtk_paned_set_arg;
object_class->get_arg = gtk_paned_get_arg;
@@ -112,10 +110,8 @@ gtk_paned_class_init (GtkPanedClass *class)
container_class->forall = gtk_paned_forall;
container_class->child_type = gtk_paned_child_type;
- gtk_object_add_arg_type ("GtkPaned::handle_size", GTK_TYPE_UINT,
- GTK_ARG_READWRITE, ARG_HANDLE_SIZE);
- gtk_object_add_arg_type ("GtkPaned::gutter_size", GTK_TYPE_UINT,
- GTK_ARG_READWRITE, ARG_GUTTER_SIZE);
+ gtk_object_add_arg_type("GtkPaned::handle_size", GTK_TYPE_UINT,
+ GTK_ARG_READWRITE, ARG_HANDLE_SIZE);
}
static GtkType
@@ -136,9 +132,11 @@ gtk_paned_init (GtkPaned *paned)
paned->child2 = NULL;
paned->handle = NULL;
paned->xor_gc = NULL;
+ paned->cursor_type = GDK_CROSS;
- paned->handle_size = 10;
- paned->gutter_size = 6;
+ paned->handle_width = 5;
+ paned->handle_height = 5;
+ paned->handle_size = 5;
paned->position_set = FALSE;
paned->last_allocation = -1;
paned->in_drag = FALSE;
@@ -159,8 +157,7 @@ gtk_paned_set_arg (GtkObject *object,
case ARG_HANDLE_SIZE:
gtk_paned_set_handle_size (paned, GTK_VALUE_UINT (*arg));
break;
- case ARG_GUTTER_SIZE:
- gtk_paned_set_gutter_size (paned, GTK_VALUE_UINT (*arg));
+ default:
break;
}
}
@@ -171,15 +168,12 @@ gtk_paned_get_arg (GtkObject *object,
guint arg_id)
{
GtkPaned *paned = GTK_PANED (object);
-
+
switch (arg_id)
{
case ARG_HANDLE_SIZE:
GTK_VALUE_UINT (*arg) = paned->handle_size;
break;
- case ARG_GUTTER_SIZE:
- GTK_VALUE_UINT (*arg) = paned->gutter_size;
- break;
default:
arg->type = GTK_TYPE_INVALID;
break;
@@ -192,13 +186,13 @@ gtk_paned_realize (GtkWidget *widget)
GtkPaned *paned;
GdkWindowAttr attributes;
gint attributes_mask;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_PANED (widget));
-
+
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
paned = GTK_PANED (widget);
-
+
attributes.x = widget->allocation.x;
attributes.y = widget->allocation.y;
attributes.width = widget->allocation.width;
@@ -209,34 +203,34 @@ gtk_paned_realize (GtkWidget *widget)
attributes.colormap = gtk_widget_get_colormap (widget);
attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
- widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
+
+ widget->window = gdk_window_new (gtk_widget_get_parent_window(widget),
&attributes, attributes_mask);
gdk_window_set_user_data (widget->window, paned);
-
+
attributes.x = paned->handle_xpos;
attributes.y = paned->handle_ypos;
- attributes.width = paned->handle_size;
- attributes.height = paned->handle_size;
- attributes.cursor = gdk_cursor_new (GDK_CROSS);
+ attributes.width = paned->handle_width;
+ attributes.height = paned->handle_height;
+ attributes.cursor = gdk_cursor_new (paned->cursor_type);
attributes.event_mask |= (GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK);
attributes_mask |= GDK_WA_CURSOR;
-
+
paned->handle = gdk_window_new (widget->window,
&attributes, attributes_mask);
gdk_window_set_user_data (paned->handle, paned);
gdk_cursor_destroy (attributes.cursor);
-
+
widget->style = gtk_style_attach (widget->style, widget->window);
-
+
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
gtk_style_set_background (widget->style, paned->handle, GTK_STATE_NORMAL);
gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
-
+
gdk_window_show (paned->handle);
}
@@ -244,13 +238,13 @@ static void
gtk_paned_map (GtkWidget *widget)
{
GtkPaned *paned;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_PANED (widget));
-
+
GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
paned = GTK_PANED (widget);
-
+
if (paned->child1 &&
GTK_WIDGET_VISIBLE (paned->child1) &&
!GTK_WIDGET_MAPPED (paned->child1))
@@ -268,9 +262,9 @@ gtk_paned_unmap (GtkWidget *widget)
{
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_PANED (widget));
-
+
GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
-
+
gdk_window_hide (widget->window);
}
@@ -278,25 +272,25 @@ static void
gtk_paned_unrealize (GtkWidget *widget)
{
GtkPaned *paned;
-
+
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_PANED (widget));
-
+
paned = GTK_PANED (widget);
-
+
if (paned->xor_gc)
{
gdk_gc_destroy (paned->xor_gc);
paned->xor_gc = NULL;
}
-
+
if (paned->handle)
{
gdk_window_set_user_data (paned->handle, NULL);
gdk_window_destroy (paned->handle);
paned->handle = NULL;
}
-
+
if (GTK_WIDGET_CLASS (parent_class)->unrealize)
(* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
}
@@ -307,24 +301,21 @@ gtk_paned_expose (GtkWidget *widget,
{
GtkPaned *paned;
GdkEventExpose child_event;
-
+
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (GTK_IS_PANED (widget), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
-
+
if (GTK_WIDGET_DRAWABLE (widget))
{
paned = GTK_PANED (widget);
-
- /* An expose event for the handle */
+
if (event->window == paned->handle)
{
- gtk_paint_box (widget->style, paned->handle,
- GTK_WIDGET_STATE(widget),
- GTK_SHADOW_OUT,
- &event->area, widget, "paned",
- 0, 0,
- paned->handle_size, paned->handle_size);
+ child_event = *event;
+ event->area.x += paned->handle_xpos;
+ event->area.y += paned->handle_ypos;
+ gtk_widget_draw (widget, &event->area);
}
else
{
@@ -332,26 +323,21 @@ gtk_paned_expose (GtkWidget *widget,
if (paned->child1 &&
GTK_WIDGET_NO_WINDOW (paned->child1) &&
gtk_widget_intersect (paned->child1, &event->area, &child_event.area))
- gtk_widget_event (paned->child1, (GdkEvent*) &child_event);
-
+ gtk_widget_event (paned->child1, (GdkEvent *) &child_event);
+
if (paned->child2 &&
GTK_WIDGET_NO_WINDOW (paned->child2) &&
gtk_widget_intersect (paned->child2, &event->area, &child_event.area))
- gtk_widget_event (paned->child2, (GdkEvent*) &child_event);
-
- /* redraw the groove if necessary */
- if (gdk_rectangle_intersect (&paned->groove_rectangle,
- &event->area,
- &child_event.area))
- gtk_widget_draw (widget, &child_event.area);
+ gtk_widget_event (paned->child2, (GdkEvent *) &child_event);
}
}
+
return FALSE;
}
void
-gtk_paned_add1 (GtkPaned *paned,
- GtkWidget *widget)
+gtk_paned_add1 (GtkPaned *paned,
+ GtkWidget *widget)
{
gtk_paned_pack1 (paned, widget, FALSE, TRUE);
}
@@ -364,15 +350,15 @@ gtk_paned_add2 (GtkPaned *paned,
}
void
-gtk_paned_pack1 (GtkPaned *paned,
- GtkWidget *child,
- gboolean resize,
- gboolean shrink)
+gtk_paned_pack1 (GtkPaned *paned,
+ GtkWidget *child,
+ gboolean resize,
+ gboolean shrink)
{
g_return_if_fail (paned != NULL);
g_return_if_fail (GTK_IS_PANED (paned));
g_return_if_fail (GTK_IS_WIDGET (child));
-
+
if (!paned->child1)
{
paned->child1 = child;
@@ -403,13 +389,13 @@ gtk_paned_pack2 (GtkPaned *paned,
g_return_if_fail (paned != NULL);
g_return_if_fail (GTK_IS_PANED (paned));
g_return_if_fail (GTK_IS_WIDGET (child));
-
+
if (!paned->child2)
{
paned->child2 = child;
paned->child2_resize = resize;
paned->child2_shrink = shrink;
-
+
gtk_widget_set_parent (child, GTK_WIDGET (paned));
if (GTK_WIDGET_REALIZED (child->parent))
@@ -425,22 +411,23 @@ gtk_paned_pack2 (GtkPaned *paned,
}
}
+
static void
gtk_paned_add (GtkContainer *container,
GtkWidget *widget)
{
GtkPaned *paned;
-
+
g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_PANED (container));
g_return_if_fail (widget != NULL);
-
+
paned = GTK_PANED (container);
-
+
if (!paned->child1)
- gtk_paned_add1 (GTK_PANED (container),widget);
+ gtk_paned_add1 (GTK_PANED (container), widget);
else if (!paned->child2)
- gtk_paned_add2 (GTK_PANED (container),widget);
+ gtk_paned_add2 (GTK_PANED (container), widget);
}
static void
@@ -449,57 +436,57 @@ gtk_paned_remove (GtkContainer *container,
{
GtkPaned *paned;
gboolean was_visible;
-
+
g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_PANED (container));
g_return_if_fail (widget != NULL);
-
+
paned = GTK_PANED (container);
was_visible = GTK_WIDGET_VISIBLE (widget);
-
+
if (paned->child1 == widget)
{
gtk_widget_unparent (widget);
-
+
paned->child1 = NULL;
-
+
if (was_visible && GTK_WIDGET_VISIBLE (container))
- gtk_widget_queue_resize (GTK_WIDGET (container));
+ gtk_widget_queue_resize (GTK_WIDGET (container));
}
else if (paned->child2 == widget)
{
gtk_widget_unparent (widget);
-
+
paned->child2 = NULL;
-
+
if (was_visible && GTK_WIDGET_VISIBLE (container))
- gtk_widget_queue_resize (GTK_WIDGET (container));
+ gtk_widget_queue_resize (GTK_WIDGET (container));
}
}
static void
gtk_paned_forall (GtkContainer *container,
- gboolean include_internals,
+ gboolean include_internals,
GtkCallback callback,
gpointer callback_data)
{
GtkPaned *paned;
-
+
g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_PANED (container));
g_return_if_fail (callback != NULL);
-
+
paned = GTK_PANED (container);
-
+
if (paned->child1)
- (* callback) (paned->child1, callback_data);
+ (*callback) (paned->child1, callback_data);
if (paned->child2)
- (* callback) (paned->child2, callback_data);
+ (*callback) (paned->child2, callback_data);
}
void
-gtk_paned_set_position (GtkPaned *paned,
- gint position)
+gtk_paned_set_position (GtkPaned *paned,
+ gint position)
{
g_return_if_fail (paned != NULL);
g_return_if_fail (GTK_IS_PANED (paned));
@@ -516,7 +503,9 @@ gtk_paned_set_position (GtkPaned *paned,
paned->position_set = TRUE;
}
else
- paned->position_set = FALSE;
+ {
+ paned->position_set = FALSE;
+ }
gtk_widget_queue_resize (GTK_WIDGET (paned));
}
@@ -525,40 +514,19 @@ void
gtk_paned_set_handle_size (GtkPaned *paned,
guint16 size)
{
- gint x,y;
-
g_return_if_fail (paned != NULL);
g_return_if_fail (GTK_IS_PANED (paned));
- if (paned->handle)
- {
- gdk_window_get_geometry (paned->handle, &x, &y, NULL, NULL, NULL);
- gdk_window_move_resize (paned->handle,
- x + paned->handle_size / 2 - size / 2,
- y + paned->handle_size / 2 - size / 2,
- size, size);
- }
- paned->handle_size = size;
-}
-
-void
-gtk_paned_set_gutter_size (GtkPaned *paned,
- guint16 size)
-{
- g_return_if_fail (paned != NULL);
- g_return_if_fail (GTK_IS_PANED (paned));
+ gtk_widget_queue_resize (GTK_WIDGET (paned));
- paned->gutter_size = size;
-
- if (GTK_WIDGET_VISIBLE (GTK_WIDGET (paned)))
- gtk_widget_queue_resize (GTK_WIDGET (paned));
+ paned->handle_size = size;
}
void
-gtk_paned_compute_position (GtkPaned *paned,
- gint allocation,
- gint child1_req,
- gint child2_req)
+gtk_paned_compute_position(GtkPaned *paned,
+ gint allocation,
+ gint child1_req,
+ gint child2_req)
{
g_return_if_fail (paned != NULL);
g_return_if_fail (GTK_IS_PANED (paned));
@@ -576,7 +544,8 @@ gtk_paned_compute_position (GtkPaned *paned,
else if (!paned->child1_resize && paned->child2_resize)
paned->child1_size = child1_req;
else
- paned->child1_size = allocation * ((gdouble)child1_req / (child1_req + child2_req));
+ paned->child1_size = allocation * ((gdouble) child1_req /
+ (child1_req + child2_req));
}
else
{
@@ -586,9 +555,9 @@ gtk_paned_compute_position (GtkPaned *paned,
if (paned->last_allocation >= 0)
{
if (paned->child1_resize && !paned->child2_resize)
- paned->child1_size += (allocation - paned->last_allocation);
+ paned->child1_size += allocation - paned->last_allocation;
else if (!(!paned->child1_resize && paned->child2_resize))
- paned->child1_size = allocation * ((gdouble)paned->child1_size / (paned->last_allocation));
+ paned->child1_size = allocation * ((gdouble) paned->child1_size / (paned->last_allocation));
}
}
@@ -597,5 +566,4 @@ gtk_paned_compute_position (GtkPaned *paned,
paned->max_position);
paned->last_allocation = allocation;
-
}
diff --git a/gtk/gtkpaned.h b/gtk/gtkpaned.h
index 6c7cb06785..da0f520afe 100644
--- a/gtk/gtkpaned.h
+++ b/gtk/gtkpaned.h
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* GTK - The GIMP Toolkit
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
@@ -18,7 +19,7 @@
*/
/*
- * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
+ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GTK+ Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
@@ -27,11 +28,8 @@
#ifndef __GTK_PANED_H__
#define __GTK_PANED_H__
-
-#include <gdk/gdk.h>
#include <gtk/gtkcontainer.h>
-
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -45,8 +43,8 @@ extern "C" {
#define GTK_PANED_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_PANED, GtkPanedClass))
-typedef struct _GtkPaned GtkPaned;
-typedef struct _GtkPanedClass GtkPanedClass;
+typedef struct _GtkPaned GtkPaned;
+typedef struct _GtkPanedClass GtkPanedClass;
struct _GtkPaned
{
@@ -56,26 +54,28 @@ struct _GtkPaned
GtkWidget *child2;
GdkWindow *handle;
- GdkRectangle groove_rectangle;
GdkGC *xor_gc;
-
+ GdkCursorType cursor_type;
+
/*< public >*/
guint16 handle_size;
- guint16 gutter_size;
-
+
/*< private >*/
+ guint16 handle_width;
+ guint16 handle_height;
+
gint child1_size;
gint last_allocation;
gint min_position;
gint max_position;
-
+
guint position_set : 1;
guint in_drag : 1;
guint child1_shrink : 1;
guint child1_resize : 1;
guint child2_shrink : 1;
guint child2_resize : 1;
-
+
gint16 handle_xpos;
gint16 handle_ypos;
};
@@ -101,20 +101,16 @@ void gtk_paned_pack2 (GtkPaned *paned,
gboolean shrink);
void gtk_paned_set_position (GtkPaned *paned,
gint position);
-void gtk_paned_set_handle_size (GtkPaned *paned,
- guint16 size);
-void gtk_paned_set_gutter_size (GtkPaned *paned,
- guint16 size);
+void gtk_paned_set_handle_size (GtkPaned *paned,
+ guint16 size);
/* Internal function */
-void gtk_paned_compute_position (GtkPaned *paned,
- gint allocation,
- gint child1_req,
- gint child2_req);
-
+void gtk_paned_compute_position (GtkPaned *paned,
+ gint allocation,
+ gint child1_req,
+ gint child2_req);
#ifdef __cplusplus
}
#endif /* __cplusplus */
-
#endif /* __GTK_PANED_H__ */
diff --git a/gtk/gtkvpaned.c b/gtk/gtkvpaned.c
index ece7f19486..30b3ac4fa3 100644
--- a/gtk/gtkvpaned.c
+++ b/gtk/gtkvpaned.c
@@ -25,24 +25,22 @@
*/
#include "gtkvpaned.h"
-#include "gtkmain.h"
-#include "gtksignal.h"
-
-static void gtk_vpaned_class_init (GtkVPanedClass *klass);
-static void gtk_vpaned_init (GtkVPaned *vpaned);
-static void gtk_vpaned_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
-static void gtk_vpaned_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
-static void gtk_vpaned_draw (GtkWidget *widget,
- GdkRectangle *area);
-static void gtk_vpaned_xor_line (GtkPaned *paned);
-static gint gtk_vpaned_button_press (GtkWidget *widget,
- GdkEventButton *event);
-static gint gtk_vpaned_button_release (GtkWidget *widget,
- GdkEventButton *event);
-static gint gtk_vpaned_motion (GtkWidget *widget,
- GdkEventMotion *event);
+
+static void gtk_vpaned_class_init (GtkVPanedClass *klass);
+static void gtk_vpaned_init (GtkVPaned *vpaned);
+static void gtk_vpaned_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void gtk_vpaned_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static void gtk_vpaned_draw (GtkWidget *widget,
+ GdkRectangle *area);
+static void gtk_vpaned_xor_line (GtkPaned *paned);
+static gboolean gtk_vpaned_button_press (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean gtk_vpaned_button_release (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean gtk_vpaned_motion (GtkWidget *widget,
+ GdkEventMotion *event);
GtkType
gtk_vpaned_get_type (void)
@@ -59,11 +57,11 @@ gtk_vpaned_get_type (void)
(GtkClassInitFunc) gtk_vpaned_class_init,
(GtkObjectInitFunc) gtk_vpaned_init,
/* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
};
- vpaned_type = gtk_type_unique (GTK_TYPE_PANED, &vpaned_info);
+ vpaned_type = gtk_type_unique(gtk_paned_get_type(), &vpaned_info);
}
return vpaned_type;
@@ -74,7 +72,7 @@ gtk_vpaned_class_init (GtkVPanedClass *class)
{
GtkWidgetClass *widget_class;
- widget_class = (GtkWidgetClass*) class;
+ widget_class = (GtkWidgetClass *) class;
widget_class->size_request = gtk_vpaned_size_request;
widget_class->size_allocate = gtk_vpaned_size_allocate;
@@ -87,9 +85,17 @@ gtk_vpaned_class_init (GtkVPanedClass *class)
static void
gtk_vpaned_init (GtkVPaned *vpaned)
{
+ GtkPaned *paned;
+
+ g_return_if_fail (vpaned != NULL);
+ g_return_if_fail (GTK_IS_PANED (vpaned));
+
+ paned = GTK_PANED (vpaned);
+
+ paned->cursor_type = GDK_SB_V_DOUBLE_ARROW;
}
-GtkWidget*
+GtkWidget *
gtk_vpaned_new (void)
{
GtkVPaned *vpaned;
@@ -130,7 +136,7 @@ gtk_vpaned_size_request (GtkWidget *widget,
requisition->height += child_requisition.height;
}
- requisition->height += GTK_CONTAINER (paned)->border_width * 2 + paned->gutter_size;
+ requisition->height += GTK_CONTAINER (paned)->border_width * 2 + paned->handle_size;
requisition->width += GTK_CONTAINER (paned)->border_width * 2;
}
@@ -143,7 +149,6 @@ gtk_vpaned_size_allocate (GtkWidget *widget,
GtkRequisition child2_requisition;
GtkAllocation child1_allocation;
GtkAllocation child2_allocation;
- GdkRectangle old_groove_rectangle;
guint16 border_width;
g_return_if_fail (widget != NULL);
@@ -164,85 +169,65 @@ gtk_vpaned_size_allocate (GtkWidget *widget,
gtk_widget_get_child_requisition (paned->child2, &child2_requisition);
else
child2_requisition.height = 0;
-
- gtk_paned_compute_position (paned,
- widget->allocation.height
- - paned->gutter_size
- - 2 * border_width,
- child1_requisition.height,
- child2_requisition.height);
+
+ gtk_paned_compute_position(paned,
+ widget->allocation.height
+ - paned->handle_size
+ - 2 * border_width,
+ child1_requisition.height,
+ child2_requisition.height);
/* Move the handle before the children so we don't get extra expose events */
- paned->handle_xpos = allocation->width - border_width - 2 * paned->handle_size;
- paned->handle_ypos = paned->child1_size + border_width + paned->gutter_size / 2 - paned->handle_size / 2;
+ paned->handle_xpos = 0;
+ paned->handle_ypos = paned->child1_size + border_width;
+ paned->handle_width = widget->allocation.width;
+ paned->handle_height = paned->handle_size;
- if (GTK_WIDGET_REALIZED (widget))
+ if (GTK_WIDGET_REALIZED(widget))
{
gdk_window_move_resize (widget->window,
allocation->x, allocation->y,
- allocation->width, allocation->height);
-
- gdk_window_move (paned->handle, paned->handle_xpos, paned->handle_ypos);
+ allocation->width,
+ allocation->height);
+
+ gdk_window_move_resize (paned->handle,
+ paned->handle_xpos,
+ paned->handle_ypos,
+ paned->handle_width,
+ paned->handle_size);
}
- child1_allocation.width = child2_allocation.width = MAX (1, (gint)allocation->width - border_width * 2);
+ child1_allocation.width = child2_allocation.width = MAX(1, (gint) allocation->width - border_width * 2);
child1_allocation.height = paned->child1_size;
child1_allocation.x = child2_allocation.x = border_width;
child1_allocation.y = border_width;
-
- old_groove_rectangle = paned->groove_rectangle;
-
- paned->groove_rectangle.y = child1_allocation.y
- + child1_allocation.height + paned->gutter_size / 2 - 1;
- paned->groove_rectangle.x = 0;
- paned->groove_rectangle.height = 2;
- paned->groove_rectangle.width = allocation->width;
-
- if (GTK_WIDGET_DRAWABLE (widget) &&
- ((paned->groove_rectangle.x != old_groove_rectangle.x) ||
- (paned->groove_rectangle.y != old_groove_rectangle.y) ||
- (paned->groove_rectangle.width != old_groove_rectangle.width) ||
- (paned->groove_rectangle.height != old_groove_rectangle.height)))
- {
- gtk_widget_queue_clear_area (widget,
- old_groove_rectangle.x,
- old_groove_rectangle.y,
- old_groove_rectangle.width,
- old_groove_rectangle.height);
- gtk_widget_queue_draw_area (widget,
- paned->groove_rectangle.x,
- paned->groove_rectangle.y,
- paned->groove_rectangle.width,
- paned->groove_rectangle.height);
- }
-
- child2_allocation.y = paned->groove_rectangle.y + paned->gutter_size / 2 + 1;
- child2_allocation.height = MAX (1, (gint)allocation->height
- - child2_allocation.y - border_width);
-
+
+ child2_allocation.y = child1_allocation.y + child1_allocation.height + paned->handle_height;
+ child2_allocation.height = MAX(1, (gint) allocation->height - child2_allocation.y - border_width);
+
/* Now allocate the childen, making sure, when resizing not to
* overlap the windows */
- if (GTK_WIDGET_MAPPED(widget) &&
+ if (GTK_WIDGET_MAPPED (widget) &&
paned->child1 && GTK_WIDGET_VISIBLE (paned->child1) &&
paned->child1->allocation.height < child1_allocation.height)
{
if (paned->child2 && GTK_WIDGET_VISIBLE (paned->child2))
- gtk_widget_size_allocate (paned->child2, &child2_allocation);
- gtk_widget_size_allocate (paned->child1, &child1_allocation);
+ gtk_widget_size_allocate(paned->child2, &child2_allocation);
+ gtk_widget_size_allocate(paned->child1, &child1_allocation);
}
else
{
if (paned->child1 && GTK_WIDGET_VISIBLE (paned->child1))
- gtk_widget_size_allocate (paned->child1, &child1_allocation);
+ gtk_widget_size_allocate(paned->child1, &child1_allocation);
if (paned->child2 && GTK_WIDGET_VISIBLE (paned->child2))
- gtk_widget_size_allocate (paned->child2, &child2_allocation);
+ gtk_widget_size_allocate(paned->child2, &child2_allocation);
}
}
static void
gtk_vpaned_draw (GtkWidget *widget,
- GdkRectangle *area)
+ GdkRectangle *area)
{
GtkPaned *paned;
GdkRectangle handle_area, child_area;
@@ -253,51 +238,95 @@ gtk_vpaned_draw (GtkWidget *widget,
if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget))
{
- gint width, height;
-
paned = GTK_PANED (widget);
border_width = GTK_CONTAINER (paned)->border_width;
gdk_window_clear_area (widget->window,
- area->x, area->y, area->width, area->height);
+ area->x, area->y, area->width,
+ area->height);
- /* Redraw the handle
- */
- gdk_window_get_size (paned->handle, &width, &height);
-
handle_area.x = paned->handle_xpos;
handle_area.y = paned->handle_ypos;
- handle_area.width = width;
- handle_area.height = height;
+ handle_area.width = paned->handle_height;
+ handle_area.height = paned->handle_size;
if (gdk_rectangle_intersect (&handle_area, area, &child_area))
{
- child_area.x -= handle_area.x;
- child_area.y -= handle_area.y;
- gtk_paint_box (widget->style, paned->handle,
- GTK_WIDGET_STATE(widget),
- GTK_SHADOW_OUT,
- &child_area, widget, "paned",
- 0, 0,
- width, height);
+ if (widget->allocation.height > 2)
+ {
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_width/2,
+ paned->handle_size/2);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_width/2 - 1,
+ paned->handle_size/2 - 1);
+ }
+ if (widget->allocation.height > 11)
+ {
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_width/2 + 5,
+ paned->handle_size/2);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_width/2 + 4,
+ paned->handle_size/2 - 1);
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_width/2 - 5,
+ paned->handle_size/2);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_width/2 - 6,
+ paned->handle_size/2 - 1);
+ }
+ if (widget->allocation.height > 20)
+ {
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_width/2 - 10,
+ paned->handle_size/2);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_width/2 - 11,
+ paned->handle_size/2 - 1);
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_width/2 + 10,
+ paned->handle_size/2);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_width/2 + 9,
+ paned->handle_size/2 - 1);
+ }
+ if (widget->allocation.height > 30)
+ {
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_width/2 - 15,
+ paned->handle_size/2);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_width/2 - 16,
+ paned->handle_size/2 - 1);
+ gdk_draw_point (paned->handle,
+ widget->style->fg_gc[GTK_STATE_NORMAL],
+ paned->handle_width/2 + 15,
+ paned->handle_size/2);
+ gdk_draw_point (paned->handle,
+ widget->style->bg_gc[GTK_STATE_PRELIGHT],
+ paned->handle_width/2 + 14,
+ paned->handle_size/2 - 1);
+ }
}
-
- /* Redraw the groove
- */
- gtk_paint_hline(widget->style, widget->window, GTK_STATE_NORMAL,
- area, widget, "vpaned",
- 0, widget->allocation.width - 1,
- border_width + paned->child1_size + paned->gutter_size / 2 - 1);
-
/* Redraw the children
*/
- if (paned->child1 &&
- gtk_widget_intersect (paned->child1, area, &child_area))
- gtk_widget_draw (paned->child1, &child_area);
- if (paned->child2 &&
- gtk_widget_intersect (paned->child2, area, &child_area))
- gtk_widget_draw (paned->child2, &child_area);
-
+ if (paned->child1 && gtk_widget_intersect (paned->child1, area, &child_area))
+ gtk_widget_draw (paned->child1, &child_area);
+ if (paned->child2 && gtk_widget_intersect (paned->child2, area, &child_area))
+ gtk_widget_draw (paned->child2, &child_area);
}
}
@@ -308,7 +337,7 @@ gtk_vpaned_xor_line (GtkPaned *paned)
GdkGCValues values;
guint16 ypos;
- widget = GTK_WIDGET(paned);
+ widget = GTK_WIDGET (paned);
if (!paned->xor_gc)
{
@@ -316,12 +345,14 @@ gtk_vpaned_xor_line (GtkPaned *paned)
values.subwindow_mode = GDK_INCLUDE_INFERIORS;
paned->xor_gc = gdk_gc_new_with_values (widget->window,
&values,
- GDK_GC_FUNCTION |
- GDK_GC_SUBWINDOW);
+ GDK_GC_FUNCTION | GDK_GC_SUBWINDOW);
}
+ gdk_gc_set_line_attributes (paned->xor_gc, 2, GDK_LINE_SOLID,
+ GDK_CAP_NOT_LAST, GDK_JOIN_BEVEL);
+
ypos = paned->child1_size
- + GTK_CONTAINER (paned)->border_width + paned->gutter_size / 2;
+ + GTK_CONTAINER (paned)->border_width + paned->handle_size / 2;
gdk_draw_line (widget->window, paned->xor_gc,
0,
@@ -330,13 +361,14 @@ gtk_vpaned_xor_line (GtkPaned *paned)
ypos);
}
-static gint
-gtk_vpaned_button_press (GtkWidget *widget, GdkEventButton *event)
+static gboolean
+gtk_vpaned_button_press (GtkWidget *widget,
+ GdkEventButton *event)
{
GtkPaned *paned;
- g_return_val_if_fail (widget != NULL,FALSE);
- g_return_val_if_fail (GTK_IS_PANED (widget),FALSE);
+ g_return_val_if_fail (widget != NULL, FALSE);
+ g_return_val_if_fail (GTK_IS_PANED (widget), FALSE);
paned = GTK_PANED (widget);
@@ -347,22 +379,26 @@ gtk_vpaned_button_press (GtkWidget *widget, GdkEventButton *event)
/* We need a server grab here, not gtk_grab_add(), since
* we don't want to pass events on to the widget's children */
gdk_pointer_grab (paned->handle, FALSE,
- GDK_POINTER_MOTION_HINT_MASK
- | GDK_BUTTON1_MOTION_MASK
- | GDK_BUTTON_RELEASE_MASK,
- NULL, NULL, event->time);
+ GDK_POINTER_MOTION_HINT_MASK
+ | GDK_BUTTON1_MOTION_MASK
+ | GDK_BUTTON_RELEASE_MASK, NULL, NULL,
+ event->time);
paned->child1_size += event->y - paned->handle_size / 2;
paned->child1_size = CLAMP (paned->child1_size, 0,
- widget->allocation.height - paned->gutter_size
- - 2 * GTK_CONTAINER (paned)->border_width);
- gtk_vpaned_xor_line (paned);
+ widget->allocation.height -
+ paned->handle_size -
+ 2 * GTK_CONTAINER (paned)->border_width);
+ gtk_vpaned_xor_line(paned);
+
+ return TRUE;
}
- return TRUE;
+ return FALSE;
}
-static gint
-gtk_vpaned_button_release (GtkWidget *widget, GdkEventButton *event)
+static gboolean
+gtk_vpaned_button_release (GtkWidget *widget,
+ GdkEventButton *event)
{
GtkPaned *paned;
@@ -378,13 +414,16 @@ gtk_vpaned_button_release (GtkWidget *widget, GdkEventButton *event)
paned->position_set = TRUE;
gdk_pointer_ungrab (event->time);
gtk_widget_queue_resize (GTK_WIDGET (paned));
+
+ return TRUE;
}
- return TRUE;
+ return FALSE;
}
-static gint
-gtk_vpaned_motion (GtkWidget *widget, GdkEventMotion *event)
+static gboolean
+gtk_vpaned_motion (GtkWidget *widget,
+ GdkEventMotion *event)
{
GtkPaned *paned;
gint y;
@@ -393,21 +432,19 @@ gtk_vpaned_motion (GtkWidget *widget, GdkEventMotion *event)
g_return_val_if_fail (GTK_IS_PANED (widget), FALSE);
if (event->is_hint || event->window != widget->window)
- gtk_widget_get_pointer(widget, NULL, &y);
+ gtk_widget_get_pointer (widget, NULL, &y);
else
- y = event->y;
+ y = event->y;
paned = GTK_PANED (widget);
if (paned->in_drag)
{
- gint size = y - GTK_CONTAINER (paned)->border_width - paned->gutter_size/2;
-
- gtk_vpaned_xor_line (paned);
- paned->child1_size = CLAMP (size,
- paned->min_position,
- paned->max_position);
+ gint size = y - GTK_CONTAINER(paned)->border_width - paned->handle_size / 2;
+
gtk_vpaned_xor_line (paned);
+ paned->child1_size = CLAMP (size, paned->min_position, paned->max_position);
+ gtk_vpaned_xor_line(paned);
}
return TRUE;
diff --git a/gtk/gtkvpaned.h b/gtk/gtkvpaned.h
index 08382ee9ab..9edce840d5 100644
--- a/gtk/gtkvpaned.h
+++ b/gtk/gtkvpaned.h
@@ -18,7 +18,7 @@
*/
/*
- * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
+ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GTK+ Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
@@ -27,11 +27,8 @@
#ifndef __GTK_VPANED_H__
#define __GTK_VPANED_H__
-
-#include <gdk/gdk.h>
#include <gtk/gtkpaned.h>
-
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -45,8 +42,8 @@ extern "C" {
#define GTK_VPANED_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_VPANED, GtkVPanedClass))
-typedef struct _GtkVPaned GtkVPaned;
-typedef struct _GtkVPanedClass GtkVPanedClass;
+typedef struct _GtkVPaned GtkVPaned;
+typedef struct _GtkVPanedClass GtkVPanedClass;
struct _GtkVPaned
{
@@ -58,14 +55,12 @@ struct _GtkVPanedClass
GtkPanedClass parent_class;
};
-
GtkType gtk_vpaned_get_type (void);
-GtkWidget* gtk_vpaned_new (void);
+GtkWidget *gtk_vpaned_new (void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
-
#endif /* __GTK_VPANED_H__ */