From 8ec0278c2ecb636bce25c50743f56365d65c4e69 Mon Sep 17 00:00:00 2001 From: Joni Kokko Date: Thu, 15 Jan 2009 13:11:07 +0200 Subject: [PATCH] Vertical scroll bar follows cursor position. --- irreco/src/core/irreco_remote_upload_dlg.c | 37 +++++++++++++++++++++++------- irreco/src/core/irreco_remote_upload_dlg.h | 2 ++ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/irreco/src/core/irreco_remote_upload_dlg.c b/irreco/src/core/irreco_remote_upload_dlg.c index d31cad69..66ab393a 100644 --- a/irreco/src/core/irreco_remote_upload_dlg.c +++ b/irreco/src/core/irreco_remote_upload_dlg.c @@ -51,7 +51,9 @@ enum /* Prototypes */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ - +void irreco_remote_upload_dlg_comment_size_request(GtkWidget *widget, + GtkRequisition *requisition, + IrrecoRemoteUploadDlg *self); /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* Construction & Destruction */ @@ -84,7 +86,7 @@ static void irreco_remote_upload_dlg_class_init( object_class->finalize = irreco_remote_upload_dlg_finalize; } -static void irreco_remote_upload_dlg_init (IrrecoRemoteUploadDlg *self) +static void irreco_remote_upload_dlg_init(IrrecoRemoteUploadDlg *self) { GtkWidget *table; GtkWidget *label_category; @@ -92,7 +94,6 @@ static void irreco_remote_upload_dlg_init (IrrecoRemoteUploadDlg *self) GtkWidget *label_model; GtkWidget *label_comment; GtkWidget *align; - GtkWidget *scroll; GtkWidget *comment_frame; IRRECO_ENTER @@ -156,11 +157,11 @@ static void irreco_remote_upload_dlg_init (IrrecoRemoteUploadDlg *self) /* scroll */ - scroll = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), + self->scroll = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(self->scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(self->scroll), table); /* alignment */ @@ -168,10 +169,14 @@ static void irreco_remote_upload_dlg_init (IrrecoRemoteUploadDlg *self) align = gtk_alignment_new(0.5, 0.5, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(align), 12, 12, 12, 12); - gtk_container_add(GTK_CONTAINER(align), scroll); + gtk_container_add(GTK_CONTAINER(align), self->scroll); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(self)->vbox), GTK_WIDGET(align)); + /* Signals */ + g_signal_connect(G_OBJECT(self->comment), "size-request", G_CALLBACK( + irreco_remote_upload_dlg_comment_size_request), self); + gtk_widget_set_size_request(GTK_WIDGET(self), -1, 280); gtk_widget_show_all(GTK_WIDGET(self)); @@ -500,7 +505,23 @@ void irreco_show_remote_upload_dlg(IrrecoData *irreco_data, GtkWindow *parent) * @{ */ -/* Add functions here. */ +void irreco_remote_upload_dlg_comment_size_request(GtkWidget *widget, + GtkRequisition *requisition, + IrrecoRemoteUploadDlg *self) +{ + GtkAdjustment* vadjustment = gtk_scrolled_window_get_vadjustment( + GTK_SCROLLED_WINDOW(self->scroll)); + IRRECO_ENTER + + if (requisition->height > self->cursor_position) { + vadjustment->value += 27; + } else if (requisition->height < self->cursor_position) { + vadjustment->value -= 27; + } + self->cursor_position = requisition->height; + + IRRECO_RETURN +} /** @} */ diff --git a/irreco/src/core/irreco_remote_upload_dlg.h b/irreco/src/core/irreco_remote_upload_dlg.h index 2519a31e..b6a0442c 100644 --- a/irreco/src/core/irreco_remote_upload_dlg.h +++ b/irreco/src/core/irreco_remote_upload_dlg.h @@ -90,6 +90,8 @@ struct _IrrecoRemoteUploadDlg { GtkWidget *banner; gint loader_func_id; gint loader_state; + GtkWidget *scroll; + gint cursor_position; /* data fields */ GtkWidget *category; -- 2.11.4.GIT