[ 新規 | 編集 | 差分 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

others/ZEditor修正案

編集

ZEditorの修正案

カーソル位置の挙動に関する修正案

編集

とりあえずバイナリとパッチのみ。説明は後で…(^_^; (パッチ見て下さい…)
ZEditorの掲示板の方でやりとりしてるのを実際に実装してみました。
バージョン2.0.5ベースです。
Ver2.0.6で対応して頂けたようなのでバイナリの公開を中止します。

バイナリは

tar zxvf zeditor2.0.5-y1.tar.gz

で展開して

/opt/QtPalmtop/bin/zeditor

と置き換えて下さい。
この際オリジナルのファイルは必ずバックアップしておいて下さい。

オリジナルと区別するためにキャプションを変えているのでその部分も
パッチに含まれています。
実際に変更したい処理とはもちろん関係ありません。

修正内容について

編集

不具合その1

編集

他アプリケーションからファイルを指定されて開かれた場合(qcopメッセージ等でsetDocumentスロットで
ファイルが指定されて開かれた場合)に前回のカーソル位置が正しく復元しない。(高速起動OFF時)
※高速起動ONでもカーソル位置が復元しないように見えますが、これはこの不具合とは原因が別で"不具合その2"が原因です。
なぜ高速起動時の不具合は別かというと、高速起動時にはmain()はコールされないのでこの症状の処理内容とは合致しないからです。

ファイル指定でZEditorが起動された場合に、setDocumentスロットでopenLastFile()が呼ばれて
カーソル位置が復元された後でwrap_this()がコールされてしまっているために、
カーソル位置が(0,0)にセットされてしまいます。

これはshowMainDocumentWidget()のコール中にsetDocumentスロットはコールされるので
main()で

a.showMainDocumentWidget(&e);

の後に

e.wrap_this();

をコールしているため、カーソル位置復元後にカーソル位置がリセットされるという処理内容になってしまっています。

main()での処理順を変更し

e.wrap_this();
a.showMainDocumentWidget(&e);

としました。

不具合その2

編集

高速起動時のアプリケーション終了で前回のファイルの状態が更新されていないため、
カーソル位置の復元の挙動がおかしくなっている。

体感的には前々回のカーソル位置が復元されたような状態となってしまいます。

具体的な処理内容としては、
3)でファイルを閉じた時にはカーソル位置の記憶は行われません。
が、しかし4)で他アプリケーションからファイル指定で起動された場合には

とここまで書いたところで別の対処方法も思いついてしまったので別途記載します。

高速起動時の終了ではオブジェクトの解放は行われず、closeEvent()が呼ばれるだけなので、
closeEvent()でsetLastFile()をコールし、前回の状態を記憶するべきではないかと私は考えます。
※何故こう考えるかというと、高速起動ではない場合のアプリケーション終了時にはsetLastFile()が呼ばれ前回の状態が記憶されるので、高速起動でのアプリケーション終了も同じように扱うべきだと考えるからです。
高速起動On/Offで挙動が違ってしまっていたら厳密には高速起動に対応しているとは言えないと思います。

現在はwriteConf()でsetLastFile()をコールしていたが、これだと高速起動OFFの場合の終了時には前回の状態を記憶するが、
高速起動ONの状態では前回の状態を記憶しなくなってしまいます。

これは、writeConf()が呼ばれるタイミングというのが、オプション変更時とオブジェクト解放時だったので、
オプション変更時には前回の状態を更新する必要は無いと考え、アプリケーション終了時(高速起動にも対応するためにcloseEvent())に前回の状態を記憶する処理にしているためです。

今回私の行った対処方法では、アプリケーション終了時(高速起動含む)に前回の状態を記憶するという処理内容にしましたが、
openLastFile()での処理順を変更する事でも対処可能かと思われます。

// -------------------------------- change path, col, line !!!
openFile( listF.path( index ) );
int		col   = listF.col( index );
int		line  = listF.line( index );
int		color = listF.color( index );

上記の様にopenFile()をコールした後、カーソル位置を取得することでも一応この不具合に対処する事は可能です。
しかし、これは本質的な対処では無いと私は考えますので、closeEvent()で前回の状態を記憶するという処理の方が良いと思います。

コメント

編集
[[#rcomment]]

04783