fix screwup with shadowed variables that had broken size request in some

2001-02-17  Havoc Pennington  <hp@pobox.com>

	* gtk/gtklabel.c (gtk_label_ensure_layout): fix screwup with
	shadowed variables that had broken size request in some cases,
	leading to bogus tooltips (#50996)

2001-02-06  Jon K Hellan  <hellan@acm.org>

	Implement fast browsing of tooltips, bug #50619

	* gtk/gtktooltips.h (struct _GtkTooltips): Add use_sticky_delay
	and last_popdown

	* gtk/gtktooltips.c (gtk_tooltips_init): Initialize sticky_delay,
	use_sticky_delay and last_popdown.
	(gtk_tooltips_draw_tips, gtk_tooltips_set_active_widget): Record
	time of popdown.
	(gtk_tooltips_set_active_widget): Unset sticky behaviour if widget
	is NULL.
	(gtk_tooltips_recently_shown): New static function.  Return true
	if < sticky_delay has elapsed since last popdown.
	(gtk_tooltips_event_handler): Display window after sticky_delay
	(presumably < normal delay) if < STICKY_REVERT_DELAY has elapsed
	since last popdown.

2001-02-17  Havoc Pennington  <hp@pobox.com>

	* gtk/gtktypeutils.h (GtkSignalFunc): change it to take (void)
	instead of (). #6394

	* gtk/gtkprogressbar.c (gtk_progress_bar_get_text): Add
	G_CONST_RETURN, make it return by reference, #50473
This commit is contained in:
Havoc Pennington
2001-02-17 17:21:21 +00:00
committed by Havoc Pennington
parent ca26902c65
commit e90d8357a9
13 changed files with 308 additions and 23 deletions

View File

@ -1,3 +1,36 @@
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtklabel.c (gtk_label_ensure_layout): fix screwup with
shadowed variables that had broken size request in some cases,
leading to bogus tooltips (#50996)
2001-02-06 Jon K Hellan <hellan@acm.org>
Implement fast browsing of tooltips, bug #50619
* gtk/gtktooltips.h (struct _GtkTooltips): Add use_sticky_delay
and last_popdown
* gtk/gtktooltips.c (gtk_tooltips_init): Initialize sticky_delay,
use_sticky_delay and last_popdown.
(gtk_tooltips_draw_tips, gtk_tooltips_set_active_widget): Record
time of popdown.
(gtk_tooltips_set_active_widget): Unset sticky behaviour if widget
is NULL.
(gtk_tooltips_recently_shown): New static function. Return true
if < sticky_delay has elapsed since last popdown.
(gtk_tooltips_event_handler): Display window after sticky_delay
(presumably < normal delay) if < STICKY_REVERT_DELAY has elapsed
since last popdown.
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtktypeutils.h (GtkSignalFunc): change it to take (void)
instead of (). #6394
* gtk/gtkprogressbar.c (gtk_progress_bar_get_text): Add
G_CONST_RETURN, make it return by reference, #50473
Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org> Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org>
* gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the * gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the

View File

@ -1,3 +1,36 @@
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtklabel.c (gtk_label_ensure_layout): fix screwup with
shadowed variables that had broken size request in some cases,
leading to bogus tooltips (#50996)
2001-02-06 Jon K Hellan <hellan@acm.org>
Implement fast browsing of tooltips, bug #50619
* gtk/gtktooltips.h (struct _GtkTooltips): Add use_sticky_delay
and last_popdown
* gtk/gtktooltips.c (gtk_tooltips_init): Initialize sticky_delay,
use_sticky_delay and last_popdown.
(gtk_tooltips_draw_tips, gtk_tooltips_set_active_widget): Record
time of popdown.
(gtk_tooltips_set_active_widget): Unset sticky behaviour if widget
is NULL.
(gtk_tooltips_recently_shown): New static function. Return true
if < sticky_delay has elapsed since last popdown.
(gtk_tooltips_event_handler): Display window after sticky_delay
(presumably < normal delay) if < STICKY_REVERT_DELAY has elapsed
since last popdown.
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtktypeutils.h (GtkSignalFunc): change it to take (void)
instead of (). #6394
* gtk/gtkprogressbar.c (gtk_progress_bar_get_text): Add
G_CONST_RETURN, make it return by reference, #50473
Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org> Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org>
* gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the * gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the

View File

@ -1,3 +1,36 @@
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtklabel.c (gtk_label_ensure_layout): fix screwup with
shadowed variables that had broken size request in some cases,
leading to bogus tooltips (#50996)
2001-02-06 Jon K Hellan <hellan@acm.org>
Implement fast browsing of tooltips, bug #50619
* gtk/gtktooltips.h (struct _GtkTooltips): Add use_sticky_delay
and last_popdown
* gtk/gtktooltips.c (gtk_tooltips_init): Initialize sticky_delay,
use_sticky_delay and last_popdown.
(gtk_tooltips_draw_tips, gtk_tooltips_set_active_widget): Record
time of popdown.
(gtk_tooltips_set_active_widget): Unset sticky behaviour if widget
is NULL.
(gtk_tooltips_recently_shown): New static function. Return true
if < sticky_delay has elapsed since last popdown.
(gtk_tooltips_event_handler): Display window after sticky_delay
(presumably < normal delay) if < STICKY_REVERT_DELAY has elapsed
since last popdown.
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtktypeutils.h (GtkSignalFunc): change it to take (void)
instead of (). #6394
* gtk/gtkprogressbar.c (gtk_progress_bar_get_text): Add
G_CONST_RETURN, make it return by reference, #50473
Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org> Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org>
* gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the * gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the

View File

@ -1,3 +1,36 @@
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtklabel.c (gtk_label_ensure_layout): fix screwup with
shadowed variables that had broken size request in some cases,
leading to bogus tooltips (#50996)
2001-02-06 Jon K Hellan <hellan@acm.org>
Implement fast browsing of tooltips, bug #50619
* gtk/gtktooltips.h (struct _GtkTooltips): Add use_sticky_delay
and last_popdown
* gtk/gtktooltips.c (gtk_tooltips_init): Initialize sticky_delay,
use_sticky_delay and last_popdown.
(gtk_tooltips_draw_tips, gtk_tooltips_set_active_widget): Record
time of popdown.
(gtk_tooltips_set_active_widget): Unset sticky behaviour if widget
is NULL.
(gtk_tooltips_recently_shown): New static function. Return true
if < sticky_delay has elapsed since last popdown.
(gtk_tooltips_event_handler): Display window after sticky_delay
(presumably < normal delay) if < STICKY_REVERT_DELAY has elapsed
since last popdown.
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtktypeutils.h (GtkSignalFunc): change it to take (void)
instead of (). #6394
* gtk/gtkprogressbar.c (gtk_progress_bar_get_text): Add
G_CONST_RETURN, make it return by reference, #50473
Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org> Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org>
* gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the * gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the

View File

@ -1,3 +1,36 @@
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtklabel.c (gtk_label_ensure_layout): fix screwup with
shadowed variables that had broken size request in some cases,
leading to bogus tooltips (#50996)
2001-02-06 Jon K Hellan <hellan@acm.org>
Implement fast browsing of tooltips, bug #50619
* gtk/gtktooltips.h (struct _GtkTooltips): Add use_sticky_delay
and last_popdown
* gtk/gtktooltips.c (gtk_tooltips_init): Initialize sticky_delay,
use_sticky_delay and last_popdown.
(gtk_tooltips_draw_tips, gtk_tooltips_set_active_widget): Record
time of popdown.
(gtk_tooltips_set_active_widget): Unset sticky behaviour if widget
is NULL.
(gtk_tooltips_recently_shown): New static function. Return true
if < sticky_delay has elapsed since last popdown.
(gtk_tooltips_event_handler): Display window after sticky_delay
(presumably < normal delay) if < STICKY_REVERT_DELAY has elapsed
since last popdown.
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtktypeutils.h (GtkSignalFunc): change it to take (void)
instead of (). #6394
* gtk/gtkprogressbar.c (gtk_progress_bar_get_text): Add
G_CONST_RETURN, make it return by reference, #50473
Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org> Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org>
* gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the * gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the

View File

@ -1,3 +1,36 @@
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtklabel.c (gtk_label_ensure_layout): fix screwup with
shadowed variables that had broken size request in some cases,
leading to bogus tooltips (#50996)
2001-02-06 Jon K Hellan <hellan@acm.org>
Implement fast browsing of tooltips, bug #50619
* gtk/gtktooltips.h (struct _GtkTooltips): Add use_sticky_delay
and last_popdown
* gtk/gtktooltips.c (gtk_tooltips_init): Initialize sticky_delay,
use_sticky_delay and last_popdown.
(gtk_tooltips_draw_tips, gtk_tooltips_set_active_widget): Record
time of popdown.
(gtk_tooltips_set_active_widget): Unset sticky behaviour if widget
is NULL.
(gtk_tooltips_recently_shown): New static function. Return true
if < sticky_delay has elapsed since last popdown.
(gtk_tooltips_event_handler): Display window after sticky_delay
(presumably < normal delay) if < STICKY_REVERT_DELAY has elapsed
since last popdown.
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtktypeutils.h (GtkSignalFunc): change it to take (void)
instead of (). #6394
* gtk/gtkprogressbar.c (gtk_progress_bar_get_text): Add
G_CONST_RETURN, make it return by reference, #50473
Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org> Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org>
* gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the * gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the

View File

@ -1,3 +1,36 @@
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtklabel.c (gtk_label_ensure_layout): fix screwup with
shadowed variables that had broken size request in some cases,
leading to bogus tooltips (#50996)
2001-02-06 Jon K Hellan <hellan@acm.org>
Implement fast browsing of tooltips, bug #50619
* gtk/gtktooltips.h (struct _GtkTooltips): Add use_sticky_delay
and last_popdown
* gtk/gtktooltips.c (gtk_tooltips_init): Initialize sticky_delay,
use_sticky_delay and last_popdown.
(gtk_tooltips_draw_tips, gtk_tooltips_set_active_widget): Record
time of popdown.
(gtk_tooltips_set_active_widget): Unset sticky behaviour if widget
is NULL.
(gtk_tooltips_recently_shown): New static function. Return true
if < sticky_delay has elapsed since last popdown.
(gtk_tooltips_event_handler): Display window after sticky_delay
(presumably < normal delay) if < STICKY_REVERT_DELAY has elapsed
since last popdown.
2001-02-17 Havoc Pennington <hp@pobox.com>
* gtk/gtktypeutils.h (GtkSignalFunc): change it to take (void)
instead of (). #6394
* gtk/gtkprogressbar.c (gtk_progress_bar_get_text): Add
G_CONST_RETURN, make it return by reference, #50473
Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org> Sat Feb 17 06:47:27 2001 Tim Janik <timj@gtk.org>
* gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the * gtk/gtkmenu.c (gtk_menu_motion_notify): default initialize the

View File

@ -525,7 +525,7 @@ gtk_label_ensure_layout (GtkLabel *label,
{ {
GtkWidget *widget; GtkWidget *widget;
PangoRectangle logical_rect; PangoRectangle logical_rect;
gint width, height; gint rwidth, rheight;
widget = GTK_WIDGET (label); widget = GTK_WIDGET (label);
@ -550,8 +550,8 @@ gtk_label_ensure_layout (GtkLabel *label,
* don't think it's really that slow. * don't think it's really that slow.
*/ */
width = label->misc.xpad * 2; rwidth = label->misc.xpad * 2;
height = label->misc.ypad * 2; rheight = label->misc.ypad * 2;
if (!label->layout) if (!label->layout)
{ {
@ -613,8 +613,8 @@ gtk_label_ensure_layout (GtkLabel *label,
pango_layout_set_width (label->layout, aux_info->width * PANGO_SCALE); pango_layout_set_width (label->layout, aux_info->width * PANGO_SCALE);
pango_layout_get_extents (label->layout, NULL, &logical_rect); pango_layout_get_extents (label->layout, NULL, &logical_rect);
width += aux_info->width; rwidth += aux_info->width;
height += PANGO_PIXELS (logical_rect.height); rheight += PANGO_PIXELS (logical_rect.height);
} }
else else
{ {
@ -681,8 +681,8 @@ gtk_label_ensure_layout (GtkLabel *label,
} }
pango_layout_set_width (label->layout, width); pango_layout_set_width (label->layout, width);
width += PANGO_PIXELS (real_width); rwidth += PANGO_PIXELS (real_width);
height += PANGO_PIXELS (height); rheight += PANGO_PIXELS (height);
} }
} }
else /* !label->wrap */ else /* !label->wrap */
@ -690,15 +690,15 @@ gtk_label_ensure_layout (GtkLabel *label,
pango_layout_set_width (label->layout, -1); pango_layout_set_width (label->layout, -1);
pango_layout_get_extents (label->layout, NULL, &logical_rect); pango_layout_get_extents (label->layout, NULL, &logical_rect);
width += PANGO_PIXELS (logical_rect.width); rwidth += PANGO_PIXELS (logical_rect.width);
height += PANGO_PIXELS (logical_rect.height); rheight += PANGO_PIXELS (logical_rect.height);
} }
if (widthp) if (widthp)
*widthp = width; *widthp = rwidth;
if (heightp) if (heightp)
*heightp = height; *heightp = rheight;
} }
static void static void

View File

@ -253,7 +253,7 @@ gtk_progress_bar_get_arg (GtkObject *object,
GTK_VALUE_FLOAT (*arg) = pbar->pulse_fraction; GTK_VALUE_FLOAT (*arg) = pbar->pulse_fraction;
break; break;
case ARG_TEXT: case ARG_TEXT:
GTK_VALUE_STRING (*arg) = gtk_progress_bar_get_text (pbar); GTK_VALUE_STRING (*arg) = g_strdup (gtk_progress_bar_get_text (pbar));
break; break;
default: default:
arg->type = GTK_TYPE_INVALID; arg->type = GTK_TYPE_INVALID;
@ -939,11 +939,14 @@ gtk_progress_bar_set_orientation (GtkProgressBar *pbar,
* gtk_progress_bar_get_text: * gtk_progress_bar_get_text:
* @pbar: a #GtkProgressBar * @pbar: a #GtkProgressBar
* *
* Retrieves the text displayed superimposed on the progress bar. * Retrieves the text displayed superimposed on the progress bar,
* if any, otherwise %NULL. The return value is a reference
* to the text, not a copy of it, so will become invalid
* if you change the text in the progress bar.
* *
* Return value: a string which must be freed, or %NULL * Return value: text, or %NULL; don't free the string
**/ **/
gchar* G_CONST_RETURN gchar*
gtk_progress_bar_get_text (GtkProgressBar *pbar) gtk_progress_bar_get_text (GtkProgressBar *pbar)
{ {
g_return_val_if_fail (GTK_IS_PROGRESS_BAR (pbar), NULL); g_return_val_if_fail (GTK_IS_PROGRESS_BAR (pbar), NULL);
@ -951,7 +954,7 @@ gtk_progress_bar_get_text (GtkProgressBar *pbar)
if (GTK_PROGRESS (pbar)->use_text_format) if (GTK_PROGRESS (pbar)->use_text_format)
return NULL; return NULL;
else else
return g_strdup (GTK_PROGRESS (pbar)->format); return GTK_PROGRESS (pbar)->format;
} }
/** /**

View File

@ -128,9 +128,9 @@ void gtk_progress_bar_set_pulse_step (GtkProgressBar *pbar,
void gtk_progress_bar_set_orientation (GtkProgressBar *pbar, void gtk_progress_bar_set_orientation (GtkProgressBar *pbar,
GtkProgressBarOrientation orientation); GtkProgressBarOrientation orientation);
gchar* gtk_progress_bar_get_text (GtkProgressBar *pbar); G_CONST_RETURN gchar* gtk_progress_bar_get_text (GtkProgressBar *pbar);
gfloat gtk_progress_bar_get_fraction (GtkProgressBar *pbar); gfloat gtk_progress_bar_get_fraction (GtkProgressBar *pbar);
gfloat gtk_progress_bar_get_pulse_step (GtkProgressBar *pbar); gfloat gtk_progress_bar_get_pulse_step (GtkProgressBar *pbar);
GtkProgressBarOrientation gtk_progress_bar_get_orientation (GtkProgressBar *pbar); GtkProgressBarOrientation gtk_progress_bar_get_orientation (GtkProgressBar *pbar);

View File

@ -38,6 +38,12 @@
#define DEFAULT_DELAY 500 /* Default delay in ms */ #define DEFAULT_DELAY 500 /* Default delay in ms */
#define STICKY_DELAY 0 /* Delay before popping up next tip
* if we're sticky
*/
#define STICKY_REVERT_DELAY 1000 /* Delay before sticky tooltips revert
* to normal
*/
static void gtk_tooltips_class_init (GtkTooltipsClass *klass); static void gtk_tooltips_class_init (GtkTooltipsClass *klass);
static void gtk_tooltips_init (GtkTooltips *tooltips); static void gtk_tooltips_init (GtkTooltips *tooltips);
@ -105,6 +111,9 @@ gtk_tooltips_init (GtkTooltips *tooltips)
tooltips->delay = DEFAULT_DELAY; tooltips->delay = DEFAULT_DELAY;
tooltips->enabled = TRUE; tooltips->enabled = TRUE;
tooltips->timer_tag = 0; tooltips->timer_tag = 0;
tooltips->use_sticky_delay = FALSE;
tooltips->last_popdown.tv_sec = -1;
tooltips->last_popdown.tv_usec = -1;
} }
GtkTooltips * GtkTooltips *
@ -310,7 +319,10 @@ gtk_tooltips_draw_tips (GtkTooltips * tooltips)
if (!tooltips->tip_window) if (!tooltips->tip_window)
gtk_tooltips_force_window (tooltips); gtk_tooltips_force_window (tooltips);
else if (GTK_WIDGET_VISIBLE (tooltips->tip_window)) else if (GTK_WIDGET_VISIBLE (tooltips->tip_window))
gtk_widget_hide (tooltips->tip_window); {
gtk_widget_hide (tooltips->tip_window);
g_get_current_time (&tooltips->last_popdown);
}
gtk_widget_ensure_style (tooltips->tip_window); gtk_widget_ensure_style (tooltips->tip_window);
style = tooltips->tip_window->style; style = tooltips->tip_window->style;
@ -369,7 +381,11 @@ gtk_tooltips_set_active_widget (GtkTooltips *tooltips,
GtkWidget *widget) GtkWidget *widget)
{ {
if (tooltips->tip_window) if (tooltips->tip_window)
gtk_widget_hide (tooltips->tip_window); {
if (GTK_WIDGET_VISIBLE (tooltips->tip_window))
g_get_current_time (&tooltips->last_popdown);
gtk_widget_hide (tooltips->tip_window);
}
if (tooltips->timer_tag) if (tooltips->timer_tag)
{ {
gtk_timeout_remove (tooltips->timer_tag); gtk_timeout_remove (tooltips->timer_tag);
@ -396,6 +412,22 @@ gtk_tooltips_set_active_widget (GtkTooltips *tooltips,
} }
} }
} }
else
{
tooltips->use_sticky_delay = FALSE;
}
}
static gboolean
gtk_tooltips_recently_shown (GtkTooltips *tooltips)
{
GTimeVal now;
glong msec;
g_get_current_time (&now);
msec = (now.tv_sec - tooltips->last_popdown.tv_sec) * 1000 +
(now.tv_usec - tooltips->last_popdown.tv_usec) / 1000;
return (msec < STICKY_REVERT_DELAY);
} }
static gint static gint
@ -429,14 +461,31 @@ gtk_tooltips_event_handler (GtkWidget *widget,
if (tooltips->enabled && if (tooltips->enabled &&
(!old_tips_data || old_tips_data->widget != widget)) (!old_tips_data || old_tips_data->widget != widget))
{ {
guint delay;
gtk_tooltips_set_active_widget (tooltips, widget); gtk_tooltips_set_active_widget (tooltips, widget);
tooltips->timer_tag = gtk_timeout_add (tooltips->delay, if (tooltips->use_sticky_delay &&
gtk_tooltips_recently_shown (tooltips))
delay = STICKY_DELAY;
else
delay = tooltips->delay;
tooltips->timer_tag = gtk_timeout_add (delay,
gtk_tooltips_timeout, gtk_tooltips_timeout,
(gpointer) tooltips); (gpointer) tooltips);
} }
break; break;
case GDK_LEAVE_NOTIFY:
{
gboolean use_sticky_delay;
use_sticky_delay = tooltips->tip_window &&
GTK_WIDGET_VISIBLE (tooltips->tip_window);
gtk_tooltips_set_active_widget (tooltips, NULL);
tooltips->use_sticky_delay = use_sticky_delay;
}
break;
default: default:
gtk_tooltips_set_active_widget (tooltips, NULL); gtk_tooltips_set_active_widget (tooltips, NULL);
break; break;

View File

@ -68,6 +68,8 @@ struct _GtkTooltips
guint delay : 30; guint delay : 30;
guint enabled : 1; guint enabled : 1;
gint timer_tag; gint timer_tag;
gboolean use_sticky_delay;
GTimeVal last_popdown;
}; };
struct _GtkTooltipsClass struct _GtkTooltipsClass

View File

@ -121,7 +121,7 @@ typedef void (*GtkCallbackMarshal) (GtkObject *object,
gpointer data, gpointer data,
guint n_args, guint n_args,
GtkArg *args); GtkArg *args);
typedef void (*GtkSignalFunc) (); typedef void (*GtkSignalFunc) (void);
typedef GSignalCMarshaller GtkSignalMarshaller; typedef GSignalCMarshaller GtkSignalMarshaller;
#define GTK_SIGNAL_FUNC(f) ((GtkSignalFunc) (f)) #define GTK_SIGNAL_FUNC(f) ((GtkSignalFunc) (f))