Xfce Wiki

Sub domains
 
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor <f2404@yandex.ru>2016-10-20 14:52:10 +0300
committerIgor <f2404@yandex.ru>2016-10-20 14:52:10 +0300
commit16c47b9eccb3095f893675ba84f6ceeed816252e (patch)
tree96dc86fc33a6175e0069fb78f88e75aa0c723491
parentf7153e992993e7fbe38f8a023664f7f53b1a380f (diff)
downloadxfce4-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.c11
-rw-r--r--terminal/terminal-widget.c20
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);
}