[gtk+/resizegrips] Remove all resize grip handling from GtkStatusbar
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/resizegrips] Remove all resize grip handling from GtkStatusbar
- Date: Thu, 30 Sep 2010 18:06:53 +0000 (UTC)
commit 109478682ac56e388604c4207579947dc6c1a442
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Sep 30 14:03:08 2010 -0400
Remove all resize grip handling from GtkStatusbar
gtk/gtk.symbols | 2 -
gtk/gtkstatusbar.c | 597 ----------------------------------------------------
gtk/gtkstatusbar.h | 5 -
3 files changed, 0 insertions(+), 604 deletions(-)
---
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index fd43fc7..451ff3e 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -3096,7 +3096,6 @@ gtk_spinner_stop
#if IN_HEADER(__GTK_STATUSBAR_H__)
#if IN_FILE(__GTK_STATUSBAR_C__)
gtk_statusbar_get_context_id
-gtk_statusbar_get_has_resize_grip
gtk_statusbar_get_message_area
gtk_statusbar_get_type G_GNUC_CONST
gtk_statusbar_new
@@ -3104,7 +3103,6 @@ gtk_statusbar_pop
gtk_statusbar_push
gtk_statusbar_remove
gtk_statusbar_remove_all
-gtk_statusbar_set_has_resize_grip
#endif
#endif
diff --git a/gtk/gtkstatusbar.c b/gtk/gtkstatusbar.c
index d5e84f2..f71dd83 100644
--- a/gtk/gtkstatusbar.c
+++ b/gtk/gtkstatusbar.c
@@ -45,9 +45,6 @@
* status (as is usually the case in a web browser, for example), or may be
* used to simply output a message when the status changes, (when an upload
* is complete in an FTP client, for example).
- * It may also have a resize grip (a triangular area in the lower right
- * corner) which can be clicked on to resize the window containing the
- * statusbar.
*
* Status bars in GTK+ maintain a stack of messages. The message at
* the top of the each bar's stack is the one that will currently be displayed.
@@ -80,15 +77,11 @@ struct _GtkStatusbarPrivate
GtkWidget *frame;
GtkWidget *label;
- GdkWindow *grip_window;
-
GSList *messages;
GSList *keys;
guint seq_context_id;
guint seq_message_id;
-
- guint has_resize_grip : 1;
};
@@ -106,12 +99,6 @@ enum
SIGNAL_LAST
};
-enum
-{
- PROP_0,
- PROP_HAS_RESIZE_GRIP
-};
-
static void gtk_statusbar_buildable_interface_init (GtkBuildableIface *iface);
static GObject *gtk_statusbar_buildable_get_internal_child (GtkBuildable *buildable,
GtkBuilder *builder,
@@ -120,37 +107,6 @@ static void gtk_statusbar_update (GtkStatusbar *statusbar,
guint context_id,
const gchar *text);
static void gtk_statusbar_destroy (GtkWidget *widget);
-static void gtk_statusbar_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
-static void gtk_statusbar_realize (GtkWidget *widget);
-static void gtk_statusbar_unrealize (GtkWidget *widget);
-static void gtk_statusbar_map (GtkWidget *widget);
-static void gtk_statusbar_unmap (GtkWidget *widget);
-static gboolean gtk_statusbar_button_press (GtkWidget *widget,
- GdkEventButton *event);
-static gboolean gtk_statusbar_draw (GtkWidget *widget,
- cairo_t *cr);
-static void gtk_statusbar_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
-static void gtk_statusbar_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
-static void gtk_statusbar_direction_changed (GtkWidget *widget,
- GtkTextDirection prev_dir);
-static void gtk_statusbar_state_changed (GtkWidget *widget,
- GtkStateType previous_state);
-static void gtk_statusbar_create_window (GtkStatusbar *statusbar);
-static void gtk_statusbar_destroy_window (GtkStatusbar *statusbar);
-static void gtk_statusbar_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void gtk_statusbar_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void label_selectable_changed (GtkWidget *label,
- GParamSpec *pspec,
- gpointer data);
static guint statusbar_signals[SIGNAL_LAST] = { 0 };
@@ -168,38 +124,10 @@ gtk_statusbar_class_init (GtkStatusbarClass *class)
gobject_class = (GObjectClass *) class;
widget_class = (GtkWidgetClass *) class;
- gobject_class->set_property = gtk_statusbar_set_property;
- gobject_class->get_property = gtk_statusbar_get_property;
-
widget_class->destroy = gtk_statusbar_destroy;
- widget_class->realize = gtk_statusbar_realize;
- widget_class->unrealize = gtk_statusbar_unrealize;
- widget_class->map = gtk_statusbar_map;
- widget_class->unmap = gtk_statusbar_unmap;
- widget_class->button_press_event = gtk_statusbar_button_press;
- widget_class->draw = gtk_statusbar_draw;
- widget_class->size_request = gtk_statusbar_size_request;
- widget_class->size_allocate = gtk_statusbar_size_allocate;
- widget_class->direction_changed = gtk_statusbar_direction_changed;
- widget_class->state_changed = gtk_statusbar_state_changed;
class->text_pushed = gtk_statusbar_update;
class->text_popped = gtk_statusbar_update;
-
- /**
- * GtkStatusbar:has-resize-grip:
- *
- * Whether the statusbar has a grip for resizing the toplevel window.
- *
- * Since: 2.4
- */
- g_object_class_install_property (gobject_class,
- PROP_HAS_RESIZE_GRIP,
- g_param_spec_boolean ("has-resize-grip",
- P_("Has Resize Grip"),
- P_("Whether the statusbar has a grip for resizing the toplevel"),
- TRUE,
- GTK_PARAM_READWRITE));
/**
* GtkStatusbar::text-pushed:
@@ -268,8 +196,6 @@ gtk_statusbar_init (GtkStatusbar *statusbar)
gtk_box_set_spacing (box, 2);
gtk_box_set_homogeneous (box, FALSE);
- priv->has_resize_grip = TRUE;
-
gtk_widget_style_get (GTK_WIDGET (statusbar), "shadow-type", &shadow_type, NULL);
priv->frame = gtk_frame_new (NULL);
@@ -284,8 +210,6 @@ gtk_statusbar_init (GtkStatusbar *statusbar)
priv->label = gtk_label_new ("");
gtk_label_set_single_line_mode (GTK_LABEL (priv->label), TRUE);
gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.5);
- g_signal_connect (priv->label, "notify::selectable",
- G_CALLBACK (label_selectable_changed), statusbar);
gtk_label_set_ellipsize (GTK_LABEL (priv->label), PANGO_ELLIPSIZE_END);
gtk_container_add (GTK_CONTAINER (message_area), priv->label);
gtk_widget_show (priv->label);
@@ -608,64 +532,6 @@ gtk_statusbar_remove_all (GtkStatusbar *statusbar,
}
/**
- * gtk_statusbar_set_has_resize_grip:
- * @statusbar: a #GtkStatusBar
- * @setting: %TRUE to have a resize grip
- *
- * Sets whether the statusbar has a resize grip.
- * %TRUE by default.
- */
-void
-gtk_statusbar_set_has_resize_grip (GtkStatusbar *statusbar,
- gboolean setting)
-{
- GtkStatusbarPrivate *priv;
-
- g_return_if_fail (GTK_IS_STATUSBAR (statusbar));
-
- priv = statusbar->priv;
-
- setting = setting != FALSE;
-
- if (setting != priv->has_resize_grip)
- {
- priv->has_resize_grip = setting;
- gtk_widget_queue_resize (priv->label);
- gtk_widget_queue_draw (GTK_WIDGET (statusbar));
-
- if (gtk_widget_get_realized (GTK_WIDGET (statusbar)))
- {
- if (priv->has_resize_grip && priv->grip_window == NULL)
- {
- gtk_statusbar_create_window (statusbar);
- if (gtk_widget_get_mapped (GTK_WIDGET (statusbar)))
- gdk_window_show (priv->grip_window);
- }
- else if (!priv->has_resize_grip && priv->grip_window != NULL)
- gtk_statusbar_destroy_window (statusbar);
- }
-
- g_object_notify (G_OBJECT (statusbar), "has-resize-grip");
- }
-}
-
-/**
- * gtk_statusbar_get_has_resize_grip:
- * @statusbar: a #GtkStatusBar
- *
- * Returns whether the statusbar has a resize grip.
- *
- * Returns: %TRUE if the statusbar has a resize grip.
- */
-gboolean
-gtk_statusbar_get_has_resize_grip (GtkStatusbar *statusbar)
-{
- g_return_val_if_fail (GTK_IS_STATUSBAR (statusbar), FALSE);
-
- return statusbar->priv->has_resize_grip;
-}
-
-/**
* gtk_statusbar_get_message_area:
* @statusbar: a #GtkStatusBar
*
@@ -712,466 +578,3 @@ gtk_statusbar_destroy (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->destroy (widget);
}
-
-static void
-gtk_statusbar_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (object);
-
- switch (prop_id)
- {
- case PROP_HAS_RESIZE_GRIP:
- gtk_statusbar_set_has_resize_grip (statusbar, g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gtk_statusbar_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (object);
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- switch (prop_id)
- {
- case PROP_HAS_RESIZE_GRIP:
- g_value_set_boolean (value, priv->has_resize_grip);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GdkWindowEdge
-get_grip_edge (GtkStatusbar *statusbar)
-{
- GtkWidget *widget = GTK_WIDGET (statusbar);
-
- if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
- return GDK_WINDOW_EDGE_SOUTH_EAST;
- else
- return GDK_WINDOW_EDGE_SOUTH_WEST;
-}
-
-static void
-get_grip_rect (GtkStatusbar *statusbar,
- gboolean include_allocation_offset,
- GdkRectangle *rect)
-{
- GtkAllocation allocation;
- GtkStyle *style;
- GtkWidget *widget = GTK_WIDGET (statusbar);
- gint w, h;
-
- gtk_widget_get_allocation (widget, &allocation);
- style = gtk_widget_get_style (widget);
-
- /* These are in effect the max/default size of the grip. */
- w = 18;
- h = 18;
-
- if (w > allocation.width)
- w = allocation.width;
-
- if (h > allocation.height - style->ythickness)
- h = allocation.height - style->ythickness;
-
- rect->width = w;
- rect->height = h;
- rect->y = allocation.height - h;
-
- if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
- rect->x = allocation.width - w;
- else
- rect->x = style->xthickness;
-
- if (include_allocation_offset)
- {
- rect->x += allocation.x;
- rect->y += allocation.y;
- }
-}
-
-static void
-set_grip_cursor (GtkStatusbar *statusbar)
-{
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- if (priv->has_resize_grip && priv->grip_window != NULL)
- {
- GtkWidget *widget = GTK_WIDGET (statusbar);
- GdkDisplay *display = gtk_widget_get_display (widget);
- GdkCursorType cursor_type;
- GdkCursor *cursor;
-
- if (gtk_widget_is_sensitive (widget))
- {
- if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
- cursor_type = GDK_BOTTOM_RIGHT_CORNER;
- else
- cursor_type = GDK_BOTTOM_LEFT_CORNER;
-
- cursor = gdk_cursor_new_for_display (display, cursor_type);
- gdk_window_set_cursor (priv->grip_window, cursor);
- gdk_cursor_unref (cursor);
- }
- else
- gdk_window_set_cursor (priv->grip_window, NULL);
- }
-}
-
-static void
-gtk_statusbar_create_window (GtkStatusbar *statusbar)
-{
- GtkWidget *widget;
- GtkStatusbarPrivate *priv = statusbar->priv;
- GdkWindowAttr attributes;
- gint attributes_mask;
- GdkRectangle rect;
-
- widget = GTK_WIDGET (statusbar);
-
- g_return_if_fail (gtk_widget_get_realized (widget));
- g_return_if_fail (priv->has_resize_grip);
-
- get_grip_rect (statusbar, TRUE, &rect);
-
- attributes.x = rect.x;
- attributes.y = rect.y;
- attributes.width = rect.width;
- attributes.height = rect.height;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.wclass = GDK_INPUT_ONLY;
- attributes.event_mask = gtk_widget_get_events (widget) |
- GDK_BUTTON_PRESS_MASK;
-
- attributes_mask = GDK_WA_X | GDK_WA_Y;
-
- priv->grip_window = gdk_window_new (gtk_widget_get_window (widget),
- &attributes, attributes_mask);
- gdk_window_set_user_data (priv->grip_window, widget);
-
- gdk_window_raise (priv->grip_window);
-
- set_grip_cursor (statusbar);
-}
-
-static void
-gtk_statusbar_direction_changed (GtkWidget *widget,
- GtkTextDirection prev_dir)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
-
- set_grip_cursor (statusbar);
-}
-
-static void
-gtk_statusbar_state_changed (GtkWidget *widget,
- GtkStateType previous_state)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
-
- set_grip_cursor (statusbar);
-}
-
-static void
-gtk_statusbar_destroy_window (GtkStatusbar *statusbar)
-{
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- gdk_window_set_user_data (priv->grip_window, NULL);
- gdk_window_destroy (priv->grip_window);
- priv->grip_window = NULL;
-}
-
-static void
-gtk_statusbar_realize (GtkWidget *widget)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->realize (widget);
-
- if (priv->has_resize_grip)
- gtk_statusbar_create_window (statusbar);
-}
-
-static void
-gtk_statusbar_unrealize (GtkWidget *widget)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- if (priv->grip_window)
- gtk_statusbar_destroy_window (statusbar);
-
- GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->unrealize (widget);
-}
-
-static void
-gtk_statusbar_map (GtkWidget *widget)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->map (widget);
-
- if (priv->grip_window)
- gdk_window_show (priv->grip_window);
-}
-
-static void
-gtk_statusbar_unmap (GtkWidget *widget)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- if (priv->grip_window)
- gdk_window_hide (priv->grip_window);
-
- GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->unmap (widget);
-}
-
-static gboolean
-gtk_statusbar_button_press (GtkWidget *widget,
- GdkEventButton *event)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
- GtkStatusbarPrivate *priv = statusbar->priv;
- GtkWidget *ancestor;
- GdkWindowEdge edge;
-
- if (!priv->has_resize_grip ||
- event->type != GDK_BUTTON_PRESS ||
- event->window != priv->grip_window)
- return FALSE;
-
- ancestor = gtk_widget_get_toplevel (widget);
-
- if (!GTK_IS_WINDOW (ancestor))
- return FALSE;
-
- edge = get_grip_edge (statusbar);
-
- if (event->button == 1)
- gtk_window_begin_resize_drag (GTK_WINDOW (ancestor),
- edge,
- event->button,
- event->x_root, event->y_root,
- event->time);
- else if (event->button == 2)
- gtk_window_begin_move_drag (GTK_WINDOW (ancestor),
- event->button,
- event->x_root, event->y_root,
- event->time);
- else
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean
-gtk_statusbar_draw (GtkWidget *widget,
- cairo_t *cr)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
- GtkStatusbarPrivate *priv = statusbar->priv;
- GtkStyle *style;
- GdkRectangle rect;
-
- GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->draw (widget, cr);
-
- if (priv->has_resize_grip)
- {
- GdkWindowEdge edge;
-
- edge = get_grip_edge (statusbar);
-
- get_grip_rect (statusbar, FALSE, &rect);
-
- style = gtk_widget_get_style (widget);
- gtk_paint_resize_grip (style,
- cr,
- gtk_widget_get_state (widget),
- widget,
- "statusbar",
- edge,
- rect.x, rect.y,
- /* don't draw grip over the frame, though you
- * can click on the frame.
- */
- rect.width - style->xthickness,
- rect.height - style->ythickness);
- }
-
- return FALSE;
-}
-
-static void
-gtk_statusbar_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
- GtkStatusbarPrivate *priv = statusbar->priv;
- GtkShadowType shadow_type;
-
- gtk_widget_style_get (GTK_WIDGET (statusbar), "shadow-type", &shadow_type, NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (priv->frame), shadow_type);
-
- GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->size_request (widget, requisition);
-}
-
-/* look for extra children between the frame containing
- * the label and where we want to draw the resize grip
- */
-static gboolean
-has_extra_children (GtkStatusbar *statusbar)
-{
- GtkStatusbarPrivate *priv = statusbar->priv;
- GtkPackType child_pack_type, frame_pack_type;
- GtkWidget *child, *frame;
- GList *l, *children;
- gboolean retval = FALSE;
-
- /* If the internal frame has been modified assume we have extra children */
- if (gtk_bin_get_child (GTK_BIN (priv->frame)) != priv->label)
- return TRUE;
-
- frame = NULL;
- children = _gtk_box_get_children (GTK_BOX (statusbar));
- for (l = children; l; l = l->next)
- {
- frame = l->data;
-
- if (frame == priv->frame)
- break;
- }
-
- gtk_box_query_child_packing (GTK_BOX (statusbar), frame,
- NULL, NULL, NULL, &frame_pack_type);
-
- for (l = l->next; l; l = l->next)
- {
- child = l->data;
-
- if (!gtk_widget_get_visible (child))
- continue;
-
- gtk_box_query_child_packing (GTK_BOX (statusbar), frame,
- NULL, NULL, NULL, &child_pack_type);
-
- if (frame_pack_type == GTK_PACK_START || child_pack_type == GTK_PACK_END)
- {
- retval = TRUE;
- break;
- }
- }
-
- g_list_free (children);
-
- return retval;
-}
-
-static void
-gtk_statusbar_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (widget);
- GtkStatusbarPrivate *priv = statusbar->priv;
- gboolean extra_children = FALSE;
- GdkRectangle rect;
-
- if (priv->has_resize_grip)
- {
- get_grip_rect (statusbar, TRUE, &rect);
-
- extra_children = has_extra_children (statusbar);
-
- /* If there are extra children, we don't want them to occupy
- * the space where we draw the resize grip, so we temporarily
- * shrink the allocation.
- * If there are no extra children, we want the frame to get
- * the full allocation, and we fix up the allocation of the
- * label afterwards to make room for the grip.
- */
- if (extra_children)
- {
- allocation->width -= rect.width;
- if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
- allocation->x += rect.width;
- }
- }
-
- /* chain up normally */
- GTK_WIDGET_CLASS (gtk_statusbar_parent_class)->size_allocate (widget, allocation);
-
- if (priv->has_resize_grip)
- {
- if (extra_children)
- {
- allocation->width += rect.width;
- if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
- allocation->x -= rect.width;
-
- gtk_widget_set_allocation (widget, allocation);
- }
- else
- {
- GtkAllocation child_allocation, frame_allocation;
- GtkWidget *child;
-
- /* Use the frame's child instead of priv->label directly, in case
- * the label has been replaced by a container as the frame's child
- * (and the label reparented into that container).
- */
- child = gtk_bin_get_child (GTK_BIN (priv->frame));
-
- gtk_widget_get_allocation (child, &child_allocation);
- gtk_widget_get_allocation (priv->frame, &frame_allocation);
- if (child_allocation.width + rect.width > frame_allocation.width)
- {
- /* shrink the label to make room for the grip */
- *allocation = child_allocation;
- allocation->width = MAX (1, allocation->width - rect.width);
- if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
- allocation->x += child_allocation.width - allocation->width;
-
- gtk_widget_size_allocate (child, allocation);
- }
- }
-
- if (priv->grip_window)
- {
- get_grip_rect (statusbar, TRUE, &rect);
-
- gdk_window_raise (priv->grip_window);
- gdk_window_move_resize (priv->grip_window,
- rect.x, rect.y,
- rect.width, rect.height);
- }
-
- }
-}
-
-static void
-label_selectable_changed (GtkWidget *label,
- GParamSpec *pspec,
- gpointer data)
-{
- GtkStatusbar *statusbar = GTK_STATUSBAR (data);
- GtkStatusbarPrivate *priv = statusbar->priv;
-
- if (statusbar &&
- priv->has_resize_grip && priv->grip_window)
- gdk_window_raise (priv->grip_window);
-}
diff --git a/gtk/gtkstatusbar.h b/gtk/gtkstatusbar.h
index 8c39403..a69aaf5 100644
--- a/gtk/gtkstatusbar.h
+++ b/gtk/gtkstatusbar.h
@@ -95,11 +95,6 @@ void gtk_statusbar_remove (GtkStatusbar *statusbar,
guint message_id);
void gtk_statusbar_remove_all (GtkStatusbar *statusbar,
guint context_id);
-
-
-void gtk_statusbar_set_has_resize_grip (GtkStatusbar *statusbar,
- gboolean setting);
-gboolean gtk_statusbar_get_has_resize_grip (GtkStatusbar *statusbar);
GtkWidget* gtk_statusbar_get_message_area (GtkStatusbar *statusbar);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]