本周 GTK+ – 8

在过去的一周里,GTK+ 的主分支有 23 次提交,增加了 1154 行代码,删除了 121 行代码。

计划和状态
  • Matthias 继续在 GLibGTK+ 的 portal 分支上工作。
  • Emmanuele 继续在 gsk-renderer 分支上制作 gsk 渲染小部件。
  • Philip Withnall 正在开发一个补丁系列,使 GLib 支持将结构化日志记录到 systemd 日志 这里
值得注意的更改
  • Carlos Garnacho 改进了 Wayland 剪贴板处理与旧版 X 客户端的兼容性。
  • Matthias 使打印对话框中可以隐藏预览按钮。
  • Eric Koegel 为 GtkApplication 添加了对 Xfce 会话管理器的支持
  • Georges Basile Stavracas Neto 为 GTK+ CSS 机制添加了对 background-blend-mode 的支持。
  • 在 GLib 中,Matthias 添加了一个新的 gio 实用程序,它将各种 gvfs 命令行工具的功能组合成一个。
修复的错误
  • Bug 767965改进检测远程文件系统的启发式方法
  • Bug 768184headerbar:如果标题小部件隐藏,则不要抛出警告
  • Bug 768082从 Wayland 复制到 NEdit 不起作用
  • Bug 768177 PRIMARY 请求超时后 CLIPBOARD 目标请求
  • Bug 768142 Makefile.example 中 $(LIBS) 和 $(OBJS) 的顺序不正确导致“未定义的引用”
  • Bug 693203GtkApplication 不支持 Xfce 会话管理器
  • Bug 768305Gtk+ 应该支持 background-blend-mode
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

本周 GTK+ – 7

在过去的一周里,GTK+ 的主分支有 29 次提交,增加了 4744 行代码,删除了 4340 行代码。

计划和状态
  • GTK+ 3.21.3 发布
  • Matthias 继续在 GLibGTK+ 的 portal 分支上工作。
  • William Hua 正在根据黑客马拉松的讨论,重构 bug 756579 中的菜单定位 API。
  • Emmanuele 推送了 gsk 分支的新版本。
  • Carlos Soriano 正在为文件选择器和 nautilus 开发一个新的路径栏 实现
值得注意的更改
  • Emmanuele 修复了 firefox 中因引入 GdkDrawingContext 造成的一些问题。
  • Ray Strode 清理了一些 headerbar 代码,并添加了对扩展子元素的支持
  • Matthias 修复了 GtkColorChooser 中的崩溃和一个在 GtkInspector 中的崩溃
修复的错误
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

Adwaita

今天,来自 GNOME 设计团队的 Jakub Steiner 将要讨论 Adwaita,GTK+ 的默认主题;设计师可以用来设计 GTK+ 样式的工具;以及工具包如何更改以允许更好的设计工作流程。

Adwaita 是 GTK+ 的面向用户的外观。过去,GTK+ 没有外观;工具包没有明确定义的外观。像 FOSS 世界中的许多事情一样,它是自带的。有一个Raleigh,一个回退皮肤,只有在主题或系统设置出现问题时才会显示。你真的不想看到那个。

Adwaita

CSS

随着 GTK+ 3.0 的推出,一项大胆的新工作开始了。一项让视觉设计师使用他们理解的工具负责视觉设计的工作。没有使用主题引擎来绘制独特的控件,而是选择了在 Web 上使用的样式引擎。“一切都是一个框”的 CSS 模型非常适用于 GTK+。这花费了大量的精力,主要由 Benjamin Otte 承担,多年来他设法给了我们我们梦想的东西:一个类似 CSS 的盒子模型,允许我们使用填充、边距、边框和最小宽度等巧妙的功能来分隔元素/控件。在选择器方面,我们没有处理从一个版本到另一个版本变化的直接嵌套的小部件结构,而是获得了一个抽象的、类似 HTML 的DOM结构,带有节点和类。节点也始终保持状态并且更容易制作动画。

SCSS

在 GTK+ 中,有很多看起来像按钮但不是按钮的控件。每个程序员都很懒,这是一件好事。设计师没有什么不同。这是一个非常积极的事情,有一个缩写词来表示它,DRY — 不要重复自己。因此,在旧的 Adwaita 中,当我们设计一些看起来都一样的东西的外观时,我们只有一个属性块和大量的选择器 — 该外观的目标。按钮、下拉菜单,等等。不需要太多输入,但更改起来却很疯狂。

