From 9c8e7a1329b60111df869941f4f3a8af579c4275 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 4 Jun 2012 14:46:26 +0200 Subject: support scrolling of the transcript widget via scroll wheels --- .../gtk-experiment-transcript.c | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'lib/gtk-experiment-widgets') diff --git a/lib/gtk-experiment-widgets/gtk-experiment-transcript.c b/lib/gtk-experiment-widgets/gtk-experiment-transcript.c index 4d0fd46..e33a1a0 100644 --- a/lib/gtk-experiment-widgets/gtk-experiment-transcript.c +++ b/lib/gtk-experiment-widgets/gtk-experiment-transcript.c @@ -39,6 +39,8 @@ static void gtk_experiment_transcript_finalize(GObject *gobject); static void time_adj_on_value_changed(GtkAdjustment *adj, gpointer user_data); static gboolean button_pressed(GtkWidget *widget, GdkEventButton *event); +static gboolean scrolled(GtkWidget *widget, GdkEventScroll *event); + static void choose_font_activated(GtkWidget *widget, gpointer data); static void choose_fg_color_activated(GtkWidget *widget, gpointer data); static void choose_bg_color_activated(GtkWidget *widget, gpointer data); @@ -68,6 +70,7 @@ gtk_experiment_transcript_class_init(GtkExperimentTranscriptClass *klass) widget_class->size_allocate = gtk_experiment_transcript_size_allocate; widget_class->button_press_event = button_pressed; + widget_class->scroll_event = scrolled; g_type_class_add_private(klass, sizeof(GtkExperimentTranscriptPrivate)); } @@ -415,6 +418,37 @@ button_pressed(GtkWidget *widget, GdkEventButton *event) return TRUE; } +static gboolean +scrolled(GtkWidget *widget, GdkEventScroll *event) +{ + GtkExperimentTranscript *trans = GTK_EXPERIMENT_TRANSCRIPT(widget); + GtkAdjustment *adj; + + gdouble value; + + if (trans->priv->time_adjustment == NULL) + return FALSE; + adj = GTK_ADJUSTMENT(trans->priv->time_adjustment); + + value = gtk_adjustment_get_value(adj); + + switch (event->direction) { + case GDK_SCROLL_UP: + value -= gtk_adjustment_get_step_increment(adj); + break; + case GDK_SCROLL_DOWN: + value += gtk_adjustment_get_step_increment(adj); + default: + break; + } + + if (value <= gtk_adjustment_get_upper(adj) - + gtk_adjustment_get_page_size(adj)) + gtk_adjustment_set_value(adj, value); + + return TRUE; +} + static void choose_font_activated(GtkWidget *widget __attribute__((unused)), gpointer data) -- cgit v1.2.3