From 9a938c3ae9a0aebd74aa5510473021dbe4e38ca9 Mon Sep 17 00:00:00 2001 From: Miguel de Icaza Date: Fri, 26 Feb 1999 07:26:40 +0000 Subject: [PATCH] Internal viewer no longer "jumps" when dragging the scrollbar. Miguel. --- gnome/ChangeLog | 3 +++ gnome/gview.c | 14 ++++++++------ src/ChangeLog | 6 ++++++ src/view.c | 48 ++++++++++++++++++++++++------------------------ src/view.h | 6 +++--- 5 files changed, 44 insertions(+), 33 deletions(-) diff --git a/gnome/ChangeLog b/gnome/ChangeLog index ee052fbdc..5b9458111 100644 --- a/gnome/ChangeLog +++ b/gnome/ChangeLog @@ -1,5 +1,8 @@ 1999-02-26 Miguel de Icaza + * gview.c (scrollbar_moved): Call view update here, with + update_gui = FALSE. + * gdesktop.c (desktop_icon_info_open): Add needs terminal support. * gnome-file-property-dialog.c (create_settings_pane): Add Needs diff --git a/gnome/gview.c b/gnome/gview.c index 8e75a413a..6b8d159e4 100644 --- a/gnome/gview.c +++ b/gnome/gview.c @@ -76,11 +76,11 @@ scrollbar_moved (GtkAdjustment *adj, WView *view) /* To force a display */ view->dirty = max_dirt_limit + 1; - view_update (view); + view_update (view, 0); } void -view_percent (WView *view, int p, int w) +view_percent (WView *view, int p, int w, gboolean update_gui) { int percent; char buffer [40]; @@ -94,6 +94,9 @@ view_percent (WView *view, int p, int w) if (strcmp (buffer, GTK_LABEL (view->gtk_percent)->label)) gtk_label_set (GTK_LABEL (view->gtk_percent), buffer); + if (!update_gui) + return; + if (view->sadj){ GtkAdjustment *adj = GTK_ADJUSTMENT (view->sadj); @@ -105,14 +108,13 @@ view_percent (WView *view, int p, int w) gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed"); } if ((int) adj->value != view->start_display){ - printf ("Value=%g s=%d\n", adj->value, view->start_display); gtk_adjustment_set_value (adj, view->start_display); } } } void -view_status (WView *view) +view_status (WView *view, gboolean update_gui) { char buffer [80]; @@ -128,9 +130,9 @@ view_status (WView *view) gtk_label_set (GTK_LABEL (view->gtk_bytes), buffer); if (view->hex_mode) - view_percent (view, view->edit_cursor - view->first, 0); + view_percent (view, view->edit_cursor - view->first, 0, update_gui); else - view_percent (view, view->start_display - view->first, 0); + view_percent (view, view->start_display - view->first, 0, update_gui); } void diff --git a/src/ChangeLog b/src/ChangeLog index 7c061c26f..10faa4277 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +1999-02-26 Miguel de Icaza + + * view.c (view_percent, view_update): Take an extra argument: + update_gui, which controls whether we want to update the displayed + region in the GUI version. + 1999-02-25 Owen Taylor * fileopctx.h file.c: Moved recursive delete query diff --git a/src/view.c b/src/view.c index 0975c4323..632007b08 100644 --- a/src/view.c +++ b/src/view.c @@ -352,7 +352,7 @@ put_editkey (WView *view, unsigned char key) node->value = byte_val; } view->dirty++; - view_update (view); + view_update (view, TRUE); move_right (view); } @@ -645,7 +645,7 @@ view_init (WView *view, char *_command, char *_file, int start_line) #ifndef HAVE_X void -view_percent (WView *view, int p, int w) +view_percent (WView *view, int p, int w, gboolean update_gui) { int percent; @@ -665,7 +665,7 @@ view_percent (WView *view, int p, int w) } void -view_status (WView *view) +view_status (WView *view, gboolean update_gui) { int w = view->widget.cols - (view->have_frame * 2); int i; @@ -695,9 +695,9 @@ view_status (WView *view) } if (w - i > 4) if (view->hex_mode) - view_percent (view, view->edit_cursor - view->first, w); + view_percent (view, view->edit_cursor - view->first, w, update_gui); else - view_percent (view, view->start_display - view->first, w); + view_percent (view, view->start_display - view->first, w, update_gui); } attrset (SELECTED_COLOR); } @@ -1010,14 +1010,14 @@ view_place_cursor (WView *view) } void -view_update (WView *view) +view_update (WView *view, gboolean update_gui) { static int dirt_limit = 1; if (view->dirty > dirt_limit){ /* Too many updates skipped -> force a update */ display (view); - view_status (view); + view_status (view, update_gui); view->dirty = 0; /* Raise the update skipping limit */ dirt_limit++; @@ -1028,14 +1028,14 @@ view_update (WView *view) if (is_idle ()){ /* We have time to update the screen properly */ display (view); - view_status (view); + view_status (view, update_gui); view->dirty = 0; if (dirt_limit > 1) dirt_limit--; } else { /* We are busy -> skipping full update, only the status line is updated */ - view_status (view); + view_status (view, update_gui); } /* Here we had a refresh, if fast scrolling does not work restore the refresh, although this should not happen */ @@ -1499,7 +1499,7 @@ search (WView *view, char *text, int (*search)(WView *, char *, char *, int)) if (p >= update_activate){ update_activate += update_steps; if (verbose){ - view_percent (view, p, w); + view_percent (view, p, w, TRUE); mc_refresh (); } if (got_interrupt ()) @@ -1587,7 +1587,7 @@ block_search (WView *view, char *buffer, int len) if (e >= update_activate){ update_activate += update_steps; if (verbose){ - view_percent (view, e, w); + view_percent (view, e, w, TRUE); mc_refresh (); } if (got_interrupt ()) @@ -1743,7 +1743,7 @@ static void do_regexp_search (void *xview, char *regexp) search (view, regexp, regexp_view_search); /* Had a refresh here */ view->dirty++; - view_update (view); + view_update (view, TRUE); } static void do_normal_search (void *xview, char *text) @@ -1757,7 +1757,7 @@ static void do_normal_search (void *xview, char *text) search (view, text, icase_search_p); /* Had a refresh here */ view->dirty++; - view_update (view); + view_update (view, TRUE); } /* }}} */ @@ -1789,7 +1789,7 @@ void toggle_wrap_mode (WView *view) } view_labels (view); view->dirty++; - view_update (view); + view_update (view, TRUE); return; } view->wrap_mode = 1 - view->wrap_mode; @@ -1805,7 +1805,7 @@ void toggle_wrap_mode (WView *view) } view_labels (view); view->dirty++; - view_update (view); + view_update (view, TRUE); } /* Both views */ @@ -1830,7 +1830,7 @@ toggle_hex_mode (WView *view) get_bottom_first (view, 1, 1); view_labels (view); view->dirty++; - view_update (view); + view_update (view, TRUE); } /* Both views */ @@ -1864,7 +1864,7 @@ goto_line (WView *view) } view->dirty++; view->wrap_mode = saved_wrap_mode; - view_update (view); + view_update (view, TRUE); } /* Both views */ @@ -1956,7 +1956,7 @@ change_viewer (WView *view) g_free (t); view_labels (view); view->dirty++; - view_update (view); + view_update (view, TRUE); } } @@ -1967,7 +1967,7 @@ change_nroff (WView *view) altered_nroff_flag = 1; view_labels (view); view->dirty++; - view_update (view); + view_update (view, TRUE); } /* Real view only */ @@ -2286,7 +2286,7 @@ real_view_event (Gpm_Event *event, void *x) int result; if (view_event ((WView *) x, event, &result)) - view_update ((WView *) x); + view_update ((WView *) x, TRUE); return result; } @@ -2397,7 +2397,7 @@ view_hook (void *v) view_init (view, 0, panel->dir.list [panel->selected].fname, 0); display (view); - view_status (view); + view_status (view, TRUE); } static int @@ -2417,7 +2417,7 @@ view_callback (Dlg_head *h, WView *v, int msg, int par) case WIDGET_DRAW: display (view); - view_status (view); + view_status (view, TRUE); break; case WIDGET_CURSOR: @@ -2430,7 +2430,7 @@ view_callback (Dlg_head *h, WView *v, int msg, int par) if (view->view_quit) dlg_stop (h); else { - view_update (view); + view_update (view, TRUE); } return i; @@ -2439,7 +2439,7 @@ view_callback (Dlg_head *h, WView *v, int msg, int par) view->bottom_first = -1; move_to_bottom (view); display (view); - view_status (view); + view_status (view, TRUE); sleep (1); return 1; diff --git a/src/view.h b/src/view.h index defff78b1..489d26ed9 100644 --- a/src/view.h +++ b/src/view.h @@ -117,9 +117,9 @@ int view_init (WView *view, char *_command, char *_file, int start_line); int view_file (char *filename, int normal, int internal); /* Internal view routines */ -void view_status (WView *); -void view_percent (WView *, int, int); -void view_update (WView *view); +void view_status (WView *, gboolean update_gui); +void view_percent (WView *, int p, int w, gboolean update_gui); +void view_update (WView *view, gboolean update_gui); void view_labels (WView *view); int view_event (WView *view, Gpm_Event *event,int *result); void toggle_wrap_mode (WView *);