SASS 通过提供一次定义公共绘图程序但将其重用于结构良好的样式表的方法来解救。您可以绘制“像按钮一样”的东西,但不要将其定义为按钮。您仍然会在下拉部分中找到一个语义上组织良好的下拉菜单。SASS 将这些宏称为混合,您将在 src/gtk/theme/Adwaita/_drawing.scss 中找到我们的绘图宏。

/* Switch Slider being a button */
slider {
/* ... */
@include button(normal, $edge: $shadow_color);
}
检查器

设计师工作流程的巨大改进是引入了 检查器。检查器是一个非常宝贵的工具,可以交互式地测试新的样式,或者找出为什么特定的选择器不起作用。它提供了几个强大的工具

  • 小部件选择器。您可以交互式地指向一个小部件,以了解其属性或它在小部件树堆栈中的位置。从 3.20 开始,您还可以了解其 CSS 节点,了解它可以进入的各种状态,了解已分配给它的所有类。它还可以告诉您在样式表中定义了该设置属性的位置。这可以帮助您找出为什么您的选择器不起作用。有点。如果能够看到所有匹配的选择器,甚至是那些被优先选择器覆盖的选择器,那就太好了。
  • 交互式 CSS 样式表。您可以编写一个 CSS 规则并使其实时应用。这不仅有助于找出合适的选择器,还有助于直接使用 GTK+ 而不是使用像 Inkscape 这样的工具来尝试绘图。能够快速迭代和尝试事情可以带来更好的设计。

如果这一切听起来与现代浏览器提供的非常相似,那并不是巧合。

CSS Nodes in the Inspector
检查器中的 CSS 节点
未来的改进

在能够更改 Adwaita 方面使我们不那么灵活的一个主要因素是图形资源。我们仍然有一些事情必须借助图像资源来完成。它们实际上在一个大型的资源表 SVG 中,我们有一堆脚本来裁剪多个大小的图像(用于 HiDPI)。添加或更改特定位仍然很麻烦。

为了让这不那么无聊,这里有一个简单的 Web 演示,说明我们如何避免使用图像资源来绘制 GtkScale 滑块和 使用简单的 CSS 框

<div id="scale" class="scale">
  <div class="trough"></div>
  <div id="slider" class="slider run-animation"></div>
</div>

