[vte] widget: Implement GtkScrollableInterface::get_border
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte] widget: Implement GtkScrollableInterface::get_border
- Date: Thu, 24 Sep 2020 19:40:11 +0000 (UTC)
commit a7b863a6fcfc7f3bf4f96ce6baffaa240c5830f2
Author: Christian Persch <chpe src gnome org>
Date: Thu Sep 24 21:39:43 2020 +0200
widget: Implement GtkScrollableInterface::get_border
https://gitlab.gnome.org/GNOME/vte/-/issues/283
src/vtegtk.cc | 26 ++++++++++++++++++++++++--
src/vteinternal.hh | 1 +
src/widget.hh | 1 +
3 files changed, 26 insertions(+), 2 deletions(-)
---
diff --git a/src/vtegtk.cc b/src/vtegtk.cc
index 936b38b9..bde7f976 100644
--- a/src/vtegtk.cc
+++ b/src/vtegtk.cc
@@ -78,6 +78,8 @@ struct _VteTerminalClassPrivate {
GtkStyleProvider *style_provider;
};
+static void vte_terminal_scrollable_iface_init(GtkScrollableInterface* iface) noexcept;
+
#ifdef VTE_DEBUG
G_DEFINE_TYPE_WITH_CODE(VteTerminal, vte_terminal, GTK_TYPE_WIDGET,
{
@@ -85,7 +87,7 @@ G_DEFINE_TYPE_WITH_CODE(VteTerminal, vte_terminal, GTK_TYPE_WIDGET,
g_type_add_instance_private(g_define_type_id,
sizeof(vte::platform::Widget));
}
g_type_add_class_private (g_define_type_id, sizeof (VteTerminalClassPrivate));
- G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, NULL)
+ G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, vte_terminal_scrollable_iface_init)
if (_vte_debug_on(VTE_DEBUG_LIFECYCLE)) {
g_printerr("vte_terminal_get_type()\n");
})
@@ -96,7 +98,7 @@ G_DEFINE_TYPE_WITH_CODE(VteTerminal, vte_terminal, GTK_TYPE_WIDGET,
g_type_add_instance_private(g_define_type_id,
sizeof(vte::platform::Widget));
}
g_type_add_class_private (g_define_type_id, sizeof (VteTerminalClassPrivate));
- G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, NULL))
+ G_IMPLEMENT_INTERFACE(GTK_TYPE_SCROLLABLE, vte_terminal_scrollable_iface_init))
#endif
static inline
@@ -2038,6 +2040,26 @@ vte_terminal_class_init(VteTerminalClass *klass)
#endif
}
+static gboolean
+vte_terminal_scrollable_get_border(GtkScrollable* scrollable,
+ GtkBorder* border) noexcept
+try
+{
+ *border = *WIDGET(VTE_TERMINAL(scrollable))->padding();
+ return true;
+}
+catch (...)
+{
+ vte::log_exception();
+ return false;
+}
+
+static void
+vte_terminal_scrollable_iface_init(GtkScrollableInterface* iface) noexcept
+{
+ iface->get_border = vte_terminal_scrollable_get_border;
+}
+
/* public API */
/**
diff --git a/src/vteinternal.hh b/src/vteinternal.hh
index 8c510912..065c19d8 100644
--- a/src/vteinternal.hh
+++ b/src/vteinternal.hh
@@ -975,6 +975,7 @@ public:
/* Style stuff */
GtkBorder m_padding{1, 1, 1, 1};
+ auto padding() const noexcept { return &m_padding; }
vte::glib::RefPtr<GtkAdjustment> m_vadjustment{};
auto vadjustment() noexcept { return m_vadjustment.get(); }
diff --git a/src/widget.hh b/src/widget.hh
index d870135c..ed9837a3 100644
--- a/src/widget.hh
+++ b/src/widget.hh
@@ -108,6 +108,7 @@ public:
void set_vscroll_policy(GtkScrollablePolicy policy) noexcept { m_vscroll_policy = policy; }
auto hscroll_policy() const noexcept { return m_hscroll_policy; }
auto vscroll_policy() const noexcept { return m_vscroll_policy; }
+ auto padding() const noexcept { return terminal()->padding(); }
bool set_cursor_blink_mode(VteCursorBlinkMode mode) { return
terminal()->set_cursor_blink_mode(vte::terminal::Terminal::CursorBlinkMode(mode)); }
auto cursor_blink_mode() const noexcept { return
VteCursorBlinkMode(terminal()->cursor_blink_mode()); }
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]