diff options
| author | Igor <f2404@yandex.ru> | 2016-10-20 14:52:10 +0300 |
|---|---|---|
| committer | Igor <f2404@yandex.ru> | 2016-10-20 14:52:10 +0300 |
| commit | 16c47b9eccb3095f893675ba84f6ceeed816252e (patch) | |
| tree | 96dc86fc33a6175e0069fb78f88e75aa0c723491 | |
| parent | f7153e992993e7fbe38f8a023664f7f53b1a380f (diff) | |
| download | xfce4-terminal-16c47b9eccb3095f893675ba84f6ceeed816252e.tar.gz | |
Return ability of one-line scroll with Shift+Up/Down
But, it is turned off be default. Can be turned on with a hidden option
MiscUseShiftArrowsToScroll.
| -rw-r--r-- | terminal/terminal-preferences.c | 11 | ||||
| -rw-r--r-- | terminal/terminal-widget.c | 20 |
2 files changed, 31 insertions, 0 deletions
diff --git a/terminal/terminal-preferences.c b/terminal/terminal-preferences.c index 67c1baf..d6c70ae 100644 --- a/terminal/terminal-preferences.c +++ b/terminal/terminal-preferences.c @@ -95,6 +95,7 @@ enum PROP_MISC_MIDDLE_CLICK_OPENS_URI, PROP_MISC_DEFAULT_WORKING_DIR, PROP_MISC_REWRAP_ON_RESIZE, + PROP_MISC_SHIFT_ARROWS_SCROLL, PROP_SCROLLING_BAR, PROP_SCROLLING_LINES, PROP_SCROLLING_ON_OUTPUT, @@ -855,6 +856,16 @@ terminal_preferences_class_init (TerminalPreferencesClass *klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** + * TerminalPreferences:misc-shift-arrows-scroll: + **/ + preferences_props[PROP_MISC_SHIFT_ARROWS_SCROLL] = + g_param_spec_boolean ("misc-shift-arrows-scroll", + NULL, + "MiscUseShiftArrowsToScroll", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** * TerminalPreferences:scrolling-bar: **/ preferences_props[PROP_SCROLLING_BAR] = diff --git a/terminal/terminal-widget.c b/terminal/terminal-widget.c index c8b9f2b..e5ff96b 100644 --- a/terminal/terminal-widget.c +++ b/terminal/terminal-widget.c @@ -596,11 +596,15 @@ static gboolean terminal_widget_key_press_event (GtkWidget *widget, GdkEventKey *event) { + GtkAdjustment *adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (widget)); gboolean shortcuts_no_menukey; + gboolean shift_arrows_scroll; + gdouble value; /* determine current settings */ g_object_get (G_OBJECT (TERMINAL_WIDGET (widget)->preferences), "shortcuts-no-menukey", &shortcuts_no_menukey, + "misc-shift-arrows-scroll", &shift_arrows_scroll, NULL); /* popup context menu if "Menu" or "<Shift>F10" is pressed */ @@ -610,6 +614,22 @@ terminal_widget_key_press_event (GtkWidget *widget, terminal_widget_context_menu (TERMINAL_WIDGET (widget), 0, event->time, (GdkEvent *) event); return TRUE; } + else if (G_UNLIKELY (shift_arrows_scroll)) + { + /* scroll up one line with "<Shift>Up" */ + if ((event->state & GDK_SHIFT_MASK) != 0 && (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up)) + { + gtk_adjustment_set_value (adjustment, gtk_adjustment_get_value (adjustment) - 1); + return TRUE; + } + /* scroll down one line with "<Shift>Down" */ + else if ((event->state & GDK_SHIFT_MASK) != 0 && (event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down)) + { + value = MIN (gtk_adjustment_get_value (adjustment) + 1, gtk_adjustment_get_upper (adjustment) - gtk_adjustment_get_page_size (adjustment)); + gtk_adjustment_set_value (adjustment, value); + return TRUE; + } + } return (*GTK_WIDGET_CLASS (terminal_widget_parent_class)->key_press_event) (widget, event); } |