diff options
author | Owen Taylor <otaylor@redhat.com> | 2001-11-16 15:20:28 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2001-11-16 15:20:28 +0000 |
commit | 1431d7658e51bc1d4ec1b7aeb546cbca41005827 (patch) | |
tree | f73b8048507f8d2aad5c3bcce0a20d261af642a8 /gtk/gtkpaned.c | |
parent | e8eb7a4094fa94358ef5f0025800c04197bcd35e (diff) | |
download | gtk+-1431d7658e51bc1d4ec1b7aeb546cbca41005827.tar.gz |
Make Menu items NO_WINDOW widgets.
Fri Nov 16 00:16:40 2001 Owen Taylor <otaylor@redhat.com>
* gtk/{gtkmenuitem.[ch],gtkcheckmenuitem.c,gtkimagemenuitem.c,
gtkradiomenuitem.c,gtktearoffmenuitem.c}: Make Menu items
NO_WINDOW widgets.
* gtk/gtk{h,v,}paned.[ch]: Make NO_WINDOW widgets, some
cleanup.
* gtk/gtkstyle.c (gtk_default_draw_handle): Don't assume
we are drawing in a window when drawing the paned handle.
Diffstat (limited to 'gtk/gtkpaned.c')
-rw-r--r-- | gtk/gtkpaned.c | 97 |
1 files changed, 64 insertions, 33 deletions
diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index 9c46b33f0f..85cb4cfb6a 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -45,6 +45,8 @@ static void gtk_paned_get_property (GObject *object, GParamSpec *pspec); static void gtk_paned_realize (GtkWidget *widget); static void gtk_paned_unrealize (GtkWidget *widget); +static void gtk_paned_map (GtkWidget *widget); +static void gtk_paned_unmap (GtkWidget *widget); static gint gtk_paned_expose (GtkWidget *widget, GdkEventExpose *event); static void gtk_paned_add (GtkContainer *container, @@ -103,6 +105,8 @@ gtk_paned_class_init (GtkPanedClass *class) widget_class->realize = gtk_paned_realize; widget_class->unrealize = gtk_paned_unrealize; + widget_class->map = gtk_paned_map; + widget_class->unmap = gtk_paned_unmap; widget_class->expose_event = gtk_paned_expose; container_class->add = gtk_paned_add; @@ -149,7 +153,7 @@ gtk_paned_child_type (GtkContainer *container) static void gtk_paned_init (GtkPaned *paned) { - GTK_WIDGET_UNSET_FLAGS (paned, GTK_NO_WINDOW); + GTK_WIDGET_SET_FLAGS (paned, GTK_NO_WINDOW); paned->child1 = NULL; paned->child2 = NULL; @@ -157,14 +161,14 @@ gtk_paned_init (GtkPaned *paned) paned->xor_gc = NULL; paned->cursor_type = GDK_CROSS; - paned->handle_width = 5; - paned->handle_height = 5; + paned->handle_pos.width = 5; + paned->handle_pos.height = 5; paned->position_set = FALSE; paned->last_allocation = -1; paned->in_drag = FALSE; - paned->handle_xpos = -1; - paned->handle_ypos = -1; + paned->handle_pos.x = -1; + paned->handle_pos.y = -1; } static void @@ -224,31 +228,21 @@ gtk_paned_realize (GtkWidget *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; - attributes.height = widget->allocation.height; + widget->window = gtk_widget_get_parent_window (widget); + gdk_window_ref (widget->window); + attributes.window_type = GDK_WINDOW_CHILD; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.visual = gtk_widget_get_visual (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), - &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_width; - attributes.height = paned->handle_height; + attributes.wclass = GDK_INPUT_ONLY; + attributes.x = paned->handle_pos.x; + attributes.y = paned->handle_pos.y; + attributes.width = paned->handle_pos.width; + attributes.height = paned->handle_pos.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; + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_CURSOR; paned->handle = gdk_window_new (widget->window, &attributes, attributes_mask); @@ -257,11 +251,6 @@ gtk_paned_realize (GtkWidget *widget) 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); - if (paned->child1 && GTK_WIDGET_VISIBLE (paned->child1) && paned->child2 && GTK_WIDGET_VISIBLE (paned->child2)) gdk_window_show (paned->handle); @@ -293,7 +282,29 @@ gtk_paned_unrealize (GtkWidget *widget) (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); } +static void +gtk_paned_map (GtkWidget *widget) +{ + GtkPaned *paned = GTK_PANED (widget); + + g_return_if_fail (GTK_IS_PANED (widget)); + + gdk_window_show (paned->handle); + + GTK_WIDGET_CLASS (parent_class)->map (widget); +} + +static void +gtk_paned_unmap (GtkWidget *widget) +{ + GtkPaned *paned = GTK_PANED (widget); + + g_return_if_fail (GTK_IS_PANED (widget)); + + gdk_window_hide (paned->handle); + GTK_WIDGET_CLASS (parent_class)->unmap (widget); +} static gint gtk_paned_expose (GtkWidget *widget, @@ -302,14 +313,34 @@ gtk_paned_expose (GtkWidget *widget, GtkPaned *paned; g_return_val_if_fail (GTK_IS_PANED (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - if (GTK_WIDGET_DRAWABLE (widget)) + if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget)) { + GdkRegion *region; + paned = GTK_PANED (widget); + + region = gdk_region_rectangle (&paned->handle_pos); + gdk_region_intersect (region, event->region); + + if (!gdk_region_empty (region)) + { + GdkRectangle clip; + + gdk_region_get_clipbox (region, &clip); + + gtk_paint_handle (widget->style, widget->window, + GTK_STATE_NORMAL, GTK_SHADOW_NONE, + &clip, widget, "paned", + paned->handle_pos.x, paned->handle_pos.y, + paned->handle_pos.width, paned->handle_pos.height, + paned->orientation); + } - if (event->window != paned->handle) - (* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event); + gdk_region_destroy (region); + + /* Chain up to draw children */ + GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event); } return FALSE; |