aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorWolfgang Müller2021-06-18 16:15:04 +0200
committerWolfgang Müller2021-06-22 20:23:54 +0200
commita19f4b8c80d37f0940a6d7a0ba127ec9740cd6db (patch)
treee5cde0fad641d106b712317970a9b5db4a2cde24
parent20c7bc5cdf540094640a18f59ebb4a71bf118ea1 (diff)
downloadweltschmerz-a19f4b8c80d37f0940a6d7a0ba127ec9740cd6db.tar.gz
Use GtkBox and GtkScrollbar instead of GtkScrolledWindowbox-scroll
Upstream indicates that VTE is incompatible with GtkScrolledWindow. See [1] and [2] for more information. This commit contains a proof-of-concept implementation of an alternative solution using a GtkBox as the toplevel element. [1] https://gitlab.gnome.org/GNOME/vte/issues/11#note_264921 [2] https://bugzilla.gnome.org/show_bug.cgi?id=733210#c2
-rw-r--r--terminal.ui248
-rw-r--r--terminal.vala16
2 files changed, 135 insertions, 129 deletions
diff --git a/terminal.ui b/terminal.ui
index c22fbec..bf3d8de 100644
--- a/terminal.ui
+++ b/terminal.ui
@@ -116,15 +116,13 @@
<property name="can-focus">False</property>
<property name="icon-name">go-up-symbolic</property>
</object>
- <template class="Terminal" parent="GtkOverlay">
+ <template class="Terminal" parent="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
- <object class="GtkScrolledWindow" id="scrolled_window">
+ <object class="GtkOverlay" id="overlay">
<property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="propagate-natural-width">True</property>
- <property name="propagate-natural-height">True</property>
+ <property name="can-focus">False</property>
<child>
<object class="VteTerminal" id="vte">
<property name="visible">True</property>
@@ -143,145 +141,163 @@
<signal name="scroll-event" handler="vte_scroll" swapped="no"/>
<signal name="window-title-changed" handler="window_set_title" swapped="no"/>
</object>
+ <packing>
+ <property name="index">-1</property>
+ </packing>
</child>
- </object>
- <packing>
- <property name="index">-1</property>
- </packing>
- </child>
- <child type="overlay">
- <object class="GtkRevealer" id="search_revealer">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="halign">end</property>
- <property name="valign">end</property>
- <property name="transition-type">slide-up</property>
- <child>
- <object class="GtkBox" id="search_container">
+ <child type="overlay">
+ <object class="GtkRevealer" id="search_revealer">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="margin-start">5</property>
- <property name="margin-end">5</property>
- <property name="margin-top">5</property>
- <property name="margin-bottom">5</property>
- <property name="spacing">2</property>
+ <property name="halign">end</property>
+ <property name="valign">end</property>
+ <property name="transition-type">slide-up</property>
<child>
- <object class="GtkSearchEntry" id="search_entry">
+ <object class="GtkBox" id="search_container">
<property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="primary-icon-name">edit-find-symbolic</property>
- <property name="primary-icon-activatable">False</property>
- <property name="primary-icon-sensitive">False</property>
- <property name="placeholder-text" translatable="yes">Search...</property>
- <signal name="activate" handler="search_down" swapped="no"/>
- <signal name="key-press-event" handler="search_entry_key_press" swapped="no"/>
- <signal name="next-match" handler="search_down" swapped="no"/>
- <signal name="previous-match" handler="search_up" swapped="no"/>
- <signal name="search-changed" handler="search_changed" swapped="no"/>
- <signal name="stop-search" handler="search_stop" swapped="no"/>
+ <property name="can-focus">False</property>
+ <property name="margin-start">5</property>
+ <property name="margin-end">5</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkSearchEntry" id="search_entry">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="primary-icon-name">edit-find-symbolic</property>
+ <property name="primary-icon-activatable">False</property>
+ <property name="primary-icon-sensitive">False</property>
+ <property name="placeholder-text" translatable="yes">Search...</property>
+ <signal name="activate" handler="search_down" swapped="no"/>
+ <signal name="key-press-event" handler="search_entry_key_press" swapped="no"/>
+ <signal name="next-match" handler="search_down" swapped="no"/>
+ <signal name="previous-match" handler="search_up" swapped="no"/>
+ <signal name="search-changed" handler="search_changed" swapped="no"/>
+ <signal name="stop-search" handler="search_stop" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="search_button_down">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">True</property>
+ <property name="tooltip-text" translatable="yes">Go to next result</property>
+ <property name="image">search_image_down</property>
+ <property name="always-show-image">True</property>
+ <signal name="clicked" handler="search_down" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="search_button_up">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">True</property>
+ <property name="tooltip-text" translatable="yes">Go to previous result</property>
+ <property name="image">search_image_up</property>
+ <property name="always-show-image">True</property>
+ <signal name="clicked" handler="search_up" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack-type">end</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
</child>
- <child>
- <object class="GtkButton" id="search_button_down">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">True</property>
- <property name="tooltip-text" translatable="yes">Go to next result</property>
- <property name="image">search_image_down</property>
- <property name="always-show-image">True</property>
- <signal name="clicked" handler="search_down" swapped="no"/>
+ </object>
+ <packing>
+ <property name="index">1</property>
+ </packing>
+ </child>
+ <child type="overlay">
+ <object class="GtkInfoBar" id="infobar">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="valign">end</property>
+ <property name="show-close-button">True</property>
+ <property name="revealed">False</property>
+ <signal name="close" handler="infobar_close" swapped="no"/>
+ <signal name="response" handler="infobar_respond" swapped="no"/>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="infobar_buttons">
+ <property name="can-focus">False</property>
+ <property name="spacing">6</property>
+ <property name="layout-style">end</property>
+ <child>
+ <placeholder/>
+ </child>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
</packing>
</child>
- <child>
- <object class="GtkButton" id="search_button_up">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">True</property>
- <property name="tooltip-text" translatable="yes">Go to previous result</property>
- <property name="image">search_image_up</property>
- <property name="always-show-image">True</property>
- <signal name="clicked" handler="search_up" swapped="no"/>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="infobar_content">
+ <property name="can-focus">False</property>
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkLabel" id="infobar_label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">Sample Error Message</property>
+ <property name="use-markup">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
- <property name="fill">True</property>
+ <property name="fill">False</property>
<property name="pack-type">end</property>
- <property name="position">2</property>
+ <property name="position">0</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
+ <packing>
+ <property name="index">2</property>
+ </packing>
</child>
</object>
<packing>
- <property name="index">1</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
- <child type="overlay">
- <object class="GtkInfoBar" id="infobar">
+ <child>
+ <object class="GtkScrollbar" id="scroll">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="valign">end</property>
- <property name="show-close-button">True</property>
- <property name="revealed">False</property>
- <signal name="close" handler="infobar_close" swapped="no"/>
- <signal name="response" handler="infobar_respond" swapped="no"/>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="infobar_buttons">
- <property name="can-focus">False</property>
- <property name="spacing">6</property>
- <property name="layout-style">end</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child internal-child="content_area">
- <object class="GtkBox" id="infobar_content">
- <property name="can-focus">False</property>
- <property name="spacing">16</property>
- <child>
- <object class="GtkLabel" id="infobar_label">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Sample Error Message</property>
- <property name="use-markup">True</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack-type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
+ <property name="no-show-all">True</property>
+ <property name="orientation">vertical</property>
</object>
<packing>
- <property name="index">2</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
</packing>
</child>
</template>
diff --git a/terminal.vala b/terminal.vala
index d66fc51..69ae02e 100644
--- a/terminal.vala
+++ b/terminal.vala
@@ -1,5 +1,5 @@
[GtkTemplate (ui = "/weltschmerz/ui/terminal.ui")]
-class Terminal : Gtk.Overlay {
+class Terminal : Gtk.Box {
const string URL_REGEX = """(?>https?|ftp):\/\/[^\s\$.?#].(?>[^\s()"]*|\([^\s]*\)|"[^\s"]*")""";
const uint PCRE2_CASELESS = 0x00000008u;
const uint PCRE2_MULTILINE = 0x00000400u;
@@ -30,8 +30,8 @@ class Terminal : Gtk.Overlay {
[GtkChild] unowned Gtk.MenuItem copy_item_html;
[GtkChild] unowned Gtk.MenuItem open_directory_item;
[GtkChild] unowned Gtk.Revealer search_revealer;
- [GtkChild] unowned Gtk.ScrolledWindow scrolled_window;
[GtkChild] unowned Gtk.SearchEntry search_entry;
+ [GtkChild] unowned Gtk.Scrollbar scroll;
[GtkChild] unowned Vte.Terminal vte;
Gtk.Clipboard clipboard;
Gtk.Settings settings;
@@ -82,20 +82,10 @@ class Terminal : Gtk.Overlay {
}
}
- Gtk.PolicyType get_scrollbar_policy(bool want_scrollbar) {
- if (!want_scrollbar)
- return Gtk.PolicyType.NEVER;
-
- if (!settings.gtk_overlay_scrolling || overlay_scrolling_env_override)
- return Gtk.PolicyType.ALWAYS;
-
- return Gtk.PolicyType.AUTOMATIC;
- }
-
public void load_config(bool reload) {
var conf = new Config();
- scrolled_window.set_policy(Gtk.PolicyType.NEVER, get_scrollbar_policy(conf.scrollbar));
+ scroll.set_adjustment(vte.get_vadjustment());
vte.set_font(conf.font);
var char_width = (int)vte.get_char_width();