[Kazehakase-devel 2482] Re: セッションを何度も保存すると復元したときに複数のウィンドウが開く

Back to archive index

Kouhei Sutou kou****@cozmi*****
2005年 11月 23日 (水) 17:07:07 JST


須藤です.

In <1132647067.16405.14.camel @ localhost>
  "Re: [Kazehakase-devel 2475] セッションを何度も保存すると復元したときに複数のウィンドウが開く" on Tue, 22 Nov 2005 17:11:07 +0900,
  Hiroyuki Ikezoe <poinc****@ikezo*****> wrote:

> > > 数バージョン前から思っていたのですが,セッションを何度も保存
> > > すると,復元したときに保存した回数と同じ数だけウィンドウが開
> > > いてしまいます.
> > > 
> > > これは,セッションを保存したときに,現在開いているウィンドウ
> > > が1つであっても~/.kazehakase/current_session.xmlに
> > > /xbel/folderが複数保存されてしまうからだと思います.
> > > 
> > > 
> > > ざっとソースを見た感じだとこんな感じで直りそうな気がします.
> > > 
> > >   * 起動時にセッションを復元しない場合は,
> > >     current_session.xmlを読み込まないで,新規に現在のセッショ
> > >     ン用ブックマークを作る.
> > 
> > これをやってしまうと、手動でのセッション保存/復元ができなくなってしまう
> > のでまずいと思われます。
> > 
> > >   * セッションを復元する前に,現在のセッション用ブックマーク
> > >     (kz_bookmarks->current_section)を新規に作りなおしてから
> > >     セッションを復元するようにする.
> > 
> > これ(*1)だけで直るような気がするんですが、勘違いしてるかもしれません。
> > 
> > > # src/main.cにもsrc/actions/kz-actions.cにもrestore_session
> > > # があるのが嫌な感じ.
> > 
> > これは激しくまずいので直さねばならんです。
> > # なんかの理由があってこうしたんですが覚えてない。
> > 
> > とりあえづ、restore_sessionをひとつにして、*1をやってみようかと。
> 
> restore_sessionをひとつにして、起動時にセッションを復元する時には
> current_sessionの中身を空にする、ってのでやってみたら手元ではうまくいっ
> てる風なんですが、どうでしょうか?

残念ですが,直っていません.

もともと,「起動時に最後に保存したセッションを復元」にチェッ
クを入れている場合は以下のような問題は起こらなかったんです.

  * セッションを保存すると,復元したときに保存した回数と同じ
    数だけ(タブではなく)ウィンドウが開く

これは,以下のためです.

  (1) 起動時にkz_bookmarks->current_sessionを
      current_session.xmlから読み込んだセッションで初期化.

      問題1: 起動時はひとつもタブが開かれていないから,
      kz_bookmarks->current_sessionは空でなければいけないのに
      空になっていない場合がある.

  (2) 起動時,「起動時に最後に保存したセッションを復元」に
      チェックを入れて *いる* 場合はmain.cにある
      restore_session()を使って,セッションを復元する.
      
      罠1: main.cのrestore_session()はセッションを復元する前
      にkz_bookmarks->current_sessionをクリアしているので,
      問題1を解決している.

  (3) セッションの復元はkz-actions.cにある
      act_restore_session()を使って行われる.
      
      問題2: 「起動時に最後に保存したセッションを復元」にチェッ
      クを入れて *いない* 場合,
      kz_bookmarks->current_sessionには(1)で初期化されたセッ
      ション中に実際には開かれていないタブの情報が入っている
      可能性ある.


問題は以下で再現できると思います.

  (1) 風博士を起動
  (2) 「セッションを自動的に保存」にチェックを入れる
  (3) 「起動時に最後に保存したセッションを復元」のチェックを外す
  (4) 適当にタブを開く
  (5) 風博士を再起動
  (6) セッションを「復元」
  (7) (6)に戻る

コードでいえば,これで解決します.

Index: src/main.c
===================================================================
RCS file: /cvsroot/kazehakase/kazehakase/src/main.c,v
retrieving revision 1.103
diff -u -p -r1.103 main.c
--- src/main.c  22 Nov 2005 08:09:15 -0000      1.103
+++ src/main.c  23 Nov 2005 08:05:00 -0000
@@ -838,7 +838,6 @@ main (int argc, char *argv[])
        gint argc_copy;
        gboolean retval;
        GError *error = NULL;
-       gboolean restore = FALSE;

         /* initialize */
        setlocale(LC_ALL, "");
@@ -890,11 +889,7 @@ main (int argc, char *argv[])
        /* Load preference */
        open_app_info();

-       /* restore session */
-       KZ_CONF_GET("Session", "restore",
-                   restore, BOOL);
-       if (restore)
-               kz_bookmark_remove_all(kz_bookmarks->current_session);
+       kz_bookmark_remove_all(kz_bookmarks->current_session);

        /* create window */
        kz = KZ_WINDOW(kz_window_new(NULL));



Kazehakase-devel メーリングリストの案内
Back to archive index