Skip to content
Commits on Source (32)
News in 5.4.1, 2022-04-21
-------------------------
* Improved styling for style scheme preview widgets
* Improved styling and positioning of completion windows
* Improved styling for various style schemes
* Unit test fixes
* Hover assistants will no longer be showed if no providers
completed successfully to add widgets
* GtkSourceVimIMContext tries to handle various corner cases
better with regards to reuse and being removed from an
event controller or widget
* GtkSourceCompletionCell has improved fast-paths for resetting
cells to empty state when already empty
* Improved sizing and placement of assistants including hover
popovers, interactive tooltips, and completion windows
* The overview map has improved it's fallback styling
* The overview map will now properly update when the sourceview's
right-margin-position changes
* Fixes to vala.lang for regex detection
* Translation updates
News in 5.4.0, 2022-03-18
-------------------------
......
......@@ -70,7 +70,7 @@
<context id="regex-simple" style-ref="regex">
<start extended="true">
((?&lt;=([(]|\s))|^)
\/
?\/
(?=
([^/\\]*(\\.))*
[^/]*
......
......@@ -103,6 +103,7 @@
<style name="right-margin" background="dark_1" foreground="dark_1"/>
<style name="search-match" background="yellow_4" foreground="dark_4"/>
<style name="text" background="libadwaita-dark" foreground="light_5"/>
<style name="cursor" foreground="light_5"/>
<!-- Defaults -->
<style name="def:base-n-integer" foreground="violet_2"/>
......
......@@ -110,9 +110,11 @@
<style name="def:constant" foreground="violet_4"/>
<style name="def:decimal" foreground="violet_4"/>
<style name="def:doc-comment-element" foreground="dark_3"/>
<style name="def:emphasis" italic="true"/>
<style name="def:floating-point" foreground="violet_4"/>
<style name="def:function" foreground="blue_4"/>
<style name="def:heading" foreground="teal_5" bold="true"/>
<style name="def:inline-code" foreground="violet_4"/>
<style name="def:keyword" foreground="orange_5" bold="true"/>
<style name="def:link-destination" foreground="blue_3" italic="true" underline="low"/>
<style name="def:link-text" foreground="red_3"/>
......
......@@ -53,7 +53,6 @@
<style name="draw-spaces" foreground="text2"/>
<style name="background-pattern" background="#rgba(73,74,71,0.1)"/>
<style name="snippet-focus" background="gray"/>
<style name="map-overlay" background="gray"/>
<!-- Bracket Matching -->
<style name="bracket-match" foreground="text2" background="gray"/>
......
......@@ -46,6 +46,7 @@
<!-- Global Settings -->
<style name="text" foreground="light-gray" background="content-bg"/>
<style name="cursor" foreground="light-gray"/>
<style name="selection" foreground="#rgba(0,0,0,0)" background="#rgba(45, 92, 118, .3)"/>
<style name="current-line" background="#2a2e32"/>
<style name="current-line-number" background="#2a2e32" foreground="#a5a6a8"/>
......
......@@ -45,6 +45,7 @@
<!-- Global Settings -->
<style name="text" foreground="black" background="white"/>
<style name="cursor" foreground="black"/>
<style name="selection" foreground="#rgba(0,0,0,0)" background="#rgba(67, 172, 232, .3)"/>
<style name="current-line" background="#f8f7f6"/>
<style name="current-line-number" background="#f8f7f6" foreground="#1e1e1e"/>
......
......@@ -150,14 +150,13 @@ GtkSourceAssistant.informative.question image {
background-color: @borders;
}
GtkSourceStyleSchemePreview frame {
margin: 1px;
border-radius: 11px;
GtkSourceStyleSchemePreview {
border-radius: 12px;
box-shadow: 0 0 0 1px @borders;
margin: 2px;
}
GtkSourceStyleSchemePreview.selected frame {
border-color: @theme_selected_bg_color;
border-width: 2px;
margin: 0;
GtkSourceStyleSchemePreview.selected {
box-shadow: 0 0 0 2px @theme_selected_bg_color;
}
GtkSourceStyleSchemePreview.selected image {
border-radius: 9999px;
......
......@@ -140,38 +140,15 @@ _gtk_source_assistant_update_position (GtkSourceAssistant *assistant)
_gtk_source_assistant_get_offset (child, &x, &y);
gtk_popover_set_offset (GTK_POPOVER (child), x, y);
if (gtk_widget_get_visible (GTK_WIDGET (child)))
{
gtk_popover_present (GTK_POPOVER (child));
}
gtk_popover_present (GTK_POPOVER (child));
}
}
static void
_gtk_source_assistant_update_size (GtkSourceAssistant *self)
{
int min_width;
int nat_width;
g_assert (GTK_SOURCE_IS_ASSISTANT (self));
/* Hack to force the sizing request, otherwise the popover does
* not shrink as results are reduced.
*/
gtk_widget_set_size_request (GTK_WIDGET (self), -1, -1);
gtk_widget_measure (GTK_WIDGET (self),
GTK_ORIENTATION_HORIZONTAL,
-1,
&min_width, &nat_width, NULL, NULL);
gtk_widget_set_size_request (GTK_WIDGET (self), min_width, -1);
}
void
_gtk_source_assistant_reposition (GtkSourceAssistant *self)
{
g_return_if_fail (GTK_SOURCE_IS_ASSISTANT (self));
_gtk_source_assistant_update_size (self);
_gtk_source_assistant_update_position (self);
}
......
......@@ -39,23 +39,49 @@ _gtk_source_assistant_child_size_allocate (GtkWidget *widget,
int height,
int baseline)
{
GtkSourceAssistantChild *child = (GtkSourceAssistantChild *)widget;
GtkSourceAssistantChild *self = (GtkSourceAssistantChild *)widget;
g_assert (GTK_SOURCE_IS_ASSISTANT_CHILD (child));
g_assert (GTK_SOURCE_IS_ASSISTANT_CHILD (self));
GTK_WIDGET_CLASS (_gtk_source_assistant_child_parent_class)->size_allocate (widget, width, height, baseline);
if (self->child != NULL)
{
gtk_widget_size_allocate (self->child,
&(GtkAllocation) { 0, 0, width, height },
baseline);
}
for (const GList *iter = child->attached.head; iter; iter = iter->next)
for (const GList *iter = self->attached.head; iter; iter = iter->next)
{
GtkSourceAssistant *attached = iter->data;
g_assert (GTK_SOURCE_IS_ASSISTANT (attached));
g_assert (GTK_IS_NATIVE (attached));
if (gtk_widget_get_visible (GTK_WIDGET (attached)))
{
gtk_popover_present (GTK_POPOVER (attached));
}
gtk_popover_present (GTK_POPOVER (attached));
}
}
static void
_gtk_source_assistant_child_measure (GtkWidget *widget,
GtkOrientation orientation,
int for_size,
int *minimum,
int *natural,
int *minimum_baseline,
int *natural_baseline)
{
GtkSourceAssistantChild *self = (GtkSourceAssistantChild *)widget;
g_assert (GTK_SOURCE_IS_ASSISTANT_CHILD (self));
if (self->child != NULL)
{
gtk_widget_measure (self->child,
orientation,
for_size,
minimum,
natural,
minimum_baseline,
natural_baseline);
}
}
......@@ -75,7 +101,7 @@ _gtk_source_assistant_child_dispose (GObject *object)
_gtk_source_assistant_child_detach (self, attached);
}
g_clear_pointer (&self->child, gtk_widget_unparent);
g_clear_pointer (&self->child, gtk_widget_unparent);
G_OBJECT_CLASS (_gtk_source_assistant_child_parent_class)->dispose (object);
}
......@@ -89,8 +115,7 @@ _gtk_source_assistant_child_class_init (GtkSourceAssistantChildClass *klass)
object_class->dispose = _gtk_source_assistant_child_dispose;
widget_class->size_allocate = _gtk_source_assistant_child_size_allocate;
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
widget_class->measure = _gtk_source_assistant_child_measure;
}
static void
......@@ -136,21 +161,18 @@ _gtk_source_assistant_child_detach (GtkSourceAssistantChild *self,
void
_gtk_source_assistant_child_attach (GtkSourceAssistantChild *self,
GtkSourceAssistant *child)
GtkSourceAssistant *other)
{
g_return_if_fail (GTK_SOURCE_IS_ASSISTANT_CHILD (self));
g_return_if_fail (GTK_SOURCE_IS_ASSISTANT (child));
g_return_if_fail (gtk_widget_get_parent (GTK_WIDGET (child)) == NULL);
g_return_if_fail (GTK_SOURCE_IS_ASSISTANT (other));
g_return_if_fail (gtk_widget_get_parent (GTK_WIDGET (other)) == NULL);
g_queue_push_tail (&self->attached, g_object_ref_sink (child));
gtk_widget_set_parent (GTK_WIDGET (child), GTK_WIDGET (self));
g_queue_push_tail (&self->attached, g_object_ref_sink (other));
gtk_widget_set_parent (GTK_WIDGET (other), GTK_WIDGET (self));
if (GTK_IS_NATIVE (child))
if (gtk_widget_get_visible (GTK_WIDGET (self)))
{
if (gtk_widget_get_visible (GTK_WIDGET (child)))
{
gtk_popover_present (GTK_POPOVER (child));
}
gtk_popover_present (GTK_POPOVER (other));
}
}
......
......@@ -254,7 +254,10 @@ gtk_source_completion_cell_set_markup (GtkSourceCompletionCell *self,
{
g_return_if_fail (GTK_SOURCE_IS_COMPLETION_CELL (self));
g_return_if_fail (GTK_SOURCE_IS_COMPLETION_CELL (self));
if (markup == NULL && _gtk_source_completion_cell_is_empty (self))
{
return;
}
if (!GTK_IS_LABEL (self->child))
{
......@@ -266,12 +269,24 @@ gtk_source_completion_cell_set_markup (GtkSourceCompletionCell *self,
gtk_label_set_use_markup (GTK_LABEL (self->child), TRUE);
}
/**
* gtk_source_completion_cell_set_text:
* @self: a #GtkSourceCompletionCell
* @text: (nullable): the text to set or %NULL
*
* Sets the text for the column cell. Use %NULL to unset.
*/
void
gtk_source_completion_cell_set_text (GtkSourceCompletionCell *self,
const char *text)
{
g_return_if_fail (GTK_SOURCE_IS_COMPLETION_CELL (self));
if (text == NULL && _gtk_source_completion_cell_is_empty (self))
{
return;
}
if (!GTK_IS_LABEL (self->child))
{
GtkWidget *child = gtk_label_new (NULL);
......@@ -296,6 +311,11 @@ gtk_source_completion_cell_set_text_with_attributes (GtkSourceCompletionCell *se
{
g_return_if_fail (GTK_SOURCE_IS_COMPLETION_CELL (self));
if (text == NULL && _gtk_source_completion_cell_is_empty (self))
{
return;
}
gtk_source_completion_cell_set_text (self, text);
if (attrs != NULL)
......@@ -325,6 +345,11 @@ gtk_source_completion_cell_set_paintable (GtkSourceCompletionCell *self,
g_return_if_fail (GTK_SOURCE_IS_COMPLETION_CELL (self));
g_return_if_fail (!paintable || GDK_IS_PAINTABLE (paintable));
if (paintable == NULL && _gtk_source_completion_cell_is_empty (self))
{
return;
}
gtk_source_completion_cell_set_widget (self, gtk_image_new_from_paintable (paintable));
}
......@@ -353,7 +378,9 @@ gtk_source_completion_cell_set_widget (GtkSourceCompletionCell *self,
g_return_if_fail (!widget || gtk_widget_get_parent (widget) == NULL);
if (widget == self->child)
{
return;
}
g_clear_pointer (&self->child, gtk_widget_unparent);
......@@ -433,6 +460,11 @@ gtk_source_completion_cell_set_icon_name (GtkSourceCompletionCell *self,
{
g_return_if_fail (GTK_SOURCE_IS_COMPLETION_CELL (self));
if (icon_name == NULL && _gtk_source_completion_cell_is_empty (self))
{
return;
}
if (!GTK_IS_IMAGE (self->child))
{
GtkWidget *image = gtk_image_new ();
......@@ -452,6 +484,11 @@ gtk_source_completion_cell_set_gicon (GtkSourceCompletionCell *self,
g_return_if_fail (GTK_SOURCE_IS_COMPLETION_CELL (self));
g_return_if_fail (!gicon || G_IS_ICON (gicon));
if (gicon == NULL && _gtk_source_completion_cell_is_empty (self))
{
return;
}
if (!GTK_IS_IMAGE (self->child))
{
GtkWidget *image = gtk_image_new ();
......
......@@ -722,6 +722,14 @@ gtk_source_gutter_snapshot (GtkWidget *widget,
visible_rect.x,
visible_rect.y + visible_rect.height);
/* Try to include an extra line on each edge so that situations
* that are dependent on neighboring lines can still include enough
* information to draw correctly. This is useful for situations like
* git where you might need to draw special delete marks.
*/
gtk_text_iter_backward_line (&begin);
gtk_text_iter_forward_line (&end);
/* The first step is to get line information about all the visible
* lines. We do this up front so that we can do it once to reduce many
* times the renderers need to walk through the buffer contents as that
......
......@@ -48,11 +48,6 @@ GtkTextView *gtk_source_gutter_lines_get_view (GtkSourceGutterLines
GTK_SOURCE_AVAILABLE_IN_ALL
GtkTextBuffer *gtk_source_gutter_lines_get_buffer (GtkSourceGutterLines *lines);
GTK_SOURCE_AVAILABLE_IN_ALL
void gtk_source_gutter_lines_get_yrange (GtkSourceGutterLines *lines,
guint line,
guint *line_y,
guint *line_height);
GTK_SOURCE_AVAILABLE_IN_ALL
void gtk_source_gutter_lines_add_qclass (GtkSourceGutterLines *lines,
guint line,
GQuark qname);
......
......@@ -62,6 +62,7 @@ G_DEFINE_TYPE (GtkSourceHoverContext, gtk_source_hover_context, G_TYPE_OBJECT)
typedef struct
{
guint n_active;
guint n_success;
} Populate;
static void
......@@ -239,10 +240,24 @@ gtk_source_hover_context_populate_cb (GObject *object,
g_clear_error (&error);
}
else
{
state->n_success++;
}
if (--state->n_active == 0)
{
g_task_return_boolean (task, TRUE);
if (state->n_success > 0)
{
g_task_return_boolean (task, TRUE);
}
else
{
g_task_return_new_error (task,
G_IO_ERROR,
G_IO_ERROR_NOT_SUPPORTED,
"No hover providers populated the context");
}
}
g_object_unref (task);
......
......@@ -187,8 +187,9 @@ typedef struct
GBinding *indent_width_binding;
GBinding *tab_width_binding;
/* Our signal handler for buffer changes */
/* Our signal handler for view changes */
gulong view_notify_buffer_handler;
gulong view_notify_right_margin_position_handler;
gulong view_vadj_value_changed_handler;
gulong view_vadj_notify_upper_handler;
......@@ -311,6 +312,8 @@ gtk_source_map_rebuild_css (GtkSourceMap *map)
GtkSourceStyleScheme *style_scheme;
GtkSourceStyle *style = NULL;
GtkTextBuffer *buffer;
const char *color;
gboolean use_fg = FALSE;
GString *gstr;
char *background = NULL;
char *foreground = NULL;
......@@ -365,33 +368,40 @@ gtk_source_map_rebuild_css (GtkSourceMap *map)
if (style_scheme != NULL)
{
if (!(style = gtk_source_style_scheme_get_style (style_scheme, "map-overlay")) &&
!(style = gtk_source_style_scheme_get_style (style_scheme, "selection")) &&
!(style = gtk_source_style_scheme_get_style (style_scheme, "current-line")))
!(style = gtk_source_style_scheme_get_style (style_scheme, "selection")))
{
/* Do Nothing */
/* Use the foreground color if we can as that will get lightened to
* .25 alpha below so that we have *something* rather dark compared
* to the background color. Otherwise it will get washed out like it
* does with classic.xml.
*/
if ((style = gtk_source_style_scheme_get_style (style_scheme, "text")))
{
use_fg = TRUE;
}
}
}
if (style != NULL)
{
gboolean foreground_set;
gboolean background_set;
gboolean foreground_set;
g_object_get (style,
"foreground", &foreground,
"foreground-set", &foreground_set,
"background", &background,
"background-set", &background_set,
"foreground", &foreground,
"foreground-set", &foreground_set,
NULL);
if (!foreground_set)
if (!background_set)
{
g_clear_pointer (&foreground, g_free);
g_clear_pointer (&background, g_free);
}
if (!background_set)
if (!foreground_set)
{
g_clear_pointer (&background, g_free);
g_clear_pointer (&foreground, g_free);
}
}
else
......@@ -405,22 +415,10 @@ gtk_source_map_rebuild_css (GtkSourceMap *map)
}
}
priv->had_color = background != NULL;
if (background != NULL)
{
GdkRGBA parsed;
if (foreground == NULL)
{
GtkStyleContext *style_context;
GdkRGBA color;
style_context = gtk_widget_get_style_context (GTK_WIDGET (map));
gtk_style_context_get_color (style_context, &color);
foreground = gdk_rgba_to_string (&color);
}
if (gdk_rgba_parse (&parsed, background))
{
if (parsed.alpha < 1.0)
......@@ -430,7 +428,28 @@ gtk_source_map_rebuild_css (GtkSourceMap *map)
background = gdk_rgba_to_string (&parsed);
}
}
}
if (foreground != NULL)
{
GdkRGBA parsed;
if (gdk_rgba_parse (&parsed, foreground))
{
if (parsed.alpha < 1.0)
{
parsed.alpha = 1.0;
g_free (foreground);
foreground = gdk_rgba_to_string (&parsed);
}
}
}
color = use_fg ? foreground : background;
priv->had_color = color != NULL;
if (color != NULL)
{
g_string_append_printf (gstr,
"slider {"
" background-color: alpha(%s,.25);"
......@@ -442,7 +461,7 @@ gtk_source_map_rebuild_css (GtkSourceMap *map)
"slider.dragging:hover {"
" background-color: alpha(%s,.5);"
"}\n",
background, background, background);
color, color, color);
}
g_free (background);
......@@ -767,6 +786,13 @@ connect_view (GtkSourceMap *map,
G_CONNECT_SWAPPED);
view_notify_buffer (map, NULL, view);
priv->view_notify_right_margin_position_handler =
g_signal_connect_object (view,
"notify::right-margin-position",
G_CALLBACK (gtk_widget_queue_resize),
map,
G_CONNECT_SWAPPED);
priv->view_vadj_value_changed_handler =
g_signal_connect_object (vadj,
"value-changed",
......@@ -830,11 +856,8 @@ disconnect_view (GtkSourceMap *map)
priv->tab_width_binding = NULL;
}
if (priv->view_notify_buffer_handler != 0)
{
g_signal_handler_disconnect (priv->view, priv->view_notify_buffer_handler);
priv->view_notify_buffer_handler = 0;
}
g_clear_signal_handler (&priv->view_notify_buffer_handler, priv->view);
g_clear_signal_handler (&priv->view_notify_right_margin_position_handler, priv->view);
vadj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (priv->view));
if (vadj != NULL)
......
......@@ -59,7 +59,7 @@ gsize gtk_source_scheduler_add_full (GtkSourceSchedulerCallback callback,
gpointer user_data,
GDestroyNotify notify);
GTK_SOURCE_AVAILABLE_IN_5_2
void gtk_source_scheduler_remove (gsize handler_id);
void gtk_source_scheduler_remove (gsize handler_id);
static inline void
gtk_source_scheduler_clear (gsize *handler_id_ptr)
......
......@@ -29,7 +29,7 @@
/**
* GtkSourceSnippet:
*
*
* Quick insertion code snippets.
*
* The `GtkSourceSnippet` represents a series of chunks that can quickly be
......@@ -165,8 +165,8 @@ gtk_source_snippet_copy (GtkSourceSnippet *snippet)
* gtk_source_snippet_get_focus_position:
* @snippet: a #GtkSourceSnippet
*
* Gets the current focus for the snippet.
*
* Gets the current focus for the snippet.
*
* This is changed as the user tabs through focus locations.
*
* Returns: The focus position, or -1 if unset.
......@@ -223,7 +223,7 @@ gtk_source_snippet_get_nth_chunk (GtkSourceSnippet *snippet,
* @snippet: a #GtkSourceSnippet
*
* Gets the trigger for the source snippet.
*
*
* A trigger is a word that can be expanded into the full snippet when
* the user presses Tab.
*
......
......@@ -259,10 +259,8 @@ gtk_source_style_scheme_preview_constructed (GObject *object)
GtkSourceStyleSchemePreview *self = (GtkSourceStyleSchemePreview *)object;
GtkSourceBuffer *buffer;
GtkSourceView *view;
GtkOverlay *overlay;
const char *name;
GtkLabel *label;
GtkFrame *frame;
G_OBJECT_CLASS (gtk_source_style_scheme_preview_parent_class)->constructed (object);
......@@ -278,10 +276,6 @@ gtk_source_style_scheme_preview_constructed (GObject *object)
name = gtk_source_style_scheme_get_name (self->scheme);
gtk_widget_set_tooltip_text (GTK_WIDGET (self), name);
frame = g_object_new (GTK_TYPE_FRAME,
"can-focus", FALSE,
"focusable", FALSE,
NULL);
view = g_object_new (GTK_SOURCE_TYPE_VIEW,
"focusable", FALSE,
"can-focus", FALSE,
......@@ -295,7 +289,6 @@ gtk_source_style_scheme_preview_constructed (GObject *object)
"width-request", 120,
"right-margin", 9,
NULL);
overlay = g_object_new (GTK_TYPE_OVERLAY, NULL);
label = g_object_new (GTK_TYPE_LABEL, NULL);
self->image = g_object_new (GTK_TYPE_IMAGE,
"icon-name", "object-select-symbolic",
......@@ -311,11 +304,11 @@ gtk_source_style_scheme_preview_constructed (GObject *object)
add_text (buffer, self->scheme);
load_override_font (view);
gtk_frame_set_child (frame, GTK_WIDGET (overlay));
gtk_overlay_set_child (overlay, GTK_WIDGET (view));
gtk_overlay_add_overlay (overlay, GTK_WIDGET (label));
gtk_overlay_add_overlay (overlay, GTK_WIDGET (self->image));
gtk_widget_set_parent (GTK_WIDGET (frame), GTK_WIDGET (self));
gtk_widget_set_parent (GTK_WIDGET (view), GTK_WIDGET (self));
gtk_widget_set_parent (GTK_WIDGET (label), GTK_WIDGET (self));
gtk_widget_set_parent (GTK_WIDGET (self->image), GTK_WIDGET (self));
gtk_widget_set_overflow (GTK_WIDGET (self), GTK_OVERFLOW_HIDDEN);
}
static void
......
......@@ -100,30 +100,9 @@ _gtk_source_view_assistants_size_allocate (GtkSourceViewAssistants *assistants,
for (const GList *iter = assistants->queue.head; iter; iter = iter->next)
{
GtkSourceAssistant *assistant = iter->data;
int assistant_width;
int assistant_height;
g_assert (GTK_SOURCE_IS_ASSISTANT (assistant));
gtk_widget_measure (GTK_WIDGET (assistant),
GTK_ORIENTATION_HORIZONTAL,
-1,
NULL,
&assistant_width,
NULL,
NULL);
gtk_widget_measure (GTK_WIDGET (assistant),
GTK_ORIENTATION_VERTICAL,
assistant_width,
NULL,
&assistant_height,
NULL,
NULL);
gtk_widget_set_size_request (GTK_WIDGET (assistant),
assistant_width,
assistant_height);
gtk_popover_present (GTK_POPOVER (assistant));
}
}
......
......@@ -2546,6 +2546,21 @@ gtk_source_view_paint_marks_background (GtkSourceView *view,
g_array_free (numbers, TRUE);
}
static int
get_left_gutter_size (GtkSourceView *view)
{
GtkSourceViewPrivate *priv = gtk_source_view_get_instance_private (view);
if (priv->left_gutter != NULL)
{
GtkAllocation alloc;
gtk_widget_get_allocation (GTK_WIDGET (priv->left_gutter), &alloc);
return alloc.width;
}
return 0;
}
static void
gtk_source_view_paint_right_margin (GtkSourceView *view,
GtkSnapshot *snapshot)
......@@ -2569,7 +2584,7 @@ gtk_source_view_paint_right_margin (GtkSourceView *view,
'_');
}
x = priv->cached_right_margin_pos + gtk_text_view_get_left_margin (text_view);
x = priv->cached_right_margin_pos + gtk_text_view_get_left_margin (text_view) + get_left_gutter_size (view);
gtk_snapshot_append_color (snapshot,
&priv->right_margin_line_color,
......