Skip to content

BlinkGTK v1.1.0-build6

Choose a tag to compare

@daisy19gnu daisy19gnu released this 29 Jul 12:52

BlinkGTK 1.1.0-build6 リリースノート

日付: 2026-07-29
Chromium: 150.0.7871.46 (stable)
状態: 開発版 (1.1.0-dev)。本配布物は検証用途を含みます。

このリリースでできるようになったこと

文字サイズを変えてもページが白くならない

文字サイズを大きく変えた直後に、ページが白紙のまま固定される問題を解消しました。
見開きの縦書き表示で特に起きやすく、これまでは文字サイズ変更を備えた読書アプリが
成立しませんでした。

大きなリフローの途中で描画の差分領域が空と計算され、白いタイルが有効なまま
固定されるのが原因でした。真因まで辿って修正し、意図的に不具合を注入して
再発を検出する回帰試験を組み込んであります (Issue #120)。

静止時に CPU を消費しない

何も操作していない間、CPU を常時 1 コア近く消費し続けていた問題を解消しました。
バッテリー駆動の端末や、キオスク端末のように電源を入れたまま置いておく機器でも
使えます (Issue #115)。

日本語の縦書きで段組みができる

段組み (column-count) と writing-mode: vertical-rl を組み合わせたとき、列の
境目にかかる行が隣の列に欠けて描画される問題を解消しました。縦書きの電子書籍や、
新聞・雑誌のような多段組みの版面が組めます。

既定では無効です。従来の描画を変えないため、起動時に明示して有効にします。

myapp --enable-blink-features=CJKVerticalColumnFragmentation

現段階の実装は、列幅 600px・column-gap: 0・直交ルートの border/padding が 0 という
条件を前提としています。この範囲を外れる版面は従来どおりの描画になります
(Issue #110)。

権限の要求をアプリ側で決められる

Web ページからの位置情報・通知などの要求を、アプリが受け取って許可・拒否を返せる
ようになりました。既定は拒否です。シグナルを繋がなければ、すべての要求が自動的に
拒否されます。

キオスク端末や電子書籍リーダーのように「利用者に権限ダイアログを出したくない」
「特定の要求だけ通したい」という用途で、挙動を保証できます。

static gboolean on_permission(BlinkWebView *view,
                              BlinkPermissionRequest *req,
                              gpointer user_data) {
    const char *kind = blink_permission_request_get_type_name(req);
    if (g_strcmp0(kind, "notifications") == 0)
        blink_permission_request_allow(req);   /* 通知だけ許可 */
    else
        blink_permission_request_deny(req);
    return TRUE;   /* 処理したことを伝える */
}

g_signal_connect(view, "permission-request", G_CALLBACK(on_permission), NULL);

User-Agent と Cookie を差し替えられる

blink_web_view_set_user_agent() で User-Agent を上書きし、
blink_web_view_set_cookie() で Cookie を仕込めます。特定のサービス向けの専用
クライアントを作る場合や、認証済みの状態で起動したい場合に使えます。

Python や JavaScript から書ける

GObject Introspection まわりを整備しました。列挙型 (LoadEvent / LoadError /
GpuMode / ContentPolicy) を GType として登録し、プロパティ変更の notify:: 通知と
uri-changed シグナルが実際のナビゲーションで発火するようにしています。
PyGObject と GJS から動作を確認済みです。

マウス操作が実用に耐えるようになった

ホイールスクロールの座標、スクロールバーのつまみのドラッグ、ページ遷移後の
クリックが正しく動くようになりました。これまでは画面中央以外がスクロールできない、
本を切り替えたあとクリックが効かず再起動が必要、といった状態でした
(Issue #112 / #114)。

アプリを好きな場所に置ける

blink_gtk_set_resources_path() が Chromium のすべてのリソースに効くように
なりました。従来はリソースパックだけが実行ファイルの隣を見ていたため、独自の
ディレクトリ構成を持つアプリが起動できませんでした。

100 行で組み込み方が分かる

同梱するサンプルを、https://google.com/ を表示するだけの blinkgtk_browser
(105 行) 1 本にしました。examples/make と打つだけでビルドできます。従来
同梱していた開発用ブラウザは、描画経路の切り替えなど開発時にしか使わない機能を
多く含み、組み込み方を知るための例としては大きすぎました。

なお メインループだけは GTK と書き方が違いますg_application_run() ではなく
blink_gtk_run_main_loop() を呼んでください (前者では画面が白いままになります)。
GTK4 そのものの使い方は https://docs.gtk.org/gtk4/ を参照してください。

動かすために必要なもの

Chromium 150.0.7871.46 (stable) をベースにしています。

パッケージは WebKitGTK と同じく 3 つに分かれています。アプリを 動かす だけなら
runtime、ビルド するなら devel も、Python や JavaScript から使う なら gir も
入れてください。

中身 必要になる場面
runtime 共有ライブラリと Chromium ランタイム 実行
devel ヘッダと blinkgtk-0.1.pc ビルド
gir GObject Introspection typelib Python / GJS

リンクは必ず pkg-config --cflags --libs blinkgtk-0.1 を通してください。
-lblinkgtk だけを手で書くと、ビルドも起動も通るのにページが白いままになります
(Chromium の allocator shim が実行ファイルの直接依存として必要なためです)。

共有ライブラリの SONAME は libblinkgtk-0.1.so.0 に版数付けされています。
各リリースには第三者ライセンス表記 (THIRD_PARTY_NOTICES.html) と SHA256SUMS
付きます。

切り分け用のスイッチ

上記の修正が原因で不都合が出た場合に、修正前の挙動へ戻すための環境変数です。
通常は設定不要です。

環境変数 戻る挙動
BLINKGTK_120_INVAL_FALLBACK=0 白紙固定の修正 (差分領域のフォールバック) を無効化
BLINKGTK_120_ACT_REDRAW=0 白紙固定の修正 (再描画の供給) を無効化
BLINKGTK_CAPTURE_DAMAGE_GATE=0 CPU 消費削減のうち、描画取得の間引きを無効化
BLINKGTK_PUMP_LEGACY=1 CPU 消費削減のうち、メインループの変更を無効化
BLINKGTK_PUMP_RESCUE=0 メインループの起床ハートビートを無効化
BLINKGTK_EGL_FRACTIONAL=1 実験中の分数スケーリングを有効化 (既定は整数、Issue #117)

公開している環境変数の一覧は、同梱の api-reference/environment-variables-ja.md にあります。
ここに載っていないものは内部診断用で、予告なく変わります。

修正の一覧

上記に含まれない修正と、build ごとの内訳です。

build6

同梱ドキュメントの是正のみで、バイナリに変更はありません。

  • ドキュメントに書かれていたビルドコマンド (gcc ... -lblinkgtk) が、記載どおりに
    実行すると失敗する状態でした。10 ファイル 16 箇所を是正しています。doc のビルド
    コマンドを実際に実行して検証するゲートを追加しました。
  • 「WebKitGTK と完全互換」という記述は誤りでした。関数名も対象オブジェクトも
    異なります。実態に沿う表現に改めました。
  • 対象バージョン表記が v0.9 系のまま残っていた箇所を更新しました。
  • 開発用の内部番号 (CP 番号・Build 番号) を利用者向けの記述から除きました。
  • ドキュメント間のリンクが Web で開けなかった問題を修正しました。
  • 説明が先に長く続いて手順に辿り着けない構成を、先に手順・後に仕組みへ改めました。

build5

  • blink_gtk_set_resources_path() がリソースパックに効いていなかった問題を修正。
    実行ファイルをリソースと別の場所に置くと
    Check failed: data_pack->LoadFromPath(path) で起動できませんでした。
  • 同梱サンプルの実行ファイルに、ビルド環境の絶対パスが rpath として埋め込まれて
    いた問題を修正。
  • 同梱サンプルを blinkgtk_browser に入れ替え。
  • 設定 API のドキュメントから、同梱サンプルに存在しないコマンドラインオプションの
    例を削除し、API での設定例に置き換え。

build4

build2 / build3 の同梱ドキュメントに、同梱バイナリに存在しない API を記載した箇所が
20 種
ありました。記載どおりに書くとビルドできない状態で、settings-api /
c-api-reference / navigation-api / signals-api と各チュートリアルが該当します。

  • 記載名が実装と食い違っていたものを実名に修正
    (blink_web_view_set_enable_javascriptblink_web_view_set_javascript_enabled
    blink_web_view_set_auto_load_imagesblink_web_view_set_images_enabled)。
  • User-Agent / Cookie / 権限要求を実装。
  • 実装のないドキュメント (INI 形式の設定ファイル API、アクセシビリティ API) は同梱から
    取り下げ。実装後に改めて提供します。
  • 配布物そのものを展開して doc と binary の整合を機械検証するゲートを追加し、公開の
    前提条件としました。
  • 保守されていない検査用プログラム (api_check.c / api_tester.c) の同梱を終了。
  • examples/Makefile を pkg-config ベースに差し替え (従来のものは autotools が生成した
    もので、生成環境の絶対パスを含み配布先では動きませんでした)。
  • tarball / RPM / DEB のすべてを build4 として再生成 (build3 は RPM のみの差し替え)。

build2 (v1.1 系の初回一般公開版、2026-07-21)

build1 は内部検証のみで一般公開していません。

  • Chromium 150 (stable) へ移行。V8 スナップショットの整合、描画スモーク、実機での
    縦組み描画 (EGL 経路を含む) を検証済み。
  • 共有ライブラリの SONAME を libblinkgtk-0.1.so.0 に版数付け。
  • runtime / devel / gir の 3 分割配布を開始。
  • メインループに 100ms の起床ハートビートを追加し、滞留した処理の遅延を有界化
    (アイドル時の負荷増は実測 0.5% 未満)。
  • 公開している環境変数の一覧 (environment-variables-{ja,en}.md) を同梱ドキュメントに
    追加。
  • 診断用の基盤 (フレーム検査・不具合注入など) は環境変数で無効を既定として同梱して
    おり、通常の動作には影響しません。

互換性

  • 利用側 (consumer) は PartitionAlloc allocator shim の直接リンクが必要です
    (同梱の pkg-config blinkgtk-0.1.pc が処理します。Issue #90)。
  • C API に互換性を壊す変更はありません。
  • SONAME 版数付け (libblinkgtk-0.1.so.0) により、consumer は再リンクで versioned な
    依存を持ちます。devel パッケージの pkg-config 経由でビルドすれば自動的に整合します。

既知の制限

  • CJKVerticalColumnFragmentation は列幅 600px / column-gap 0 / 直交ルートの
    border·padding 0 を前提とした段階の実装です (experimental、既定無効)。
  • tarball (FHS) 実行時は runtime の ld.so.conf.d 断片または LD_LIBRARY_PATH
    private dir (/usr/lib64/blinkgtk-0.1/) を解決してください。
  • アイドル時の CPU 消費 (Issue #115) は継続調査中です。