<style type="text/css">
.scale {
  position: relative;
  width: 100%;
  height: 64px;
}
.scale:hover { }
.trough {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  height: 8px;
  border-style: solid;
  border-width: 2px;
  border-radius: 4px;
  left: 0; right: 0;
  border-color: #a7a7a7;
  background-color: #b1b3b1;
  background-image: linear-gradient(to bottom, #a7a7a7, #bebebe);
  box-shadow: 0 1px 0 rgba(255,255,255,0.8);
}
.slider {
  position: absolute;
  width: 48px; height: 48px;
  top: 50%;
  left: 0%;
  transform: translateY(-50%) translateX(0%) rotate(0deg);
  border-style: solid;
  border-width: 2px;
  border-color: #a7a7a7;
  border-radius: 0;
  background-color: #e0e0e0;
  background-image: linear-gradient(135deg, #ededed, #d3d3d3);
  box-shadow: inset 0 0 0 2px rgba(255,255,255,0.2),
              2px 2px 2px rgba(0,0,0,0.1);
}
.slider.run-animation {
  animation-name: morph, progress;
  animation-delay: 6s,10s;
  animation-duration: 3s,3s;
  animation-iteration-count:1,infinite;
  animation-direction: normal, alternate;
  animation-timing-function: ease-in-out;
  animation-fill-mode: forwards;
}
.slider.run-animation:hover {
  /* the best way to reset CSS animations is switching between identical keyframes */
  animation-name: morphClone, progressClone;
}
@keyframes morph {
  0% {
    border-radius: 0;
    transform: translateY(-50%) translateX(0%) rotate(0deg);
  }
  90% {
    border-radius: 50% 50% 0 50%;
    transform: translateY(-50%) translateX(0%) rotate(0deg);
  }
  100% {
    border-radius: 50% 50% 0 50%;
    transform: translateY(-60%) translateX(0%) rotate(45deg);
  }
}
@keyframes morphClone {
  0% {
    border-radius: 0;
    transform: translateY(-50%) translateX(0%) rotate(0deg);
  }
  90% {
    border-radius: 50% 50% 0 50%;
    transform: translateY(-50%) translateX(0%) rotate(0deg);
  }
  100% {
    border-radius: 50% 50% 0 50%;
    transform: translateY(-60%) translateX(0%) rotate(45deg);
  }
}
@keyframes progress {
  0% {
    left: 0%;
    transform: translateY(-60%) translateX(0%) rotate(45deg);
  }
  100% {
    left: 100%;
    transform: translateY(-60%) translateX(-100%) rotate(45deg);
  }
}
@keyframes progressClone {
  0% {
    left: 0%;
    transform: translateY(-60%) translateX(0%) rotate(45deg);
  }
  100% {
    left: 100%;
    transform: translateY(-60%) translateX(-100%) rotate(45deg);
  }
}
</style>

本质上,滑块是一个具有 3 个圆角并旋转 45 度的框。我们所需要的只是框。

    /* transforms-based scale slider on the web */
.slider {
  position: absolute;
  width: 48px; height: 48px;
  top: 50%;
  left: 0%;
  /* move up slightly after rotation, thus not 50% */
  transform: translateY(-60%) rotate(45deg);
  border-style: solid;
  border-width: 2px;
  border-color: #a7a7a7;
  border-radius: 50% 50% 0 50%;
  background-color: #e0e0e0;
  background-image: linear-gradient(135deg, #ededed, #d3d3d3);
  box-shadow: inset 0 0 0 2px rgba(255,255,255,0.2),
              2px 2px 2px rgba(0,0,0,0.1);
}

本周 GTK+ – 6

在过去的一周里,GTK+ 有 20 次提交,增加了 1852 行代码,删除了 1234 行代码。

计划和状态
  • 由于GTK+ 黑客马拉松持续了大部分时间,Git 存储库中没有发生太多事情。
  • 黑客马拉松的每一天在 wiki 上都有自己的记录:1234
  • 路线图已清理并更新。
值得注意的更改
  • Ray Strode 在 GDK Wayland 后端上工作,以确保它可以在没有 memfd 支持的情况下使用较旧的 Linux 内核构建和使用。
  • Philip Chimento 添加了 GtkStyleContext 层级结构包含多个上下文的功能;这是允许样式上下文在小部件的子项中正确级联的第一步。
修复的错误
  • Bug 766341 不要依赖 memfd,因为它需要较新的内核
  • Bug 767766 配置错误地检测到 CUPS 2.X
  • Bug 767795 当 GtkShortcutsShortcut 的 “accelerator” 属性设置为 “less” 时出现警告
  • Bug 751409 gtk_style_context_add_provider() 不会传播到子元素
  • Bug 767705 GtkActionHelper:将消息更改为警告
  • Bug 767468 在 treeview cellrenderer 上显示的 Popover 在显示后立即隐藏
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

GTK+ 中的绘图

GTK+ 如何绘制窗口内容是一个相当复杂的问题;它涉及到从 GtkWidgetGdkWindow,再到 Cairo,最后到当前使用的窗口系统。即使对于那些从应用程序开发角度熟悉 GTK+ API 的人来说,这项任务也可能看起来有些令人生畏,因此我决定快速介绍一下 GTK+ 是如何绘制的,从 widget 到 window,再到 surface,最后到原生窗口资源。

它是如何开始的

GTK+ 总是因为某些原因而被要求绘制。这个请求可能来自窗口系统——例如,因为窗口管理器将您的应用程序窗口呈现给用户,或者因为用户调整了它的大小——但更常见的情况是,它来自 widget 更新其内容。比如说,一个进度条从 50% 到 60%;或者一个标签,改变了它的文本;或者一个微调器,正在进行新的迭代。这个请求使 widget 的后备 GdkWindow 失效——通常是包含该 widget 的顶层 GtkWindowGdkWindow。每次失效都会携带要失效的窗口区域(“损坏”),这样当我们真正开始绘制时,我们就知道窗口的哪些部分需要更新,并且我们可以避免在损坏区域之外进行绘制。

与时间赛跑

第一次失效将启动“帧时钟”;这个时钟是一个对象,它跟踪帧内的每个阶段,例如绘制窗口、布局 widget 或处理事件队列。这允许 GTK+ 与窗口系统合成器之类的东西同步,并避免执行用户看不到的不必要的工作——例如,当您的显示器只能以 60 Hz 的频率运行时,以每秒 1000 帧的速度绘制某些东西。

一旦时钟到达“绘制”阶段,我们就会处理窗口上的所有计划更新;这将导致发出 GDK_EXPOSE 事件。 GDK_EXPOSE 事件包含需要更新的 GdkWindow 以及所有失效区域的并集。需要注意的是,总的来说,只有顶层窗口才会收到 GDK_EXPOSE 事件;但是,出于历史原因,某些 widget 可能会应用特定的事件掩码,这也会导致 GDK_EXPOSE 事件传递给它们。您不应该编写依赖于此的代码,如果您有从旧版本 GTK+ 2.x 移植的旧代码,您应该认真考虑从事件掩码中删除 GDK_EXPOSURE_MASK

渲染

GTK+ 从 GDK_EXPOSE 事件中获取窗口和失效区域,并找出它们属于哪个顶层 widget。一旦找到,GTK+ 将开始实际的渲染过程。首先,GTK+ 将要求 GdkWindow 创建一个缓冲区,用于绘制窗口的内容;缓冲区将被裁剪为需要绘制的区域,并将使用窗口的背景颜色清除。 GDK 将创建一个“绘图上下文”——一个临时对象,用于跟踪 OpenGL 和 Cairo 绘图等内容。然后,GTK+ 将要求 widget 使用 Cairo 上下文绘制自身。对于叶 widget,这意味着在该上下文中绘制自身;对于容器 widget,这还意味着递归遍历其所有子项。在此过程结束时,GTK+ 将通过告诉 GDK 获取包含所有渲染 widget 的缓冲区并使用它来替换窗口的当前内容来结束帧。然后,GDK 将要求窗口系统在更合适的时候将窗口呈现给用户。

改变历史

上面概述的过程有各种各样的注意事项,并且 GDK 内部处理窗口失效和验证的代码相当复杂;它也有很长的历史,这意味着它的 API 充斥着过去时代的墓碑。

例如,在 GTK+ 3.0 之前,您应该自己处理“expose”事件,并通过使用 gdk_cairo_create() 在 widget 上创建 Cairo 上下文进行绘制;这早已没有必要,因为 GtkWidget::draw 虚函数已经为我们提供了一个可以绘制的 Cairo 上下文。但是,gdk_cairo_create() 函数已在 GTK+ 3.22 中弃用,不应在新编写的代码中使用;如果您需要 Cairo 上下文,则应该创建一个类似的 Cairo surface,在其上调用 cairo_create(),然后使用该 surface 作为 GTK+ 在绘制 widget 时为您提供的 Cairo 上下文的来源。另一方面,如果您使用 gdk_cairo_create() 在响应 GDK_EXPOSE 事件时在顶级的原生 GdkWindow 上进行绘制,则应改用新添加的 gdk_window_begin_draw_frame()gdk_window_end_draw_frame()GdkDrawingContext API。

塑造未来

多年来,GTK+ 中绘图代码的内部结构已逐步更新,以应对诸如 新窗口系统以及 其他渲染 API 等事物。可以肯定的是,它们将再次发生变化,尤其是在提高渲染性能方面。许多可能看起来很随意的更改实际上是朝着减少每帧在工具包内花费的时间,并为应用程序逻辑留下更多时间而采取的垫脚石。

本周 GTK+ – 5

在上周,GTK+ 进行了 35 次提交,添加了 3140 行代码,删除了 2353 行代码。

计划和状态
  • GTK+ 黑客马拉松今天开始;主题包括:CSS、布局管理、沙箱门户和 GDK。
  • Matthias Clasen 和 Alex Larsson 正在开发在沙箱应用程序中打开文件的“门户”的初始实现
值得注意的更改
  • Emmanuele Bassi 合并了他用于简化 GdkWindow 绘图入口点的分支;此分支引入了一些新函数和一个 GdkDrawingContext 类,同时弃用了旧的 gdk_window_begin_paint* 函数系列; gdk_window_end_paint(); gdk_cairo_create(); 和 gtk_widget_send_expose()
  • Tristan Van Berkom 致力于修复 GtkScrolledWindow 中引入的新内容大小调整属性带来的影响,并确保大小调整请求是一致的。
修复的错误
  • Bug 767312 除非已调用 gtk_widget_get_style_context(),否则 gtk_widget_path_append_for_widget() 会遗漏类
  • Bug 79229 具有大量数字且值 pos 设置为 GTK_POS_TOP/BOTTOM 的 GtkScale 绘制不正确
  • Bug 118959 GtkScale 值 ‘-0’
  • Bug 710471 使 gtk_scrolled_window_remove() 智能
  • Bug 767310 高对比度主题在默认按钮中不显示焦点矩形
  • Bug 766860 Wayland 中平铺(捕捉、半最大化)的窗口不是 GDK_WINDOW_STATE_TILED
  • Bug 766675 向 GdkWindow 添加适当的帧绘制 API
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

控制 GtkScrolledWindow 中的内容大小

GtkScrolledWindow 部件是 Gtk+ 应用程序开发人员的老朋友;它的目的是允许通过使用滚动条将大的部件放入小的空间中。

GtkScrolledWindow Example
正在运行的垂直 GtkScrolledWindow

自 Gtk+ 3.0 以来,GtkScrolledWindow 能够通过 GtkScrolledWindow:min-content-widthGtkScrolledWindow:min-content-height 属性及其相关函数来设置最小内容大小(宽度和高度)。

从下一个稳定版本开始,Gtk+ 也将提供这些属性的最大尺寸对应项。

它们的作用是什么?

最小尺寸属性顾名思义,定义了可滚动区域将具有的最小尺寸(无论是宽度还是高度) - 即使其子项没有完全填充可用空间。

scrolledwindow min-content-height
即使子部件没有填充可用空间,也会分配滚动窗口。

另一方面,最大内容大小定义了可滚动区域在内容开始滚动之前允许增长的最大程度。

让我们看看它的实际效果

scroll animation
演示最小和最大内容大小的示例。滚动窗口永远不会小于 110 像素,并且永远不会高于 250 像素。
在何处以及如何使用它们

每当您想要限制可滚动区域的大小时,您都应该使用新属性。例如,GtkPopover 始终将其子部件缩小到最小尺寸。以下部分举例说明如何使内容在宽度和高度上最多增长到 300 像素

<template>
  <object class="GtkPopover">
    <child>
      <object class="GtkScrolledWindow">
        <property name="visible">True</property>
        <property name="max-content-width">300</property>
        <property name="max-content-height">300</property>
      </object>
    </child>
  </object>
</template>

或者,如果您想以编程方式实现相同的效果,则可以调用 gtk_scrolled_window_set_max_content_width()gtk_scrolled_window_set_max_content_height()

本周 GTK+ 动态 – 4

在过去的一周里,GTK+ 进行了 55 次提交,添加了 2378 行代码,删除了 1493 行代码。

计划和状态
  • Carlos Soriano 一直在 各种 主题 分支上进一步试验新的路径栏部件。
  • Emmanuele Bassi 一直在开发 一个新的 API,以简化 GtkWidget 内部的绘制入口点,为 GSK 内部新的渲染 API 做准备。
值得注意的更改
  • Timm Bäder 为 GtkStack 添加了一个可访问的表示形式,以便仅在辅助功能工具中显示当前可见的子项。
  • Matthias Clasen 在我们对没有分配的部件发出 GtkWidget::draw 调用时添加了一个警告;这不应该发生,警告允许跟踪行为不端的部件。
  • Lapo Calamandrei 修复了 Adwaita 关于菜单项、信息栏和可选标签的插入符颜色的问题。
  • Matthias Clasen 弃用了 GtkSizeGroup:ignore-hidden 属性,并将其记录为已损坏;不可见部件的大小调整实际上是不可能的,因为它们无法访问窗口系统和样式资源。建议使用 GtkStack 来代替为隐藏部件保留空间。
  • 添加了一个新的 GDK 设备源类型 GDK_SOURCE_TRACKPOINT 来表示指点杆/指点设备;此新设备类型可用于在部件中实现特定于设备的行为。
  • CSS 文本样式属性现在可以用于 GtkScaleGtkProgressbar 部件的值和标记。
  • Georges Basile Stavracas Neto 在 GtkScrolledWindow 中实现了 max-content-widthmax-content-height 属性;Tristan Van Berkom 修复了现有 min-content-widthmin-content-height 属性的长期大小调整问题。
修复的错误
  • 错误 745622 GtkInfoBar 中未突出显示选定的文本
  • 错误 767058 GtkInfoBar:右键单击/上下文菜单全白
  • 错误 767052 Wayland:将模态对话框图标化会使应用程序无法使用
  • 错误 767100 为指点杆添加一个输入源类型
  • 错误 767108 分隔符未正确放置在 GtkPopover 中
  • 错误 767093 wayland:提供有关滚动设备的信息
  • 错误 753202 更改点击滚动的光标
  • 错误 767165 更新 GDK_GRAB_FAILED 可用性的文档
  • 错误 742281 GtkScrolledWindow 应该具有 max-content-height 和 max-content-width 属性
  • 错误 674215 更新工具提示的回归
  • 错误 556254 在“object”测试中测试 GObject 类型的属性
  • 错误 708148 gtk_tree_view_get_path_at_pos 错误地识别初始像素列
  • 错误 765595 焦点离开模态弹出框时,模态弹出框不会关闭
  • 错误 766569 为 GTK_SCROLL_NATURAL 子项提供更好的尺寸请求
  • 错误 767238 修复 min-content-width/min-content-height 中的长期回归
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

本周 GTK+ 动态 – 3

在过去的一周里,GTK+ 进行了 26 次提交,添加了 5081 行代码,删除了 3618 行代码。

计划和状态
值得注意的更改
  • 文档方面进行了各种改进,特别是在 CSS 参考和 GTK+ 2.x → 3.x 迁移指南中。
  • Matthias Clasen 在 API 参考中添加了一个部分,该部分映射 README 文件中的发行说明;本节将用作从 3.x 迁移到未来 GTK+ 主要版本的迁移指南的起点。
  • 当简化设置为默认值的属性时,允许验证、简化、预览或检查 UI 描述文件的 gtk-builder-tool 实用程序现在会保留 GtkDialog:border-width 属性。
修复的错误
  • 错误 759037 GtkInfoBar:文档没有根据背景颜色和消息类型进行更新
  • 错误 747206 gtktextview:关于如何获取两个段落之间行距的说明
  • 错误 766643 取消映射具有挂起配置事件的窗口时,窗口被冻结
  • Bug 766122 重新使用的文件选择器在显示时一半时间显示$pwd
  • Bug 766878 placesview: 不要将图标名称标记为可翻译
  • Bug 764203 ‘textview border’节点的默认背景颜色
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

GTK+ 本周更新 – 2

上周,GTK+ 进行了 90 次提交,添加了 8502 行代码,删除了 7914 行代码。

计划和状态
  • Matthias Clasen 更新了 GTK+ 的路线图条目,其中包含一个带有他的原型分支的“标签条” GtkStack 控制器小部件。
值得注意的更改
  • Matthias Clasen 和 Lapo Calamandrei 对 GtkScale 进行了一些 CSS 更改,这些更改是为了涵盖所有侧面上标记的所有可能情况。 此外,GtkScale 在显示值时使用的 value 节点在文档中缺失,现已添加。
  • Debarshi Ray 修复了在 libvte 上工作时发现的 GtkScrolledWindowGTK_POLICY_NEVER 的一些分配问题。
  • Matthias Clasen 向 GTK 支持的 CSS 光标名称列表中添加了两个新的光标名称,context-menuno-drop;这些光标由 Adwaita 提供。
  • Matthew Waters 修复了 GDK 以使用线程安全的 Wayland 调度 API;这在多个线程轮询 Wayland 文件描述符的情况下特别有用。
  • Olivier Fourdan 致力于允许 Wayland 后端在询问 GDK 窗口显示在哪个监视器上时尝试返回合理的值; 这项工作仍在进行中,可能需要协议扩展来避免可能导致误报的猜测。
  • Ondrej Holy 致力于 GIO、GVFS 和 GTK+,以确保冷插拔驱动器在文件选择对话框的侧栏中被正确检测为可移动设备。
  • Javier Jardón 最终更新了 GTK+ 以使用上游 gettext,而不是由 GLib 修改的宏和构建文件。
修复的错误
  • Bug 373745 不要使用 AM_GLIB_DEFINE_LOCALEDIR(GTK_LOCALEDIR) 并使用 gettext 代替
  • Bug 766405 堆栈在 wayland 的小部件工厂中显示不正确的帧
  • Bug 763852 gdk/wayland: 事件源不是多线程感知的
  • Bug 766314 触摸抬起后出现虚假的离开通知事件
  • Bug 766442 窗口之间拖放功能损坏
  • Bug 766440 刻度滑块按钮已停止区分并为有或没有标记的刻度适当渲染
  • Bug 766566 Wayland: gdk_screen_get_monitor_at_window() 在 Wayland 下不可靠
  • Bug 766336 使用橡皮筋选择行时崩溃
  • Bug 765924 改进外部驱动器的检测
  • Bug 766642 HeaderBars 中的开关集成不佳
  • Bug 766737 堆栈:仅在必要时映射子项
  • Bug 766323 如果 GTKPopover 在重新父级时可见,则会发出警告
  • Bug 766782 Broadway 中的 OpenGL 导致段错误
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。