Skip to content
Commits on Source (7)
# GNOME Builder 43.6
Changes since 43.5
* Backport a fix for preferences crashing due to GtkExpression bindings.
* Fix default font size in editor.
* Fix top padding for editor.
* Fix decoding of hex-encoded UTF-8 from gdb in path names.
# GNOME Builder 43.5
Changes since 43.4
......
......@@ -90,6 +90,7 @@
<translation type="gettext">gnome-builder</translation>
<releases>
<release version="43.6" date="2023-02-03"/>
<release version="43.5" date="2023-02-01"/>
<release version="43.4" date="2022-11-30"/>
<release version="43.3" date="2022-11-14"/>
......
......@@ -60,7 +60,7 @@ author = 'Christian Hergert, et al.'
# The short X.Y version.
version = '43'
# The full version, including alpha/beta/rc tags.
release = '43.5'
release = '43.6'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
......
project('gnome-builder', 'c',
license: 'GPL3+',
version: '43.5',
version: '43.6',
meson_version: '>= 0.60',
default_options: [ 'c_std=gnu11',
'cpp_std=gnu++2a',
......
......@@ -22,6 +22,7 @@
<property name="vexpand">true</property>
<property name="show-line-numbers">false</property>
<property name="left-margin">0</property>
<property name="top-margin">12</property>
<child>
<object class="GtkEventControllerFocus">
<signal name="enter" handler="ide_editor_page_focus_enter_cb" swapped="true" object="IdeEditorPage"/>
......
......@@ -1007,7 +1007,8 @@ ide_source_view_zoom_one_action (GtkWidget *widget,
GVariant *param)
{
IdeSourceView *self = IDE_SOURCE_VIEW (widget);
ide_source_view_set_font_scale (self, 1);
ide_source_view_set_font_scale (self, 0);
}
static void
......
......@@ -53,6 +53,7 @@ ide_tweaks_combo_row_notify_selected (IdeTweaksComboRow *self,
GParamSpec *pspec)
{
IdeTweaksChoice *choice;
const char *tooltip_text = NULL;
g_assert (IDE_IS_TWEAKS_COMBO_ROW (self));
......@@ -66,6 +67,8 @@ ide_tweaks_combo_row_notify_selected (IdeTweaksComboRow *self,
GVariant *variant = ide_tweaks_choice_get_value (choice);
GType type;
tooltip_text = ide_tweaks_choice_get_title (choice);
if (variant == NULL)
goto cleanup;
......@@ -87,6 +90,8 @@ ide_tweaks_combo_row_notify_selected (IdeTweaksComboRow *self,
cleanup:
self->selecting_item = FALSE;
gtk_widget_set_tooltip_text (GTK_WIDGET (self), tooltip_text);
}
static void
......
......@@ -4,11 +4,6 @@
<property name="expression">
<lookup name="title" type="IdeTweaksChoice"/>
</property>
<binding name="tooltip-text">
<lookup name="title" type="IdeTweaksChoice">
<lookup name="selected-item">IdeTweaksComboRow</lookup>
</lookup>
</binding>
<property name="list-factory">
<object class="GtkBuilderListItemFactory">
<property name="bytes"><![CDATA[
......
......@@ -112,10 +112,49 @@ gbp_gdb_debugger_parent_set (IdeObject *object,
self->builddir = g_file_new_for_path (builddir);
}
static inline gboolean
isoctal (int c)
{
return c >= '0' && c < '8';
}
static char *
decode_maybe_octal (const char *str)
{
if (strchr (str, '\\') == NULL)
return g_strdup (str);
else
{
GByteArray *ba = g_byte_array_new ();
static const guint8 zero[1] = {0};
/* It looks like gdb is encoding UTF-8 as octal bytes in the string
* rather than as UTF-8 inline.
*/
for (const char *c = str; *c; ++c)
{
if (c[0] == '\\' && isoctal (c[1]) && isoctal (c[2]) && isoctal (c[3]))
{
guint8 b = ((c[1] - '0') * 8 * 8) + ((c[2] - '0') * 8) + (c[3] - '0');
g_byte_array_append (ba, &b, 1);
c += 3;
}
else
g_byte_array_append (ba, (const guint8 *)c, 1);
}
g_byte_array_append (ba, zero, 1);
return (char *)g_byte_array_free (ba, FALSE);
}
}
static gchar *
gbp_gdb_debugger_translate_path (GbpGdbDebugger *self,
const gchar *path)
{
g_autofree char *decoded = NULL;
g_autoptr(GFile) file = NULL;
g_assert (GBP_IS_GDB_DEBUGGER (self));
......@@ -123,13 +162,15 @@ gbp_gdb_debugger_translate_path (GbpGdbDebugger *self,
if (path == NULL)
return NULL;
decoded = decode_maybe_octal (path);
/* Generate a path, trying to resolve relative paths to
* make things easier on the runtime path translation.
*/
if (self->builddir == NULL || g_path_is_absolute (path))
file = g_file_new_for_path (path);
if (self->builddir == NULL || g_path_is_absolute (decoded))
file = g_file_new_for_path (decoded);
else
file = g_file_resolve_relative_path (self->builddir, path);
file = g_file_resolve_relative_path (self->builddir, decoded);
/* If we still have access to the config, translate */
if (self->current_config != NULL)
......