From 2c081e4f1c810965808cd20e774ff90e4f9ccf3f Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Mon, 3 Sep 2018 20:41:56 +0900 Subject: [PATCH 01/51] Add clang-format 6.0 config file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LLVMスタイルを元にJDスタイルを再現する 表記ゆれのある部分はJDのコードを調べて多数の方を採用する 曖昧な部分はLLVMスタイルを踏襲する JDスタイルから変更した部分 * 単独のジャンプ文(continue, break, goto, return, throw)を除き if-else文のブロックに波括弧を付ける ```cpp // YES if( expr ) return 1; if( long_long_expr1 && long_long_expr2 ) return long_long_func( long_long_value ); if( expr ) { var = 20; } // NO if( expr ) var = 20; if( expr ) var = 20; ``` * 空の文(;)を除きループ文のブロックに波括弧を付ける ```cpp // YES while( expr ) ; while( expr ) { var += 1; } // NO while( expr ); while( expr ) var += 1; while( expr ) var += 1; ``` ツールで再現できていないスタイル * マクロGTKMM_CHECK_VERSION()の引数 -> スペースを取り除いてJDスタイルに準ずる ```cpp // YES #if GTKMM_CHECK_VERSION(2,10,0) #endif // NO (clang-format) #if GTKMM_CHECK_VERSION( 2, 10, 0 ) #endif ``` * 制御構文の条件式の閉じ括弧とブロックの開き波括弧の間 -> ツールで整形したままでよい ```cpp // OK (clang-format) if( expr ) { } // (JD style) if( expr ){ } ``` * 否定演算子の後 -> ツールで整形したままでよい ```cpp // OK (clang-format) func( !expr ); // (JD style) func( ! expr ); ``` * for文の条件式の初期化パートが空のとき -> ツールで整形したままでよい ```cpp // OK (clang-format) for( ; expr1; expr2 ) { } // (JD style) for(; expr1; expr2 ){ } ``` --- .clang-format | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000..c460d2ae78 --- /dev/null +++ b/.clang-format @@ -0,0 +1,115 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: DontAlign +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: true + AfterControlStatement: false + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: true + AfterExternBlock: false + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: true +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: false +ColumnLimit: 0 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: true +IndentPPDirectives: None +IndentWidth: 4 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 3 +NamespaceIndentation: All +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +RawStringFormats: + - Delimiter: pb + Language: TextProto + BasedOnStyle: google +ReflowComments: true +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: Never +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: true +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: true +SpacesInSquareBrackets: true +Standard: Cpp11 +TabWidth: 8 +UseTab: Never +... + From 66344314de82e11b317ec8d263c5f925a9679e6e Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Tue, 19 Jun 2018 09:37:40 +0900 Subject: [PATCH 02/51] Add configure flag --with-gtkmm3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtkmm-2.4の代わりにgtkmm-3.0を使ってビルドするconfigureフラグを追加する gtkmm-3.0のバージョンは3.18以上を推奨 見出しや箇条書きなどを除きREADME.mdの文章をですます調にする --- INSTALL | 11 +++++-- README.md | 92 +++++++++++++++++++++++++++++++++++++++------------- configure.ac | 24 +++++++++++--- 3 files changed, 99 insertions(+), 28 deletions(-) diff --git a/INSTALL b/INSTALL index 6f3800c994..960d905be9 100644 --- a/INSTALL +++ b/INSTALL @@ -6,6 +6,7 @@ 必須環境 ・gtkmm-2.4.8 以上 + ・gtkmm-3.0.0 以上 (GTK3版) ・zlib-1.2 以上 ・gnutls-1.2 以上 @@ -13,6 +14,7 @@ ・Linux Kernel 2.6以上 ・gtkmm-2.8以上 ( 2.6より低いとレイアウトが一部崩れる、2.8より低いとスレ一覧表示が遅い ) + ・gtkmm-3.18.0 以上 ・UTF-8環境 ( EUC環境では LANG="ja_JP.UTF-8" を指定する必要がある ) * makeに必要なツール、ライブラリ @@ -31,7 +33,7 @@ オプション ・alsa-lib (--with-alsa) - ・libgnomeui (--with-sessionlib=gnomeui) + ・libgnomeui (--with-sessionlib=gnomeui) (GTK2版) ・openssl (--with-openssl) ・oniguruma (--with-oniguruma) ・libpcre (--with-pcre) @@ -55,7 +57,8 @@ --with-sessionlib=[xsmp|gnomeui|no] - GNOMEUIを使ってセッション管理をするには「gnomeui」を、セッション管理を無効にするには「no」を選択。デフォルトでは XSMPを使用する。 + GNOMEUIを使ってセッション管理をするには「gnomeui」を。セッション管理を無効にするには「no」を選択。 + デフォルトでは XSMPを使用する。「gnomeui」はGTK2版のみ利用できる。 --with-pangolayout @@ -102,6 +105,10 @@ pthreadの代わりにgthreadまたはstd::threadを使用する。 + --with-gtkmm3 + + gtkmm2のかわりにgtkmm3を使用する。 + * メモ 最近のディストリビューションの場合は autogen.sh よりも autoreconf -i の方を推奨。 diff --git a/README.md b/README.md index 5f1d1d6f3f..d73e48fe21 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ * [導入方法](#導入方法) * [事前準備](#事前準備) * [ビルド](#ビルド) + * [GTK3版について](#GTK3版について) * [通常の起動](#通常の起動) * [コマンドライン オプション](#コマンドライン-オプション) * [多重起動について](#多重起動について) @@ -39,21 +40,25 @@ WindowsではMinGWを使ってビルド可能ですが、動作はまだ安定 ## 導入方法 -ソースコードからGTK2版 JDimをビルドします。 -GTK3版については[Issues][issues]を見てください。 - -[issues]: https://github.com/JDimproved/JDim/issues +ソースコードからJDimをビルドします。**デフォルトの設定ではGTK2版がビルド**されますのでご注意ください。 +詳細は [INSTALL](./INSTALL) にも書いてあります。 ### 事前準備 -一度だけやればいい。 +ツールチェーンとライブラリをインストールします。一度インストールすれば次回から事前準備はいりません。 #### Redhat系 +*GTK2版* ```sh dnf install gtkmm24-devel gnutls-devel libgcrypt-devel libSM-devel libtool automake autoconf-archive git ``` +*GTK3版* - `gtkmm24-devel` のかわりに `gtkmm30-devel` をインストールします。 +```sh +dnf install gtkmm30-devel gnutls-devel libgcrypt-devel libSM-devel libtool automake autoconf-archive git +``` + #### Debian系 ```sh sudo apt-get build-dep jd @@ -72,15 +77,22 @@ sudo apt-get install build-essential automake autoconf-archive git sudo apt-get install build-essential automake autoconf-archive git libtool ``` -必要なライブラリを入れる。(抜けがあるかも) +必要なライブラリを入れます。(抜けがあるかも) +*GTK2版* ```sh sudo apt-get install libgtkmm-2.4-dev libmigemo1 libasound2-data libltdl-dev libasound2-dev libgnutls28-dev libgcrypt20-dev ``` +*GTK3版* - `libgtkmm-2.4-dev` のかわりに `libgtkmm-3.0-dev` をインストールします。 +```sh +sudo apt-get install libgtkmm-3.0-dev libmigemo1 libasound2-data libltdl-dev libasound2-dev libgnutls28-dev libgcrypt20-dev +``` + ### ビルド +*GTK2版 (デフォルト)* ```sh git clone -b master --depth 1 https://github.com/JDimproved/JDim.git jdim cd jdim @@ -89,12 +101,30 @@ autoreconf -i make ``` -実行するには直接 src/jdim を起動するか手動で /usr/bin あたりに src/jdim を cp する。 +*GTK3版* - ./configure にオプション `--with-gtkmm3` を追加します。 +```sh +git clone -b master --depth 1 https://github.com/JDimproved/JDim.git jdim +cd jdim +autoreconf -i +./configure --with-gtkmm3 +make +``` + +実行するには直接 src/jdim を起動するか手動で /usr/bin あたりに src/jdim を cp します。 + +#### Arch Linux +GTK3版のビルドファイルはAURで公開されています。(Thanks to @naniwaKun.) +https://aur.archlinux.org/packages/jdim-git/ + +AUR Helper [yay](https://github.com/Jguer/yay) でインストール +```sh +yay -S jdim-git +``` ### 参考 -詳しいインストールの方法は [本家のwiki](https://ja.osdn.net/projects/jd4linux/wiki/OS%2f%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%A5%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95) を参照。 +詳しいインストールの方法は [本家のwiki](https://ja.osdn.net/projects/jd4linux/wiki/OS%2f%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%A5%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95) を参照してください。 ### Tips @@ -126,36 +156,54 @@ make 3. `make CXXFLAGS+="-std=c++11"` でビルドする。 +### GTK3版について + +GTK3版はGTK2版同様のルック・アンド・フィールになるように実装していますが、 +技術的な問題やテスト不足から完全な再現はできていません。 +もしお気づきの点などがございましたらご指摘いただけると幸いです。 + +#### マウスホイール操作 +板一覧やスレ一覧でマウスホイールによるスクロールが動作しないことがあります。 +環境変数 `GDK_CORE_DEVICE_EVENTS=1` を設定してjdimを起動するとマウスホイール機能が使えます。 +```sh +# シェルからJDimを起動する場合 +GDK_CORE_DEVICE_EVENTS=1 ./src/jdim +``` + +#### GTK3版の既知の問題 +* GTK3ではタブの上でマウスホイールするとページが切り替わる機能は削除された。 + + ## 通常の起動 -使い方は以下のとおり。 +使い方は以下のとおりです。 ```sh $ jdim [OPTION] [URL,FILE] ``` -引数にURLを付けて起動する事も出来るので、他のアプリケーションから外部コマンドとしてURLを開く事などが出来る。 -(JDimが扱う事の出来るURLでない場合は設定されているWebブラウザに渡される) +引数にURLを付けて起動する事も出来るので、他のアプリケーションから外部コマンドとしてURLを開く事などが出来ます。 +(JDimが扱う事の出来るURLでない場合は設定されているWebブラウザに渡されます) ```sh $ jdim http://pc99.2ch.net/test/read.cgi/linux/1234567890/ ``` -ローカルにあるdatファイルを指定して、一時的にスレビュー表示させることも出来る。 +ローカルにあるdatファイルを指定して、一時的にスレビュー表示させることも出来ます。 ```sh $ jdim ./12345.dat ``` -環境変数 `JDIM_CACHE` でキャッシュディレクトリの位置を変更・指定することが可能。 -指定しなければ `~/.jd` がキャッシュディレクトリになる。 +環境変数 `JDIM_CACHE` でキャッシュディレクトリの位置を変更・指定することが可能です。 +指定しなければ `~/.jd` がキャッシュディレクトリになります。 ```sh $ JDIM_CACHE=~/.mycache jdim ``` -環境変数 `JDIM_LOCK` でロックファイルの位置を変更・指定することが可能。 -指定しなければ `~/.jd/JDLOCK` がロックファイルになる。 +環境変数 `JDIM_LOCK` でロックファイルの位置を変更・指定することが可能です。 +指定しなければ `~/.jd/JDLOCK` がロックファイルになります。 ```sh $ JDIM_LOCK=~/mylock jdim @@ -176,16 +224,16 @@ $ JDIM_LOCK=~/mylock jdim ## 多重起動について -JDimはメインプロセス/サブプロセスという関係で動作する。 +JDimはメインプロセス/サブプロセスという関係で動作します。 * メインプロセス: 指令を受け取る事が出来るプロセス * サブプロセス: 指令を出す事が出来るプロセス -通常は最初に起動した物がメインプロセスとなり、メインプロセスは1つだけ存在する事が出来る。 -メインプロセスが存在する状態で起動したプロセスはサブプロセスとして扱われ、複数存在させる事も可能。 -なお、指令を受け取るのはメインプロセスのみなので、指令を出す側のサブプロセスでURLは開かれない。 +通常は最初に起動した物がメインプロセスとなり、メインプロセスは1つだけ存在する事が出来ます。 +メインプロセスが存在する状態で起動したプロセスはサブプロセスとして扱われ、複数存在させる事も可能です。 +なお、指令を受け取るのはメインプロセスのみなので、指令を出す側のサブプロセスでURLは開かれません。 -以下のコマンドを使い分ける事でサブプロセスの起動のしかたをコントロール出来る。 +以下のコマンドを使い分ける事でサブプロセスの起動のしかたをコントロール出来ます。 * a. 起動するかどうか確認してサブプロセスを起動 ```sh @@ -200,7 +248,7 @@ JDimはメインプロセス/サブプロセスという関係で動作する。 $ jdim -m http://pc99.2ch.net/test/read.cgi/linux/1234567890/ ``` -注: サブプロセスを残したままメインプロセスを終了していた場合は次に起動したプロセスがメインプロセスとなる。 +注: サブプロセスを残したままメインプロセスを終了していた場合は次に起動したプロセスがメインプロセスとなります。 ## JDとの互換性 diff --git a/configure.ac b/configure.ac index 252ac718dd..883cef148e 100644 --- a/configure.ac +++ b/configure.ac @@ -84,16 +84,32 @@ GNOMEUI_LIBS="" dnl dnl パッケージのチェック dnl -PKG_CHECK_MODULES(GTKMM,[gtkmm-2.4 >= 2.4.0], [], []) PKG_CHECK_MODULES(GTHREAD, [gthread-2.0 >= 2.0] ) -AC_SUBST(GTKMM_CFLAGS) -AC_SUBST(GTKMM_LIBS) AC_SUBST(GTHREAD_CFLAGS) AC_SUBST(GTHREAD_LIBS) -dnl +dnl +dnl checking gtkmm +dnl +AC_MSG_CHECKING(for --with-gtkmm3) +AC_ARG_WITH(gtkmm3, + [AS_HELP_STRING([--with-gtkmm3], [use gtkmm-3.0 instead of gtkmm-2.4 [default=no]])], + [with_gtkmm3="$withval"], + [with_gtkmm3=no]) +AC_MSG_RESULT($with_gtkmm3) + +AS_IF([test "x$with_gtkmm3" = xno], + [PKG_CHECK_MODULES(GTKMM, [gtkmm-2.4 >= 2.4.0], [], [])], + [PKG_CHECK_MODULES(GTKMM, [gtkmm-3.0 >= 3.0.0], [], []) + AC_DEFINE(WITH_GTKMM_3_0, 1, [Use gtkmm-3.0 instead of gtkmm-2.4])]) + +AC_SUBST(GTKMM_CFLAGS) +AC_SUBST(GTKMM_LIBS) + + +dnl dnl crypt dnl From 1673167d75d1d4f4e4cb4a48d578043bfc87ecb9 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Mon, 16 Jul 2018 21:53:18 +0900 Subject: [PATCH 03/51] Use im_context_filter_keypress() instead of im context function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtk3 removes many implementation details and struct members from public headers. 挙動の変更 リセットフラグを設定できないため即時リセットするように変更する --- src/skeleton/editview.cpp | 10 ++++++++++ src/skeleton/entry.cpp | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/skeleton/editview.cpp b/src/skeleton/editview.cpp index f649695d99..6d2c2a69d3 100644 --- a/src/skeleton/editview.cpp +++ b/src/skeleton/editview.cpp @@ -348,6 +348,15 @@ bool EditTextView::on_key_press_event( GdkEventKey* event ) case CONTROL::UndoEdit: case CONTROL::InputAA: { +#if GTKMM_CHECK_VERSION(3,0,0) + if( im_context_filter_keypress( event ) ) { +#ifdef _DEBUG + std::cout << "gtk_im_context_filter_keypress\n"; +#endif + reset_im_context(); + return true; + } +#else GtkTextView *textview = gobj(); if( gtk_im_context_filter_keypress( textview->im_context, event ) ) { @@ -357,6 +366,7 @@ bool EditTextView::on_key_press_event( GdkEventKey* event ) textview->need_im_reset = TRUE; return true; } +#endif // GTKMM_CHECK_VERSION(3,0,0) } } diff --git a/src/skeleton/entry.cpp b/src/skeleton/entry.cpp index e2f1696b1a..ff4c725594 100644 --- a/src/skeleton/entry.cpp +++ b/src/skeleton/entry.cpp @@ -44,6 +44,15 @@ bool JDEntry::on_key_press_event( GdkEventKey* event ) // gtkentry.cpp からのハック。環境やバージョンによっては問題が出るかもしれないので注意 if( up || down || esc ){ +#if GTKMM_CHECK_VERSION(3,0,0) + if( im_context_filter_keypress( event ) ) { +#ifdef _DEBUG + std::cout << "gtk_im_context_filter_keypress\n"; +#endif + reset_im_context(); + return TRUE; + } +#else GtkEntry *entry = gobj(); if( gtk_im_context_filter_keypress( entry->im_context, event ) ) { @@ -54,6 +63,7 @@ bool JDEntry::on_key_press_event( GdkEventKey* event ) return TRUE; } +#endif // GTKMM_CHECK_VERSION(3,0,0) else if( up || down ){ if( up ) m_sig_operate.emit( CONTROL::Up ); From 83a3399be25cb5d90d3ae405d2b39bf62cc9e436 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Tue, 3 Jul 2018 21:05:53 +0900 Subject: [PATCH 04/51] Implement PopupWinBase::on_draw() instead of on_expose_event() Gtk::Widget::on_expose_event() is removed. --- src/skeleton/popupwinbase.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/skeleton/popupwinbase.h b/src/skeleton/popupwinbase.h index 53f1165388..0781e48d48 100644 --- a/src/skeleton/popupwinbase.h +++ b/src/skeleton/popupwinbase.h @@ -7,6 +7,8 @@ #ifndef _POPUPWINBASE_H #define _POPUPWINBASE_H +#include "gtkmmversion.h" + #include namespace SKELETON @@ -26,7 +28,9 @@ namespace SKELETON class PopupWinBase : public Gtk::Window { SIG_CONFIGURED_POPUP m_sig_configured; +#if !GTKMM_CHECK_VERSION(3,0,0) Glib::RefPtr< Gdk::GC > m_gc; +#endif bool m_draw_frame; @@ -46,10 +50,25 @@ namespace SKELETON { Gtk::Window::on_realize(); +#if !GTKMM_CHECK_VERSION(3,0,0) Glib::RefPtr< Gdk::Window > window = get_window(); m_gc = Gdk::GC::create( window ); +#endif } +#if GTKMM_CHECK_VERSION(3,0,0) + bool on_draw( const Cairo::RefPtr< Cairo::Context >& cr ) override + { + const bool ret = Gtk::Window::on_draw( cr ); + if( m_draw_frame ) { + Gdk::Cairo::set_source_rgba( cr, Gdk::RGBA( "black" ) ); + cr->set_line_width( 1.0 ); + cr->rectangle( 0.0, 0.0, get_width(), get_height() ); + cr->stroke(); + } + return ret; + } +#else bool on_expose_event( GdkEventExpose* event ) override { bool ret = Gtk::Window::on_expose_event( event ); @@ -62,6 +81,7 @@ namespace SKELETON return ret; } +#endif // GTKMM_CHECK_VERSION(3,0,0) bool on_configure_event( GdkEventConfigure* event ) override { From 8aa75e583971ddfbe6967bb847d6531614045a6b Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Thu, 7 Jun 2018 17:19:23 +0900 Subject: [PATCH 05/51] Use Cairo API for DrawAreaBase instead of Gdk::Drawable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gdk::Drawable API is deprecated. cairomm 1.12.0 がメモリリークを起こしたので C API を使うことで 問題を回避する --- src/article/drawareabase.cpp | 446 +++++++++++++++++++++++++++++++++-- src/article/drawareabase.h | 21 ++ 2 files changed, 446 insertions(+), 21 deletions(-) diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index 15cdf63897..c8c5a19072 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -40,6 +40,10 @@ #include #include +#if GTKMM_CHECK_VERSION(3,0,0) && !defined( USE_PANGOLAYOUT ) +#include +#endif + using namespace ARTICLE; enum @@ -96,18 +100,32 @@ DrawAreaBase::DrawAreaBase( const std::string& url ) , m_layout_tree( 0 ) , m_seen_current( 0 ) , m_window( 0 ) +#if GTKMM_CHECK_VERSION(3,0,0) + , m_cr( nullptr, cairo_destroy ) + , m_backscreen( nullptr, cairo_surface_destroy ) +#else , m_gc( 0 ) , m_backscreen( NULL ) +#endif , m_pango_layout( 0 ) , m_draw_frame( false ) +#if GTKMM_CHECK_VERSION(3,0,0) + , m_back_frame_top( nullptr, cairo_surface_destroy ) + , m_back_frame_bottom( nullptr, cairo_surface_destroy ) +#else , m_back_frame( NULL ) +#endif , m_ready_back_frame( false ) , m_aafont_initialized( false ) , m_strict_of_char( false ) , m_configure_reserve( false ) , m_configure_width( 0 ) , m_configure_height( 0 ) +#if GTKMM_CHECK_VERSION(3,0,0) + , m_back_marker( nullptr, cairo_surface_destroy ) +#else , m_back_marker( NULL ) +#endif , m_ready_back_marker( false ) , m_wait_scroll( 0 ) , m_cursor_type( Gdk::ARROW ) @@ -308,28 +326,48 @@ void DrawAreaBase::init_color() const int usrcolor = colors.size(); m_color.resize( END_COLOR_FOR_THREAD + usrcolor ); +#if GTKMM_CHECK_VERSION(3,0,0) + using Color = Gdk::RGBA; + Glib::RefPtr< Gtk::StyleContext > context = get_style_context(); +#else + using Color = Gdk::Color; Glib::RefPtr< Gdk::Colormap > colormap = get_default_colormap(); +#endif int i = COLOR_FOR_THREAD +1; for( ; i < END_COLOR_FOR_THREAD; ++i ){ - m_color[ i ] = Gdk::Color( CONFIG::get_color( i ) ); + m_color[ i ] = Color( CONFIG::get_color( i ) ); +#if !GTKMM_CHECK_VERSION(3,0,0) colormap->alloc_color( m_color[ i ] ); +#endif } // スレビューの選択色でgtkrcの設定を使用 if( CONFIG::get_use_select_gtkrc() ){ +#if GTKMM_CHECK_VERSION(3,0,0) + const bool fg_ok = context->lookup_color( u8"theme_selected_fg_color", m_color[ COLOR_CHAR_SELECTION ] ); + const bool bg_ok = context->lookup_color( u8"theme_selected_bg_color", m_color[ COLOR_BACK_SELECTION ] ); + if( !fg_ok || !bg_ok ) { +#ifdef _DEBUG + std::cout << "ERROR:DrawAreaBase::init_color lookup theme color failed." << std::endl; +#endif + } +#else m_color[ COLOR_CHAR_SELECTION ] = get_style()->get_text( Gtk::STATE_SELECTED ); colormap->alloc_color( m_color[ COLOR_CHAR_SELECTION ] ); m_color[ COLOR_BACK_SELECTION ] = get_style()->get_base( Gtk::STATE_SELECTED ); colormap->alloc_color( m_color[ COLOR_BACK_SELECTION ] ); +#endif } - std::vector< std::string >::const_iterator it = colors.begin(); - for( ; it != colors.end(); ++it, ++i ){ - m_color[ i ] = Gdk::Color( ( *it ) ); + for( const auto& color : colors ) { + m_color[ i ] = Color( color ); +#if !GTKMM_CHECK_VERSION(3,0,0) colormap->alloc_color( m_color[ i ] ); +#endif + ++i; } } @@ -459,7 +497,11 @@ void DrawAreaBase::focus_view() void DrawAreaBase::focus_out() { // realize していない +#if GTKMM_CHECK_VERSION(3,0,0) + if( !m_window ) return; +#else if( !m_gc ) return; +#endif #ifdef _DEBUG std::cout << "DrawAreaBase::focus_out\n"; @@ -1124,14 +1166,26 @@ bool DrawAreaBase::exec_layout_impl( const bool is_popup, const int offset_y ) std::cout << "create backscreen : width = " << m_view.get_width() << " height = " << m_view.get_height() << std::endl; #endif +#if GTKMM_CHECK_VERSION(3,0,0) + m_backscreen.reset( gdk_window_create_similar_surface( + m_window->gobj(), CAIRO_CONTENT_COLOR, m_view.get_width(), m_view.get_height() ) ); +#else m_backscreen.reset(); m_backscreen = Gdk::Pixmap::create( m_window, m_view.get_width(), m_view.get_height() ); +#endif m_rect_backscreen.y = 0; m_rect_backscreen.height = 0; +#if GTKMM_CHECK_VERSION(3,0,0) + m_back_frame_top.reset( gdk_window_create_similar_surface( + m_window->gobj(), CAIRO_CONTENT_COLOR, m_view.get_width(), WIDTH_FRAME ) ); + m_back_frame_bottom.reset( gdk_window_create_similar_surface( + m_window->gobj(), CAIRO_CONTENT_COLOR, m_view.get_width(), WIDTH_FRAME ) ); +#else m_back_frame.reset(); m_back_frame = Gdk::Pixmap::create( m_window, m_view.get_width(), WIDTH_FRAME * 2 ); +#endif m_ready_back_frame = false; @@ -1680,7 +1734,9 @@ int DrawAreaBase::get_width_of_one_char( const char* utfstr, int& byte, char& pr bool DrawAreaBase::draw_screen( const int y, const int height ) { if( ! m_enable_draw ) return false; +#if !GTKMM_CHECK_VERSION(3,0,0) if( ! m_gc ) return false; +#endif if( ! m_backscreen ) return false; if( ! m_layout_tree ) return false; if( ! m_layout_tree->top_header() ) return false; @@ -1806,23 +1862,52 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw m_rect_backscreen.width = width_view; m_rect_backscreen.height = height_screen; +#if !GTKMM_CHECK_VERSION(3,0,0) Gdk::Rectangle rect_clip( 0, y_screen, width_view, height_screen ); m_gc->set_clip_rectangle( rect_clip ); +#endif // バックスクリーンをスクロール処理する if( ! m_scroll_window ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const scroll_cr = cairo_create( m_backscreen.get() ); + cairo_rectangle( scroll_cr, 0.0, 0.0, width_view, height_view ); + cairo_clip( scroll_cr ); +#else rect_clip.set_y( 0 ); rect_clip.set_height( height_view ); m_gc->set_clip_rectangle( rect_clip ); +#endif // 上にスクロールした - if( dy > 0 && dy < height_view ) + if( dy > 0 && dy < height_view ) { +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_push_group( scroll_cr ); + cairo_set_source_surface( scroll_cr, m_backscreen.get(), 0.0, dy ); + cairo_paint( scroll_cr ); + cairo_pop_group_to_source( scroll_cr ); + cairo_paint( scroll_cr ); +#else m_backscreen->draw_drawable( m_gc, m_backscreen, 0, dy, 0, 0, width_view , height_view - dy ); +#endif + } // 下にスクロールした - else if( dy < 0 && -dy < height_view ) + else if( dy < 0 && -dy < height_view ) { +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_push_group( scroll_cr ); + cairo_set_source_surface( scroll_cr, m_backscreen.get(), 0.0, dy ); + cairo_paint( scroll_cr ); + cairo_pop_group_to_source( scroll_cr ); + cairo_paint( scroll_cr ); +#else m_backscreen->draw_drawable( m_gc, m_backscreen, 0, 0, 0, -dy, width_view , height_view + dy ); +#endif + } +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_destroy( scroll_cr ); +#endif m_rect_backscreen.y = 0; m_rect_backscreen.height = height_view; @@ -1889,8 +1974,18 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw } // バックスクリーンの背景クリア +#if GTKMM_CHECK_VERSION(3,0,0) + { + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ get_colorid_back() ].gobj() ); + cairo_rectangle( cr, 0.0, y_screen, width_view, height_screen ); + cairo_fill( cr ); + cairo_destroy( cr ); + } +#else m_gc->set_foreground( m_color[ get_colorid_back() ] ); m_backscreen->draw_rectangle( m_gc, true, 0, y_screen, width_view, height_screen ); +#endif // 描画ループ CLIPINFO ci = { width_view, pos_y, upper, lower }; // 描画領域 @@ -1986,6 +2081,14 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw m_ready_back_marker = false; +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_save( m_cr.get() ); + cairo_rectangle( m_cr.get(), m_clip_marker.x, m_clip_marker.y, m_clip_marker.width, m_clip_marker.height ); + cairo_clip( m_cr.get() ); + cairo_set_source_surface( m_cr.get(), m_back_marker.get(), m_clip_marker.x, m_clip_marker.y ); + cairo_paint( m_cr.get() ); + cairo_restore( m_cr.get() ); +#else // [gtkmm <= 2.8] Gdk::GC::set_clip_rectangle( Gdk::Rectangle& rectangle ) // Gdk::GC::set_clip_rectangle( const Gdk::Rectangle& rectangle ) Gdk::Rectangle rect_window( m_clip_marker.x, m_clip_marker.y, m_clip_marker.width, m_clip_marker.height ); @@ -1994,6 +2097,7 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw m_clip_marker.x, m_clip_marker.y, m_clip_marker.width, m_clip_marker.height ); m_gc->set_clip_rectangle( rect_clip ); +#endif } // 前回描画したフレームを消す @@ -2001,6 +2105,16 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw m_ready_back_frame = false; +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_save( m_cr.get() ); + cairo_rectangle( m_cr.get(), 0.0, 0.0, width_view, height_view ); + cairo_clip( m_cr.get() ); + cairo_set_source_surface( m_cr.get(), m_back_frame_top.get(), 0.0, 0.0 ); + cairo_paint( m_cr.get() ); + cairo_set_source_surface( m_cr.get(), m_back_frame_bottom.get(), 0.0, height_view - WIDTH_FRAME ); + cairo_paint( m_cr.get() ); + cairo_restore( m_cr.get() ); +#else // [gtkmm <= 2.8] Gdk::GC::set_clip_rectangle( Gdk::Rectangle& rectangle ) // Gdk::GC::set_clip_rectangle( const Gdk::Rectangle& rectangle ) Gdk::Rectangle rect_frame( 0, 0, width_view, height_view ); @@ -2009,6 +2123,7 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw m_window->draw_drawable( m_gc, m_back_frame, 0, WIDTH_FRAME, 0, height_view - WIDTH_FRAME, width_view, WIDTH_FRAME ); m_gc->set_clip_rectangle( rect_clip ); +#endif } @@ -2020,7 +2135,16 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw } // 更新した所だけバックスクリーンをウィンドウにコピー +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_save( m_cr.get() ); + cairo_rectangle( m_cr.get(), 0.0, y_screen, width_view, height_screen ); + cairo_clip( m_cr.get() ); + cairo_set_source_surface( m_cr.get(), m_backscreen.get(), 0.0, 0.0 ); + cairo_paint( m_cr.get() ); + cairo_restore( m_cr.get() ); +#else m_window->draw_drawable( m_gc, m_backscreen, 0, y_screen, 0, y_screen, width_view, height_screen ); +#endif } // バックスクリーンを全てウィンドウにコピー @@ -2029,7 +2153,16 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw #ifdef _DEBUG std::cout << "copy all\n"; #endif +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_save( m_cr.get() ); + cairo_rectangle( m_cr.get(), 0.0, 0.0, width_view, height_view ); + cairo_clip( m_cr.get() ); + cairo_set_source_surface( m_cr.get(), m_backscreen.get(), 0.0, 0.0 ); + cairo_paint( m_cr.get() ); + cairo_restore( m_cr.get() ); +#else m_window->draw_drawable( m_gc, m_backscreen, 0, 0, 0, 0, width_view, height_view ); +#endif } // オートスクロールマーカと枠の描画 @@ -2143,9 +2276,20 @@ bool DrawAreaBase::draw_one_node( LAYOUT* layout, const CLIPINFO& ci ) const int s_bottom = MIN( height_bkmk, ci.lower - y ); const int height = s_bottom - s_top; - if( height > 0 ) m_backscreen->draw_pixbuf( m_gc, m_pixbuf_bkmk, - 0, s_top, 1, y - ci.pos_y + s_top, - m_pixbuf_bkmk->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); + if( height > 0 ) { +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + cairo_rectangle( cr, 1.0, y - ci.pos_y + s_top, m_pixbuf_bkmk->get_width(), height ); + cairo_clip( cr ); + gdk_cairo_set_source_pixbuf( cr, m_pixbuf_bkmk->gobj(), 1.0, y - ci.pos_y + s_top ); + cairo_paint( cr ); + cairo_destroy( cr ); +#else + m_backscreen->draw_pixbuf( m_gc, m_pixbuf_bkmk, + 0, s_top, 1, y - ci.pos_y + s_top, + m_pixbuf_bkmk->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); +#endif + } y += height_bkmk; } @@ -2163,9 +2307,20 @@ bool DrawAreaBase::draw_one_node( LAYOUT* layout, const CLIPINFO& ci ) const int s_bottom = MIN( height_post, ci.lower - y ); const int height = s_bottom - s_top; - if( height > 0 ) m_backscreen->draw_pixbuf( m_gc, m_pixbuf_post, - 0, s_top, 1, y - ci.pos_y + s_top, - m_pixbuf_post->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); + if( height > 0 ) { +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + cairo_rectangle( cr, 1.0, y - ci.pos_y + s_top, m_pixbuf_post->get_width(), height ); + cairo_clip( cr ); + gdk_cairo_set_source_pixbuf( cr, m_pixbuf_post->gobj(), 1.0, y - ci.pos_y + s_top ); + cairo_paint( cr ); + cairo_destroy( cr ); +#else + m_backscreen->draw_pixbuf( m_gc, m_pixbuf_post, + 0, s_top, 1, y - ci.pos_y + s_top, + m_pixbuf_post->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); +#endif + } y += height_post; } @@ -2181,9 +2336,20 @@ bool DrawAreaBase::draw_one_node( LAYOUT* layout, const CLIPINFO& ci ) const int s_bottom = MIN( height_refer_post, ci.lower - y ); const int height = s_bottom - s_top; - if( height > 0 ) m_backscreen->draw_pixbuf( m_gc, m_pixbuf_refer_post, - 0, s_top, 1, y - ci.pos_y + s_top, - m_pixbuf_refer_post->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); + if( height > 0 ) { +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + cairo_rectangle( cr, 1.0, y - ci.pos_y + s_top, m_pixbuf_refer_post->get_width(), height ); + cairo_clip( cr ); + gdk_cairo_set_source_pixbuf( cr, m_pixbuf_refer_post->gobj(), 1.0, y - ci.pos_y + s_top ); + cairo_paint( cr ); + cairo_destroy( cr ); +#else + m_backscreen->draw_pixbuf( m_gc, m_pixbuf_refer_post, + 0, s_top, 1, y - ci.pos_y + s_top, + m_pixbuf_refer_post->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); +#endif + } y += height_refer_post; } } @@ -2210,8 +2376,18 @@ bool DrawAreaBase::draw_one_node( LAYOUT* layout, const CLIPINFO& ci ) const int x = layout->rect->x; const int y = layout->rect->y - ci.pos_y; const int color_text = get_colorid_text(); +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ color_text ].gobj() ); + cairo_set_line_width( cr, 1.0 ); + cairo_move_to( cr, x, y ); + cairo_line_to( cr, x + layout->rect->width - 1.0, y ); + cairo_stroke( cr ); + cairo_destroy( cr ); +#else m_gc->set_foreground( m_color[ color_text ] ); m_backscreen->draw_line( m_gc, x, y, x + layout->rect->width - 1, y ); +#endif } break; @@ -2273,32 +2449,74 @@ void DrawAreaBase::draw_div( LAYOUT* layout_div, const CLIPINFO& ci ) // 背景 if( bg_color >= 0 ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ bg_color ].gobj() ); + cairo_rectangle( cr, layout_div->rect->x, y_div - ci.pos_y, layout_div->rect->width, height_div ); + cairo_fill( cr ); + cairo_destroy( cr ); +#else m_gc->set_foreground( m_color[ bg_color ] ); m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x, y_div - ci.pos_y, layout_div->rect->width, height_div ); +#endif } // left if( border_style == CORE::BORDER_SOLID && border_left_color >= 0 && border_left ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ border_left_color ].gobj() ); + cairo_rectangle( cr, layout_div->rect->x, y_div - ci.pos_y, border_left, height_div ); + cairo_fill( cr ); + cairo_destroy( cr ); +#else m_gc->set_foreground( m_color[ border_left_color ] ); m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x, y_div - ci.pos_y, border_left, height_div ); +#endif } // right if( border_style == CORE::BORDER_SOLID && border_right_color >= 0 && border_right ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ border_right_color ].gobj() ); + cairo_rectangle( cr, layout_div->rect->x + layout_div->rect->width - border_right, y_div - ci.pos_y, + border_right, height_div ); + cairo_fill( cr ); + cairo_destroy( cr ); +#else m_gc->set_foreground( m_color[ border_right_color ] ); m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x + layout_div->rect->width - border_right, y_div - ci.pos_y, border_right, height_div ); +#endif } // top if( border_style == CORE::BORDER_SOLID && border_top_color >= 0 && border_top ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ border_top_color ].gobj() ); + cairo_rectangle( cr, layout_div->rect->x, y_div - ci.pos_y, layout_div->rect->width, border_top ); + cairo_fill( cr ); + cairo_destroy( cr ); +#else m_gc->set_foreground( m_color[ border_top_color ] ); m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x, y_div - ci.pos_y, layout_div->rect->width, border_top ); +#endif } // bottom if( border_style == CORE::BORDER_SOLID && border_bottom_color >= 0 && border_bottom ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ border_bottom_color ].gobj() ); + cairo_rectangle( cr, layout_div->rect->x, y_div + height_div - border_bottom - ci.pos_y, + layout_div->rect->width, border_bottom ); + cairo_fill( cr ); + cairo_destroy( cr ); +#else m_gc->set_foreground( m_color[ border_bottom_color ] ); m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x, y_div + height_div - border_bottom - ci.pos_y, layout_div->rect->width, border_bottom ); +#endif } } @@ -2344,15 +2562,34 @@ void DrawAreaBase::draw_marker() // exec_draw_screen() 参照 if( m_scroll_window ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_back_marker.get() ); + cairo_rectangle( cr, 0.0, 0.0, m_clip_marker.width, m_clip_marker.height ); + cairo_clip( cr ); + cairo_set_source_surface( cr, cairo_get_target( m_cr.get() ), -m_clip_marker.x, -m_clip_marker.y ); + cairo_paint( cr ); + cairo_destroy( cr ); +#else // [gtkmm <= 2.8] Gdk::GC::set_clip_rectangle( Gdk::Rectangle& rectangle ) // Gdk::GC::set_clip_rectangle( const Gdk::Rectangle& rectangle ) Gdk::Rectangle rect_marker( 0, 0, m_clip_marker.width, m_clip_marker.height ); m_gc->set_clip_rectangle( rect_marker ); m_back_marker->draw_drawable( m_gc, m_window, m_clip_marker.x, m_clip_marker.y, 0, 0, m_clip_marker.width, m_clip_marker.height ); +#endif m_ready_back_marker = true; } +#if GTKMM_CHECK_VERSION(3,0,0) + constexpr const double r = AUTOSCR_CIRCLE / 2.0; + cairo_save( m_cr.get() ); + cairo_rectangle( m_cr.get(), m_clip_marker.x, m_clip_marker.y, m_clip_marker.width, m_clip_marker.height ); + cairo_clip( m_cr.get() ); + gdk_cairo_set_source_rgba( m_cr.get(), m_color[ COLOR_MARKER ].gobj() ); + cairo_arc( m_cr.get(), x_marker + r, y_marker + r, r - 1.0, 0.0, 2.0 * M_PI ); + cairo_stroke( m_cr.get() ); + cairo_restore( m_cr.get() ); +#else // [gtkmm <= 2.8] Gdk::GC::set_clip_rectangle( Gdk::Rectangle& rectangle ) // Gdk::GC::set_clip_rectangle( const Gdk::Rectangle& rectangle ) Gdk::Rectangle rect_window( m_clip_marker.x, m_clip_marker.y, m_clip_marker.width, m_clip_marker.height ); @@ -2361,6 +2598,7 @@ void DrawAreaBase::draw_marker() m_window->draw_arc( m_gc, false, x_marker, y_marker, AUTOSCR_CIRCLE-1, AUTOSCR_CIRCLE-1, 0, 360 * 64 ); +#endif } @@ -2376,20 +2614,46 @@ void DrawAreaBase::draw_frame() if( m_scroll_window ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_surface_t* const borrowed_sf = cairo_get_target( m_cr.get() ); + cairo_t* cr = cairo_create( m_back_frame_top.get() ); + cairo_rectangle( cr, 0.0, 0.0, width_win, WIDTH_FRAME ); + cairo_clip( cr ); + cairo_set_source_surface( cr, borrowed_sf, 0.0, 0.0 ); + cairo_paint( cr ); + cairo_destroy( cr ); + + cr = cairo_create( m_back_frame_bottom.get() ); + cairo_rectangle( cr, 0.0, 0.0, width_win, WIDTH_FRAME ); + cairo_clip( cr ); + cairo_set_source_surface( cr, borrowed_sf, 0.0, WIDTH_FRAME - height_win ); + cairo_paint( cr ); + cairo_destroy( cr ); +#else // [gtkmm <= 2.8] Gdk::GC::set_clip_rectangle( Gdk::Rectangle& rectangle ) // Gdk::GC::set_clip_rectangle( const Gdk::Rectangle& rectangle ) Gdk::Rectangle rect_frame( 0, 0, width_win, WIDTH_FRAME * 2 ); m_gc->set_clip_rectangle( rect_frame ); m_back_frame->draw_drawable( m_gc, m_window, 0, 0, 0, 0, width_win, WIDTH_FRAME ); m_back_frame->draw_drawable( m_gc, m_window, 0, height_win - WIDTH_FRAME, 0, WIDTH_FRAME, width_win, WIDTH_FRAME ); +#endif m_ready_back_frame = true; } +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_save( m_cr.get() ); + gdk_cairo_set_source_rgba( m_cr.get(), m_color[ COLOR_FRAME ].gobj() ); + cairo_set_line_width( m_cr.get(), 2.0 ); + cairo_rectangle( m_cr.get(), 0.0, 0.0, width_win, height_win ); + cairo_stroke( m_cr.get() ); + cairo_restore( m_cr.get() ); +#else Gdk::Rectangle rect_clip( 0, 0, width_win, height_win ); m_gc->set_clip_rectangle( rect_clip ); m_gc->set_foreground( m_color[ COLOR_FRAME ] ); m_window->draw_rectangle( m_gc, false, WIDTH_FRAME-1, WIDTH_FRAME-1, width_win-WIDTH_FRAME, height_win-WIDTH_FRAME ); +#endif } @@ -2646,18 +2910,45 @@ bool DrawAreaBase::draw_one_img_node( LAYOUT* layout, const CLIPINFO& ci ) Glib::RefPtr< Gdk::Pixbuf > pixbuf2; pixbuf2 = pixbuf->scale_simple( moswidth, mosheight, Gdk::INTERP_NEAREST ); - m_backscreen->draw_pixbuf( m_gc, - pixbuf2->scale_simple( pixbuf->get_width(), pixbuf->get_height(), Gdk::INTERP_NEAREST ), - 0, s_top, rect->x + 1, ( rect->y + 1 ) - ci.pos_y + s_top, - pixbuf->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + cairo_rectangle( cr, rect->x + 1.0, ( rect->y + 1.0 ) - ci.pos_y + s_top, + pixbuf->get_width(), height ); + cairo_clip( cr ); + gdk_cairo_set_source_pixbuf( + cr, + pixbuf2 + ->scale_simple( pixbuf->get_width(), pixbuf->get_height(), Gdk::INTERP_NEAREST ) + ->gobj(), + rect->x + 1.0, ( rect->y + 1.0 ) - ci.pos_y + s_top ); + cairo_paint( cr ); + cairo_destroy( cr ); +#else + m_backscreen->draw_pixbuf( + m_gc, + pixbuf2->scale_simple( pixbuf->get_width(), pixbuf->get_height(), Gdk::INTERP_NEAREST ), + 0, s_top, rect->x + 1, ( rect->y + 1 ) - ci.pos_y + s_top, + pixbuf->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); +#endif } } // 通常 else{ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + cairo_rectangle( cr, rect->x + 1.0, ( rect->y + 1.0 ) - ci.pos_y + s_top, + pixbuf->get_width(), height ); + cairo_clip( cr ); + gdk_cairo_set_source_pixbuf( cr, pixbuf->gobj(), + rect->x + 1.0, ( rect->y + 1.0 ) - ci.pos_y + s_top ); + cairo_paint( cr ); + cairo_destroy( cr ); +#else m_backscreen->draw_pixbuf( m_gc, pixbuf, 0, s_top, rect->x + 1, ( rect->y + 1 ) - ci.pos_y + s_top, pixbuf->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); +#endif } @@ -2668,9 +2959,19 @@ bool DrawAreaBase::draw_one_img_node( LAYOUT* layout, const CLIPINFO& ci ) } // 枠の描画 +#if GTKMM_CHECK_VERSION(3,0,0) + { + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ color ].gobj() ); + cairo_rectangle( cr, rect->x, rect->y - ci.pos_y, rect->width, rect->height ); + cairo_stroke( cr ); + cairo_destroy( cr ); + } +#else // !! draw_rectangle()の filled を false にすると、1 pixel 幅と高さが大きくなるのに注意 !! m_gc->set_foreground( m_color[ color ] ); m_backscreen->draw_rectangle( m_gc, false, rect->x , rect->y - ci.pos_y, rect->width -1, rect->height -1 ); +#endif // 右上のアイコン if( code != HTTP_OK || img->is_loading() ){ @@ -2678,7 +2979,15 @@ bool DrawAreaBase::draw_one_img_node( LAYOUT* layout, const CLIPINFO& ci ) const int y_tmp = rect->y + rect->height / 10 + 1; const int width_tmp = rect->width / 4; const int height_tmp = rect->width / 4; +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ color ].gobj() ); + cairo_rectangle( cr, x_tmp, y_tmp - ci.pos_y, width_tmp, height_tmp ); + cairo_fill( cr ); + cairo_destroy( cr ); +#else m_backscreen->draw_rectangle( m_gc, true, x_tmp, y_tmp - ci.pos_y, width_tmp, height_tmp ); +#endif } #ifdef _DEBUG @@ -2768,6 +3077,34 @@ void DrawAreaBase::draw_string( LAYOUT* node, const CLIPINFO& ci, #ifdef USE_PANGOLAYOUT // Pango::Layout を使って文字を描画 +#if GTKMM_CHECK_VERSION(3,0,0) + const Gdk::RGBA& fg = m_color[ color ]; + const Gdk::RGBA& bg = m_color[ color_back ]; + using PA = Pango::Attribute; + auto foreground = PA::create_attr_foreground( fg.get_red_u(), fg.get_green_u(), fg.get_blue_u() ); + auto background = PA::create_attr_background( bg.get_red_u(), bg.get_green_u(), bg.get_blue_u() ); + + m_pango_layout->set_text( Glib::ustring( node->text + pos_start, n_ustr ) ); + + cairo_t* const text_cr = cairo_create( m_backscreen.get() ); + + Pango::AttrList attr; + attr.insert( foreground ); + attr.insert( background ); + m_pango_layout->set_attributes( attr ); + cairo_move_to( text_cr, x, y ); + pango_cairo_show_layout( text_cr, m_pango_layout->gobj() ); + + // Pango::Weight属性を使うと文字幅が変わりレイアウトが乱れる + // そこで文字を重ねて描画することで太字を表示する + if( node->bold ) { + Pango::AttrList overlapping; + overlapping.insert( foreground ); + m_pango_layout->set_attributes( overlapping ); + cairo_move_to( text_cr, x + 1.0, y ); + pango_cairo_show_layout( text_cr, m_pango_layout->gobj() ); + } +#else m_pango_layout->set_text( Glib::ustring( node->text + pos_start, n_ustr ) ); m_backscreen->draw_layout( m_gc,x, y, m_pango_layout, m_color[ color ], m_color[ color_back ] ); @@ -2775,21 +3112,35 @@ void DrawAreaBase::draw_string( LAYOUT* node, const CLIPINFO& ci, m_gc->set_foreground( m_color[ color ] ); m_backscreen->draw_layout( m_gc, x+1, y, m_pango_layout ); } +#endif // GTKMM_CHECK_VERSION(3,0,0) #else // Pango::GlyphString を使って文字を描画 assert( m_context ); +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const text_cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( text_cr, m_color[ color_back ].gobj() ); + cairo_rectangle( text_cr, x, y, width_line, m_font->height ); + cairo_fill( text_cr ); + + gdk_cairo_set_source_rgba( text_cr, m_color[ color ].gobj() ); +#else m_gc->set_foreground( m_color[ color_back ] ); m_backscreen->draw_rectangle( m_gc, true, x, y, width_line, m_font->height ); m_gc->set_foreground( m_color[ color ] ); +#endif Pango::AttrList attr; std::string text = std::string( node->text + pos_start, n_byte ); std::list< Pango::Item > list_item = m_context->itemize( text, attr ); +#if GTKMM_CHECK_VERSION(3,0,0) + Glib::RefPtr< Pango::Font > font; +#else Glib::RefPtr< const Pango::Font > font; +#endif Pango::GlyphString grl; Pango::Rectangle pango_rect; @@ -2802,22 +3153,41 @@ void DrawAreaBase::draw_string( LAYOUT* node, const CLIPINFO& ci, pango_rect = grl.get_logical_extents( font ); int width = PANGO_PIXELS( pango_rect.get_width() ); +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_move_to( text_cr, x, y + m_font->ascent ); + pango_cairo_show_glyph_string( text_cr, font->gobj(), grl.gobj() ); + if( node->bold ) { + cairo_move_to( text_cr, x + 1.0, y + m_font->ascent ); + pango_cairo_show_glyph_string( text_cr, font->gobj(), grl.gobj() ); + } +#else m_backscreen->draw_glyphs( m_gc, font, x, y + m_font->ascent, grl ); if( node->bold ) m_backscreen->draw_glyphs( m_gc, font, x +1, y + m_font->ascent, grl ); +#endif x += width; } // 実際のラインの長さ(x - rect->x)とlayout_one_text_node()で計算した // 近似値(rect->width)を一致させる ( 応急処置 ) if( ! byte_to && abs( ( x - rect->x ) - rect->width ) > 2 ) rect->width = x - rect->x; -#endif +#endif // USE_PANGOLAYOUT // リンクの時は下線を引く if( node->link && CONFIG::get_draw_underline() ){ - +#if GTKMM_CHECK_VERSION(3,0,0) + gdk_cairo_set_source_rgba( text_cr, m_color[ color ].gobj() ); + cairo_set_line_width( text_cr, 1.0 ); + cairo_move_to( text_cr, xx, y + m_font->underline_pos ); + cairo_line_to( text_cr, xx + width_line, y + m_font->underline_pos ); + cairo_stroke( text_cr ); +#else m_gc->set_foreground( m_color[ color ] ); m_backscreen->draw_line( m_gc, xx, y + m_font->underline_pos, xx + width_line, y + m_font->underline_pos ); +#endif } +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_destroy( text_cr ); +#endif } if( rect->end ) break; @@ -4673,6 +5043,12 @@ bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) << std::endl; #endif +#if GTKMM_CHECK_VERSION(3,0,0) + // exposeイベントから抜ける前にm_cr.reset()を呼び出して破棄する必要がある + // ローカル変数やスコープガードなどを使用して安全性を高めるべきか + m_cr.reset( gdk_cairo_create( m_window->gobj() ) ); +#endif + // draw_screen からの呼び出し if( m_drawinfo.draw ){ @@ -4691,11 +5067,20 @@ bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) std::cout << "copy from backscreen\n"; #endif +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_save( m_cr.get() ); + cairo_rectangle( m_cr.get(), x, y, width, height ); + cairo_clip( m_cr.get() ); + cairo_set_source_surface( m_cr.get(), m_backscreen.get(), x, y ); + cairo_paint( m_cr.get() ); + cairo_restore( m_cr.get() ); +#else // [gtkmm <= 2.8] Gdk::GC::set_clip_rectangle( Gdk::Rectangle& rectangle ) // Gdk::GC::set_clip_rectangle( const Gdk::Rectangle& rectangle ) Gdk::Rectangle rect( x, y, width, height ); m_gc->set_clip_rectangle( rect ); m_window->draw_drawable( m_gc, m_backscreen, x, y, x, y, width, height ); +#endif // オートスクロールマーカと枠の描画 draw_marker(); @@ -4709,8 +5094,17 @@ bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) std::cout << "clear window\n"; #endif +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_save( m_cr.get() ); + gdk_cairo_set_source_rgba( m_cr.get(), m_color[ get_colorid_back() ].gobj() ); + cairo_fill( m_cr.get() ); + cairo_restore( m_cr.get() ); + + m_cr.reset(); +#else m_window->set_background( m_color[ get_colorid_back() ] ); m_window->clear(); +#endif return false; } @@ -4722,6 +5116,9 @@ bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) exec_draw_screen( y, height ); } +#if GTKMM_CHECK_VERSION(3,0,0) + m_cr.reset(); +#endif return true; } @@ -4805,13 +5202,20 @@ void DrawAreaBase::slot_realize() m_window = m_view.get_window(); assert( m_window ); +#if !GTKMM_CHECK_VERSION(3,0,0) m_gc = Gdk::GC::create( m_window ); assert( m_gc ); +#endif // 色初期化 init_color(); +#if GTKMM_CHECK_VERSION(3,0,0) + m_back_marker.reset( gdk_window_create_similar_surface( + m_window->gobj(), CAIRO_CONTENT_COLOR, AUTOSCR_CIRCLE, AUTOSCR_CIRCLE ) ); +#else m_back_marker = Gdk::Pixmap::create( m_window, AUTOSCR_CIRCLE, AUTOSCR_CIRCLE ); +#endif assert( m_back_marker ); exec_layout(); diff --git a/src/article/drawareabase.h b/src/article/drawareabase.h index 9ab6135e8d..7c42b8765a 100644 --- a/src/article/drawareabase.h +++ b/src/article/drawareabase.h @@ -122,8 +122,15 @@ namespace ARTICLE // 描画用 Glib::RefPtr< Gdk::Window > m_window; +#if GTKMM_CHECK_VERSION(3,0,0) + // cairomm 1.12.0 がメモリリークを起こしたので + // C API を使うことで問題を回避する + std::unique_ptr< cairo_t, void ( * )( cairo_t* ) > m_cr; + std::unique_ptr< cairo_surface_t, void ( * )( cairo_surface_t* ) > m_backscreen; +#else Glib::RefPtr< Gdk::GC > m_gc; Glib::RefPtr< Gdk::Pixmap > m_backscreen; +#endif Glib::RefPtr< Pango::Layout > m_pango_layout; Glib::RefPtr< Pango::Context > m_context; RECTANGLE m_rect_backscreen; // バックスクリーンが描画されている範囲 @@ -143,11 +150,21 @@ namespace ARTICLE // 色 int m_colorid_text; // デフォルトの文字色 int m_colorid_back; // デフォルトの背景色 +#if GTKMM_CHECK_VERSION(3,0,0) + std::vector< Gdk::RGBA > m_color; +#else std::vector< Gdk::Color > m_color; +#endif // 枠 bool m_draw_frame; // 枠を描画する +#if GTKMM_CHECK_VERSION(3,0,0) + // 枠線に隠れる部分のバックアップを分ける + std::unique_ptr< cairo_surface_t, void ( * )( cairo_surface_t* ) > m_back_frame_top; + std::unique_ptr< cairo_surface_t, void ( * )( cairo_surface_t* ) > m_back_frame_bottom; +#else Glib::RefPtr< Gdk::Pixmap > m_back_frame; // 枠の背景 +#endif bool m_ready_back_frame; // 範囲選択 @@ -181,7 +198,11 @@ namespace ARTICLE int m_pre_pos_y; // ひとつ前のスクロールバーの位置。スクロールした時の差分量計算に使用する std::vector< int > m_jump_history; // ジャンプ履歴 bool m_cancel_change_adjust; // adjust の値変更イベントをキャンセル +#if GTKMM_CHECK_VERSION(3,0,0) + std::unique_ptr< cairo_surface_t, void ( * )( cairo_surface_t* ) > m_back_marker; +#else Glib::RefPtr< Gdk::Pixmap > m_back_marker; // オートスクロールマーカの背景 +#endif RECTANGLE m_clip_marker; bool m_ready_back_marker; time_t m_wait_scroll; // 処理落ちした時にスクロールにウエイトを入れる From 73a29c758acd74823ce2ac11f1c91575339ee8db Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Mon, 11 Jun 2018 06:10:34 +0900 Subject: [PATCH 06/51] Extract fill_backscreen() on DrawAreaBase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コードの重複とプリプロセッサの分散を減らす --- src/article/drawareabase.cpp | 108 ++++++++++------------------------- src/article/drawareabase.h | 3 + 2 files changed, 34 insertions(+), 77 deletions(-) diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index c8c5a19072..c96d829bcd 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -1974,18 +1974,7 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw } // バックスクリーンの背景クリア -#if GTKMM_CHECK_VERSION(3,0,0) - { - cairo_t* const cr = cairo_create( m_backscreen.get() ); - gdk_cairo_set_source_rgba( cr, m_color[ get_colorid_back() ].gobj() ); - cairo_rectangle( cr, 0.0, y_screen, width_view, height_screen ); - cairo_fill( cr ); - cairo_destroy( cr ); - } -#else - m_gc->set_foreground( m_color[ get_colorid_back() ] ); - m_backscreen->draw_rectangle( m_gc, true, 0, y_screen, width_view, height_screen ); -#endif + fill_backscreen( get_colorid_back(), 0, y_screen, width_view, height_screen ); // 描画ループ CLIPINFO ci = { width_view, pos_y, upper, lower }; // 描画領域 @@ -2449,74 +2438,34 @@ void DrawAreaBase::draw_div( LAYOUT* layout_div, const CLIPINFO& ci ) // 背景 if( bg_color >= 0 ){ -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - gdk_cairo_set_source_rgba( cr, m_color[ bg_color ].gobj() ); - cairo_rectangle( cr, layout_div->rect->x, y_div - ci.pos_y, layout_div->rect->width, height_div ); - cairo_fill( cr ); - cairo_destroy( cr ); -#else - m_gc->set_foreground( m_color[ bg_color ] ); - m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x, y_div - ci.pos_y, layout_div->rect->width, height_div ); -#endif + fill_backscreen( bg_color, layout_div->rect->x, y_div - ci.pos_y, + layout_div->rect->width, height_div ); } // left if( border_style == CORE::BORDER_SOLID && border_left_color >= 0 && border_left ){ -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - gdk_cairo_set_source_rgba( cr, m_color[ border_left_color ].gobj() ); - cairo_rectangle( cr, layout_div->rect->x, y_div - ci.pos_y, border_left, height_div ); - cairo_fill( cr ); - cairo_destroy( cr ); -#else - m_gc->set_foreground( m_color[ border_left_color ] ); - m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x, y_div - ci.pos_y, border_left, height_div ); -#endif + fill_backscreen( border_left_color, layout_div->rect->x, y_div - ci.pos_y, + border_left, height_div ); } // right if( border_style == CORE::BORDER_SOLID && border_right_color >= 0 && border_right ){ -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - gdk_cairo_set_source_rgba( cr, m_color[ border_right_color ].gobj() ); - cairo_rectangle( cr, layout_div->rect->x + layout_div->rect->width - border_right, y_div - ci.pos_y, + fill_backscreen( border_right_color, + layout_div->rect->x + layout_div->rect->width - border_right, y_div - ci.pos_y, border_right, height_div ); - cairo_fill( cr ); - cairo_destroy( cr ); -#else - m_gc->set_foreground( m_color[ border_right_color ] ); - m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x + layout_div->rect->width - border_right, y_div - ci.pos_y, border_right, height_div ); -#endif } // top if( border_style == CORE::BORDER_SOLID && border_top_color >= 0 && border_top ){ -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - gdk_cairo_set_source_rgba( cr, m_color[ border_top_color ].gobj() ); - cairo_rectangle( cr, layout_div->rect->x, y_div - ci.pos_y, layout_div->rect->width, border_top ); - cairo_fill( cr ); - cairo_destroy( cr ); -#else - m_gc->set_foreground( m_color[ border_top_color ] ); - m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x, y_div - ci.pos_y, layout_div->rect->width, border_top ); -#endif + fill_backscreen( border_top_color, layout_div->rect->x, y_div - ci.pos_y, + layout_div->rect->width, border_top ); } // bottom if( border_style == CORE::BORDER_SOLID && border_bottom_color >= 0 && border_bottom ){ -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - gdk_cairo_set_source_rgba( cr, m_color[ border_bottom_color ].gobj() ); - cairo_rectangle( cr, layout_div->rect->x, y_div + height_div - border_bottom - ci.pos_y, + fill_backscreen( border_bottom_color, + layout_div->rect->x, y_div + height_div - border_bottom - ci.pos_y, layout_div->rect->width, border_bottom ); - cairo_fill( cr ); - cairo_destroy( cr ); -#else - m_gc->set_foreground( m_color[ border_bottom_color ] ); - m_backscreen->draw_rectangle( m_gc, true, layout_div->rect->x, y_div + height_div - border_bottom - ci.pos_y, layout_div->rect->width, border_bottom ); -#endif } } @@ -2657,6 +2606,24 @@ void DrawAreaBase::draw_frame() } +// +// バックスクリーンを矩形で塗りつぶす +// +void DrawAreaBase::fill_backscreen( const int colorid, int x, int y, int width, int height ) +{ +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_t* const cr = cairo_create( m_backscreen.get() ); + gdk_cairo_set_source_rgba( cr, m_color[ colorid ].gobj() ); + cairo_rectangle( cr, x, y, width, height ); + cairo_fill( cr ); + cairo_destroy( cr ); +#else + m_gc->set_foreground( m_color[ colorid ] ); + m_backscreen->draw_rectangle( m_gc, true, x, y, width, height ); +#endif +} + + // // 範囲選択の描画をする必要があるかどうかの判定( draw_one_text_node()で使用 ) // @@ -2979,15 +2946,7 @@ bool DrawAreaBase::draw_one_img_node( LAYOUT* layout, const CLIPINFO& ci ) const int y_tmp = rect->y + rect->height / 10 + 1; const int width_tmp = rect->width / 4; const int height_tmp = rect->width / 4; -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - gdk_cairo_set_source_rgba( cr, m_color[ color ].gobj() ); - cairo_rectangle( cr, x_tmp, y_tmp - ci.pos_y, width_tmp, height_tmp ); - cairo_fill( cr ); - cairo_destroy( cr ); -#else - m_backscreen->draw_rectangle( m_gc, true, x_tmp, y_tmp - ci.pos_y, width_tmp, height_tmp ); -#endif + fill_backscreen( color, x_tmp, y_tmp - ci.pos_y, width_tmp, height_tmp ); } #ifdef _DEBUG @@ -3118,17 +3077,12 @@ void DrawAreaBase::draw_string( LAYOUT* node, const CLIPINFO& ci, assert( m_context ); + fill_backscreen( color_back, x, y, width_line, m_font->height ); #if GTKMM_CHECK_VERSION(3,0,0) cairo_t* const text_cr = cairo_create( m_backscreen.get() ); - gdk_cairo_set_source_rgba( text_cr, m_color[ color_back ].gobj() ); - cairo_rectangle( text_cr, x, y, width_line, m_font->height ); - cairo_fill( text_cr ); gdk_cairo_set_source_rgba( text_cr, m_color[ color ].gobj() ); #else - m_gc->set_foreground( m_color[ color_back ] ); - m_backscreen->draw_rectangle( m_gc, true, x, y, width_line, m_font->height ); - m_gc->set_foreground( m_color[ color ] ); #endif diff --git a/src/article/drawareabase.h b/src/article/drawareabase.h index 7c42b8765a..e0476e6ebc 100644 --- a/src/article/drawareabase.h +++ b/src/article/drawareabase.h @@ -459,6 +459,9 @@ namespace ARTICLE // 枠の描画 void draw_frame(); + // バックスクリーンを矩形で塗りつぶす + void fill_backscreen( const int colorid, int x, int y, int width, int height ); + // スロット void slot_change_adjust(); bool slot_expose_event( GdkEventExpose* event ); From cf990348565c9632151d8a14fc76e0f4c25a820c Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Mon, 11 Jun 2018 08:03:37 +0900 Subject: [PATCH 07/51] Extract paint_backscreen() on DrawAreaBase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit コードの重複とプリプロセッサの分散を減らす --- src/article/drawareabase.cpp | 106 ++++++++++++----------------------- src/article/drawareabase.h | 4 ++ 2 files changed, 40 insertions(+), 70 deletions(-) diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index c96d829bcd..8f11f28d6b 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -2266,18 +2266,8 @@ bool DrawAreaBase::draw_one_node( LAYOUT* layout, const CLIPINFO& ci ) const int height = s_bottom - s_top; if( height > 0 ) { -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - cairo_rectangle( cr, 1.0, y - ci.pos_y + s_top, m_pixbuf_bkmk->get_width(), height ); - cairo_clip( cr ); - gdk_cairo_set_source_pixbuf( cr, m_pixbuf_bkmk->gobj(), 1.0, y - ci.pos_y + s_top ); - cairo_paint( cr ); - cairo_destroy( cr ); -#else - m_backscreen->draw_pixbuf( m_gc, m_pixbuf_bkmk, - 0, s_top, 1, y - ci.pos_y + s_top, - m_pixbuf_bkmk->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); -#endif + paint_backscreen( m_pixbuf_bkmk, 0, s_top, 1, y - ci.pos_y + s_top, + m_pixbuf_bkmk->get_width(), height ); } y += height_bkmk; } @@ -2297,18 +2287,8 @@ bool DrawAreaBase::draw_one_node( LAYOUT* layout, const CLIPINFO& ci ) const int height = s_bottom - s_top; if( height > 0 ) { -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - cairo_rectangle( cr, 1.0, y - ci.pos_y + s_top, m_pixbuf_post->get_width(), height ); - cairo_clip( cr ); - gdk_cairo_set_source_pixbuf( cr, m_pixbuf_post->gobj(), 1.0, y - ci.pos_y + s_top ); - cairo_paint( cr ); - cairo_destroy( cr ); -#else - m_backscreen->draw_pixbuf( m_gc, m_pixbuf_post, - 0, s_top, 1, y - ci.pos_y + s_top, - m_pixbuf_post->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); -#endif + paint_backscreen( m_pixbuf_post, 0, s_top, 1, y - ci.pos_y + s_top, + m_pixbuf_post->get_width(), height ); } y += height_post; } @@ -2326,18 +2306,8 @@ bool DrawAreaBase::draw_one_node( LAYOUT* layout, const CLIPINFO& ci ) const int height = s_bottom - s_top; if( height > 0 ) { -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - cairo_rectangle( cr, 1.0, y - ci.pos_y + s_top, m_pixbuf_refer_post->get_width(), height ); - cairo_clip( cr ); - gdk_cairo_set_source_pixbuf( cr, m_pixbuf_refer_post->gobj(), 1.0, y - ci.pos_y + s_top ); - cairo_paint( cr ); - cairo_destroy( cr ); -#else - m_backscreen->draw_pixbuf( m_gc, m_pixbuf_refer_post, - 0, s_top, 1, y - ci.pos_y + s_top, - m_pixbuf_refer_post->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); -#endif + paint_backscreen( m_pixbuf_refer_post, 0, s_top, 1, y - ci.pos_y + s_top, + m_pixbuf_refer_post->get_width(), height ); } y += height_refer_post; } @@ -2624,6 +2594,30 @@ void DrawAreaBase::fill_backscreen( const int colorid, int x, int y, int width, } +// +// Pixbufの内容をバックスクリーンに貼り付ける +// +void DrawAreaBase::paint_backscreen( const Glib::RefPtr< Gdk::Pixbuf >& pixbuf, + int src_x, int src_y, int dest_x, int dest_y, int width, int height ) +{ +#if GTKMM_CHECK_VERSION(3,0,0) + // Cairoバージョンではsrc_x, src_yを使わない + // 呼び出しをgdkバージョンと揃えるために引数の数合わせをしている + static_cast< void >( src_x ); + static_cast< void >( src_y ); + cairo_t* const cr = cairo_create( m_backscreen.get() ); + cairo_rectangle( cr, dest_x, dest_y, width, height ); + cairo_clip( cr ); + gdk_cairo_set_source_pixbuf( cr, pixbuf->gobj(), dest_x, dest_y ); + cairo_paint( cr ); + cairo_destroy( cr ); +#else + m_backscreen->draw_pixbuf( m_gc, pixbuf, src_x, src_y, dest_x, dest_y, + width, height, Gdk::RGB_DITHER_NONE, 0, 0 ); +#endif +} + + // // 範囲選択の描画をする必要があるかどうかの判定( draw_one_text_node()で使用 ) // @@ -2877,45 +2871,17 @@ bool DrawAreaBase::draw_one_img_node( LAYOUT* layout, const CLIPINFO& ci ) Glib::RefPtr< Gdk::Pixbuf > pixbuf2; pixbuf2 = pixbuf->scale_simple( moswidth, mosheight, Gdk::INTERP_NEAREST ); -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - cairo_rectangle( cr, rect->x + 1.0, ( rect->y + 1.0 ) - ci.pos_y + s_top, - pixbuf->get_width(), height ); - cairo_clip( cr ); - gdk_cairo_set_source_pixbuf( - cr, - pixbuf2 - ->scale_simple( pixbuf->get_width(), pixbuf->get_height(), Gdk::INTERP_NEAREST ) - ->gobj(), - rect->x + 1.0, ( rect->y + 1.0 ) - ci.pos_y + s_top ); - cairo_paint( cr ); - cairo_destroy( cr ); -#else - m_backscreen->draw_pixbuf( - m_gc, - pixbuf2->scale_simple( pixbuf->get_width(), pixbuf->get_height(), Gdk::INTERP_NEAREST ), - 0, s_top, rect->x + 1, ( rect->y + 1 ) - ci.pos_y + s_top, - pixbuf->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); -#endif + paint_backscreen( pixbuf2->scale_simple( pixbuf->get_width(), pixbuf->get_height(), + Gdk::INTERP_NEAREST ), + 0, s_top, rect->x + 1, ( rect->y + 1 ) - ci.pos_y + s_top, + pixbuf->get_width(), height ); } } // 通常 else{ -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_t* const cr = cairo_create( m_backscreen.get() ); - cairo_rectangle( cr, rect->x + 1.0, ( rect->y + 1.0 ) - ci.pos_y + s_top, - pixbuf->get_width(), height ); - cairo_clip( cr ); - gdk_cairo_set_source_pixbuf( cr, pixbuf->gobj(), - rect->x + 1.0, ( rect->y + 1.0 ) - ci.pos_y + s_top ); - cairo_paint( cr ); - cairo_destroy( cr ); -#else - m_backscreen->draw_pixbuf( m_gc, pixbuf, - 0, s_top, rect->x + 1, ( rect->y + 1 ) - ci.pos_y + s_top, - pixbuf->get_width(), height, Gdk::RGB_DITHER_NONE, 0, 0 ); -#endif + paint_backscreen( pixbuf, 0, s_top, rect->x + 1, ( rect->y + 1 ) - ci.pos_y + s_top, + pixbuf->get_width(), height ); } diff --git a/src/article/drawareabase.h b/src/article/drawareabase.h index e0476e6ebc..c3de7bf9f0 100644 --- a/src/article/drawareabase.h +++ b/src/article/drawareabase.h @@ -462,6 +462,10 @@ namespace ARTICLE // バックスクリーンを矩形で塗りつぶす void fill_backscreen( const int colorid, int x, int y, int width, int height ); + // Pixbufの内容をバックスクリーンに貼り付ける + void paint_backscreen( const Glib::RefPtr< Gdk::Pixbuf >& pixbuf, + int src_x, int src_y, int dest_x, int dest_y, int width, int height ); + // スロット void slot_change_adjust(); bool slot_expose_event( GdkEventExpose* event ); From bc4ec7925ca190b5a9296a81a643102d92cc49f6 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Fri, 20 Jul 2018 20:25:50 +0900 Subject: [PATCH 08/51] Implement DrawAreaBase::slot_draw() instead of slot_expose_event() Expose event signal is removed since gtk3. --- src/article/drawareabase.cpp | 106 ++++++++++++++++++++++++++--------- src/article/drawareabase.h | 4 ++ 2 files changed, 83 insertions(+), 27 deletions(-) diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index 8f11f28d6b..26047dbc28 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -200,7 +200,11 @@ void DrawAreaBase::setup( const bool show_abone, const bool show_scrbar, const b m_view.signal_leave_notify_event().connect( sigc::mem_fun( *this, &DrawAreaBase::slot_leave_notify_event ) ); m_view.signal_realize().connect( sigc::mem_fun( *this, &DrawAreaBase::slot_realize )); m_view.signal_configure_event().connect( sigc::mem_fun( *this, &DrawAreaBase::slot_configure_event )); +#if GTKMM_CHECK_VERSION(3,0,0) + m_view.signal_draw().connect( sigc::mem_fun( *this, &DrawAreaBase::slot_draw ) ); +#else m_view.signal_expose_event().connect( sigc::mem_fun( *this, &DrawAreaBase::slot_expose_event )); +#endif m_view.signal_scroll_event().connect( sigc::mem_fun( *this, &DrawAreaBase::slot_scroll_event )); m_view.signal_button_press_event().connect( sigc::mem_fun( *this, &DrawAreaBase::slot_button_press_event )); m_view.signal_button_release_event().connect( sigc::mem_fun( *this, &DrawAreaBase::slot_button_release_event )); @@ -4946,6 +4950,80 @@ void DrawAreaBase::configure_impl() // // drawarea の再描画イベント // +#if GTKMM_CHECK_VERSION(3,0,0) +bool DrawAreaBase::slot_draw( const Cairo::RefPtr< Cairo::Context >& cr ) +{ + double x1, y1, x2, y2; + cr->get_clip_extents( x1, y1, x2, y2 ); + const double width = x2 - x1; + const double height = y2 - y1; + + // タブ操作中は再描画しない + if( SESSION::is_tab_operating( URL_ARTICLEADMIN ) ) { + return true; + } +#ifdef _DEBUG + std::cout << "DrawAreaBase::slot_draw" + << " y = " << y1 << " height = " << height << " draw_screen = " << m_drawinfo.draw + << " url = " << m_url + << std::endl; +#endif + // drawイベントから抜ける前にm_cr.release()を呼び出して所有権を放棄する + // ローカル変数やスコープガードなどを使用して安全性を高めるべきか + m_cr.reset( cr->cobj() ); + + // draw_screen からの呼び出し + if( m_drawinfo.draw ) { +#ifdef _DEBUG + std::cout << "draw\n"; +#endif + m_drawinfo.draw = false; + exec_draw_screen( m_drawinfo.y, m_drawinfo.height ); + } + // バックスクリーンに描画済みならコピー + else if( y1 >= m_rect_backscreen.y + && y2 <= m_rect_backscreen.y + m_rect_backscreen.height ) { +#ifdef _DEBUG + std::cout << "copy from backscreen\n"; +#endif + cairo_save( m_cr.get() ); + cairo_rectangle( m_cr.get(), x1, y1, width, height ); + cairo_clip( m_cr.get() ); + cairo_set_source_surface( m_cr.get(), m_backscreen.get(), x1, y1 ); + cairo_paint( m_cr.get() ); + cairo_restore( m_cr.get() ); + + // オートスクロールマーカと枠の描画 + draw_marker(); + draw_frame(); + } + // レイアウトがセットされていない or まだリサイズしていない + // ( m_backscreen == NULL )なら画面消去 + else if( !m_layout_tree->top_header() || !m_backscreen ) { +#ifdef _DEBUG + std::cout << "clear window\n"; +#endif + cairo_save( m_cr.get() ); + gdk_cairo_set_source_rgba( m_cr.get(), m_color[ get_colorid_back() ].gobj() ); + cairo_fill( m_cr.get() ); + cairo_restore( m_cr.get() ); + + // シグナルハンドラの引数から借りただけなので所有権を放棄しておく + m_cr.release(); + return false; + } + // 必要な所だけ再描画 + else { +#ifdef _DEBUG + std::cout << "expose\n"; +#endif + exec_draw_screen( static_cast< int >( y1 ), static_cast< int >( height ) ); + } + // シグナルハンドラの引数から借りただけなので所有権を放棄しておく + m_cr.release(); + return true; +} +#else // !GTKMM_CHECK_VERSION(3,0,0) bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) { const int x = event->area.x; @@ -4963,12 +5041,6 @@ bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) << std::endl; #endif -#if GTKMM_CHECK_VERSION(3,0,0) - // exposeイベントから抜ける前にm_cr.reset()を呼び出して破棄する必要がある - // ローカル変数やスコープガードなどを使用して安全性を高めるべきか - m_cr.reset( gdk_cairo_create( m_window->gobj() ) ); -#endif - // draw_screen からの呼び出し if( m_drawinfo.draw ){ @@ -4987,20 +5059,11 @@ bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) std::cout << "copy from backscreen\n"; #endif -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_save( m_cr.get() ); - cairo_rectangle( m_cr.get(), x, y, width, height ); - cairo_clip( m_cr.get() ); - cairo_set_source_surface( m_cr.get(), m_backscreen.get(), x, y ); - cairo_paint( m_cr.get() ); - cairo_restore( m_cr.get() ); -#else // [gtkmm <= 2.8] Gdk::GC::set_clip_rectangle( Gdk::Rectangle& rectangle ) // Gdk::GC::set_clip_rectangle( const Gdk::Rectangle& rectangle ) Gdk::Rectangle rect( x, y, width, height ); m_gc->set_clip_rectangle( rect ); m_window->draw_drawable( m_gc, m_backscreen, x, y, x, y, width, height ); -#endif // オートスクロールマーカと枠の描画 draw_marker(); @@ -5014,17 +5077,8 @@ bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) std::cout << "clear window\n"; #endif -#if GTKMM_CHECK_VERSION(3,0,0) - cairo_save( m_cr.get() ); - gdk_cairo_set_source_rgba( m_cr.get(), m_color[ get_colorid_back() ].gobj() ); - cairo_fill( m_cr.get() ); - cairo_restore( m_cr.get() ); - - m_cr.reset(); -#else m_window->set_background( m_color[ get_colorid_back() ] ); m_window->clear(); -#endif return false; } @@ -5036,11 +5090,9 @@ bool DrawAreaBase::slot_expose_event( GdkEventExpose* event ) exec_draw_screen( y, height ); } -#if GTKMM_CHECK_VERSION(3,0,0) - m_cr.reset(); -#endif return true; } +#endif // GTKMM_CHECK_VERSION(3,0,0) diff --git a/src/article/drawareabase.h b/src/article/drawareabase.h index c3de7bf9f0..9bde6c933c 100644 --- a/src/article/drawareabase.h +++ b/src/article/drawareabase.h @@ -468,7 +468,11 @@ namespace ARTICLE // スロット void slot_change_adjust(); +#if GTKMM_CHECK_VERSION(3,0,0) + bool slot_draw( const Cairo::RefPtr< Cairo::Context >& cr ); +#else bool slot_expose_event( GdkEventExpose* event ); +#endif bool slot_scroll_event( GdkEventScroll* event ); bool slot_leave_notify_event( GdkEventCrossing* event ); bool slot_visibility_notify_event( GdkEventVisibility* event ); From 5f7fcc1880c2207e670b9f872a70624da7aa409c Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 18 Jul 2018 20:23:25 +0900 Subject: [PATCH 09/51] Implement DelImgCacheDiag::on_draw() instead of on_expose_event() Gtk::Widget::on_expose_event() is changed to on_draw(). --- src/dbimg/delimgcachediag.cpp | 29 ++++++++++++++++++++++++----- src/dbimg/delimgcachediag.h | 5 +++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/dbimg/delimgcachediag.cpp b/src/dbimg/delimgcachediag.cpp index b1649d8626..25bbc5f32f 100644 --- a/src/dbimg/delimgcachediag.cpp +++ b/src/dbimg/delimgcachediag.cpp @@ -48,21 +48,40 @@ DelImgCacheDiag::~DelImgCacheDiag() } +#if GTKMM_CHECK_VERSION(3,0,0) +bool DelImgCacheDiag::on_draw( const Cairo::RefPtr< Cairo::Context >& cr ) +{ +#ifdef _DEBUG + std::cout << "DelImgCacheDiag::on_draw\n"; +#endif + + launch_thread(); + return Gtk::Dialog::on_draw( cr ); +} +#else bool DelImgCacheDiag::on_expose_event( GdkEventExpose* event ) { #ifdef _DEBUG std::cout << "DelImgCacheDiag::on_expose_event\n"; #endif + launch_thread(); + return Gtk::Dialog::on_expose_event( event ); +} +#endif // GTKMM_CHECK_VERSION(3,0,0) + + +void DelImgCacheDiag::launch_thread() +{ // スレッドを起動してキャッシュ削除 - if( ! m_thread.is_running() ){ + if( !m_thread.is_running() ) { m_stop = false; - if( ! m_thread.create( ( STARTFUNC ) launcher, ( void * ) this, JDLIB::NODETACH ) ){ - MISC::ERRMSG( "DelImgCacheDiag::on_expose_event : could not start thread" ); + if( !m_thread.create( static_cast< STARTFUNC >( launcher ), + static_cast< void* >( this ), + JDLIB::NODETACH ) ) { + MISC::ERRMSG( "DelImgCacheDiag::launch_thread : could not start thread" ); } } - - return Gtk::Dialog::on_expose_event( event ); } diff --git a/src/dbimg/delimgcachediag.h b/src/dbimg/delimgcachediag.h index 5a630b27b5..28b8821fd2 100644 --- a/src/dbimg/delimgcachediag.h +++ b/src/dbimg/delimgcachediag.h @@ -35,7 +35,11 @@ namespace DBIMG protected: +#if GTKMM_CHECK_VERSION(3,0,0) + bool on_draw( const Cairo::RefPtr< Cairo::Context >& cr ) override; +#else bool on_expose_event( GdkEventExpose* event ) override; +#endif private: @@ -43,6 +47,7 @@ namespace DBIMG void wait(); void slot_cancel_clicked(); time_t get_days( const std::string& path ); + void launch_thread(); }; } From 134e405dafcb08fd3380a5896d80ade911fd7852 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sun, 24 Jun 2018 09:09:09 +0900 Subject: [PATCH 10/51] Add include for key symbols MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 条件コンパイルでGDK_をGDK_KEY_に置き換えると コードが重複して読みにくいので古い名前を使う gtk 2.22.0未満のサポートを打ち切れば条件コンパイル無しで置き換えられる --- src/control/keysyms.h | 6 ++++++ src/skeleton/aamenu.cpp | 5 +++++ src/skeleton/editview.cpp | 5 +++++ src/skeleton/entry.cpp | 4 ++++ src/skeleton/selectitempref.cpp | 5 +++++ src/skeleton/view.cpp | 5 +++++ 6 files changed, 30 insertions(+) diff --git a/src/control/keysyms.h b/src/control/keysyms.h index f128d3ba4b..021fcb0641 100644 --- a/src/control/keysyms.h +++ b/src/control/keysyms.h @@ -5,6 +5,12 @@ #ifndef _KEYSYMS_H #define _KEYSYMS_H +#include "gtkmmversion.h" + +#if GTKMM_CHECK_VERSION(3,0,0) +#include +#endif + enum { MAX_KEYNAME = 64 diff --git a/src/skeleton/aamenu.cpp b/src/skeleton/aamenu.cpp index 783ad030e0..d697b09baa 100644 --- a/src/skeleton/aamenu.cpp +++ b/src/skeleton/aamenu.cpp @@ -1,6 +1,7 @@ // AA 選択ポップアップメニュークラス //#define _DEBUG +#include "gtkmmversion.h" #include "jddebug.h" #include "aamenu.h" @@ -14,6 +15,10 @@ #include "aamanager.h" #include "cache.h" +#if GTKMM_CHECK_VERSION(3,0,0) +#include +#endif + using namespace SKELETON; AAMenu::AAMenu( Gtk::Window& parent ) diff --git a/src/skeleton/editview.cpp b/src/skeleton/editview.cpp index 6d2c2a69d3..ca6f63d853 100644 --- a/src/skeleton/editview.cpp +++ b/src/skeleton/editview.cpp @@ -1,6 +1,7 @@ // ライセンス: GPL2 //#define _DEBUG +#include "gtkmmversion.h" #include "jddebug.h" #include "editview.h" @@ -18,6 +19,10 @@ #include "gtk/gtktextview.h" +#if GTKMM_CHECK_VERSION(3,0,0) +#include +#endif + using namespace SKELETON; enum diff --git a/src/skeleton/entry.cpp b/src/skeleton/entry.cpp index ff4c725594..646401da01 100644 --- a/src/skeleton/entry.cpp +++ b/src/skeleton/entry.cpp @@ -1,12 +1,16 @@ // ライセンス: GPL2 //#define _DEBUG +#include "gtkmmversion.h" #include "jddebug.h" #include "entry.h" #include "control/controlid.h" +#if GTKMM_CHECK_VERSION(3,0,0) +#include +#endif #include using namespace SKELETON; diff --git a/src/skeleton/selectitempref.cpp b/src/skeleton/selectitempref.cpp index f0e5e7ec92..e0b0826467 100644 --- a/src/skeleton/selectitempref.cpp +++ b/src/skeleton/selectitempref.cpp @@ -1,6 +1,7 @@ // ライセンス: GPL2 //#define _DEBUG +#include "gtkmmversion.h" #include "jddebug.h" #include "selectitempref.h" @@ -11,6 +12,10 @@ #include "global.h" #include "session.h" +#if GTKMM_CHECK_VERSION(3,0,0) +#include +#endif + using namespace SKELETON; #define ROW_COLOR "WhiteSmoke" diff --git a/src/skeleton/view.cpp b/src/skeleton/view.cpp index 0e22767b6c..73a2716e44 100644 --- a/src/skeleton/view.cpp +++ b/src/skeleton/view.cpp @@ -1,6 +1,7 @@ // ライセンス: GPL2 //#define _DEBUG +#include "gtkmmversion.h" #include "jddebug.h" #include "admin.h" @@ -16,6 +17,10 @@ #include "session.h" #include "command.h" +#if GTKMM_CHECK_VERSION(3,0,0) +#include +#endif + using namespace SKELETON; View::View( const std::string& url, const std::string& arg1 ,const std::string& arg2 ) From e972436fa1402699f12ccb6e68cd8cb62d26ea1d Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 23 Jun 2018 07:08:13 +0900 Subject: [PATCH 11/51] Add alias to GtkNotebookPage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtk3からGtk::Notebookのswitch-pageシグナルハンドラの 引数GtkNotebookPage*がGtk::Widget*に変更されたので GtkNotebookPageがGtk::Widgetの別名になるようにusingを追加する --- src/board/preference.h | 6 ++++++ src/core.h | 6 ++++++ src/message/messageviewbase.h | 5 +++++ src/setupwizard.h | 6 ++++++ src/skeleton/admin.h | 6 ++++++ src/skeleton/detaildiag.h | 6 ++++++ src/skeleton/tabnote.h | 6 ++++++ 7 files changed, 41 insertions(+) diff --git a/src/board/preference.h b/src/board/preference.h index 844db1e856..7b86abce11 100644 --- a/src/board/preference.h +++ b/src/board/preference.h @@ -3,12 +3,18 @@ #ifndef _BOARD_PREFERENCES_H #define _BOARD_PREFERENCES_H +#include "gtkmmversion.h" + #include "skeleton/view.h" #include "skeleton/prefdiag.h" #include "skeleton/editview.h" #include "skeleton/label_entry.h" #include "skeleton/spinbutton.h" +#if GTKMM_CHECK_VERSION(3,0,0) +using GtkNotebookPage = Gtk::Widget; +#endif + namespace BOARD { class ProxyFrame : public Gtk::Frame diff --git a/src/core.h b/src/core.h index 01e01bbdc2..64437a7169 100644 --- a/src/core.h +++ b/src/core.h @@ -7,6 +7,8 @@ #ifndef _CORE_H #define _CORE_H +#include "gtkmmversion.h" + #include #include #include @@ -22,6 +24,10 @@ class JDWinMain; +#if GTKMM_CHECK_VERSION(3,0,0) +using GtkNotebookPage = Gtk::Widget; +#endif + namespace BOARD { diff --git a/src/message/messageviewbase.h b/src/message/messageviewbase.h index ddee514e96..3c86af5008 100644 --- a/src/message/messageviewbase.h +++ b/src/message/messageviewbase.h @@ -10,6 +10,11 @@ #include "skeleton/compentry.h" #include "skeleton/jdtoolbar.h" +#if GTKMM_CHECK_VERSION(3,0,0) +using GtkNotebookPage = Gtk::Widget; +#endif + + namespace JDLIB { class Iconv; diff --git a/src/setupwizard.h b/src/setupwizard.h index 68f7473879..1e532b95b6 100644 --- a/src/setupwizard.h +++ b/src/setupwizard.h @@ -7,8 +7,14 @@ #ifndef _SETUPWIZARD_H #define _SETUPWIZARD_H +#include "gtkmmversion.h" + #include +#if GTKMM_CHECK_VERSION(3,0,0) +using GtkNotebookPage = Gtk::Widget; +#endif + namespace CORE { diff --git a/src/skeleton/admin.h b/src/skeleton/admin.h index f81b14bac4..71c266b6e3 100644 --- a/src/skeleton/admin.h +++ b/src/skeleton/admin.h @@ -7,6 +7,8 @@ #ifndef _ADMIN_H #define _ADMIN_H +#include "gtkmmversion.h" + #include "dispatchable.h" #include @@ -15,6 +17,10 @@ #include "command_args.h" +#if GTKMM_CHECK_VERSION(3,0,0) +using GtkNotebookPage = Gtk::Widget; +#endif + namespace SKELETON { class JDWindow; diff --git a/src/skeleton/detaildiag.h b/src/skeleton/detaildiag.h index f1b90d68ff..fb49fad966 100644 --- a/src/skeleton/detaildiag.h +++ b/src/skeleton/detaildiag.h @@ -5,8 +5,14 @@ #ifndef _DETAILDIAG_H #define _DETAILDIAG_H +#include "gtkmmversion.h" + #include "prefdiag.h" +#if GTKMM_CHECK_VERSION(3,0,0) +using GtkNotebookPage = Gtk::Widget; +#endif + namespace SKELETON { class View; diff --git a/src/skeleton/tabnote.h b/src/skeleton/tabnote.h index 6f86a9835d..0a506e61a6 100644 --- a/src/skeleton/tabnote.h +++ b/src/skeleton/tabnote.h @@ -6,8 +6,14 @@ #ifndef _TABNOTE_H #define _TABNOTE_H +#include "gtkmmversion.h" + #include +#if GTKMM_CHECK_VERSION(3,0,0) +using GtkNotebookPage = Gtk::Widget; +#endif + namespace SKELETON { class DragableNoteBook; From d3a9f20cac4ede1c742be4779757d9a8f3e03b6b Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Tue, 10 Jul 2018 23:06:46 +0900 Subject: [PATCH 12/51] Use create() static method instead of constructor * The parameter type of Gdk::Window::set_cursor() becomes shared smart pointer type. * The parameter type of Gtk::FileChooserDialog::add_filter() becomes shared smart pointer type. --- src/article/drawareabase.cpp | 8 +++++++- src/cache.cpp | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index 26047dbc28..d2452a84d4 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -5551,7 +5551,13 @@ void DrawAreaBase::change_cursor( const Gdk::CursorType type ) if( m_cursor_type != type ){ m_cursor_type = type; if( m_cursor_type == Gdk::ARROW ) m_window->set_cursor(); - else m_window->set_cursor( Gdk::Cursor( m_cursor_type ) ); + else { +#if GTKMM_CHECK_VERSION(3,0,0) + m_window->set_cursor( Gdk::Cursor::create( m_cursor_type ) ); +#else + m_window->set_cursor( Gdk::Cursor( m_cursor_type ) ); +#endif + } } } diff --git a/src/cache.cpp b/src/cache.cpp index 17b678c7b1..2fca7099a0 100644 --- a/src/cache.cpp +++ b/src/cache.cpp @@ -1006,25 +1006,45 @@ void CACHE::add_filter_to_diag( Gtk::FileChooserDialog& diag, const int type ) { if( type == FILE_TYPE_ALL ) return; +#if GTKMM_CHECK_VERSION(3,0,0) + Glib::RefPtr< Gtk::FileFilter > filter = Gtk::FileFilter::create(); +#else Gtk::FileFilter filter; +#endif switch( type ) { case FILE_TYPE_TEXT: +#if GTKMM_CHECK_VERSION(3,0,0) + filter->set_name( "全てのテキストファイル" ); + filter->add_mime_type( "text/plain" ); +#else filter.set_name( "全てのテキストファイル" ); filter.add_mime_type( "text/plain" ); +#endif diag.add_filter( filter ); break; case FILE_TYPE_DAT: +#if GTKMM_CHECK_VERSION(3,0,0) + filter->set_name( "全てのDATファイル" ); + filter->add_pattern( "*.dat" ); +#else filter.set_name( "全てのDATファイル" ); filter.add_pattern( "*.dat" ); +#endif diag.add_filter( filter ); break; } +#if GTKMM_CHECK_VERSION(3,0,0) + Glib::RefPtr< Gtk::FileFilter > all = Gtk::FileFilter::create(); + all->set_name( "全てのファイル" ); + all->add_pattern( "*" ); +#else Gtk::FileFilter all; all.set_name( "全てのファイル" ); all.add_pattern( "*" ); +#endif diag.add_filter( all ); } From b47887cd230e0552e28edd1850eaa0f2fae54c1d Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Mon, 16 Jul 2018 22:17:18 +0900 Subject: [PATCH 13/51] Define GDK_WINDOW_XWINDOW() as gdk_x11_window_get_xid() GDK_WINDOW_XWINDOW() is removed since gtk3. --- src/jdlib/miscx.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/jdlib/miscx.cpp b/src/jdlib/miscx.cpp index cfb4ce528a..87fc098ebe 100644 --- a/src/jdlib/miscx.cpp +++ b/src/jdlib/miscx.cpp @@ -1,6 +1,7 @@ // ライセンス: GPL2 //#define _DEBUG +#include "gtkmmversion.h" #include "jddebug.h" #include "miscx.h" @@ -12,6 +13,10 @@ #include #endif +#if !defined( GDK_WINDOW_XWINDOW ) && GTKMM_CHECK_VERSION(3,0,0) +#define GDK_WINDOW_XWINDOW( win ) gdk_x11_window_get_xid( win ) +#endif + // // dest ウインドウ上の、クライアント座標 x,y に移動する // From 312f62399515dba1c5466c02e87ba4c26bc0089e Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 18 Jul 2018 20:42:54 +0900 Subject: [PATCH 14/51] Implement Dummy::render_icon() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gtk::Widget::render_icon() is renamed to render_icon_pixbuf() since gtk3. render_icon()の呼び出し箇所に条件コンパイルでrender_icon_pixbuf() の呼び出しを追加してくと差分が大きくなりコードが読みづらくなる そのためgtk3版ではローカル変数にrender_icon()を実装する --- src/icons/iconmanager.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/icons/iconmanager.cpp b/src/icons/iconmanager.cpp index ebfcb8e00b..1756e03119 100644 --- a/src/icons/iconmanager.cpp +++ b/src/icons/iconmanager.cpp @@ -88,7 +88,17 @@ using namespace ICON; ICON_Manager::ICON_Manager() { +#if GTKMM_CHECK_VERSION(3,0,0) + struct Dummy : public Gtk::Image + { + Glib::RefPtr< Gdk::Pixbuf > render_icon( Gtk::BuiltinStockID stock, Gtk::BuiltinIconSize size ) + { + return render_icon_pixbuf( stock, size ); + } + } m_dummy; +#else Gtk::Image m_dummy; +#endif m_list_icons.resize( NUM_ICONS ); From 71e2d71c3da499ef285c55d7794ae46655178db2 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Tue, 17 Jul 2018 23:38:36 +0900 Subject: [PATCH 15/51] Use Gdk::Device::get_position() instead of Gdk::Display::get_pointer() Gdk::Display::get_pointer() is removed since gtk3. --- src/control/control.cpp | 4 ++++ src/skeleton/popupwin.cpp | 4 ++++ src/skeleton/tooltip.cpp | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/src/control/control.cpp b/src/control/control.cpp index ef95653441..ef1c3a6463 100644 --- a/src/control/control.cpp +++ b/src/control/control.cpp @@ -368,11 +368,15 @@ int Control::MG_wheel_scroll( const GdkEventScroll* event ) if( m_wheel_scroll_time && time_tmp < time_cancel ) return control; m_wheel_scroll_time = event->time; +#if GTKMM_CHECK_VERSION(3,0,0) + Gdk::ModifierType mask = static_cast< Gdk::ModifierType >( event->state ); +#else // 押しているボタンは event から取れないので // get_pointer()から取る int x, y; Gdk::ModifierType mask; Gdk::Display::get_default()->get_pointer( x, y, mask ); +#endif int button = 0; GdkEventButton ev = GdkEventButton(); diff --git a/src/skeleton/popupwin.cpp b/src/skeleton/popupwin.cpp index a0b327143d..db80fcca0c 100644 --- a/src/skeleton/popupwin.cpp +++ b/src/skeleton/popupwin.cpp @@ -52,8 +52,12 @@ void PopupWin::slot_resize_popup() // マウス座標 int x_mouse, y_mouse; +#if GTKMM_CHECK_VERSION(3,0,0) + Gdk::Display::get_default()->get_device_manager()->get_client_pointer()->get_position( x_mouse, y_mouse ); +#else Gdk::ModifierType mod; Gdk::Display::get_default()->get_pointer( x_mouse, y_mouse, mod ); +#endif // クライアントのサイズを取得 const int width_client = m_view->width_client(); diff --git a/src/skeleton/tooltip.cpp b/src/skeleton/tooltip.cpp index af26812c7c..d2345da5ce 100644 --- a/src/skeleton/tooltip.cpp +++ b/src/skeleton/tooltip.cpp @@ -76,8 +76,12 @@ void Tooltip::show_tooltip() #endif int x_mouse, y_mouse; +#if GTKMM_CHECK_VERSION(3,0,0) + Gdk::Display::get_default()->get_device_manager()->get_client_pointer()->get_position( x_mouse, y_mouse ); +#else Gdk::ModifierType mod; Gdk::Display::get_default()->get_pointer( x_mouse, y_mouse, mod ); +#endif // 一度画面外にshow()して幅を確定してから、もし m_min_width よりも // 幅が大きければマウスの位置に移動する From 6d303d92e90f16fd6937a7d17202ebf86a6fd440 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 18 Jul 2018 20:34:10 +0900 Subject: [PATCH 16/51] Use gdk_window_get_update_area() instead of Gdk::Window::get_update_area() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtkmmのAPIを使わない理由 Gdk::Window::get_update_area()の戻り値のスマートポインター Cairo::RefPtrをboolに評価しようとすると segmentation faultする この結果、スレビューをスクロールしようとしたときにJDがクラッシュした --- src/article/drawareabase.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index d2452a84d4..930f8c33e5 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -1756,8 +1756,13 @@ bool DrawAreaBase::draw_screen( const int y, const int height ) } // キューに expose イベントが溜まっている時は全画面再描画 - Gdk::Region rg = m_window->get_update_area(); - if( rg.gobj() ){ + auto* const updated = gdk_window_get_update_area( m_window->gobj() ); + if( updated ) { +#if GTKMM_CHECK_VERSION(3,0,0) + cairo_region_destroy( updated ); +#else + gdk_region_destroy( updated ); +#endif redraw_view_force(); return true; } From 3783fab39e0cb627804cc0a33488d01d0ce17a56 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Thu, 19 Jul 2018 22:50:43 +0900 Subject: [PATCH 17/51] Use gtk_widget_set_visual() instead of Gtk::Widget::shape_combine_mask() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gtk::Widget::shape_combine_mask() is removed since gtk3. NOTE: アルファチャンネルが利用できない環境では背景を透過できない --- README.md | 2 ++ src/skeleton/iconpopup.h | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d73e48fe21..6390ddbc80 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,8 @@ GDK_CORE_DEVICE_EVENTS=1 ./src/jdim #### GTK3版の既知の問題 * GTK3ではタブの上でマウスホイールするとページが切り替わる機能は削除された。 +* タブのドラッグ・アンド・ドロップの矢印ポップアップの背景が透過しない環境がある。 + (アルファチャンネルが利用できない環境) ## 通常の起動 diff --git a/src/skeleton/iconpopup.h b/src/skeleton/iconpopup.h index 946f5b507d..cbe39f3c9c 100644 --- a/src/skeleton/iconpopup.h +++ b/src/skeleton/iconpopup.h @@ -18,14 +18,25 @@ namespace SKELETON IconPopup( const int icon_id ) : Gtk::Window( Gtk::WINDOW_POPUP ){ - Glib::RefPtr< Gdk::Pixmap > pixmap; - Glib::RefPtr< Gdk::Bitmap > bitmap; - m_pixbuf = ICON::get_icon( icon_id ); m_img.set( m_pixbuf ); +#if GTKMM_CHECK_VERSION(3,0,0) + // NOTE: アルファチャンネルが利用できない環境では背景を透過できない + set_decorated( false ); + set_app_paintable( true ); + auto screen = get_screen(); + auto visual = screen->get_rgba_visual(); + if( visual && screen->is_composited() ) { + gtk_widget_set_visual( GTK_WIDGET( gobj() ), visual->gobj() ); + } +#else + Glib::RefPtr< Gdk::Pixmap > pixmap; + Glib::RefPtr< Gdk::Bitmap > bitmap; + m_pixbuf->render_pixmap_and_mask( pixmap, bitmap, 255 ); shape_combine_mask( bitmap, 0, 0 ); +#endif // GTKMM_CHECK_VERSION(3,0,0) add( m_img ); show_all_children(); From 5f24fffc2e8d97101c7d7162d9c3bb572d4754cc Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sun, 4 Nov 2018 09:43:31 +0900 Subject: [PATCH 18/51] Use Gtk::AccelLabel::set_accel() instead of Gtk::HBox since GTK+ 3.6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gtk::MenuItemにGtk::HBoxを追加する方法は動作しなくなった --- src/control/controlutil.cpp | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/control/controlutil.cpp b/src/control/controlutil.cpp index 858691f112..f509db923f 100644 --- a/src/control/controlutil.cpp +++ b/src/control/controlutil.cpp @@ -137,11 +137,59 @@ bool CONTROL::is_ascii( const guint keysym ) } +#if GTKMM_CHECK_VERSION(3,6,0) +static void slot_set_menu_motion( Gtk::Widget& widget ) +{ + const auto item = dynamic_cast< Gtk::MenuItem* >( &widget ); + + auto* const label = dynamic_cast< Gtk::AccelLabel* >( item->get_child() ); + if( label ) { +#ifdef _DEBUG + std::cout << label->get_text() << std::endl; +#endif + const int id = CONTROL::get_id( label->get_text() ); + if( id != CONTROL::None ) { + const std::string str_label = CONTROL::get_label_with_mnemonic( id ); + std::string str_motions; + + // CONTROL::get_str_motions()を参考に別個対応のidを処理する + if( id == CONTROL::PreferenceArticle + || id == CONTROL::PreferenceBoard + || id == CONTROL::PreferenceImage ) { + label->set_accel( GDK_KEY_p, Gdk::CONTROL_MASK | Gdk::SHIFT_MASK ); + str_motions = CONTROL::get_str_mousemotions( CONTROL::PreferenceView ); + } + else if( id == CONTROL::SaveDat ) { + label->set_accel( GDK_KEY_s, Gdk::CONTROL_MASK ); + str_motions = CONTROL::get_str_mousemotions( CONTROL::Save ); + } + else { + const auto key = CONTROL::get_accelkey( id ); + if( !key.is_null() ) { + label->set_accel( key.get_key(), key.get_mod() ); + } + str_motions = CONTROL::get_str_mousemotions( id ); + } + + label->set_text_with_mnemonic( str_label + ( str_motions.empty() ? "" : "\t" + str_motions ) ); + } + } + + if( item->has_submenu() ) { + CONTROL::set_menu_motion( item->get_submenu() ); + } +} +#endif // GTKMM_CHECK_VERSION(3,6,0) + + // メニューにショートカットキーやマウスジェスチャを表示 void CONTROL::set_menu_motion( Gtk::Menu* menu ) { if( !menu ) return; +#if GTKMM_CHECK_VERSION(3,6,0) + menu->foreach( &slot_set_menu_motion ); +#else menu->foreach( []( Gtk::Widget& w ) { auto* const item = dynamic_cast< Gtk::MenuItem* >( &w ); @@ -158,6 +206,10 @@ void CONTROL::set_menu_motion( Gtk::Menu* menu ) std::string str_label = CONTROL::get_label_with_mnemonic( id ); std::string str_motions = CONTROL::get_str_motions( id ); +#if GTKMM_CHECK_VERSION(3,0,0) + // Gtk::MenuItemにGtk::HBoxを追加する方法は動作しなくなった + label->set_text_with_mnemonic( str_label + ( str_motions.empty() ? "" : "\t" + str_motions ) ); +#else item->remove(); Gtk::Label *label = Gtk::manage( new Gtk::Label( str_label + ( str_motions.empty() ? "" : " " ), true ) ); Gtk::Label *label_motion = Gtk::manage( new Gtk::Label( str_motions ) ); @@ -167,11 +219,13 @@ void CONTROL::set_menu_motion( Gtk::Menu* menu ) box->pack_end( *label_motion, Gtk::PACK_SHRINK ); item->add( *box ); box->show_all(); +#endif } } if( item->has_submenu() ) CONTROL::set_menu_motion( item->get_submenu() ); } ); +#endif // GTKMM_CHECK_VERSION(3,6,0) } From c8c488eccbde93d0df1c6ceddcfd61bf99c674b1 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 30 Jun 2018 15:10:50 +0900 Subject: [PATCH 19/51] Update font get/set methods * Use Gtk::Widget::override_font() instead of modify_font() * Use Gtk::StyleContext to get label font instead of Gtk::Style * Use Gtk::StyleContext to get entry font instead of Gtk::Style --- src/article/drawareabase.cpp | 8 ++++++++ src/jdlib/miscgtk.cpp | 4 ++++ src/skeleton/aamenu.cpp | 4 ++++ src/skeleton/aboutdiag.cpp | 8 ++++++++ src/skeleton/compentry.h | 7 +++++++ src/skeleton/dragtreeview.cpp | 5 +++++ src/skeleton/editview.h | 9 +++++++++ src/skeleton/tooltip.cpp | 4 ++++ 8 files changed, 49 insertions(+) diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index 930f8c33e5..9b292003c9 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -407,7 +407,11 @@ void DrawAreaBase::init_font() // layoutにフォントをセット m_font = &m_defaultfont; m_pango_layout->set_font_description( m_font->pfd ); +#if GTKMM_CHECK_VERSION(3,0,0) + override_font( m_font->pfd ); +#else modify_font( m_font->pfd ); +#endif } @@ -2725,7 +2729,11 @@ void DrawAreaBase::set_node_font( LAYOUT* layout ) // layoutにフォントをセット m_pango_layout->set_font_description( m_font->pfd ); +#if GTKMM_CHECK_VERSION(3,0,0) + override_font( m_font->pfd ); +#else modify_font( m_font->pfd ); +#endif } } diff --git a/src/jdlib/miscgtk.cpp b/src/jdlib/miscgtk.cpp index 876c3dadd0..6b54c265b6 100644 --- a/src/jdlib/miscgtk.cpp +++ b/src/jdlib/miscgtk.cpp @@ -120,7 +120,11 @@ std::set< std::string > MISC::get_font_families() std::string MISC::get_entry_font() { Gtk::Entry entry; +#if GTKMM_CHECK_VERSION(3,0,0) + return entry.get_style_context()->get_font().to_string(); +#else return entry.get_style()->get_font().to_string(); +#endif } diff --git a/src/skeleton/aamenu.cpp b/src/skeleton/aamenu.cpp index d697b09baa..ac700e9e20 100644 --- a/src/skeleton/aamenu.cpp +++ b/src/skeleton/aamenu.cpp @@ -30,7 +30,11 @@ AAMenu::AAMenu( Gtk::Window& parent ) Pango::FontDescription pfd( CONFIG::get_fontname( FONT_MESSAGE ) ); pfd.set_weight( Pango::WEIGHT_NORMAL ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_textview.override_font( pfd ); +#else m_textview.modify_font( pfd ); +#endif m_textview.modify_text( Gtk::STATE_NORMAL, Gdk::Color( CONFIG::get_color( COLOR_CHAR_SELECTION ) ) ); m_textview.modify_base( Gtk::STATE_NORMAL, Gdk::Color( CONFIG::get_color( COLOR_BACK_SELECTION ) ) ); diff --git a/src/skeleton/aboutdiag.cpp b/src/skeleton/aboutdiag.cpp index 629af56f19..df3f22b1fc 100644 --- a/src/skeleton/aboutdiag.cpp +++ b/src/skeleton/aboutdiag.cpp @@ -162,11 +162,19 @@ void AboutDiag::set_version( const Glib::ustring& version ) { m_label_version.set_label( version ); +#if GTKMM_CHECK_VERSION(3,0,0) + Pango::FontDescription font_discription_version = m_label_version.get_style_context()->get_font(); +#else Pango::FontDescription font_discription_version = m_label_version.get_style()->get_font(); +#endif const int label_version_font_size = font_discription_version.get_size(); font_discription_version.set_size( label_version_font_size * 5 / 3 ); font_discription_version.set_weight( Pango::WEIGHT_BOLD ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_label_version.override_font( font_discription_version ); +#else m_label_version.modify_font( font_discription_version ); +#endif } Glib::ustring AboutDiag::get_version() diff --git a/src/skeleton/compentry.h b/src/skeleton/compentry.h index 198c97bba6..f47036147b 100644 --- a/src/skeleton/compentry.h +++ b/src/skeleton/compentry.h @@ -61,7 +61,14 @@ namespace SKELETON void set_text( const Glib::ustring& text ); void grab_focus(); +#if GTKMM_CHECK_VERSION(3,0,0) + void modify_font( const Pango::FontDescription& pfd ) + { + m_entry.override_font( pfd ); + } +#else void modify_font( Pango::FontDescription& pfd ){ m_entry.modify_font( pfd ); } +#endif private: diff --git a/src/skeleton/dragtreeview.cpp b/src/skeleton/dragtreeview.cpp index 68027a7b38..74fb79d4f7 100644 --- a/src/skeleton/dragtreeview.cpp +++ b/src/skeleton/dragtreeview.cpp @@ -2,6 +2,7 @@ //#define _DEBUG #include "jddebug.h" +#include "gtkmmversion.h" #include "dragtreeview.h" #include "view.h" @@ -136,7 +137,11 @@ void DragTreeView::init_font( const std::string& fontname ) { Pango::FontDescription pfd( fontname ); pfd.set_weight( Pango::WEIGHT_NORMAL ); +#if GTKMM_CHECK_VERSION(3,0,0) + override_font( pfd ); +#else modify_font( pfd ); +#endif m_tooltip.modify_font_label( fontname ); } diff --git a/src/skeleton/editview.h b/src/skeleton/editview.h index d958d72fd0..ebf1edeb90 100644 --- a/src/skeleton/editview.h +++ b/src/skeleton/editview.h @@ -3,6 +3,8 @@ #ifndef _EDITVIEW_H #define _EDITVIEW_H +#include "gtkmmversion.h" + #include #include "control/control.h" @@ -158,7 +160,14 @@ namespace SKELETON void set_editable( bool editable ){ m_textview.set_editable( editable ); } void set_accepts_tab( bool accept ){ m_textview.set_accepts_tab( accept ); } +#if GTKMM_CHECK_VERSION(3,0,0) + void modify_font( const Pango::FontDescription& font_desc ) + { + m_textview.override_font( font_desc ); + } +#else void modify_font( const Pango::FontDescription& font_desc ){ m_textview.modify_font( font_desc ); } +#endif void focus_view(){ m_textview.grab_focus(); } diff --git a/src/skeleton/tooltip.cpp b/src/skeleton/tooltip.cpp index d2345da5ce..95298a3026 100644 --- a/src/skeleton/tooltip.cpp +++ b/src/skeleton/tooltip.cpp @@ -28,7 +28,11 @@ void Tooltip::modify_font_label( const std::string& fontname ) { Pango::FontDescription pfd( fontname ); pfd.set_weight( Pango::WEIGHT_NORMAL ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_label.override_font( pfd ); +#else m_label.modify_font( pfd ); +#endif } From 86a080b476cd6e52ec24511848f7e86b0b4cb036 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 30 Jun 2018 15:44:07 +0900 Subject: [PATCH 20/51] Update color get/set methods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use Gtk::Widget::override_color() instead of modify_fg() * Use Gtk::Widget::override_color() instead of modify_text() * Use Gtk::Widget::override_background_color() instead of modify_bg() * Use Gtk::Widget::override_background_color() instead of modify_base() * Use Gtk::Widget::unset_color() instead of unset_fg() * Use Gtk::StyleContext to get entry color instead of Gtk::Style * Use Gtk::StyleContext to get bg color instead of Gtk::Style ウィジェットの配色ではなくGTKテーマの設定から色を取得するように 変更した箇所がある --- src/image/imageviewicon.cpp | 14 +++++++++----- src/image/imageviewpopup.cpp | 15 +++++++++++++++ src/jdlib/miscgtk.cpp | 30 ++++++++++++++++++++++++++++++ src/jdlib/miscgtk.h | 7 +++++++ src/message/messageviewbase.cpp | 11 +++++++++++ src/skeleton/aamenu.cpp | 6 +++++- src/skeleton/compentry.cpp | 11 +++++++++++ src/skeleton/dragtreeview.cpp | 8 ++++++++ src/skeleton/dragtreeview.h | 5 +++++ src/skeleton/editview.h | 11 +++++++++++ src/skeleton/toolbar.cpp | 10 ++++++++++ src/skeleton/window.cpp | 20 ++++++++++++++++++++ 12 files changed, 142 insertions(+), 6 deletions(-) diff --git a/src/image/imageviewicon.cpp b/src/image/imageviewicon.cpp index 9e2385ecdd..f636577edc 100644 --- a/src/image/imageviewicon.cpp +++ b/src/image/imageviewicon.cpp @@ -22,7 +22,11 @@ // 枠を描く -#define DRAW_FRAME( color ) m_event_frame->modify_bg( Gtk::STATE_NORMAL, color ); +#if GTKMM_CHECK_VERSION(3,0,0) +#define DRAW_FRAME( color ) m_event_frame->override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_NORMAL ) +#else +#define DRAW_FRAME( color ) m_event_frame->modify_bg( Gtk::STATE_NORMAL, Gdk::Color( color ) ) +#endif using namespace IMAGE; @@ -42,7 +46,7 @@ ImageViewIcon::ImageViewIcon( const std::string& url ) pack_start( *m_event_frame ); m_event_frame->add( get_event() ); get_event().set_border_width( 1 ); - DRAW_FRAME( Gdk::Color( "white" ) ); + DRAW_FRAME( "white" ); setup_common(); @@ -103,7 +107,7 @@ void ImageViewIcon::clock_in() // void ImageViewIcon::focus_view() { - DRAW_FRAME( Gdk::Color( "red" ) ); + DRAW_FRAME( "red" ); get_event().grab_focus(); } @@ -114,7 +118,7 @@ void ImageViewIcon::focus_view() void ImageViewIcon::focus_out() { SKELETON::View::focus_out(); - DRAW_FRAME( Gdk::Color( "white" ) ); + DRAW_FRAME( "white" ); } @@ -157,7 +161,7 @@ void ImageViewIcon::show_view() // void ImageViewIcon::switch_icon() { - DRAW_FRAME( Gdk::Color( "red" ) ); + DRAW_FRAME( "red" ); } diff --git a/src/image/imageviewpopup.cpp b/src/image/imageviewpopup.cpp index 4b3da8a99f..c549fd922a 100644 --- a/src/image/imageviewpopup.cpp +++ b/src/image/imageviewpopup.cpp @@ -56,12 +56,22 @@ ImageViewPopup::ImageViewPopup( const std::string& url ) get_event().set_border_width( margin ); // 枠色 +#if GTKMM_CHECK_VERSION(3,0,0) + m_event_frame.override_background_color( Gdk::RGBA( border_color ), Gtk::STATE_FLAG_NORMAL ); +#else m_event_frame.modify_bg( Gtk::STATE_NORMAL, Gdk::Color( border_color ) ); +#endif // 背景色 +#if GTKMM_CHECK_VERSION(3,0,0) + const Gdk::RGBA color_bg( bg_color ); + m_event_margin.override_background_color( color_bg, Gtk::STATE_FLAG_NORMAL ); + get_event().override_background_color( color_bg, Gtk::STATE_FLAG_NORMAL ); +#else const Gdk::Color color_bg( bg_color ); m_event_margin.modify_bg( Gtk::STATE_NORMAL, color_bg ); get_event().modify_bg( Gtk::STATE_NORMAL, color_bg ); +#endif // 全ての領域を表示できないならカーソルの上に表示 set_popup_upside( true ); @@ -127,8 +137,13 @@ void ImageViewPopup::set_label( const std::string& status ) CORE::CSS_PROPERTY css = CORE::get_css_manager()->get_property( classid ); if( css.color >= 0 ) text_color = CORE::get_css_manager()->get_color( css.color ); } +#if GTKMM_CHECK_VERSION(3,0,0) + const Gdk::RGBA color_text( text_color ); + m_label->override_color( color_text, Gtk::STATE_FLAG_NORMAL ); +#else const Gdk::Color color_text( text_color ); m_label->modify_fg( Gtk::STATE_NORMAL, color_text ); +#endif m_label->show(); } diff --git a/src/jdlib/miscgtk.cpp b/src/jdlib/miscgtk.cpp index 6b54c265b6..edfed52713 100644 --- a/src/jdlib/miscgtk.cpp +++ b/src/jdlib/miscgtk.cpp @@ -41,6 +41,18 @@ std::string MISC::color_to_str( const int* l_rgb ) return str_value; } +#if GTKMM_CHECK_VERSION(3,0,0) +// Gdk::RGBA -> 16進数表記の文字列 +std::string MISC::color_to_str( const Gdk::RGBA& rgba ) +{ + int l_rgb[ 3 ]; + l_rgb[ 0 ] = rgba.get_red_u(); + l_rgb[ 1 ] = rgba.get_green_u(); + l_rgb[ 2 ] = rgba.get_blue_u(); + return color_to_str( l_rgb ); +} +#endif // GTKMM_CHECK_VERSION(3,0,0) + // htmlカラー (#ffffffなど) -> 16進数表記の文字列 std::string MISC::htmlcolor_to_str( const std::string& _htmlcolor ) @@ -132,7 +144,12 @@ std::string MISC::get_entry_font() std::string MISC::get_entry_color_text() { Gtk::Entry entry; +#if GTKMM_CHECK_VERSION(3,0,0) + auto rgba = entry.get_style_context()->get_color( Gtk::STATE_FLAG_NORMAL ); + return color_to_str( rgba ); +#else return color_to_str( entry.get_style()->get_text( Gtk::STATE_NORMAL ) ); +#endif } @@ -140,7 +157,20 @@ std::string MISC::get_entry_color_text() std::string MISC::get_entry_color_base() { Gtk::Entry entry; +#if GTKMM_CHECK_VERSION(3,0,0) + // REVIEW: get_background_color()が期待通りに背景色を返さない環境があった + auto context = entry.get_style_context(); + Gdk::RGBA rgba; + if( !context->lookup_color( "theme_base_color", rgba ) ) { +#ifdef _DEBUG + std::cout << "ERROR:MISC::get_entry_color_base() " + << "lookup theme_base_color failed." << std::endl; +#endif + } + return color_to_str( rgba ); +#else return color_to_str( entry.get_style()->get_base( Gtk::STATE_NORMAL ) ); +#endif } diff --git a/src/jdlib/miscgtk.h b/src/jdlib/miscgtk.h index c2d80286a4..eb678fb053 100644 --- a/src/jdlib/miscgtk.h +++ b/src/jdlib/miscgtk.h @@ -5,6 +5,8 @@ #ifndef _MISCGTK_H #define _MISCGTK_H +#include "gtkmmversion.h" + #include #include @@ -17,6 +19,11 @@ namespace MISC // int[3] -> 16進数表記の文字列 std::string color_to_str( const int* l_rgb ); +#if GTKMM_CHECK_VERSION(3,0,0) + // Gdk::RGBA -> 16進数表記の文字列 + std::string color_to_str( const Gdk::RGBA& rgba ); +#endif + // htmlカラー (#ffffffなど) -> 16進数表記の文字列 std::string htmlcolor_to_str( const std::string& htmlcolor ); diff --git a/src/message/messageviewbase.cpp b/src/message/messageviewbase.cpp index 11623bae50..f45e96cebf 100644 --- a/src/message/messageviewbase.cpp +++ b/src/message/messageviewbase.cpp @@ -229,10 +229,21 @@ void MessageViewBase::init_color() { if( m_text_message ){ +#if GTKMM_CHECK_VERSION(3,0,0) + m_text_message->override_color( Gdk::RGBA( CONFIG::get_color( COLOR_CHAR_MESSAGE ) ), + Gtk::STATE_FLAG_NORMAL ); + m_text_message->override_color( Gdk::RGBA( CONFIG::get_color( COLOR_CHAR_MESSAGE_SELECTION ) ), + Gtk::STATE_FLAG_SELECTED ); + m_text_message->override_background_color( Gdk::RGBA( CONFIG::get_color( COLOR_BACK_MESSAGE ) ), + Gtk::STATE_FLAG_NORMAL ); + m_text_message->override_background_color( Gdk::RGBA( CONFIG::get_color( COLOR_BACK_MESSAGE_SELECTION ) ), + Gtk::STATE_FLAG_SELECTED ); +#else m_text_message->modify_text( Gtk::STATE_NORMAL, Gdk::Color( CONFIG::get_color( COLOR_CHAR_MESSAGE ) ) ); m_text_message->modify_text( Gtk::STATE_SELECTED, Gdk::Color( CONFIG::get_color( COLOR_CHAR_MESSAGE_SELECTION ) ) ); m_text_message->modify_base( Gtk::STATE_NORMAL, Gdk::Color( CONFIG::get_color( COLOR_BACK_MESSAGE ) ) ); m_text_message->modify_base( Gtk::STATE_SELECTED, Gdk::Color( CONFIG::get_color( COLOR_BACK_MESSAGE_SELECTION ) ) ); +#endif } } diff --git a/src/skeleton/aamenu.cpp b/src/skeleton/aamenu.cpp index ac700e9e20..ca587464c2 100644 --- a/src/skeleton/aamenu.cpp +++ b/src/skeleton/aamenu.cpp @@ -32,11 +32,15 @@ AAMenu::AAMenu( Gtk::Window& parent ) pfd.set_weight( Pango::WEIGHT_NORMAL ); #if GTKMM_CHECK_VERSION(3,0,0) m_textview.override_font( pfd ); + m_textview.override_color( Gdk::RGBA( CONFIG::get_color( COLOR_CHAR_SELECTION ) ), + Gtk::STATE_FLAG_NORMAL ); + m_textview.override_background_color( Gdk::RGBA( CONFIG::get_color( COLOR_BACK_SELECTION ) ), + Gtk::STATE_FLAG_NORMAL ); #else m_textview.modify_font( pfd ); -#endif m_textview.modify_text( Gtk::STATE_NORMAL, Gdk::Color( CONFIG::get_color( COLOR_CHAR_SELECTION ) ) ); m_textview.modify_base( Gtk::STATE_NORMAL, Gdk::Color( CONFIG::get_color( COLOR_BACK_SELECTION ) ) ); +#endif m_popup.sig_configured().connect( sigc::mem_fun( *this, &AAMenu::slot_configured_popup ) ); m_popup.add( m_textview ); diff --git a/src/skeleton/compentry.cpp b/src/skeleton/compentry.cpp index 836968e653..14e67c46cf 100644 --- a/src/skeleton/compentry.cpp +++ b/src/skeleton/compentry.cpp @@ -151,7 +151,18 @@ void CompletionEntry::show_popup( const bool show_all ) m_treeview.unset_cursor(); m_treeview.scroll_to_point( -1, 0 ); +#if GTKMM_CHECK_VERSION(3,0,0) + Gdk::RGBA rgba; + if( !get_style_context()->lookup_color( "theme_bg_color", rgba ) ) { +#ifdef _DEBUG + std::cout << "ERROR:CompletionEntry::show_popup() " + << "lookup theme_bg_color faild." << std::endl; +#endif + } + m_treeview.get_column_cell_renderer( 0 )->property_cell_background_rgba() = rgba; +#else m_treeview.get_column_cell_renderer( 0 )->property_cell_background_gdk() = get_style()->get_bg( Gtk::STATE_NORMAL ); +#endif // GTKMM_CHECK_VERSION(3,0,0) } diff --git a/src/skeleton/dragtreeview.cpp b/src/skeleton/dragtreeview.cpp index 74fb79d4f7..e60b5f1179 100644 --- a/src/skeleton/dragtreeview.cpp +++ b/src/skeleton/dragtreeview.cpp @@ -119,11 +119,19 @@ void DragTreeView::init_color( const int colorid_text, const int colorid_bg, con // 文字色 m_color_text.set( CONFIG::get_color( colorid_text ) ); +#if GTKMM_CHECK_VERSION(3,0,0) + override_color( m_color_text, get_state_flags() ); +#else modify_text( get_state(), m_color_text ); +#endif // 背景色 m_color_bg.set( CONFIG::get_color( colorid_bg ) ); +#if GTKMM_CHECK_VERSION(3,0,0) + override_background_color( m_color_bg, get_state_flags() ); +#else modify_base( get_state(), m_color_bg ); +#endif m_use_bg_even = ! ( CONFIG::get_color( colorid_bg ) == CONFIG::get_color( colorid_bg_even ) ); m_color_bg_even.set( CONFIG::get_color( colorid_bg_even ) ); diff --git a/src/skeleton/dragtreeview.h b/src/skeleton/dragtreeview.h index 56899c3ee3..af73cf18d7 100644 --- a/src/skeleton/dragtreeview.h +++ b/src/skeleton/dragtreeview.h @@ -42,8 +42,13 @@ namespace SKELETON // 色 bool m_use_bg_even; +#if GTKMM_CHECK_VERSION(3,0,0) + Gdk::RGBA m_color_text; + Gdk::RGBA m_color_bg; +#else Gdk::Color m_color_text; Gdk::Color m_color_bg; +#endif Gdk::Color m_color_bg_even; // ポップアップウィンドウ用 diff --git a/src/skeleton/editview.h b/src/skeleton/editview.h index ebf1edeb90..c3fe00a487 100644 --- a/src/skeleton/editview.h +++ b/src/skeleton/editview.h @@ -152,8 +152,19 @@ namespace SKELETON void set_wrap_mode( Gtk::WrapMode wrap_mode ){ m_textview.set_wrap_mode( wrap_mode ); } +#if GTKMM_CHECK_VERSION(3,0,0) + void override_color( const Gdk::RGBA& color, Gtk::StateFlags state ) + { + m_textview.override_color( color, state ); + } + void override_background_color( const Gdk::RGBA& color, Gtk::StateFlags state ) + { + m_textview.override_background_color( color, state ); + } +#else void modify_text( Gtk::StateType state, const Gdk::Color& color ){ m_textview.modify_text( state, color ); } void modify_base( Gtk::StateType state, const Gdk::Color& color ){ m_textview.modify_base( state, color ); } +#endif void insert_str( const std::string& str, bool use_br ){ m_textview.insert_str( str, use_br ); } diff --git a/src/skeleton/toolbar.cpp b/src/skeleton/toolbar.cpp index c5acb7512a..4c57a89bbf 100644 --- a/src/skeleton/toolbar.cpp +++ b/src/skeleton/toolbar.cpp @@ -335,15 +335,25 @@ void ToolBar::set_color( const std::string& color ) if( m_ebox_label->get_visible_window() ){ m_ebox_label->set_visible_window( false ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_label->unset_color( Gtk::STATE_FLAG_NORMAL ); +#else m_label->unset_fg( Gtk::STATE_NORMAL ); +#endif } } else{ m_ebox_label->set_visible_window( true ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_label->override_color( Gdk::RGBA( "white" ), Gtk::STATE_FLAG_NORMAL ); + m_ebox_label->override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_NORMAL ); + m_ebox_label->override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_ACTIVE ); +#else m_label->modify_fg( Gtk::STATE_NORMAL, Gdk::Color( "white" ) ); m_ebox_label->modify_bg( Gtk::STATE_NORMAL, Gdk::Color( color ) ); m_ebox_label->modify_bg( Gtk::STATE_ACTIVE, Gdk::Color( color ) ); +#endif } } diff --git a/src/skeleton/window.cpp b/src/skeleton/window.cpp index 890a038bda..ffbb198b19 100644 --- a/src/skeleton/window.cpp +++ b/src/skeleton/window.cpp @@ -446,8 +446,13 @@ void JDWindow::set_status_color( const std::string& color ) if( color.empty() ){ if( m_label_stat_ebox.get_visible_window() ){ +#if GTKMM_CHECK_VERSION(3,0,0) + m_label_stat.unset_color( Gtk::STATE_FLAG_NORMAL ); + m_mginfo.unset_color( Gtk::STATE_FLAG_NORMAL ); +#else m_label_stat.unset_fg( Gtk::STATE_NORMAL ); m_mginfo.unset_fg( Gtk::STATE_NORMAL ); +#endif m_label_stat_ebox.set_visible_window( false ); m_mginfo_ebox.set_visible_window( false ); @@ -455,16 +460,31 @@ void JDWindow::set_status_color( const std::string& color ) } else{ +#if GTKMM_CHECK_VERSION(3,0,0) + m_label_stat.override_color( Gdk::RGBA( "white" ), Gtk::STATE_FLAG_NORMAL ); + m_mginfo.override_color( Gdk::RGBA( "white" ), Gtk::STATE_FLAG_NORMAL ); +#else m_label_stat.modify_fg( Gtk::STATE_NORMAL, Gdk::Color( "white" ) ); m_mginfo.modify_fg( Gtk::STATE_NORMAL, Gdk::Color( "white" ) ); +#endif m_label_stat_ebox.set_visible_window( true ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_label_stat_ebox.override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_NORMAL ); + m_label_stat_ebox.override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_ACTIVE ); +#else m_label_stat_ebox.modify_bg( Gtk::STATE_NORMAL, Gdk::Color( color ) ); m_label_stat_ebox.modify_bg( Gtk::STATE_ACTIVE, Gdk::Color( color ) ); +#endif m_mginfo_ebox.set_visible_window( true ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_mginfo_ebox.override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_NORMAL ); + m_mginfo_ebox.override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_ACTIVE ); +#else m_mginfo_ebox.modify_bg( Gtk::STATE_NORMAL, Gdk::Color( color ) ); m_mginfo_ebox.modify_bg( Gtk::STATE_ACTIVE, Gdk::Color( color ) ); +#endif } #endif } From 86b0d2e5fd8144f26492764d389503b9e1255ad6 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Thu, 19 Jul 2018 23:56:06 +0900 Subject: [PATCH 21/51] Update margin get/set methods * Use Gtk::Widget::set_margin_xxx() instead of Gtk::(Rc)Style::set_(x|y)thickness() * Use Gtk::Widget::get_margin_xxx() instead of Gtk::(Rc)Style::get_(x|y)thickness() --- src/core.cpp | 8 ++++++++ src/skeleton/tabnote.cpp | 11 +++++++++++ src/skeleton/tabswitchbutton.cpp | 5 +++++ src/skeleton/toolbarnote.cpp | 5 +++++ 4 files changed, 29 insertions(+) diff --git a/src/core.cpp b/src/core.cpp index e219700284..e01163bca9 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -1130,7 +1130,15 @@ void Core::run( const bool init, const bool skip_setupdiag ) // その他設定とwidgetのパッキング m_notebook_right.set_show_tabs( false ); m_notebook_right.set_show_border( false ); +#if GTKMM_CHECK_VERSION(3,12,0) + m_notebook_right.set_margin_start( 0 ); + m_notebook_right.set_margin_end( 0 ); +#elif GTKMM_CHECK_VERSION(3,0,0) + m_notebook_right.set_margin_left( 0 ); + m_notebook_right.set_margin_right( 0 ); +#else m_notebook_right.get_style()->set_xthickness( 10 ); +#endif if( CONFIG::get_open_sidebar_by_click() ) m_hpaned.get_ctrl().set_click_fold( SKELETON::PANE_CLICK_FOLD_PAGE1 ); m_hpaned.get_ctrl().add_remove1( false, *m_sidebar ); diff --git a/src/skeleton/tabnote.cpp b/src/skeleton/tabnote.cpp index d69735d6b2..f5ddb6bd96 100644 --- a/src/skeleton/tabnote.cpp +++ b/src/skeleton/tabnote.cpp @@ -369,11 +369,22 @@ TabNotebook::TabNotebook( DragableNoteBook* parent ) targets.push_back( Gtk::TargetEntry( DNDTARGET_TAB, Gtk::TARGET_SAME_APP, 0 ) ); drag_dest_set( targets, Gtk::DEST_DEFAULT_MOTION | Gtk::DEST_DEFAULT_DROP ); +#if GTKMM_CHECK_VERSION(3,0,0) +#if GTKMM_CHECK_VERSION(3,12,0) + m_tab_mrg = get_margin_start(); +#else + m_tab_mrg = get_margin_left(); +#endif + if( m_tab_mrg <= 0 ) { + m_tab_mrg = get_style_context()->get_margin().get_left(); + } +#else Glib::RefPtr< Gtk::RcStyle > rcst = get_modifier_style(); Glib::RefPtr< Gtk::Style > st = get_style(); m_tab_mrg = rcst->get_xthickness() * 2; if( m_tab_mrg <= 0 ) m_tab_mrg = st->get_xthickness() * 2; +#endif // GTKMM_CHECK_VERSION(3,0,0) m_pre_width = get_width(); } diff --git a/src/skeleton/tabswitchbutton.cpp b/src/skeleton/tabswitchbutton.cpp index 9db2d15859..e073ad5dfb 100644 --- a/src/skeleton/tabswitchbutton.cpp +++ b/src/skeleton/tabswitchbutton.cpp @@ -23,9 +23,14 @@ TabSwitchButton::TabSwitchButton( DragableNoteBook* parent ) m_button.set_focus_on_click( false ); // フォーカス時にボタンの枠がはみ出さないようにする +#if GTKMM_CHECK_VERSION(3,0,0) + m_button.set_margin_top( 0 ); + m_button.set_margin_bottom( 0 ); +#else Glib::RefPtr< Gtk::RcStyle > rcst = m_button.get_modifier_style(); rcst->set_ythickness( 0 ); m_button.modify_style( rcst ); +#endif // GTKMM_CHECK_VERSION(3,0,0) m_vbox.pack_start( m_button, Gtk::PACK_SHRINK ); diff --git a/src/skeleton/toolbarnote.cpp b/src/skeleton/toolbarnote.cpp index aff95b47d9..67f2be464e 100644 --- a/src/skeleton/toolbarnote.cpp +++ b/src/skeleton/toolbarnote.cpp @@ -19,9 +19,14 @@ ToolBarNotebook::ToolBarNotebook( DragableNoteBook* parent ) set_show_tabs( false ); set_border_width( 0 ); +#if GTKMM_CHECK_VERSION(3,0,0) + set_margin_top( 1 ); + set_margin_bottom( 1 ); +#else Glib::RefPtr< Gtk::RcStyle > rcst = get_modifier_style(); rcst->set_ythickness( 1 ); modify_style( rcst ); +#endif // GTKMM_CHECK_VERSION(3,0,0) } From ef3c3f3eaabc049380497fede6dfbf30656b7ff5 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Thu, 4 Oct 2018 23:41:59 +0900 Subject: [PATCH 22/51] Fix tab DnD logics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DragableNoteBookの主なロジックのうち以下をgtk3でも動くように変更する * タブの描画は、自前で描画するのをやめてデフォルトのハンドラを使う * タブ幅の計算は、タブの代わりにラベルの領域を使う 既知の問題 * DnDでタブを並べ替えるときに表示する目標の矢印はタブの境界からずれる * DnDのドロップ範囲がタブの領域より狭くなっている * タブの上でマウスホイールするとページが切り替わる機能は 先頭<->最後尾の場合を除いて機能しない * ラベルの領域からシグナルを拾うのでタブの端付近では ドラッグを開始できない 既存のロジックは実装の詳細をgtkのソースコードから引用して使うことで タブの領域を取得する。gtk3ではデータ構造の変更[1]により今までの方法が できなくなった。 [1]: gtk 3.20から_GtkNotebookPageは割り当てられた領域(GtkAllocation) を持たなくなった。 https://gitlab.gnome.org/GNOME/gtk/blob/gtk-2-24/gtk/gtknotebook.c#L148 https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/gtk/gtknotebook.c#L293 --- src/skeleton/tabnote.cpp | 47 ++++++++++++++++++++++++++++++++++++++++ src/skeleton/tabnote.h | 4 ++++ 2 files changed, 51 insertions(+) diff --git a/src/skeleton/tabnote.cpp b/src/skeleton/tabnote.cpp index f5ddb6bd96..81180a0bad 100644 --- a/src/skeleton/tabnote.cpp +++ b/src/skeleton/tabnote.cpp @@ -105,6 +105,7 @@ struct _GtkNotebookPage // 描画本体 +#if !GTKMM_CHECK_VERSION(3,0,0) bool TabNotebook::paint( GdkEventExpose* event ) { GtkNotebook *notebook = gobj(); @@ -169,9 +170,11 @@ bool TabNotebook::paint( GdkEventExpose* event ) return true; } +#endif // !GTKMM_CHECK_VERSION(3,0,0) // タブ描画 +#if !GTKMM_CHECK_VERSION(3,0,0) void TabNotebook::draw_tab( const GtkNotebook *notebook, const GtkNotebookPage *page, GdkRectangle *area, @@ -211,9 +214,11 @@ void TabNotebook::draw_tab( const GtkNotebook *notebook, ); } } +#endif // !GTKMM_CHECK_VERSION(3,0,0) // 矢印(スクロール)マークの描画 +#if !GTKMM_CHECK_VERSION(3,0,0) void TabNotebook::draw_arrow( GtkWidget *widget, const GtkNotebook *notebook, const Gdk::Rectangle& rect, @@ -264,10 +269,12 @@ void TabNotebook::draw_arrow( GtkWidget *widget, arrow_rect.height ); } +#endif // !GTKMM_CHECK_VERSION(3,0,0) // 矢印マークの位置、幅、高さを取得 // before : true ならタブの左側に表示される矢印 +#if !GTKMM_CHECK_VERSION(3,0,0) void TabNotebook::get_arrow_rect( GtkWidget *widget, const GtkNotebook *notebook, GdkRectangle *rectangle, const gboolean before ) { GdkRectangle event_window_pos; @@ -289,9 +296,11 @@ void TabNotebook::get_arrow_rect( GtkWidget *widget, const GtkNotebook *notebook rectangle->y = event_window_pos.y + ( event_window_pos.height - rectangle->height ) / 2; } } +#endif // !GTKMM_CHECK_VERSION(3,0,0) // タブ描画領域の位置、幅、高さを取得 +#if !GTKMM_CHECK_VERSION(3,0,0) gboolean TabNotebook::get_event_window_position( const GtkWidget *widget, const GtkNotebook *notebook, GdkRectangle *rectangle ) { GtkNotebookPage* visible_page = NULL; @@ -321,6 +330,7 @@ gboolean TabNotebook::get_event_window_position( const GtkWidget *widget, const return FALSE; } +#endif // !GTKMM_CHECK_VERSION(3,0,0) @@ -574,6 +584,40 @@ void TabNotebook::calc_tabsize() std::cout << "TabNotebook::calc_tabsize\n"; #endif +#if GTKMM_CHECK_VERSION(3,0,0) + // gtk3は実装の詳細がバージョンによって異なるためタブの代わりにラベルの領域を取得する + // この影響によりDnDでタブを並べ替えるときに表示する目標の矢印はタブの境界からずれる + // XXX: タブの領域の正確な値を必要とする場合は修正が必要 + const int n_pages = get_n_pages(); + for( int i = 0; i < n_pages; ++i ) { + auto tab_label = get_tablabel( i ); + if( tab_label ) { + int tab_x = -1; + int tab_y = -1; + int tab_w = -1; + int tab_h = -1; + + if( tab_label->get_mapped() ) { + Gdk::Rectangle rect = tab_label->get_allocation(); + + tab_x = rect.get_x(); + tab_y = rect.get_y(); + tab_w = rect.get_width(); + tab_h = rect.get_height(); + + m_tab_mrg = 0; + } + +#ifdef _DEBUG + std::cout << "page = " << i << " x = " << tab_x << " w = " << tab_w << " mrg = " << m_tab_mrg << std::endl; +#endif + tab_label->set_tab_x( tab_x ); + tab_label->set_tab_y( tab_y ); + tab_label->set_tab_width( tab_w ); + tab_label->set_tab_height( tab_h ); + } + } +#else // !GTKMM_CHECK_VERSION(3,0,0) GtkNotebook *notebook = gobj(); GList * children = notebook->children; @@ -613,6 +657,7 @@ void TabNotebook::calc_tabsize() tab->set_tab_height( tab_h ); } } +#endif // GTKMM_CHECK_VERSION(3,0,0) } @@ -783,10 +828,12 @@ void TabNotebook::get_alloc_tab( Alloc_NoteBook& alloc ) // // 描画イベント // +#if !GTKMM_CHECK_VERSION(3,0,0) bool TabNotebook::on_expose_event( GdkEventExpose* event ) { return paint( event ); } +#endif // !GTKMM_CHECK_VERSION(3,0,0) diff --git a/src/skeleton/tabnote.h b/src/skeleton/tabnote.h index 0a506e61a6..783df40e78 100644 --- a/src/skeleton/tabnote.h +++ b/src/skeleton/tabnote.h @@ -103,6 +103,7 @@ namespace SKELETON private: +#if !GTKMM_CHECK_VERSION(3,0,0) // gtknotebook.c ( Revision 19311, 2008-01-06 ) を参考にして作成した描画関係の関数 bool paint( GdkEventExpose* event ); @@ -121,6 +122,7 @@ namespace SKELETON void get_arrow_rect( GtkWidget *widget, const GtkNotebook *notebook, GdkRectangle *rectangle, const gboolean before ); gboolean get_event_window_position( const GtkWidget *widget, const GtkNotebook *notebook, GdkRectangle *rectangle ); +#endif // !GTKMM_CHECK_VERSION(3,0,0) // 各タブのサイズと座標を取得 @@ -128,7 +130,9 @@ namespace SKELETON protected: +#if !GTKMM_CHECK_VERSION(3,0,0) bool on_expose_event( GdkEventExpose* event ) override; +#endif void on_size_allocate( Gtk::Allocation& allocation ) override; // signal_button_press_event と signal_button_release_event は emit されない From d6222dfaa64aa080fa85d3c578bca3eb95106526 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 6 Oct 2018 22:32:46 +0900 Subject: [PATCH 23/51] Fix tab DnD drop area MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit タブDnDの目標矢印が境界からずれる&ドロップ範囲がタブの領域より 狭くなっている不具合を低減する。GTKテーマによってはドロップ先を示す 矢印の描画に問題が発生する可能性がある。 XXX: この修正はラベルの左右の余白の大きさが同じであることを前提とする --- src/skeleton/tabnote.cpp | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/skeleton/tabnote.cpp b/src/skeleton/tabnote.cpp index 81180a0bad..6fcd0b6a37 100644 --- a/src/skeleton/tabnote.cpp +++ b/src/skeleton/tabnote.cpp @@ -586,11 +586,31 @@ void TabNotebook::calc_tabsize() #if GTKMM_CHECK_VERSION(3,0,0) // gtk3は実装の詳細がバージョンによって異なるためタブの代わりにラベルの領域を取得する - // この影響によりDnDでタブを並べ替えるときに表示する目標の矢印はタブの境界からずれる - // XXX: タブの領域の正確な値を必要とする場合は修正が必要 const int n_pages = get_n_pages(); + // ラベルの領域とタブの領域のオフセットを概算する + // GTKテーマが変更されるとオフセットが変わる可能性があるので毎回計算する + // XXX: この修正はラベルの左右の余白の大きさが同じであることを前提とする + int offset = 0; + + if( n_pages > 1 ) { + const auto* tab1 = get_tablabel( 0 ); + for( int i = 1; i < n_pages; ++i ) { + const auto* const tab2 = get_tablabel( i ); + if( tab1 && tab2 && tab1->get_mapped() && tab2->get_mapped() ) { + const auto alloc1 = tab1->get_allocation(); + const auto alloc2 = tab2->get_allocation(); + offset = alloc2.get_x() - ( alloc1.get_x() + alloc1.get_width() ); +#ifdef _DEBUG + std::cout << "computed offset = " << offset << std::endl; +#endif + break; + } + tab1 = tab2; + } + } + for( int i = 0; i < n_pages; ++i ) { - auto tab_label = get_tablabel( i ); + auto* const tab_label = get_tablabel( i ); if( tab_label ) { int tab_x = -1; int tab_y = -1; @@ -600,9 +620,9 @@ void TabNotebook::calc_tabsize() if( tab_label->get_mapped() ) { Gdk::Rectangle rect = tab_label->get_allocation(); - tab_x = rect.get_x(); + tab_x = rect.get_x() - ( offset / 2 ); tab_y = rect.get_y(); - tab_w = rect.get_width(); + tab_w = rect.get_width() + offset; tab_h = rect.get_height(); m_tab_mrg = 0; From 7ddd77ccb22ff0325f972724b7f9e1c7b17cd3af Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 11 Aug 2018 16:02:46 +0900 Subject: [PATCH 24/51] Omit custom draw for DragableNoteBook MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Omit DragableNoteBook::draw_box() and get_alloc_notebook(). * Omit custom draw for DragableNoteBook, TabNotebook TabSwitchButton, ToolBarNotebook and ViewNotebook. 枠の描画や座標取得のメソッドを省略しDragableNoteBookの描画処理は 自前でやらない 変更の理由 描画処理に必要な座標はgtkのソースコードを引用して実装の詳細に アクセスして取得している。gtk3ではデータ構造が変更された影響で 今までのコードが使えなくなった。 --- src/skeleton/dragnote.cpp | 6 ++++++ src/skeleton/dragnote.h | 6 ++++++ src/skeleton/tabnote.cpp | 6 ++++++ src/skeleton/tabnote.h | 2 ++ src/skeleton/tabswitchbutton.cpp | 13 +++++++++---- src/skeleton/tabswitchbutton.h | 8 ++++++-- src/skeleton/toolbarnote.cpp | 13 ++++++++++--- src/skeleton/toolbarnote.h | 4 ++++ src/skeleton/viewnote.cpp | 15 +++++++++++++-- src/skeleton/viewnote.h | 4 ++++ 10 files changed, 66 insertions(+), 11 deletions(-) diff --git a/src/skeleton/dragnote.cpp b/src/skeleton/dragnote.cpp index c75f51e4ba..66852bc7d3 100644 --- a/src/skeleton/dragnote.cpp +++ b/src/skeleton/dragnote.cpp @@ -96,6 +96,7 @@ void DragableNoteBook::focus_out() // Auroraなどテーマによっては m_notebook_toolbar が m_notebook_view に上書きされて // 消えてしまうのでもう一度 m_notebook_toolbar を描画する // +#if !GTKMM_CHECK_VERSION(3,0,0) bool DragableNoteBook::on_expose_event( GdkEventExpose* event ) { const bool ret = Gtk::VBox::on_expose_event( event ); @@ -144,12 +145,14 @@ bool DragableNoteBook::on_expose_event( GdkEventExpose* event ) } return ret; } +#endif // !GTKMM_CHECK_VERSION(3,0,0) // // DragableNoteBook を構成している各Notebookの高さ // 及びタブの高さと位置を取得 ( 枠の描画用 ) // +#if !GTKMM_CHECK_VERSION(3,0,0) const Alloc_NoteBook DragableNoteBook::get_alloc_notebook() { Alloc_NoteBook alloc; @@ -186,6 +189,7 @@ const Alloc_NoteBook DragableNoteBook::get_alloc_notebook() return alloc; } +#endif // !GTKMM_CHECK_VERSION(3,0,0) // @@ -193,6 +197,7 @@ const Alloc_NoteBook DragableNoteBook::get_alloc_notebook() // // gtknotebook.c( Revision 19593, Sat Feb 16 04:09:15 2008 UTC ) からのハック。環境やバージョンによっては問題が出るかもしれないので注意 // +#if !GTKMM_CHECK_VERSION(3,0,0) void DragableNoteBook::draw_box( Gtk::Widget* widget, GdkEventExpose* event ) { const Glib::RefPtr win = widget->get_window(); @@ -245,6 +250,7 @@ void DragableNoteBook::draw_box( Gtk::Widget* widget, GdkEventExpose* event ) } } } +#endif // !GTKMM_CHECK_VERSION(3,0,0) void DragableNoteBook::set_show_tabs( bool show_tabs ) diff --git a/src/skeleton/dragnote.h b/src/skeleton/dragnote.h index c402131882..6959858807 100644 --- a/src/skeleton/dragnote.h +++ b/src/skeleton/dragnote.h @@ -119,8 +119,10 @@ namespace SKELETON void clock_in(); void focus_out(); +#if !GTKMM_CHECK_VERSION(3,0,0) // 枠描画 void draw_box( Gtk::Widget* widget, GdkEventExpose* event ); +#endif bool get_show_tabs() const { return m_show_tabs; } void set_show_tabs( bool show_tabs ); @@ -168,11 +170,15 @@ namespace SKELETON private: +#if !GTKMM_CHECK_VERSION(3,0,0) bool on_expose_event( GdkEventExpose* event ) override; +#endif +#if !GTKMM_CHECK_VERSION(3,0,0) // DragableNoteBook を構成している各Notebookの高さ // 及びタブの高さと位置を取得 ( 枠の描画用 ) const Alloc_NoteBook get_alloc_notebook(); +#endif // ツールバー取得 SKELETON::ToolBar* get_toolbar( int page ); diff --git a/src/skeleton/tabnote.cpp b/src/skeleton/tabnote.cpp index 6fcd0b6a37..a5ef098607 100644 --- a/src/skeleton/tabnote.cpp +++ b/src/skeleton/tabnote.cpp @@ -18,6 +18,8 @@ using namespace SKELETON; +#if !GTKMM_CHECK_VERSION(3,0,0) + ////////////////////////////////////////// // // gtknotebook.c( Revision 19311, 2008-01-06 ) より引用 @@ -98,6 +100,8 @@ struct _GtkNotebookPage gulong notify_visible_handler; }; +#endif // !GTKMM_CHECK_VERSION(3,0,0) + ////////////////////////////////////////// // @@ -824,6 +828,7 @@ bool TabNotebook::adjust_tabwidth() // // タブの高さ、幅、位置を取得 ( 描画用 ) // +#if !GTKMM_CHECK_VERSION(3,0,0) void TabNotebook::get_alloc_tab( Alloc_NoteBook& alloc ) { alloc.x_tab = 0; @@ -843,6 +848,7 @@ void TabNotebook::get_alloc_tab( Alloc_NoteBook& alloc ) alloc.height_tab = notebook->cur_page->allocation.height; } } +#endif // !GTKMM_CHECK_VERSION(3,0,0) // diff --git a/src/skeleton/tabnote.h b/src/skeleton/tabnote.h index 783df40e78..cb5ed138f3 100644 --- a/src/skeleton/tabnote.h +++ b/src/skeleton/tabnote.h @@ -98,8 +98,10 @@ namespace SKELETON // マウスがタブの右側にある場合はページ数の値を返す int get_page_under_mouse(); +#if !GTKMM_CHECK_VERSION(3,0,0) // タブの高さ、幅、位置を取得 ( 描画用 ) void get_alloc_tab( Alloc_NoteBook& alloc ); +#endif private: diff --git a/src/skeleton/tabswitchbutton.cpp b/src/skeleton/tabswitchbutton.cpp index e073ad5dfb..89ac69c6cc 100644 --- a/src/skeleton/tabswitchbutton.cpp +++ b/src/skeleton/tabswitchbutton.cpp @@ -4,16 +4,18 @@ #include "jddebug.h" #include "tabswitchbutton.h" +#if !GTKMM_CHECK_VERSION(3,0,0) #include "dragnote.h" +#endif using namespace SKELETON; TabSwitchButton::TabSwitchButton( DragableNoteBook* parent ) - : Gtk::Notebook(), - m_parent( parent ), - m_arrow( Gtk::ARROW_DOWN, Gtk::SHADOW_NONE ), - m_shown( false ) + : Gtk::Notebook() +#if !GTKMM_CHECK_VERSION(3,0,0) + , m_parent( parent ) +#endif { set_border_width( 0 ); @@ -24,6 +26,7 @@ TabSwitchButton::TabSwitchButton( DragableNoteBook* parent ) // フォーカス時にボタンの枠がはみ出さないようにする #if GTKMM_CHECK_VERSION(3,0,0) + static_cast< void >( parent ); m_button.set_margin_top( 0 ); m_button.set_margin_bottom( 0 ); #else @@ -64,6 +67,7 @@ void TabSwitchButton::hide_button() // // 自前でビュー領域の枠を描画する // +#if !GTKMM_CHECK_VERSION(3,0,0) bool TabSwitchButton::on_expose_event( GdkEventExpose* event ) { if( ! m_shown ) return Gtk::Notebook::on_expose_event( event ); @@ -76,3 +80,4 @@ bool TabSwitchButton::on_expose_event( GdkEventExpose* event ) return true; } +#endif // !GTKMM_CHECK_VERSION(3,0,0) diff --git a/src/skeleton/tabswitchbutton.h b/src/skeleton/tabswitchbutton.h index f2e8d58c2a..e15bc5077a 100644 --- a/src/skeleton/tabswitchbutton.h +++ b/src/skeleton/tabswitchbutton.h @@ -18,13 +18,15 @@ namespace SKELETON class TabSwitchButton: public Gtk::Notebook { +#if !GTKMM_CHECK_VERSION(3,0,0) DragableNoteBook* m_parent; +#endif Gtk::VBox m_vbox; Gtk::Button m_button; - Gtk::Arrow m_arrow; + Gtk::Arrow m_arrow{ Gtk::ARROW_DOWN, Gtk::SHADOW_NONE }; - bool m_shown; + bool m_shown = false; public: @@ -35,9 +37,11 @@ namespace SKELETON void show_button(); void hide_button(); +#if !GTKMM_CHECK_VERSION(3,0,0) protected: bool on_expose_event( GdkEventExpose* event ) override; +#endif }; } diff --git a/src/skeleton/toolbarnote.cpp b/src/skeleton/toolbarnote.cpp index 67f2be464e..aba6290e29 100644 --- a/src/skeleton/toolbarnote.cpp +++ b/src/skeleton/toolbarnote.cpp @@ -3,23 +3,28 @@ //#define _DEBUG #include "jddebug.h" -#include "dragnote.h" #include "toolbarnote.h" +#if !GTKMM_CHECK_VERSION(3,0,0) +#include "dragnote.h" #include +#endif using namespace SKELETON; ToolBarNotebook::ToolBarNotebook( DragableNoteBook* parent ) - : Gtk::Notebook(), - m_parent( parent ) + : Gtk::Notebook() +#if !GTKMM_CHECK_VERSION(3,0,0) + , m_parent( parent ) +#endif { set_show_border( true ); set_show_tabs( false ); set_border_width( 0 ); #if GTKMM_CHECK_VERSION(3,0,0) + static_cast< void >( parent ); set_margin_top( 1 ); set_margin_bottom( 1 ); #else @@ -35,6 +40,7 @@ ToolBarNotebook::ToolBarNotebook( DragableNoteBook* parent ) // // 自前でビュー領域の枠を描画する // +#if !GTKMM_CHECK_VERSION(3,0,0) bool ToolBarNotebook::on_expose_event( GdkEventExpose* event ) { // 枠描画 @@ -48,3 +54,4 @@ bool ToolBarNotebook::on_expose_event( GdkEventExpose* event ) return ret; } +#endif // !GTKMM_CHECK_VERSION(3,0,0) diff --git a/src/skeleton/toolbarnote.h b/src/skeleton/toolbarnote.h index a006b67c99..96df350d6f 100644 --- a/src/skeleton/toolbarnote.h +++ b/src/skeleton/toolbarnote.h @@ -14,15 +14,19 @@ namespace SKELETON class ToolBarNotebook : public Gtk::Notebook { +#if !GTKMM_CHECK_VERSION(3,0,0) DragableNoteBook* m_parent; +#endif public: ToolBarNotebook( DragableNoteBook* parent ); +#if !GTKMM_CHECK_VERSION(3,0,0) protected: bool on_expose_event( GdkEventExpose* event ) override; +#endif }; } diff --git a/src/skeleton/viewnote.cpp b/src/skeleton/viewnote.cpp index d8cfd038d5..e9f793cb73 100644 --- a/src/skeleton/viewnote.cpp +++ b/src/skeleton/viewnote.cpp @@ -3,21 +3,30 @@ //#define _DEBUG #include "jddebug.h" +#if !GTKMM_CHECK_VERSION(3,0,0) #include "dragnote.h" +#endif #include "viewnote.h" #include "view.h" #include "config/globalconf.h" +#if !GTKMM_CHECK_VERSION(3,0,0) #include +#endif using namespace SKELETON; ViewNotebook::ViewNotebook( DragableNoteBook* parent ) - : Gtk::Notebook(), - m_parent( parent ) + : Gtk::Notebook() +#if !GTKMM_CHECK_VERSION(3,0,0) + , m_parent( parent ) +#endif { +#if GTKMM_CHECK_VERSION(3,0,0) + static_cast< void >( parent ); +#endif set_show_border( true ); set_show_tabs( false ); set_border_width( CONFIG::get_view_margin() ); @@ -29,6 +38,7 @@ ViewNotebook::ViewNotebook( DragableNoteBook* parent ) // // 自前で枠を描画する // +#if !GTKMM_CHECK_VERSION(3,0,0) bool ViewNotebook::on_expose_event( GdkEventExpose* event ) { if( ! get_n_pages() ) return Notebook::on_expose_event( event ); @@ -44,6 +54,7 @@ bool ViewNotebook::on_expose_event( GdkEventExpose* event ) return ret; } +#endif // !GTKMM_CHECK_VERSION(3,0,0) // diff --git a/src/skeleton/viewnote.h b/src/skeleton/viewnote.h index 6c191ec494..8ff4f6d297 100644 --- a/src/skeleton/viewnote.h +++ b/src/skeleton/viewnote.h @@ -14,7 +14,9 @@ namespace SKELETON class ViewNotebook : public Gtk::Notebook { +#if !GTKMM_CHECK_VERSION(3,0,0) DragableNoteBook* m_parent; +#endif public: @@ -22,9 +24,11 @@ namespace SKELETON void redraw_scrollbar(); +#if !GTKMM_CHECK_VERSION(3,0,0) protected: bool on_expose_event( GdkEventExpose* event ) override; +#endif }; } From a880d5b9b28599c8bcb866a3edf292097ff75c74 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 11 Aug 2018 12:31:06 +0900 Subject: [PATCH 25/51] Change draw method for toolbar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtk3ではツールバーのカスタム描画をしない。 gtk2のJDToolbarの描画処理はgtkのソースコードを引用することで 実装の詳細にアクセスして行っている。gtk3ではデータ構造が 変更された影響で今までのコードが使えなくなった。 さらにGTKテーマによってはツールバーの子ウィジェットの配色がテーマに 従わないことがある。ツールバーからcssクラスGTK_STYLE_CLASS_TOOLBARを 削除することで配色を修正する。 --- src/skeleton/jdtoolbar.cpp | 4 ++++ src/skeleton/jdtoolbar.h | 12 +++++++++++- src/skeleton/toolbar.cpp | 6 ++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/skeleton/jdtoolbar.cpp b/src/skeleton/jdtoolbar.cpp index 1dd574ec28..3615735be3 100644 --- a/src/skeleton/jdtoolbar.cpp +++ b/src/skeleton/jdtoolbar.cpp @@ -11,6 +11,8 @@ #include +#if !GTKMM_CHECK_VERSION(3,0,0) + /////////////////////////////////////////// // // gtk+-2.12.9/gtk/gtktoolbar.c より引用 @@ -197,3 +199,5 @@ bool JDToolbar::on_expose_event( GdkEventExpose* event ) return FALSE; } + +#endif // !GTKMM_CHECK_VERSION(3,0,0) diff --git a/src/skeleton/jdtoolbar.h b/src/skeleton/jdtoolbar.h index 75b345221b..baa13d88b3 100644 --- a/src/skeleton/jdtoolbar.h +++ b/src/skeleton/jdtoolbar.h @@ -15,10 +15,20 @@ namespace SKELETON class JDToolbar : public Gtk::Toolbar { public: - JDToolbar() noexcept {} + JDToolbar() + { +#if GTKMM_CHECK_VERSION(3,0,0) + // 子ウィジェットの配色がGTKテーマと違うことがある。 + // ツールバーのcssクラスを削除し配色を修正する。 + get_style_context()->remove_class( GTK_STYLE_CLASS_TOOLBAR ); +#endif + } + // GTK+3ではデフォルトの描画処理に任せる +#if !GTKMM_CHECK_VERSION(3,0,0) protected: bool on_expose_event( GdkEventExpose* event ) override; +#endif }; } diff --git a/src/skeleton/toolbar.cpp b/src/skeleton/toolbar.cpp index 4c57a89bbf..f7d26869d1 100644 --- a/src/skeleton/toolbar.cpp +++ b/src/skeleton/toolbar.cpp @@ -76,6 +76,12 @@ ToolBar::ToolBar( Admin* admin ) m_buttonbar.set_icon_size( Gtk::ICON_SIZE_MENU ); #endif m_buttonbar.set_toolbar_style( Gtk::TOOLBAR_ICONS ); + +#if GTKMM_CHECK_VERSION(3,0,0) + // ツールバーの子ウィジェットのコンテキストメニューの配色がGTKテーマと違うことがある。 + // ツールバーのcssクラスを削除しコンテキストメニューの配色を修正する。 + m_buttonbar.get_style_context()->remove_class( GTK_STYLE_CLASS_TOOLBAR ); +#endif } From a638afc60ad673b5bead662894ca4e094804b31d Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Thu, 19 Jul 2018 22:53:55 +0900 Subject: [PATCH 26/51] Omit Core::slot_style_changed() and Core::slot_realize() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit style-changed signal is removed since gtk3. スタイルを反映するシグナルハンドラを省略する GTK3版ではGtkNotebook in GtkNotebookの背景色は問題がないように見える --- src/core.cpp | 6 ++++++ src/core.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/core.cpp b/src/core.cpp index e01163bca9..88682a72f1 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -135,8 +135,10 @@ Core::Core( JDWinMain& win_main ) // ログ検索マネージャ作成 CORE::get_search_manager(); +#if !GTKMM_CHECK_VERSION(3,0,0) m_vbox_article.signal_realize().connect( sigc::mem_fun(*this, &Core::slot_realize ) ); m_vbox_article.signal_style_changed().connect( sigc::mem_fun(*this, &Core::slot_style_changed ) ); +#endif } @@ -285,6 +287,7 @@ void Core::save_session() // 右ペーンのnotebookのparentであるvboxがrealizeしたらnotebookのstyleを変更する // テーマによっては notebook の中に notebook を配置すると背景色が正しく // 出ない問題があるため。開発スレ 493 参照 +#if !GTKMM_CHECK_VERSION(3,0,0) void Core::slot_realize() { #ifdef _DEBUG @@ -293,12 +296,15 @@ void Core::slot_realize() slot_style_changed( m_vbox_article.get_style() ); } +#endif // !GTKMM_CHECK_VERSION(3,0,0) +#if !GTKMM_CHECK_VERSION(3,0,0) void Core::slot_style_changed( Glib::RefPtr< Gtk::Style > ) { m_notebook_right.set_style( m_vbox_article.get_style() ); } +#endif // !GTKMM_CHECK_VERSION(3,0,0) Gtk::Widget* Core::get_toplevel() diff --git a/src/core.h b/src/core.h index 64437a7169..e53aa27215 100644 --- a/src/core.h +++ b/src/core.h @@ -147,8 +147,10 @@ namespace CORE void set_maintitle(); +#if !GTKMM_CHECK_VERSION(3,0,0) void slot_realize(); void slot_style_changed( Glib::RefPtr< Gtk::Style > ); +#endif void slot_activate_menubar(); void slot_activate_historymenu(); From 634769c946dad87f3a2e79c0295630bcff8f46a1 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 11 Aug 2018 15:46:27 +0900 Subject: [PATCH 27/51] Omit to draw button relief regardless of Gtk::RELIEF_NONE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtk3 removes many implementation details and struct members from public headers. ハックによる枠の描画は省略する --- src/skeleton/toolbar.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/skeleton/toolbar.cpp b/src/skeleton/toolbar.cpp index f7d26869d1..b90071ac2d 100644 --- a/src/skeleton/toolbar.cpp +++ b/src/skeleton/toolbar.cpp @@ -28,7 +28,9 @@ #include "prefdiagfactory.h" #include // gtk_separator_tool_item_set_draw +#if !GTKMM_CHECK_VERSION(3,0,0) #include +#endif using namespace SKELETON; @@ -734,6 +736,7 @@ void ToolBar::focus_button_write() // 書き込みボタンの廻りに枠を描く void ToolBar::drawframe_button_write( const bool draw ) { +#if !GTKMM_CHECK_VERSION(3,0,0) if( CONFIG::get_flat_button() ){ // relief が Gtk:: RELIEF_NONE のときにボタンに枠を描画 @@ -747,6 +750,7 @@ void ToolBar::drawframe_button_write( const bool draw ) else gtk_button_leave( gtkbutton ); } } +#endif // !GTKMM_CHECK_VERSION(3,0,0) } From ffbce60ede064201debf591502186d0e31833c96 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 22 Aug 2018 21:39:08 +0900 Subject: [PATCH 28/51] Use default double buffering if GTK+ >= 3.9.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GTK+ 3.9.2からGTK/GDKのダブルバッファ処理が再構成された [1] この影響でスレビューのスクロール時に画面のちらつきが発生するようになった ちらつきを抑えるため3.9.2以降の環境ではデフォルトのダブルバッファを使う [1]: https://gitlab.gnome.org/GNOME/gtk/commit/d22fd7223c75f4720ddb982c659efb0d8d7543c4 --- src/article/drawareabase.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index 9b292003c9..083d4358fd 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -177,7 +177,12 @@ void DrawAreaBase::setup( const bool show_abone, const bool show_scrbar, const b m_article = DBTREE::get_article( m_url ); m_layout_tree = new LayoutTree( m_url, show_abone, show_multispace ); +#if !GTKMM_CHECK_VERSION(3,9,2) + // GTK+ 3.9.2からGTK/GDKのダブルバッファ処理が再構成された + // この影響でスレビューのスクロール時に画面のちらつきが発生するようになった + // ちらつきを抑えるため3.9.2以降の環境ではデフォルトのダブルバッファを使う m_view.set_double_buffered( false ); +#endif // デフォルトではoffになってるイベントを追加 m_view.add_events( Gdk::BUTTON_PRESS_MASK ); @@ -1806,6 +1811,16 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw int upper = pos_y + y_screen; int lower = upper + height_screen; +#if GTKMM_CHECK_VERSION(3,9,2) + { + // 全画面再描画 + dy = 0; + y_screen = 0; + height_screen = height_view; + upper = pos_y; + lower = pos_y + height_screen; + } +#else // !GTKMM_CHECK_VERSION(3,9,2) if( m_pre_pos_y == -1 // 初回呼び出し時 // 高速スクロールモードでなく、バックスクリーンが全て描画されていない場合 @@ -1853,6 +1868,7 @@ void DrawAreaBase::exec_draw_screen( const int y_redraw, const int height_redraw return; } } +#endif // GTKMM_CHECK_VERSION(3,9,2) #ifdef _DEBUG std::cout << "DrawAreaBase::exec_draw_screen " From 99eefed2948aa14fcb339d2ca9dee9f2ed33f605 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sun, 12 Aug 2018 16:43:24 +0900 Subject: [PATCH 29/51] Set horizontal expandable CompletionEntry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit デフォルトの設定ではウインドウの幅が狭いとエントリーが表示されない --- src/skeleton/compentry.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/skeleton/compentry.cpp b/src/skeleton/compentry.cpp index 14e67c46cf..83ae51874d 100644 --- a/src/skeleton/compentry.cpp +++ b/src/skeleton/compentry.cpp @@ -30,6 +30,11 @@ CompletionEntry::CompletionEntry( const int mode ) m_entry.signal_activate().connect( sigc::mem_fun( *this, &CompletionEntry::slot_entry_acivate ) ); m_entry.signal_changed().connect( sigc::mem_fun( *this, &CompletionEntry::slot_entry_changed ) ); m_entry.signal_focus_out_event().connect( sigc::mem_fun(*this, &CompletionEntry::slot_entry_focus_out ) ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_entry.set_max_width_chars( 1 ); + m_entry.set_width_chars( 1 ); + m_entry.set_hexpand( true ); +#endif pack_start( m_entry ); // ポップアップ From c6d57f203e79dd8c7e65f94f4a3233c4b7f1a760 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sun, 12 Aug 2018 17:33:27 +0900 Subject: [PATCH 30/51] Implement PrefDiag::set_default_size_ratio() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtk3では伸縮するウィジェットを持つダイアログを表示したときに ウインドウのサイズが小さい場合があるためデフォルトのサイズを 設定するための機能を追加する --- src/config/aboutconfig.cpp | 3 +++ src/control/mousekeypref.cpp | 3 +++ src/fontcolorpref.cpp | 3 +++ src/skeleton/prefdiag.cpp | 12 ++++++++++++ src/skeleton/prefdiag.h | 6 ++++++ 5 files changed, 27 insertions(+) diff --git a/src/config/aboutconfig.cpp b/src/config/aboutconfig.cpp index 4d14f2d26c..2b97ebf296 100644 --- a/src/config/aboutconfig.cpp +++ b/src/config/aboutconfig.cpp @@ -74,6 +74,9 @@ void AboutConfig::pack_widgets() get_vbox()->pack_start( m_scrollwin ); set_title( "about:config 高度な設定" ); +#if GTKMM_CHECK_VERSION(3,0,0) + set_default_size_ratio( 0.666 ); +#endif show_all_children(); append_rows(); diff --git a/src/control/mousekeypref.cpp b/src/control/mousekeypref.cpp index f2cf691d52..522f8e5226 100644 --- a/src/control/mousekeypref.cpp +++ b/src/control/mousekeypref.cpp @@ -543,6 +543,9 @@ MouseKeyPref::MouseKeyPref( Gtk::Window* parent, const std::string& url, const s get_vbox()->pack_start( m_scrollwin ); get_vbox()->pack_start( m_hbox, Gtk::PACK_SHRINK ); +#if GTKMM_CHECK_VERSION(3,0,0) + set_default_size_ratio( 0.666 ); +#endif show_all_children(); set_title( target + "設定" ); } diff --git a/src/fontcolorpref.cpp b/src/fontcolorpref.cpp index f3b8fa751c..4d00af79d2 100644 --- a/src/fontcolorpref.cpp +++ b/src/fontcolorpref.cpp @@ -107,6 +107,9 @@ FontColorPref::FontColorPref( Gtk::Window* parent, const std::string& url ) #endif set_title( "フォントと色の詳細設定" ); +#if GTKMM_CHECK_VERSION(3,0,0) + set_default_size_ratio( 0.5 ); +#endif show_all_children(); } diff --git a/src/skeleton/prefdiag.cpp b/src/skeleton/prefdiag.cpp index 381af057d6..84cbbdb6b6 100644 --- a/src/skeleton/prefdiag.cpp +++ b/src/skeleton/prefdiag.cpp @@ -106,6 +106,18 @@ int PrefDiag::run(){ } +// ダイアログのサイズをデフォルトのスクリーンに対する比率で設定する +#if GTKMM_CHECK_VERSION(3,0,0) +void PrefDiag::set_default_size_ratio( double ratio ) +{ + const auto screen = Gdk::Screen::get_default(); + const int width = static_cast< int >( screen->get_width() * ratio ); + const int height = static_cast< int >( screen->get_height() * ratio ); + Gtk::Dialog::set_default_size( width, height ); +} +#endif + + // タイマーのslot関数 bool PrefDiag::slot_timeout( int timer_number ) { diff --git a/src/skeleton/prefdiag.h b/src/skeleton/prefdiag.h index 7d8c57d94d..9028135fca 100644 --- a/src/skeleton/prefdiag.h +++ b/src/skeleton/prefdiag.h @@ -5,6 +5,8 @@ #ifndef _PREFDIAG_H #define _PREFDIAG_H +#include "gtkmmversion.h" + #include #include "jdlib/timeout.h" @@ -46,6 +48,10 @@ namespace SKELETON virtual void slot_cancel_clicked(){} virtual void slot_apply_clicked(){} +#if GTKMM_CHECK_VERSION(3,0,0) + void set_default_size_ratio( double ratio ); +#endif + private: // タイマーのslot関数 From 1a505c6c53219ad9c0ce48e295857b68783db243 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 29 Aug 2018 20:00:42 +0900 Subject: [PATCH 31/51] Set scrollbar policy to EXTERNAL for ImageAdmin since GTK+ 3.16 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gtk::POLICY_NEVERを設定するとスクロール機能自体がなくなり コンテンツに合わせてGtk::ScrolledWindowのサイズが拡大してしまう --- src/image/imageadmin.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/image/imageadmin.cpp b/src/image/imageadmin.cpp index ad74d23fc6..e8011e5311 100644 --- a/src/image/imageadmin.cpp +++ b/src/image/imageadmin.cpp @@ -48,7 +48,13 @@ ImageAdmin::ImageAdmin( const std::string& url ) , m_scroll( SCROLL_NO ) { m_scrwin.add( m_iconbox ); +#if GTKMM_CHECK_VERSION(3,16,0) + // Gtk::POLICY_NEVERだとスクロール機能自体がなくなり + // コンテンツに合わせてGtk::ScrolledWindowのサイズが拡大してしまう + m_scrwin.set_policy( Gtk::POLICY_EXTERNAL, Gtk::POLICY_NEVER ); +#else m_scrwin.set_policy( Gtk::POLICY_NEVER, Gtk::POLICY_NEVER ); +#endif m_scrwin.set_size_request( ICON_SIZE , ICON_SIZE + 4); m_left.set_label( "<" ); From af51da0ea4ebe3ea9f287580c9e802714b4db2b8 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 20 Oct 2018 23:44:23 +0900 Subject: [PATCH 32/51] Implement tab switching by mouse wheel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtk3はマウスホイールによるGtkNotebookのタブの切り替えが 動作しなくなったのでシグナルハンドラを使って再現する 未修正の問題 この修正に関係なくホイールが全く反応しない環境がある(>= gtk 3.20?) が厳密な条件は分からない --- README.md | 2 +- src/skeleton/dragnote.cpp | 33 ++++++++++++++++++++++++++------- src/skeleton/tabnote.cpp | 1 + 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6390ddbc80..208fbfad7b 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ GDK_CORE_DEVICE_EVENTS=1 ./src/jdim ``` #### GTK3版の既知の問題 -* GTK3ではタブの上でマウスホイールするとページが切り替わる機能は削除された。 +* マウスホイールでタブを切り替える機能が動作しない環境がある。(gtk 3.20以上?) * タブのドラッグ・アンド・ドロップの矢印ポップアップの背景が透過しない環境がある。 (アルファチャンネルが利用できない環境) diff --git a/src/skeleton/dragnote.cpp b/src/skeleton/dragnote.cpp index 66852bc7d3..17a74a98ec 100644 --- a/src/skeleton/dragnote.cpp +++ b/src/skeleton/dragnote.cpp @@ -728,14 +728,33 @@ bool DragableNoteBook::slot_scroll_event( GdkEventScroll* event ) bool ret = false; - // タブの循環 - if( event->direction == GDK_SCROLL_UP && get_current_page() == 0 ){ - set_current_page( get_n_pages() -1 ); - ret = true; + // gtk3ではタブの循環に加え隣のタブへ切り替える処理も実装する必要がある + // REVIEW: GTK3版ではホイールによるタブの切り替えが動作しない環境がある + if( event->direction == GDK_SCROLL_UP ) { + const int current_page = get_current_page(); + if( current_page == 0 ) { + set_current_page( get_n_pages() - 1 ); + ret = true; + } +#if GTKMM_CHECK_VERSION(3,0,0) + else { + set_current_page( current_page - 1 ); + ret = true; + } +#endif } - else if( event->direction == GDK_SCROLL_DOWN && get_current_page() == get_n_pages() -1 ){ - set_current_page( 0 ); - ret = true; + else if( event->direction == GDK_SCROLL_DOWN ) { + const int current_page = get_current_page(); + if( current_page == get_n_pages() - 1 ) { + set_current_page( 0 ); + ret = true; + } +#if GTKMM_CHECK_VERSION(3,0,0) + else { + set_current_page( current_page + 1 ); + ret = true; + } +#endif } m_sig_tab_scrolled.emit( event ); diff --git a/src/skeleton/tabnote.cpp b/src/skeleton/tabnote.cpp index a5ef098607..5fe10ecca0 100644 --- a/src/skeleton/tabnote.cpp +++ b/src/skeleton/tabnote.cpp @@ -374,6 +374,7 @@ TabNotebook::TabNotebook( DragableNoteBook* parent ) add_events( Gdk::POINTER_MOTION_MASK ); add_events( Gdk::LEAVE_NOTIFY_MASK ); + add_events( Gdk::SCROLL_MASK ); // DnD設定 // ドロップ側に設定する From d8d0ccd72725d585a9bcda0a21498c1a51fd0f2d Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Tue, 18 Sep 2018 22:12:20 +0900 Subject: [PATCH 33/51] Set manual styling to toolbar close button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gtk3 removes many implementation details and struct members from public headers. XXX: フラット表示は装飾がない前提でcssが設定されている * Fix compile error for debug log. Thanks to @ooinu. Co-authored-by: ooinu <45452777+ooinu@users.noreply.github.com> --- src/skeleton/toolbar.cpp | 64 ++++++++++++++++++++++++++++++++++++++-- src/skeleton/toolbar.h | 6 ++++ 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/src/skeleton/toolbar.cpp b/src/skeleton/toolbar.cpp index b90071ac2d..38fe992c03 100644 --- a/src/skeleton/toolbar.cpp +++ b/src/skeleton/toolbar.cpp @@ -35,6 +35,10 @@ using namespace SKELETON; +#if GTKMM_CHECK_VERSION(3,0,0) +constexpr const char* ToolBar::s_css_leave; +#endif + ToolBar::ToolBar( Admin* admin ) : m_admin( admin ), m_enable_slot( true ), @@ -833,6 +837,11 @@ Gtk::ToolButton* ToolBar::get_button_close() set_tooltip( *m_button_close, CONTROL::get_label_motions( CONTROL::Quit ) ); m_button_close->signal_clicked().connect( sigc::mem_fun(*this, &ToolBar::slot_clicked_close ) ); + +#if GTKMM_CHECK_VERSION(3,0,0) + // 閉じるボタンのスタイルを制御可能にするためのセットアップ + setup_manual_styling( *m_button_close ); +#endif } return m_button_close; @@ -851,13 +860,18 @@ void ToolBar::slot_clicked_close() // relief が Gtk:: RELIEF_NONE のときにタブの最後のビューを閉じると、 // ボタンに leave_notify イベントが送られないため、次にビューを開いたときに // 枠が残ったままになる - // - // gtk+-2.12.9/gtk/gtkbutton.c の gtk_button_leave_notify() をハックして - // gtkbutton->in_button = false にすると枠が消えることが分かった if( m_admin->get_tab_nums() == 1 ){ Gtk::Button* button = dynamic_cast< Gtk::Button* >( m_button_close->get_child() ); +#if GTKMM_CHECK_VERSION(3,0,0) + // cssクラスセレクタ leave を追加して枠を消す + // Gtk::RELIEF_NORMAL のときは影響を受けない + button->get_style_context()->add_class( s_css_leave ); +#else + // gtk+-2.12.9/gtk/gtkbutton.c の gtk_button_leave_notify() をハックして + // gtkbutton->in_button = false にすると枠が消えることが分かった GtkButton* gtkbutton = button->gobj(); gtkbutton->in_button = false; +#endif } m_admin->set_command( "toolbar_close_view", m_url ); @@ -1060,3 +1074,47 @@ void ToolBar::slot_lock_clicked() if( ! m_enable_slot ) return; m_admin->set_command( "toolbar_lock_view", get_url() ); } + + +#if GTKMM_CHECK_VERSION(3,0,0) +void ToolBar::setup_manual_styling( Gtk::ToolButton& toolbutton ) +{ + auto* const button = dynamic_cast< Gtk::Button* >( toolbutton.get_child() ); + auto context = button->get_style_context(); + auto provider = Gtk::CssProvider::create(); + context->add_provider( provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION ); + + const Gdk::RGBA border_color = context->get_border_color( Gtk::STATE_FLAG_NORMAL ); + const Gdk::RGBA bg_color = context->get_background_color( Gtk::STATE_FLAG_NORMAL ); + try { + // XXX: フラット表示は装飾がないという前提でcssを設定している + provider->load_from_data( Glib::ustring::compose( + u8R"( + .flat.%1 { + background-color: %2; + background-image: none; + border-color: %3; + border-image-source: none; + box-shadow: none; + } + )", + s_css_leave, bg_color.to_string(), border_color.to_string() ) ); + } + catch( Gtk::CssProviderError& err ) { +#ifdef _DEBUG + std::cout << "ToolBar::set_custom_flat_relief load css failed." << err.what() << std::endl; +#endif + } + + // enter/leave-notify-eventでcssクラスセレクタを切り替える + // フラット表示が設定されているときはシグナルの伝播を止める + button->signal_enter_notify_event().connect( [button]( GdkEventCrossing* e ) { + button->get_style_context()->remove_class( s_css_leave ); + return CONFIG::get_flat_button(); + } ); + button->signal_leave_notify_event().connect( [button]( GdkEventCrossing* e ) { + button->get_style_context()->add_class( s_css_leave ); + return CONFIG::get_flat_button(); + } ); +} +#endif // GTKMM_CHECK_VERSION(3,0,0) diff --git a/src/skeleton/toolbar.h b/src/skeleton/toolbar.h index 23e3f62331..e9c145af5e 100644 --- a/src/skeleton/toolbar.h +++ b/src/skeleton/toolbar.h @@ -180,6 +180,12 @@ namespace SKELETON void drawframe_button_write( const bool draw ); bool slot_focusout_write_button( GdkEventFocus* event ); +#if GTKMM_CHECK_VERSION(3,0,0) + // 閉じるボタン関係 + static constexpr const char* s_css_leave = u8"jd-leave"; + void setup_manual_styling( Gtk::ToolButton& toolbutton ); +#endif + // 検索関係 void slot_toggle_searchbar(); From ef3d2892ac41708447927969fb072ae6948256cd Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Tue, 23 Oct 2018 21:16:39 +0900 Subject: [PATCH 34/51] Fix color scheme for MessageViewBase textview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit overrideメソッドの代わりにcssの設定で書き込みビューの配色を設定する また、書き込みビューの配色にGTKテーマを使う設定を合わせて追加する --- README.md | 5 +++++ src/config/configitems.cpp | 4 ++++ src/config/configitems.h | 3 +++ src/config/defaultconf.h | 1 + src/config/globalconf.cpp | 3 +++ src/config/globalconf.h | 4 ++++ src/fontcolorpref.cpp | 12 ++++++++++++ src/fontcolorpref.h | 3 +++ src/message/messageviewbase.cpp | 33 ++++++++++++++++++++++++--------- src/skeleton/editview.cpp | 26 ++++++++++++++++++++++++++ src/skeleton/editview.h | 20 ++++++++++++-------- 11 files changed, 97 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 208fbfad7b..34fb6a8fa7 100644 --- a/README.md +++ b/README.md @@ -170,6 +170,11 @@ GTK3版はGTK2版同様のルック・アンド・フィールになるように GDK_CORE_DEVICE_EVENTS=1 ./src/jdim ``` +#### GTK2版から変更/追加された部分 +* 書き込みビューの配色にGTKテーマを使う設定が追加された。 + 1. メニューバーの`設定(C) > フォントと色(F) > 詳細設定(R)...`からフォントと色の詳細設定を開く + 2. `色の設定`タブにある`書き込みビューの配色設定に GTKテーマ を用いる(W)`をチェックして適用する + #### GTK3版の既知の問題 * マウスホイールでタブを切り替える機能が動作しない環境がある。(gtk 3.20以上?) * タブのドラッグ・アンド・ドロップの矢印ポップアップの背景が透過しない環境がある。 diff --git a/src/config/configitems.cpp b/src/config/configitems.cpp index d54dd6b22d..69e6293c27 100644 --- a/src/config/configitems.cpp +++ b/src/config/configitems.cpp @@ -291,6 +291,9 @@ bool ConfigItems::load( const bool restore ) menu_search_web = cf.get_option_str( "menu_search_web", CONF_MENU_SEARCH_WEB ); url_search_web = cf.get_option_str( "url_search_web", CONF_URL_SEARCH_WEB ); + // 書き込みビューでGTKテーマの設定を使用するか (GTK3版のみ) + use_message_gtktheme = cf.get_option_bool( "use_message_gtktheme", CONF_USE_MESSAGE_GTKTHEME ); + // ツリービューでgtkrcの設定を使用するか use_tree_gtkrc = cf.get_option_bool( "use_tree_gtkrc", CONF_USE_TREE_GTKRC ); @@ -803,6 +806,7 @@ void ConfigItems::save_impl( const std::string& path ) cf.update( "cl_back_board", str_color[ COLOR_BACK_BOARD ] ); cf.update( "cl_back_board_even", str_color[ COLOR_BACK_BOARD_EVEN ] ); + cf.update( "use_message_gtktheme", use_message_gtktheme ); cf.update( "use_tree_gtkrc", use_tree_gtkrc ); cf.update( "use_select_gtkrc", use_select_gtkrc ); diff --git a/src/config/configitems.h b/src/config/configitems.h index 73fea821f0..cc3fc872a5 100644 --- a/src/config/configitems.h +++ b/src/config/configitems.h @@ -218,6 +218,9 @@ namespace CONFIG // 色 std::vector< std::string > str_color; + // 書き込みビューでGTKテーマの設定を使用するか (GTK3版のみ) + bool use_message_gtktheme; + // ツリービューでgtkrcの設定を使用するか bool use_tree_gtkrc; diff --git a/src/config/defaultconf.h b/src/config/defaultconf.h index 0d34c699c6..a7dd2e1980 100644 --- a/src/config/defaultconf.h +++ b/src/config/defaultconf.h @@ -41,6 +41,7 @@ namespace CONFIG CONF_REFPOPUP_BY_MO = 0, // レス番号の上にマウスオーバーしたときに参照ポップアップ表示する CONF_NAMEPOPUP_BY_MO = 0, // 名前の上にマウスオーバーしたときにポップアップ表示する CONF_IDPOPUP_BY_MO = 0, // IDの上にマウスオーバーしたときにIDをポップアップ表示する + CONF_USE_MESSAGE_GTKTHEME = 0, // 書き込みビューでGTKテーマの設定を使用するか (GTK3版のみ) CONF_USE_TREE_GTKRC = 0, // ツリービューでgtkrcの設定を使用するか CONF_USE_SELECT_GTKRC = 0, // スレビューの選択色でgtkrcの設定を使用するか CONF_TREE_YPAD = 1, // ツリービューの行間スペース diff --git a/src/config/globalconf.cpp b/src/config/globalconf.cpp index bdfce71e32..ca8caf16e4 100644 --- a/src/config/globalconf.cpp +++ b/src/config/globalconf.cpp @@ -88,6 +88,9 @@ void CONFIG::set_color( const int id, const std::string& color ) void CONFIG::reset_colors(){ get_confitem()->reset_colors(); } +bool CONFIG::get_use_message_gtktheme() { return get_confitem()->use_message_gtktheme; } +void CONFIG::set_use_message_gtktheme( const bool use ) { get_confitem()->use_message_gtktheme = use; } + bool CONFIG::get_use_tree_gtkrc(){ return get_confitem()->use_tree_gtkrc; } void CONFIG::set_use_tree_gtkrc( const bool use ){ get_confitem()->use_tree_gtkrc = use; } diff --git a/src/config/globalconf.h b/src/config/globalconf.h index 194005be10..f28498f214 100644 --- a/src/config/globalconf.h +++ b/src/config/globalconf.h @@ -44,6 +44,10 @@ namespace CONFIG void set_color( const int id, const std::string& color ); void reset_colors(); + // 書き込みビューでGTKテーマの設定を使用するか (GTK3版のみ) + bool get_use_message_gtktheme(); + void set_use_message_gtktheme( const bool use ); + // ツリービューでgtkrcの設定を使用するか bool get_use_tree_gtkrc(); void set_use_tree_gtkrc( const bool use ); diff --git a/src/fontcolorpref.cpp b/src/fontcolorpref.cpp index 4d00af79d2..390a642d4d 100644 --- a/src/fontcolorpref.cpp +++ b/src/fontcolorpref.cpp @@ -246,6 +246,12 @@ void FontColorPref::pack_widget() m_hbox_change_color.pack_end( m_bt_change_color , Gtk::PACK_SHRINK ); m_vbox_color.pack_start( m_hbox_change_color, Gtk::PACK_SHRINK ); +#if GTKMM_CHECK_VERSION(3,0,0) + m_chk_use_gtktheme_message.add_label( "書き込みビューの配色設定に GTKテーマ を用いる(_W)", true ); + m_chk_use_gtktheme_message.set_active( CONFIG::get_use_message_gtktheme() ); + m_vbox_color.pack_start( m_chk_use_gtktheme_message, Gtk::PACK_SHRINK ); +#endif + m_chk_use_gtkrc_tree.add_label( "ツリービューの背景色設定に gtkrc を用いる(_T)", true ), m_chk_use_gtkrc_tree.set_active( CONFIG::get_use_tree_gtkrc() ); m_chk_use_gtkrc_tree.signal_toggled().connect( sigc::mem_fun( *this, &FontColorPref::slot_chk_use_gtkrc_toggled ) ); @@ -282,6 +288,9 @@ void FontColorPref::slot_ok_clicked() CONFIG::set_strict_char_width( m_checkbutton_font.property_active() ); +#if GTKMM_CHECK_VERSION(3,0,0) + CONFIG::set_use_message_gtktheme( m_chk_use_gtktheme_message.property_active() ); +#endif CONFIG::set_use_tree_gtkrc( m_chk_use_gtkrc_tree.property_active() ); CONFIG::set_use_select_gtkrc( m_chk_use_gtkrc_selection.property_active() ); @@ -555,6 +564,9 @@ void FontColorPref::slot_reset_all_colors() SKELETON::MsgDiag mdiag( NULL, WARNING_GTKRC_TREE ); mdiag.run(); } +#if GTKMM_CHECK_VERSION(3,0,0) + m_chk_use_gtktheme_message.set_active( CONFIG::CONF_USE_MESSAGE_GTKTHEME ); +#endif m_chk_use_gtkrc_tree.set_active( CONFIG::CONF_USE_TREE_GTKRC ); m_chk_use_gtkrc_selection.set_active( CONFIG::CONF_USE_SELECT_GTKRC ); diff --git a/src/fontcolorpref.h b/src/fontcolorpref.h index aac1068af4..3e7acb19c2 100644 --- a/src/fontcolorpref.h +++ b/src/fontcolorpref.h @@ -70,6 +70,9 @@ namespace CORE Gtk::Label m_label_warning_color; Gtk::VBox m_vbox_color; +#if GTKMM_CHECK_VERSION(3,0,0) + Gtk::CheckButton m_chk_use_gtktheme_message; +#endif Gtk::CheckButton m_chk_use_gtkrc_tree; Gtk::CheckButton m_chk_use_gtkrc_selection; diff --git a/src/message/messageviewbase.cpp b/src/message/messageviewbase.cpp index f45e96cebf..02116747a6 100644 --- a/src/message/messageviewbase.cpp +++ b/src/message/messageviewbase.cpp @@ -230,20 +230,35 @@ void MessageViewBase::init_color() if( m_text_message ){ #if GTKMM_CHECK_VERSION(3,0,0) - m_text_message->override_color( Gdk::RGBA( CONFIG::get_color( COLOR_CHAR_MESSAGE ) ), - Gtk::STATE_FLAG_NORMAL ); - m_text_message->override_color( Gdk::RGBA( CONFIG::get_color( COLOR_CHAR_MESSAGE_SELECTION ) ), - Gtk::STATE_FLAG_SELECTED ); - m_text_message->override_background_color( Gdk::RGBA( CONFIG::get_color( COLOR_BACK_MESSAGE ) ), - Gtk::STATE_FLAG_NORMAL ); - m_text_message->override_background_color( Gdk::RGBA( CONFIG::get_color( COLOR_BACK_MESSAGE_SELECTION ) ), - Gtk::STATE_FLAG_SELECTED ); + if( CONFIG::get_use_message_gtktheme() ) { + m_text_message->update_style( u8"" ); + } + else { + const char* const classname = m_text_message->get_css_classname(); + const auto fg = Gdk::RGBA( CONFIG::get_color( COLOR_CHAR_MESSAGE ) ).to_string(); + const auto bg = Gdk::RGBA( CONFIG::get_color( COLOR_BACK_MESSAGE ) ).to_string(); + const auto sel_fg = Gdk::RGBA( CONFIG::get_color( COLOR_CHAR_MESSAGE_SELECTION ) ).to_string(); + const auto sel_bg = Gdk::RGBA( CONFIG::get_color( COLOR_BACK_MESSAGE_SELECTION ) ).to_string(); +#if GTKMM_CHECK_VERSION(3,20,0) + constexpr const char* const caret_prop = u8"caret-color"; +#else + constexpr const char* const caret_prop = u8"-GtkWidget-cursor-color"; +#endif + m_text_message->update_style( Glib::ustring::compose( + u8R"( + .%1, .%1 text { color: %2; background-color: %3; %4: %2; } + .%1:selected, .%1:selected:focus, + .%1 text:selected, .%1 text:selected:focus, + .%1 text selection, .%1 text selection:focus { color: %5; background-color: %6; } + )", + classname, fg, bg, caret_prop, sel_fg, sel_bg ) ); + } #else m_text_message->modify_text( Gtk::STATE_NORMAL, Gdk::Color( CONFIG::get_color( COLOR_CHAR_MESSAGE ) ) ); m_text_message->modify_text( Gtk::STATE_SELECTED, Gdk::Color( CONFIG::get_color( COLOR_CHAR_MESSAGE_SELECTION ) ) ); m_text_message->modify_base( Gtk::STATE_NORMAL, Gdk::Color( CONFIG::get_color( COLOR_BACK_MESSAGE ) ) ); m_text_message->modify_base( Gtk::STATE_SELECTED, Gdk::Color( CONFIG::get_color( COLOR_BACK_MESSAGE_SELECTION ) ) ); -#endif +#endif // GTKMM_CHECK_VERSION(3,0,0) } } diff --git a/src/skeleton/editview.cpp b/src/skeleton/editview.cpp index ca6f63d853..8bc18b5b16 100644 --- a/src/skeleton/editview.cpp +++ b/src/skeleton/editview.cpp @@ -716,3 +716,29 @@ void EditTextView::slot_hide_aamenu() SESSION::set_popupmenu_shown( false ); } + + + +#if GTKMM_CHECK_VERSION(3,0,0) +constexpr const char* EditView::s_css_classname; +#endif + +// +// EditTextViewのスタイルを更新する +// +#if GTKMM_CHECK_VERSION(3,0,0) +void EditView::update_style( const Glib::ustring& custom_css ) +{ +#ifdef _DEBUG + std::cout << "EditView::update_style custom css: " << custom_css << std::endl; +#endif + try { + m_provider->load_from_data( custom_css ); + } + catch( Gtk::CssProviderError& err ) { +#ifdef _DEBUG + std::cout << "ERROR:EditView::update_style fail " << err.what() << std::endl; +#endif + } +} +#endif // GTKMM_CHECK_VERSION(3,0,0) diff --git a/src/skeleton/editview.h b/src/skeleton/editview.h index c3fe00a487..f957e6755d 100644 --- a/src/skeleton/editview.h +++ b/src/skeleton/editview.h @@ -123,6 +123,10 @@ namespace SKELETON class EditView : public Gtk::ScrolledWindow { EditTextView m_textview; +#if GTKMM_CHECK_VERSION(3,0,0) + static constexpr const char* s_css_classname = u8"jd-editview"; + Glib::RefPtr< Gtk::CssProvider > m_provider = Gtk::CssProvider::create(); +#endif public: @@ -130,6 +134,11 @@ namespace SKELETON set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC ); add( m_textview ); +#if GTKMM_CHECK_VERSION(3,0,0) + auto context = m_textview.get_style_context(); + context->add_class( s_css_classname ); + context->add_provider( m_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION ); +#endif show_all_children(); } @@ -153,14 +162,9 @@ namespace SKELETON void set_wrap_mode( Gtk::WrapMode wrap_mode ){ m_textview.set_wrap_mode( wrap_mode ); } #if GTKMM_CHECK_VERSION(3,0,0) - void override_color( const Gdk::RGBA& color, Gtk::StateFlags state ) - { - m_textview.override_color( color, state ); - } - void override_background_color( const Gdk::RGBA& color, Gtk::StateFlags state ) - { - m_textview.override_background_color( color, state ); - } + const char* get_css_classname() const noexcept { return s_css_classname; } + // EditTextViewのスタイルを更新する + void update_style( const Glib::ustring& custom_css ); #else void modify_text( Gtk::StateType state, const Gdk::Color& color ){ m_textview.modify_text( state, color ); } void modify_base( Gtk::StateType state, const Gdk::Color& color ){ m_textview.modify_base( state, color ); } From 7303b551d456f71d137bc4100b58d55017163995 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 1 Sep 2018 20:53:22 +0900 Subject: [PATCH 35/51] Fix color scheme for DragTreeView treeview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit overrideメソッドでは配色の変更が上手くいかない環境があるので cssを使って変更する。 --- src/fontcolorpref.cpp | 4 +++ src/skeleton/dragtreeview.cpp | 53 +++++++++++++++++++++++++++-------- src/skeleton/dragtreeview.h | 18 +++++++----- 3 files changed, 56 insertions(+), 19 deletions(-) diff --git a/src/fontcolorpref.cpp b/src/fontcolorpref.cpp index 390a642d4d..a54469f32b 100644 --- a/src/fontcolorpref.cpp +++ b/src/fontcolorpref.cpp @@ -373,11 +373,13 @@ void FontColorPref::slot_checkbutton_font_toggled() void FontColorPref::slot_chk_use_gtkrc_toggled() { +#if !GTKMM_CHECK_VERSION(3,0,0) if( m_chk_use_gtkrc_tree.property_active() ) { SKELETON::MsgDiag mdiag( NULL, WARNING_GTKRC_TREE ); mdiag.run(); } +#endif } @@ -559,11 +561,13 @@ void FontColorPref::slot_reset_color() // void FontColorPref::slot_reset_all_colors() { +#if !GTKMM_CHECK_VERSION(3,0,0) if( m_chk_use_gtkrc_tree.property_active() ) { SKELETON::MsgDiag mdiag( NULL, WARNING_GTKRC_TREE ); mdiag.run(); } +#endif #if GTKMM_CHECK_VERSION(3,0,0) m_chk_use_gtktheme_message.set_active( CONFIG::CONF_USE_MESSAGE_GTKTHEME ); #endif diff --git a/src/skeleton/dragtreeview.cpp b/src/skeleton/dragtreeview.cpp index e60b5f1179..01db4b0cac 100644 --- a/src/skeleton/dragtreeview.cpp +++ b/src/skeleton/dragtreeview.cpp @@ -32,6 +32,10 @@ using namespace SKELETON; +#if GTKMM_CHECK_VERSION(3,0,0) +constexpr const char* DragTreeView::s_css_classname; +#endif + DragTreeView::DragTreeView( const std::string& url, const std::string& dndtarget, const bool use_usr_fontcolor, const std::string& fontname, const int colorid_text, const int colorid_bg, const int colorid_bg_even ) : JDTreeViewBase(), @@ -50,6 +54,12 @@ DragTreeView::DragTreeView( const std::string& url, const std::string& dndtarget set_rules_hint( CONFIG::get_use_tree_gtkrc() ); add_events( Gdk::LEAVE_NOTIFY_MASK ); +#if GTKMM_CHECK_VERSION(3,0,0) + auto context = get_style_context(); + context->add_class( s_css_classname ); + context->add_provider( m_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION ); +#endif + if( use_usr_fontcolor ){ init_color( colorid_text, colorid_bg, colorid_bg_even ); init_font( fontname ); @@ -115,26 +125,41 @@ void DragTreeView::redraw_view() // void DragTreeView::init_color( const int colorid_text, const int colorid_bg, const int colorid_bg_even ) { - if( CONFIG::get_use_tree_gtkrc() ) return; - - // 文字色 - m_color_text.set( CONFIG::get_color( colorid_text ) ); + if( CONFIG::get_use_tree_gtkrc() ) { #if GTKMM_CHECK_VERSION(3,0,0) - override_color( m_color_text, get_state_flags() ); -#else - modify_text( get_state(), m_color_text ); + m_use_bg_even = false; + m_provider->load_from_data( u8"" ); #endif + return; + } + // 文字色 + m_color_text.set( CONFIG::get_color( colorid_text ) ); // 背景色 m_color_bg.set( CONFIG::get_color( colorid_bg ) ); -#if GTKMM_CHECK_VERSION(3,0,0) - override_background_color( m_color_bg, get_state_flags() ); -#else - modify_base( get_state(), m_color_bg ); -#endif m_use_bg_even = ! ( CONFIG::get_color( colorid_bg ) == CONFIG::get_color( colorid_bg_even ) ); m_color_bg_even.set( CONFIG::get_color( colorid_bg_even ) ); + +#if GTKMM_CHECK_VERSION(3,0,0) + // TreeViewの偶数/奇数行を指定するCSSセレクタは動作しないバージョンが + // 存在するため偶数行の背景色設定は既存のコードをそのまま使う + // https://gitlab.gnome.org/GNOME/gtk/issues/581 + try { + m_provider->load_from_data( Glib::ustring::compose( + u8".%1.view:not(:selected) { color: %2; background-color: %3; }", + s_css_classname, m_color_text.to_string(), m_color_bg.to_string() ) ); + } + catch( Gtk::CssProviderError& err ) { +#ifdef _DEBUG + std::cout << "ERROR:DragTreeView::init_color load from data failed: " + << err.what() << std::endl; +#endif + } +#else // !GTKMM_CHECK_VERSION(3,0,0) + modify_text( get_state(), m_color_text ); + modify_base( get_state(), m_color_bg ); +#endif } @@ -596,7 +621,11 @@ void DragTreeView::slot_cell_data( Gtk::CellRenderer* cell, const Gtk::TreeModel // 偶数行に色を塗る if( even ){ +#if GTKMM_CHECK_VERSION(3,0,0) + cell->property_cell_background_rgba() = m_color_bg_even; +#else cell->property_cell_background_gdk() = m_color_bg_even; +#endif cell->property_cell_background_set() = true; } diff --git a/src/skeleton/dragtreeview.h b/src/skeleton/dragtreeview.h index af73cf18d7..8e17e01fe0 100644 --- a/src/skeleton/dragtreeview.h +++ b/src/skeleton/dragtreeview.h @@ -40,16 +40,20 @@ namespace SKELETON Tooltip m_tooltip; - // 色 - bool m_use_bg_even; #if GTKMM_CHECK_VERSION(3,0,0) - Gdk::RGBA m_color_text; - Gdk::RGBA m_color_bg; + static constexpr const char* s_css_classname = u8"jd-dragtreeview"; + Glib::RefPtr< Gtk::CssProvider > m_provider = Gtk::CssProvider::create(); + + using Color = Gdk::RGBA; #else - Gdk::Color m_color_text; - Gdk::Color m_color_bg; + using Color = Gdk::Color; #endif - Gdk::Color m_color_bg_even; + + // 色 + bool m_use_bg_even; + Color m_color_text; + Color m_color_bg; + Color m_color_bg_even; // ポップアップウィンドウ用 PopupWin* m_popup_win; From e291fca8cacfadd44fc2b0b8e40689d0be9b38d9 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Mon, 5 Nov 2018 20:05:50 +0900 Subject: [PATCH 36/51] Fix color scheme for JDWindow statusbar label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ステータスバーのテキスト部分が上手く配色されないGTKテーマがあるので 明示的に設定する --- src/skeleton/window.cpp | 59 ++++++++++++++++++++++++++--------------- src/skeleton/window.h | 5 ++++ 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/skeleton/window.cpp b/src/skeleton/window.cpp index ffbb198b19..95faf7a6f2 100644 --- a/src/skeleton/window.cpp +++ b/src/skeleton/window.cpp @@ -46,6 +46,10 @@ enum using namespace SKELETON; +#if GTKMM_CHECK_VERSION(3,0,0) +constexpr const char* JDWindow::s_css_stat_label; +#endif + // メッセージウィンドウでは m_mginfo が不要なので need_mginfo = false になる JDWindow::JDWindow( const bool fold_when_focusout, const bool need_mginfo ) : Gtk::Window( Gtk::WINDOW_TOPLEVEL ), @@ -94,6 +98,18 @@ JDWindow::JDWindow( const bool fold_when_focusout, const bool need_mginfo ) m_gtkwindow = GTK_WINDOW( gobj() ); gpointer parent_class = g_type_class_peek_parent( G_OBJECT_GET_CLASS( gobj() ) ); m_grand_parent_class = g_type_class_peek_parent( parent_class ); + +#if GTKMM_CHECK_VERSION(3,0,0) + auto context = m_label_stat.get_style_context(); + context->add_class( s_css_stat_label ); + context->add_provider( m_stat_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION ); + + if( need_mginfo ) { + context = m_mginfo.get_style_context(); + context->add_class( s_css_stat_label ); + context->add_provider( m_stat_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION ); + } +#endif // GTKMM_CHECK_VERSION(3,0,0) } @@ -437,22 +453,36 @@ void JDWindow::set_mginfo( const std::string& mginfo ) // ステータスの色を変える void JDWindow::set_status_color( const std::string& color ) { -#if GTKMM_CHECK_VERSION(2,5,0) - #ifdef _DEBUG std::cout << "JDWindow::set_status_color " << color << std::endl; #endif +#if GTKMM_CHECK_VERSION(3,0,0) + Glib::ustring css; + if( color.empty() ) { + // テキスト部分が上手く配色されないGTKテーマがあるので明示的に設定する + css = Glib::ustring::compose( u8".%1:not(:selected) { color: unset; }", s_css_stat_label ); + } + else { + css = Glib::ustring::compose( + u8".%1:not(:selected), %1:active:not(:selected) { color: white; background-color: %2; }", + s_css_stat_label, Gdk::RGBA( color ).to_string() ); + } + try { + m_stat_provider->load_from_data( css ); + } + catch( Gtk::CssProviderError& err ) { +#ifdef _DEBUG + std::cout << "ERROR:JDWindow::set_status_color fail " << err.what() << std::endl; +#endif + } + +#elif GTKMM_CHECK_VERSION(2,5,0) if( color.empty() ){ if( m_label_stat_ebox.get_visible_window() ){ -#if GTKMM_CHECK_VERSION(3,0,0) - m_label_stat.unset_color( Gtk::STATE_FLAG_NORMAL ); - m_mginfo.unset_color( Gtk::STATE_FLAG_NORMAL ); -#else m_label_stat.unset_fg( Gtk::STATE_NORMAL ); m_mginfo.unset_fg( Gtk::STATE_NORMAL ); -#endif m_label_stat_ebox.set_visible_window( false ); m_mginfo_ebox.set_visible_window( false ); @@ -460,31 +490,16 @@ void JDWindow::set_status_color( const std::string& color ) } else{ -#if GTKMM_CHECK_VERSION(3,0,0) - m_label_stat.override_color( Gdk::RGBA( "white" ), Gtk::STATE_FLAG_NORMAL ); - m_mginfo.override_color( Gdk::RGBA( "white" ), Gtk::STATE_FLAG_NORMAL ); -#else m_label_stat.modify_fg( Gtk::STATE_NORMAL, Gdk::Color( "white" ) ); m_mginfo.modify_fg( Gtk::STATE_NORMAL, Gdk::Color( "white" ) ); -#endif m_label_stat_ebox.set_visible_window( true ); -#if GTKMM_CHECK_VERSION(3,0,0) - m_label_stat_ebox.override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_NORMAL ); - m_label_stat_ebox.override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_ACTIVE ); -#else m_label_stat_ebox.modify_bg( Gtk::STATE_NORMAL, Gdk::Color( color ) ); m_label_stat_ebox.modify_bg( Gtk::STATE_ACTIVE, Gdk::Color( color ) ); -#endif m_mginfo_ebox.set_visible_window( true ); -#if GTKMM_CHECK_VERSION(3,0,0) - m_mginfo_ebox.override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_NORMAL ); - m_mginfo_ebox.override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_ACTIVE ); -#else m_mginfo_ebox.modify_bg( Gtk::STATE_NORMAL, Gdk::Color( color ) ); m_mginfo_ebox.modify_bg( Gtk::STATE_ACTIVE, Gdk::Color( color ) ); -#endif } #endif } diff --git a/src/skeleton/window.h b/src/skeleton/window.h index cf554b3efe..c646c1cf71 100644 --- a/src/skeleton/window.h +++ b/src/skeleton/window.h @@ -53,6 +53,11 @@ namespace SKELETON #endif Gtk::Label m_mginfo; +#if GTKMM_CHECK_VERSION(3,0,0) + static constexpr const char* s_css_stat_label = u8"jd-stat-label"; + Glib::RefPtr< Gtk::CssProvider > m_stat_provider = Gtk::CssProvider::create(); +#endif + public: JDWindow( const bool fold_when_focusout, const bool need_mginfo = true ); From 43a6795a34ee636dc5035ccb588a7d3e72d712da Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Tue, 6 Nov 2018 20:53:57 +0900 Subject: [PATCH 37/51] Fix color scheme for toolbar label --- src/skeleton/toolbar.cpp | 39 +++++++++++++++++++++++++++++---------- src/skeleton/toolbar.h | 5 +++++ 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/skeleton/toolbar.cpp b/src/skeleton/toolbar.cpp index 38fe992c03..0fd872b3a1 100644 --- a/src/skeleton/toolbar.cpp +++ b/src/skeleton/toolbar.cpp @@ -36,6 +36,7 @@ using namespace SKELETON; #if GTKMM_CHECK_VERSION(3,0,0) +constexpr const char* ToolBar::s_css_label; constexpr const char* ToolBar::s_css_leave; #endif @@ -323,6 +324,12 @@ Gtk::ToolItem* ToolBar::get_label() m_tool_label->add( *m_ebox_label ); m_tool_label->set_expand( true ); + +#if GTKMM_CHECK_VERSION(3,0,0) + auto context = m_label->get_style_context(); + context->add_class( s_css_label ); + context->add_provider( m_label_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION ); +#endif } return m_tool_label; @@ -343,30 +350,42 @@ void ToolBar::set_color( const std::string& color ) { if( ! m_ebox_label ) return; +#if GTKMM_CHECK_VERSION(3,0,0) + Glib::ustring css; + if( color.empty() ) { + css = Glib::ustring::compose( u8".%1:not(:selected) { color: unset; }", s_css_label ); + } + else { + css = Glib::ustring::compose( + u8".%1:not(:selected), .%1:active:not(:selected) { color: white; background-color: %2; }", + s_css_label, Gdk::RGBA( color ).to_string() ); + } + + try { + m_label_provider->load_from_data( css ); + } + catch( Gtk::CssProviderError& err ) { +#ifdef _DEBUG + std::cout << "ERROR:ToolBar::set_color fail " << err.what() << std::endl; +#endif + } + +#else // !GTKMM_CHECK_VERSION(3,0,0) if( color.empty() ){ if( m_ebox_label->get_visible_window() ){ m_ebox_label->set_visible_window( false ); -#if GTKMM_CHECK_VERSION(3,0,0) - m_label->unset_color( Gtk::STATE_FLAG_NORMAL ); -#else m_label->unset_fg( Gtk::STATE_NORMAL ); -#endif } } else{ m_ebox_label->set_visible_window( true ); -#if GTKMM_CHECK_VERSION(3,0,0) - m_label->override_color( Gdk::RGBA( "white" ), Gtk::STATE_FLAG_NORMAL ); - m_ebox_label->override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_NORMAL ); - m_ebox_label->override_background_color( Gdk::RGBA( color ), Gtk::STATE_FLAG_ACTIVE ); -#else m_label->modify_fg( Gtk::STATE_NORMAL, Gdk::Color( "white" ) ); m_ebox_label->modify_bg( Gtk::STATE_NORMAL, Gdk::Color( color ) ); m_ebox_label->modify_bg( Gtk::STATE_ACTIVE, Gdk::Color( color ) ); -#endif } +#endif // GTKMM_CHECK_VERSION(3,0,0) } diff --git a/src/skeleton/toolbar.h b/src/skeleton/toolbar.h index e9c145af5e..798f479241 100644 --- a/src/skeleton/toolbar.h +++ b/src/skeleton/toolbar.h @@ -75,6 +75,11 @@ namespace SKELETON SKELETON::ToolBackForwardButton* m_button_back; SKELETON::ToolBackForwardButton* m_button_forward; +#if GTKMM_CHECK_VERSION(3,0,0) + static constexpr const char* s_css_label = u8"jd-toolbar-label"; + Glib::RefPtr< Gtk::CssProvider > m_label_provider = Gtk::CssProvider::create(); +#endif + public: ToolBar( Admin* admin ); From e2fc23e7c4db1c0052e068a7ea154c2e5737b0d1 Mon Sep 17 00:00:00 2001 From: ooinu <45452777+ooinu@users.noreply.github.com> Date: Sat, 22 Dec 2018 08:42:32 +0000 Subject: [PATCH 38/51] Draw popup window in wayland (#15) GDK needs a transient parent window to display a popup window. [gtk+] wayland: prefer subsurface when possible https://mail.gnome.org/archives/commits-list/2016-January/msg02035.html --- src/skeleton/popupwinbase.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/skeleton/popupwinbase.h b/src/skeleton/popupwinbase.h index 0781e48d48..17064ec442 100644 --- a/src/skeleton/popupwinbase.h +++ b/src/skeleton/popupwinbase.h @@ -11,6 +11,10 @@ #include +#if GTKMM_CHECK_VERSION(3,0,0) +#include "command.h" +#endif + namespace SKELETON { enum @@ -39,6 +43,12 @@ namespace SKELETON // draw_frame == true なら枠を描画する PopupWinBase( bool draw_frame ) : Gtk::Window( Gtk::WINDOW_POPUP ), m_draw_frame( draw_frame ){ if( m_draw_frame ) set_border_width( 1 ); + +#if GTKMM_CHECK_VERSION(3,0,0) + if ( auto main_window = CORE::get_mainwindow() ) { + set_transient_for( *main_window ); + } +#endif } ~PopupWinBase() noexcept {} From 82ab09e1038554c33c73187c48ea079acf2abcdc Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sat, 2 Feb 2019 22:00:21 +0900 Subject: [PATCH 39/51] Update JDim-0.1.0-20190202 --- src/jdversion.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jdversion.h b/src/jdversion.h index 5629a784af..9ef02d1d91 100644 --- a/src/jdversion.h +++ b/src/jdversion.h @@ -20,7 +20,7 @@ #define MAJORVERSION 0 #define MINORVERSION 1 #define MICROVERSION 0 -#define JDDATE_FALLBACK "20190122" +#define JDDATE_FALLBACK "20190202" #define JDTAG "" //--------------------------------- From d30813b715e54f7a6ce1a521db2185fa161325cf Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 6 Feb 2019 23:05:33 +0900 Subject: [PATCH 40/51] Fix JBBS board URL for setting board info MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JBBS型(したらば掲示板)の板を一覧に追加するときに http://jbbs.shitaraba.netではなく板URLの解析結果を使うように修正する。 以前の方法ではhttpsではじまるURLを正常に設定できない問題があった。 互換性に関する注意 JBBS型の板のうちhttps?://jbbs.shitaraba.netからはじまらないものは 修正によって登録URLが換わる。そのため修正前から登録してある板を削除 すると再登録したときにURLが換わり板情報が引き継がれないことがある。 --- src/dbtree/root.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dbtree/root.cpp b/src/dbtree/root.cpp index a38185f867..3c93894a2b 100644 --- a/src/dbtree/root.cpp +++ b/src/dbtree/root.cpp @@ -559,7 +559,7 @@ int Root::get_board_type( const std::string& url, std::string& root, std::string else if( is_JBBS( url ) ){ if( regex.exec( "(https?://[^/]*)/(.*)/(index2?\\.html?)?$" , url, offset, icase, newline, usemigemo, wchar ) ){ - root = "http://jbbs.shitaraba.net"; + root = regex.str( 1 ); path_board = "/" + regex.str( 2 ); type = TYPE_BOARD_JBBS; From 5c035496a277d80a6637219350699928d2f0c58a Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Mon, 17 Dec 2018 20:19:31 +0900 Subject: [PATCH 41/51] Remove const qualifier of return type for std:string and Glib::ustring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit C++11モードではmoveの妨げになるので戻り値のconstを取り除く --- src/aamanager.cpp | 6 +- src/aamanager.h | 6 +- src/article/articleadmin.cpp | 2 +- src/article/articleadmin.h | 2 +- src/article/articleviewbase.cpp | 6 +- src/article/articleviewbase.h | 6 +- src/article/articleviewsearch.cpp | 4 +- src/article/articleviewsearch.h | 4 +- src/article/drawareabase.cpp | 2 +- src/article/drawareabase.h | 2 +- src/bbslist/addetcdialog.h | 8 +-- src/bbslist/bbslistadmin.cpp | 2 +- src/bbslist/bbslistadmin.h | 2 +- src/bbslist/bbslistviewbase.cpp | 12 ++-- src/bbslist/bbslistviewbase.h | 14 ++-- src/bbslist/selectdialog.cpp | 4 +- src/bbslist/selectdialog.h | 4 +- src/board/boardadmin.cpp | 2 +- src/board/boardadmin.h | 2 +- src/board/boardviewbase.cpp | 10 +-- src/board/boardviewbase.h | 14 ++-- src/board/boardviewnext.h | 2 +- src/browsers.cpp | 4 +- src/browsers.h | 4 +- src/cache.cpp | 6 +- src/cache.h | 6 +- src/config/globalconf.cpp | 8 +-- src/config/globalconf.h | 8 +-- src/control/buttonpref.cpp | 6 +- src/control/buttonpref.h | 6 +- src/control/controlutil.cpp | 26 +++---- src/control/controlutil.h | 26 +++---- src/control/keypref.cpp | 6 +- src/control/keypref.h | 6 +- src/control/mouseconfig.cpp | 4 +- src/control/mouseconfig.h | 4 +- src/control/mousekeyconf.cpp | 4 +- src/control/mousekeyconf.h | 4 +- src/control/mousekeypref.cpp | 10 +-- src/control/mousekeypref.h | 16 ++--- src/control/mousepref.cpp | 6 +- src/control/mousepref.h | 6 +- src/dbimg/img.cpp | 2 +- src/dbimg/img.h | 2 +- src/dbimg/imginterface.cpp | 6 +- src/dbimg/imginterface.h | 6 +- src/dbtree/article2ch.cpp | 6 +- src/dbtree/article2ch.h | 8 +-- src/dbtree/article2chcompati.cpp | 6 +- src/dbtree/article2chcompati.h | 8 +-- src/dbtree/articlebase.cpp | 14 ++-- src/dbtree/articlebase.h | 22 +++--- src/dbtree/articlejbbs.cpp | 6 +- src/dbtree/articlejbbs.h | 8 +-- src/dbtree/articlemachi.cpp | 6 +- src/dbtree/articlemachi.h | 8 +-- src/dbtree/board2ch.cpp | 22 +++--- src/dbtree/board2ch.h | 22 +++--- src/dbtree/board2chcompati.cpp | 16 ++--- src/dbtree/board2chcompati.h | 18 ++--- src/dbtree/boardbase.cpp | 44 ++++++------ src/dbtree/boardbase.h | 58 ++++++++-------- src/dbtree/boardjbbs.cpp | 10 +-- src/dbtree/boardjbbs.h | 10 +-- src/dbtree/boardlocal.cpp | 6 +- src/dbtree/boardlocal.h | 6 +- src/dbtree/boardmachi.cpp | 12 ++-- src/dbtree/boardmachi.h | 14 ++-- src/dbtree/interface.cpp | 110 +++++++++++++++--------------- src/dbtree/interface.h | 110 +++++++++++++++--------------- src/dbtree/nodetreebase.cpp | 10 +-- src/dbtree/nodetreebase.h | 10 +-- src/dbtree/root.cpp | 15 ++-- src/dbtree/root.h | 17 +++-- src/dbtree/ruleloader.cpp | 6 +- src/dbtree/ruleloader.h | 6 +- src/dbtree/settingloader.cpp | 6 +- src/dbtree/settingloader.h | 6 +- src/jdlib/confloader.cpp | 2 +- src/jdlib/confloader.h | 2 +- src/jdlib/jdregex.cpp | 2 +- src/jdlib/jdregex.h | 2 +- src/jdlib/loader.cpp | 2 +- src/jdlib/loader.h | 2 +- src/jdlib/misctime.cpp | 6 +- src/jdlib/misctime.h | 6 +- src/jdlib/misctrip.cpp | 14 ++-- src/jdlib/misctrip.h | 2 +- src/jdlib/miscutil.cpp | 68 +++++++++--------- src/jdlib/miscutil.h | 68 +++++++++--------- src/linkfilterpref.h | 4 +- src/message/logmanager.cpp | 2 +- src/message/logmanager.h | 2 +- src/message/messageview.cpp | 4 +- src/message/messageview.h | 4 +- src/message/messageviewbase.cpp | 4 +- src/message/messageviewbase.h | 6 +- src/searchloader.cpp | 2 +- src/searchloader.h | 6 +- src/session.cpp | 24 +++---- src/session.h | 24 +++---- src/skeleton/admin.cpp | 4 +- src/skeleton/admin.h | 6 +- src/skeleton/label_entry.cpp | 2 +- src/skeleton/label_entry.h | 2 +- src/skeleton/loadable.cpp | 8 +-- src/skeleton/loadable.h | 8 +-- src/skeleton/textloader.h | 6 +- src/skeleton/toolbar.cpp | 2 +- src/skeleton/toolbar.h | 2 +- src/skeleton/view.cpp | 2 +- src/skeleton/view.h | 4 +- src/urlreplacemanager.h | 10 +-- src/usrcmdmanager.cpp | 17 +++-- src/usrcmdmanager.h | 17 +++-- src/usrcmdpref.h | 4 +- src/xml/dom.cpp | 2 +- src/xml/dom.h | 2 +- 118 files changed, 638 insertions(+), 642 deletions(-) diff --git a/src/aamanager.cpp b/src/aamanager.cpp index 3ff8e6e699..26b0dcb4ba 100644 --- a/src/aamanager.cpp +++ b/src/aamanager.cpp @@ -227,13 +227,13 @@ void AAManager::save_history() // ラベル、AA取得 -const std::string AAManager::get_label( const int id ) +std::string AAManager::get_label( const int id ) { if( id >= (int) m_vec_label.size() ) return std::string(); return m_vec_label[ id ]; } -const std::string AAManager::get_aa( const int id ) +std::string AAManager::get_aa( const int id ) { if( id >= (int) m_vec_aa.size() ) return std::string(); return m_vec_aa[ id ]; @@ -243,7 +243,7 @@ const std::string AAManager::get_aa( const int id ) // // ショートカットキー取得 // -const std::string AAManager::id2shortcut( const int id ) +std::string AAManager::id2shortcut( const int id ) { if( id >= (int) m_map_shortcut.size() ) return std::string(); diff --git a/src/aamanager.h b/src/aamanager.h index bfbb181abf..a408426f43 100644 --- a/src/aamanager.h +++ b/src/aamanager.h @@ -29,11 +29,11 @@ namespace CORE int get_size(){ return m_vec_label.size(); } int get_historysize(){ return m_history.size(); } - const std::string get_label( const int id ); - const std::string get_aa( const int id ); + std::string get_label( const int id ); + std::string get_aa( const int id ); // ショートカットキー取得 - const std::string id2shortcut( const int id ); + std::string id2shortcut( const int id ); // ショートカットからid取得 int shortcut2id( const char key ); diff --git a/src/article/articleadmin.cpp b/src/article/articleadmin.cpp index 885fc11ba1..96de558a06 100644 --- a/src/article/articleadmin.cpp +++ b/src/article/articleadmin.cpp @@ -362,7 +362,7 @@ COMMAND_ARGS ArticleAdmin::url_to_openarg( const std::string& url, const bool ta } -const std::string ArticleAdmin::command_to_url( const COMMAND_ARGS& command ) +std::string ArticleAdmin::command_to_url( const COMMAND_ARGS& command ) { std::string url; diff --git a/src/article/articleadmin.h b/src/article/articleadmin.h index 6029209bc6..085232ee97 100644 --- a/src/article/articleadmin.h +++ b/src/article/articleadmin.h @@ -52,7 +52,7 @@ namespace ARTICLE void restore( const bool only_locked ) override; COMMAND_ARGS url_to_openarg( const std::string& url, const bool tab, const bool lock ) override; - const std::string command_to_url( const COMMAND_ARGS& command ) override; + std::string command_to_url( const COMMAND_ARGS& command ) override; void switch_admin() override; diff --git a/src/article/articleviewbase.cpp b/src/article/articleviewbase.cpp index d859dffe34..09a4afa2e5 100644 --- a/src/article/articleviewbase.cpp +++ b/src/article/articleviewbase.cpp @@ -120,7 +120,7 @@ SKELETON::Admin* ArticleViewBase::get_admin() // // メインウィンドウのURLバーなどの表示用にも使う // -const std::string ArticleViewBase::url_for_copy() +std::string ArticleViewBase::url_for_copy() { return DBTREE::url_readcgi( m_url_article, 0, 0 ); } @@ -470,7 +470,7 @@ void ArticleViewBase::setup_action() // // 通常の右クリックメニューの作成 // -const std::string ArticleViewBase::create_context_menu() +std::string ArticleViewBase::create_context_menu() { std::list< int > list_menu; @@ -1600,7 +1600,7 @@ void ArticleViewBase::slot_setup_abone_all() // // 荒らし報告用のURLリストをHTML形式で取得 // -const std::string ArticleViewBase::get_html_url4report( const std::list< int >& list_resnum ) +std::string ArticleViewBase::get_html_url4report( const std::list< int >& list_resnum ) { std::string html; diff --git a/src/article/articleviewbase.h b/src/article/articleviewbase.h index 1fa60b5ff3..fe679a892d 100644 --- a/src/article/articleviewbase.h +++ b/src/article/articleviewbase.h @@ -102,7 +102,7 @@ namespace ARTICLE void save_session() override {} - const std::string url_for_copy() override; // コピーやURLバー表示用のURL + std::string url_for_copy() override; // コピーやURLバー表示用のURL int width_client() override; int height_client() override; int get_icon( const std::string& iconname ) override; @@ -246,7 +246,7 @@ namespace ARTICLE void setup_action(); // 通常の右クリックメニューの作成 - const std::string create_context_menu(); + std::string create_context_menu(); const char* get_menu_item( const int item ); virtual void exec_reload(); @@ -255,7 +255,7 @@ namespace ARTICLE void exec_delete(); // 荒らし報告用のURLリストをHTML形式で取得 - const std::string get_html_url4report( const std::list< int >& list_resnum ); + std::string get_html_url4report( const std::list< int >& list_resnum ); // drawarea の signal を受け取る slots virtual bool slot_button_press( std::string url, int res_number, GdkEventButton* event ); diff --git a/src/article/articleviewsearch.cpp b/src/article/articleviewsearch.cpp index 2500a77775..a38908a83c 100644 --- a/src/article/articleviewsearch.cpp +++ b/src/article/articleviewsearch.cpp @@ -117,7 +117,7 @@ void ArticleViewSearch::set_toolbar_from_url() // queryが変化したときにurlを更新しないと再起動したときのrestoreで // 古いqueryのままになる // -const std::string ArticleViewSearch::get_new_url() +std::string ArticleViewSearch::get_new_url() { std::string url_tmp = m_url_board; @@ -186,7 +186,7 @@ void ArticleViewSearch::regex_escape() // // メインウィンドウのURLバーなどの表示用にも使う // -const std::string ArticleViewSearch::url_for_copy() +std::string ArticleViewSearch::url_for_copy() { if( m_searchmode == CORE::SEARCHMODE_TITLE ) return m_url_title; diff --git a/src/article/articleviewsearch.h b/src/article/articleviewsearch.h index 4f5c0a04cf..4b869f681f 100644 --- a/src/article/articleviewsearch.h +++ b/src/article/articleviewsearch.h @@ -35,7 +35,7 @@ namespace ARTICLE // SKELETON::View の関数のオーバロード - const std::string url_for_copy() override; // コピーやURLバー表示用のURL + std::string url_for_copy() override; // コピーやURLバー表示用のURL bool set_command( const std::string& command, const std::string& arg1 = {}, const std::string& arg2 = {} ) override; @@ -65,7 +65,7 @@ namespace ARTICLE void set_toolbar_from_url(); // queryなどを変更した時の新しいURL - const std::string get_new_url(); + std::string get_new_url(); // ラベルやタブを更新 void update_label(); diff --git a/src/article/drawareabase.cpp b/src/article/drawareabase.cpp index 083d4358fd..70785f83ea 100644 --- a/src/article/drawareabase.cpp +++ b/src/article/drawareabase.cpp @@ -592,7 +592,7 @@ int DrawAreaBase::get_current_res_num() // 範囲選択中の文字列 -const std::string DrawAreaBase::str_selection() +std::string DrawAreaBase::str_selection() { if( ! m_selection.select ) return std::string(); diff --git a/src/article/drawareabase.h b/src/article/drawareabase.h index 9bde6c933c..413691a362 100644 --- a/src/article/drawareabase.h +++ b/src/article/drawareabase.h @@ -280,7 +280,7 @@ namespace ARTICLE void select_all(); // 範囲選択中の文字列 - const std::string str_selection(); + std::string str_selection(); const std::string& str_pre_selection() const { return m_selection.str_pre; } // 一つ前の選択文字列 // 範囲選択を開始したレス番号 diff --git a/src/bbslist/addetcdialog.h b/src/bbslist/addetcdialog.h index e6913bd7ee..69121de514 100644 --- a/src/bbslist/addetcdialog.h +++ b/src/bbslist/addetcdialog.h @@ -25,10 +25,10 @@ namespace BBSLIST AddEtcDialog( const bool move, const std::string& url, const std::string& _name, const std::string& _id, const std::string& _passwd ); - const std::string get_name(){ return m_entry_name.get_text(); } - const std::string get_url(){ return m_entry_url.get_text(); } - const std::string get_id(){ return m_entry_id.get_text(); } - const std::string get_passwd(){ return m_entry_pw.get_text(); } + std::string get_name() const { return m_entry_name.get_text(); } + std::string get_url() const { return m_entry_url.get_text(); } + std::string get_id() const { return m_entry_id.get_text(); } + std::string get_passwd() const { return m_entry_pw.get_text(); } }; } diff --git a/src/bbslist/bbslistadmin.cpp b/src/bbslist/bbslistadmin.cpp index bc875b0a50..940f01754f 100644 --- a/src/bbslist/bbslistadmin.cpp +++ b/src/bbslist/bbslistadmin.cpp @@ -275,7 +275,7 @@ void BBSListAdmin::get_threads( const std::string& url, const int dirid, std::ve // サイドバーの指定したidのディレクトリの名前を取得 -const std::string BBSListAdmin::get_dirname( const std::string& url, const int dirid ) +std::string BBSListAdmin::get_dirname( const std::string& url, const int dirid ) { BBSListViewBase* view = dynamic_cast< BBSListViewBase* >( get_view( url ) ); if( view ) return view->get_dirname( dirid ); diff --git a/src/bbslist/bbslistadmin.h b/src/bbslist/bbslistadmin.h index a011166ba6..6d994f1ac6 100644 --- a/src/bbslist/bbslistadmin.h +++ b/src/bbslist/bbslistadmin.h @@ -41,7 +41,7 @@ namespace BBSLIST void get_threads( const std::string& url, const int dirid, std::vector< std::string >& list_url ); // サイドバーの指定したidのディレクトリの名前を取得 - const std::string get_dirname( const std::string& url, const int dirid ); + std::string get_dirname( const std::string& url, const int dirid ); protected: diff --git a/src/bbslist/bbslistviewbase.cpp b/src/bbslist/bbslistviewbase.cpp index a74aaec8b5..dbc0554fc4 100644 --- a/src/bbslist/bbslistviewbase.cpp +++ b/src/bbslist/bbslistviewbase.cpp @@ -2060,7 +2060,7 @@ void BBSListViewBase::slot_sort( const int mode ) // // path -> url 変換 // -const Glib::ustring BBSListViewBase::path2rawurl( const Gtk::TreePath& path ) +Glib::ustring BBSListViewBase::path2rawurl( const Gtk::TreePath& path ) { Gtk::TreeModel::Row row = m_treeview.get_row( path ); if( !row ) return Glib::ustring(); @@ -2070,7 +2070,7 @@ const Glib::ustring BBSListViewBase::path2rawurl( const Gtk::TreePath& path ) // 移転をチェックするバージョン -const Glib::ustring BBSListViewBase::path2url( const Gtk::TreePath& path ) +Glib::ustring BBSListViewBase::path2url( const Gtk::TreePath& path ) { Gtk::TreeModel::Row row = m_treeview.get_row( path ); if( !row ) return Glib::ustring(); @@ -2104,7 +2104,7 @@ const Glib::ustring BBSListViewBase::path2url( const Gtk::TreePath& path ) // 板の場合は boardbase // スレの場合は dat 型のアドレスを返す // -const Glib::ustring BBSListViewBase::row2url( const Gtk::TreeModel::Row& row ) +Glib::ustring BBSListViewBase::row2url( const Gtk::TreeModel::Row& row ) { if( ! row ) return Glib::ustring(); @@ -2135,7 +2135,7 @@ const Glib::ustring BBSListViewBase::row2url( const Gtk::TreeModel::Row& row ) // // path -> name 変換 // -const Glib::ustring BBSListViewBase::path2name( const Gtk::TreePath& path ) +Glib::ustring BBSListViewBase::path2name( const Gtk::TreePath& path ) { Gtk::TreeModel::Row row = m_treeview.get_row( path ); if( !row ) return Glib::ustring(); @@ -2168,7 +2168,7 @@ int BBSListViewBase::row2type( const Gtk::TreeModel::Row& row ) // // row -> name 変換 // -const Glib::ustring BBSListViewBase::row2name( const Gtk::TreeModel::Row& row ) +Glib::ustring BBSListViewBase::row2name( const Gtk::TreeModel::Row& row ) { if( !row ) return Glib::ustring(); return row[ m_columns.m_name ]; @@ -3033,7 +3033,7 @@ void BBSListViewBase::get_threads( const size_t dirid, std::vector< std::string // 指定したidのディレクトリの名前を取得 -const std::string BBSListViewBase::get_dirname( const int dirid ) +std::string BBSListViewBase::get_dirname( const int dirid ) { if( ! dirid ) return get_label(); diff --git a/src/bbslist/bbslistviewbase.h b/src/bbslist/bbslistviewbase.h index e775dbd1bf..ebd2f6312c 100644 --- a/src/bbslist/bbslistviewbase.h +++ b/src/bbslist/bbslistviewbase.h @@ -141,22 +141,22 @@ namespace BBSLIST int row2type( const Gtk::TreeModel::Row& row ); // row -> name 変換 - const Glib::ustring row2name( const Gtk::TreeModel::Row& row ); + Glib::ustring row2name( const Gtk::TreeModel::Row& row ); // row -> url 変換 // 板の場合は boardbase // スレの場合は dat 型のアドレスを返す - const Glib::ustring row2url( const Gtk::TreeModel::Row& row ); + Glib::ustring row2url( const Gtk::TreeModel::Row& row ); // row -> dirid 変換 size_t row2dirid( const Gtk::TreeModel::Row& row ); // path からその行の名前を取得 - const Glib::ustring path2name( const Gtk::TreePath& path ); + Glib::ustring path2name( const Gtk::TreePath& path ); // path からその行のURLを取得 - const Glib::ustring path2rawurl( const Gtk::TreePath& path ); - const Glib::ustring path2url( const Gtk::TreePath& path ); // 移転をチェックするバージョン + Glib::ustring path2rawurl( const Gtk::TreePath& path ); + Glib::ustring path2url( const Gtk::TreePath& path ); // 移転をチェックするバージョン // url で指定した項目を削除 void remove_item( const std::string& url ); @@ -193,7 +193,7 @@ namespace BBSLIST // 親ウィンドウをセット void set_parent_win( Gtk::Window* parent_win ) override; - const std::string url_for_copy() override { return {}; } + std::string url_for_copy() override { return {}; } bool set_command( const std::string& command, const std::string& arg1 = {}, @@ -241,7 +241,7 @@ namespace BBSLIST void get_threads( const size_t dirid, std::vector< std::string >& list_url ); // 指定したidのディレクトリの名前を取得 - const std::string get_dirname( const int dirid ); + std::string get_dirname( const int dirid ); // selectdialogで使う Gtk::TreePath get_current_path() { return m_treeview.get_current_path(); } diff --git a/src/bbslist/selectdialog.cpp b/src/bbslist/selectdialog.cpp index 8c49aec32a..e8ba16d598 100644 --- a/src/bbslist/selectdialog.cpp +++ b/src/bbslist/selectdialog.cpp @@ -113,12 +113,12 @@ void SelectListDialog::slot_ok_clicked() } -const std::string SelectListDialog::get_name() +std::string SelectListDialog::get_name() { return m_label_name.get_text(); } -const std::string SelectListDialog::get_path() +std::string SelectListDialog::get_path() { std::string path; if( m_selectview ) path = m_selectview->get_current_path().to_string(); diff --git a/src/bbslist/selectdialog.h b/src/bbslist/selectdialog.h index f1c9fa9f14..30ebb94e48 100644 --- a/src/bbslist/selectdialog.h +++ b/src/bbslist/selectdialog.h @@ -36,8 +36,8 @@ namespace BBSLIST SelectListDialog( Gtk::Window* parent, const std::string& url, Glib::RefPtr< Gtk::TreeStore >& treestore ); ~SelectListDialog(); - const std::string get_name(); - const std::string get_path(); + std::string get_name(); + std::string get_path(); protected: diff --git a/src/board/boardadmin.cpp b/src/board/boardadmin.cpp index df30bf7fb3..0ae9edb805 100644 --- a/src/board/boardadmin.cpp +++ b/src/board/boardadmin.cpp @@ -210,7 +210,7 @@ COMMAND_ARGS BoardAdmin::url_to_openarg( const std::string& url, const bool tab, } -const std::string BoardAdmin::command_to_url( const COMMAND_ARGS& command ) +std::string BoardAdmin::command_to_url( const COMMAND_ARGS& command ) { if( command.arg4 == "NEXT" ) return command.url + NEXT_SIGN + ARTICLE_SIGN + command.arg5; diff --git a/src/board/boardadmin.h b/src/board/boardadmin.h index e86e1efbec..d9105df17f 100644 --- a/src/board/boardadmin.h +++ b/src/board/boardadmin.h @@ -44,7 +44,7 @@ namespace BOARD void restore( const bool only_locked ) override; COMMAND_ARGS url_to_openarg( const std::string& url, const bool tab, const bool lock ) override; - const std::string command_to_url( const COMMAND_ARGS& command ) override; + std::string command_to_url( const COMMAND_ARGS& command ) override; void switch_admin() override; diff --git a/src/board/boardviewbase.cpp b/src/board/boardviewbase.cpp index c84a438e58..95b4f11f7c 100644 --- a/src/board/boardviewbase.cpp +++ b/src/board/boardviewbase.cpp @@ -240,7 +240,7 @@ int BoardViewBase::get_icon( const std::string& iconname ) // // コピー用URL(メインウィンドウのURLバーなどに表示する) // -const std::string BoardViewBase::url_for_copy() +std::string BoardViewBase::url_for_copy() { return DBTREE::url_boardbase( get_url_board() ); } @@ -360,7 +360,7 @@ void BoardViewBase::setup_action() // // 通常の右クリックメニューの作成 // -const std::string BoardViewBase::create_context_menu() +std::string BoardViewBase::create_context_menu() { std::list< int > list_menu; @@ -2531,7 +2531,7 @@ void BoardViewBase::open_selected_rows( const bool reget ) // // path -> スレッドの(dat型)URL変換 // -const std::string BoardViewBase::path2daturl( const Gtk::TreePath& path ) +std::string BoardViewBase::path2daturl( const Gtk::TreePath& path ) { Gtk::TreeModel::Row row = m_treeview.get_row( path ); if( !row ) return std::string(); @@ -2544,7 +2544,7 @@ const std::string BoardViewBase::path2daturl( const Gtk::TreePath& path ) // // path -> 板URL変換 // -const std::string BoardViewBase::path2url_board( const Gtk::TreePath& path ) +std::string BoardViewBase::path2url_board( const Gtk::TreePath& path ) { if( ! get_url_board().empty() ) return get_url_board(); if( path.empty() ) return std::string(); @@ -2965,7 +2965,7 @@ void BoardViewBase::slot_abone_thread() // path と column からそのセルの内容を取得 // template < typename ColumnType > -const std::string BoardViewBase::get_name_of_cell( Gtk::TreePath& path, const Gtk::TreeModelColumn< ColumnType >& column ) +std::string BoardViewBase::get_name_of_cell( Gtk::TreePath& path, const Gtk::TreeModelColumn< ColumnType >& column ) { Gtk::TreeModel::Row row = m_treeview.get_row( path ); if( !row ) return std::string(); diff --git a/src/board/boardviewbase.h b/src/board/boardviewbase.h index 426d21b9c2..618f11c029 100644 --- a/src/board/boardviewbase.h +++ b/src/board/boardviewbase.h @@ -104,7 +104,7 @@ namespace BOARD ~BoardViewBase(); const std::string& get_url_board() const { return m_url_board; } - const std::string url_for_copy() override; + std::string url_for_copy() override; // 行数 int get_row_size(); @@ -214,12 +214,12 @@ namespace BOARD void setup_action(); // 通常の右クリックメニューの作成 - const std::string create_context_menu(); + std::string create_context_menu(); const char* get_menu_item( const int item ); // 次スレ移行処理に使用する前スレのアドレス // BOARD::BoardViewNext と BoardViewBase::open_row()を参照せよ - virtual const std::string get_url_pre_article(){ return std::string(); } + virtual std::string get_url_pre_article(){ return std::string(); } void update_columns(); @@ -278,17 +278,17 @@ namespace BOARD bool open_row( Gtk::TreePath& path, const bool tab, const bool reget ); void open_selected_rows( const bool reget ); - const std::string path2daturl( const Gtk::TreePath& path ); - const std::string path2url_board( const Gtk::TreePath& path ); + std::string path2daturl( const Gtk::TreePath& path ); + std::string path2url_board( const Gtk::TreePath& path ); // 検索 bool drawout( const bool force_reset ); void update_row_common( const Gtk::TreeModel::Row& row ); - const std::string get_subject_from_path( Gtk::TreePath& path ); + std::string get_subject_from_path( Gtk::TreePath& path ); // XXX: 実装がない template < typename ColumnType > - const std::string get_name_of_cell( Gtk::TreePath& path, const Gtk::TreeModelColumn< ColumnType >& column ); + std::string get_name_of_cell( Gtk::TreePath& path, const Gtk::TreeModelColumn< ColumnType >& column ); void set_article_to_buffer(); void set_board_to_buffer(); diff --git a/src/board/boardviewnext.h b/src/board/boardviewnext.h index 2dba7c33ce..16e96c8fc7 100644 --- a/src/board/boardviewnext.h +++ b/src/board/boardviewnext.h @@ -49,7 +49,7 @@ namespace BOARD // 次スレ移行処理に使用する前スレのアドレス // 次スレ移行処理に使用する。BoardViewBase::open_row()を参照せよ - const std::string get_url_pre_article() override { return m_url_pre_article; } + std::string get_url_pre_article() override { return m_url_pre_article; } void slot_abone_thread() override; diff --git a/src/browsers.cpp b/src/browsers.cpp index a020276260..15afcb0a74 100644 --- a/src/browsers.cpp +++ b/src/browsers.cpp @@ -35,13 +35,13 @@ namespace CORE #endif }; - const std::string get_browser_label( const int num ){ + std::string get_browser_label( const int num ){ if( num >= BROWSER_NUM ) return std::string(); return browsers[ num ][ 0 ]; } - const std::string get_browser_name( const int num ){ + std::string get_browser_name( const int num ){ if( num >= BROWSER_NUM ) return std::string(); std::string name = browsers[ num ][ 1 ]; diff --git a/src/browsers.h b/src/browsers.h index b6b7bdc129..743f3f216f 100644 --- a/src/browsers.h +++ b/src/browsers.h @@ -9,9 +9,9 @@ namespace CORE { - const std::string get_browser_label( const int num ); + std::string get_browser_label( const int num ); - const std::string get_browser_name( const int num ); + std::string get_browser_name( const int num ); int get_browser_number(); } diff --git a/src/cache.cpp b/src/cache.cpp index 2fca7099a0..4df8584561 100644 --- a/src/cache.cpp +++ b/src/cache.cpp @@ -507,7 +507,7 @@ std::string CACHE::path_aahistory() // // テーマのルートパス // -const std::string CACHE::path_theme_root() +std::string CACHE::path_theme_root() { return CACHE::path_root() + "theme/"; } @@ -515,7 +515,7 @@ const std::string CACHE::path_theme_root() // // アイコンテーマのルートパス // -const std::string CACHE::path_theme_icon_root() +std::string CACHE::path_theme_icon_root() { return CACHE::path_theme_root() + "icons/"; } @@ -1204,7 +1204,7 @@ guint64 CACHE::get_dirsize( const std::string& dir ) // 相対パスから絶対パスを取得してファイルが存在すれば絶対パスを返す // ファイルが存在しない場合は std::string() を返す -const std::string CACHE::get_realpath( const std::string& path ) +std::string CACHE::get_realpath( const std::string& path ) { std::string path_real; diff --git a/src/cache.h b/src/cache.h index b9b0cc32b6..a7c0ac5be5 100644 --- a/src/cache.h +++ b/src/cache.h @@ -141,10 +141,10 @@ namespace CACHE std::string path_aahistory(); // AAの使用履歴ファイル // テーマのルートパス - const std::string path_theme_root(); + std::string path_theme_root(); // アイコンテーマのルートパス - const std::string path_theme_icon_root(); + std::string path_theme_icon_root(); // css std::string path_css(); @@ -236,7 +236,7 @@ namespace CACHE // 相対パスから絶対パスを取得してファイルが存在すれば絶対パスを返す // ファイルが存在しない場合は std::string() を返す - const std::string get_realpath( const std::string& path ); + std::string get_realpath( const std::string& path ); } #endif diff --git a/src/config/globalconf.cpp b/src/config/globalconf.cpp index ca8caf16e4..cea224e1ce 100644 --- a/src/config/globalconf.cpp +++ b/src/config/globalconf.cpp @@ -137,11 +137,11 @@ void CONFIG::reset_fonts(){ get_confitem()->reset_fonts(); } bool CONFIG::get_aafont_enabled(){ return get_confitem()->aafont_enabled; } -const std::string CONFIG::get_ref_prefix(){ return get_confitem()->ref_prefix + get_confitem()->ref_prefix_space_str; } +std::string CONFIG::get_ref_prefix(){ return get_confitem()->ref_prefix + get_confitem()->ref_prefix_space_str; } int CONFIG::ref_prefix_space(){ return get_confitem()->ref_prefix_space; } // レスにアスキーアートがあると判定する正規表現 -const std::string CONFIG::get_regex_res_aa(){ +std::string CONFIG::get_regex_res_aa(){ std::string str = get_confitem()->regex_res_aa; int size = str.size(); @@ -329,10 +329,10 @@ bool CONFIG::get_open_one_category(){ return get_confitem()->open_one_category; bool CONFIG::get_open_one_favorite(){ return get_confitem()->open_one_favorite; } // デフォルトの書き込み名 -const std::string CONFIG::get_write_name(){ return get_confitem()->write_name; } +std::string CONFIG::get_write_name(){ return get_confitem()->write_name; } // デフォルトのメールアドレス -const std::string CONFIG::get_write_mail(){ return get_confitem()->write_mail; } +std::string CONFIG::get_write_mail(){ return get_confitem()->write_mail; } bool CONFIG::get_always_write_ok() { return get_confitem()->always_write_ok; } void CONFIG::set_always_write_ok( const bool write_ok ){ get_confitem()->always_write_ok = write_ok; } diff --git a/src/config/globalconf.h b/src/config/globalconf.h index f28498f214..a447d12ac1 100644 --- a/src/config/globalconf.h +++ b/src/config/globalconf.h @@ -88,13 +88,13 @@ namespace CONFIG bool get_aafont_enabled(); // レスを参照するときに前に付ける文字 - const std::string get_ref_prefix(); + std::string get_ref_prefix(); // 参照文字( ref_prefix ) の後のスペースの数 int ref_prefix_space(); // レスにアスキーアートがあると判定する正規表現 - const std::string get_regex_res_aa(); + std::string get_regex_res_aa(); void set_regex_res_aa( const std::string& regex ); // JD ホームページのアドレス @@ -339,10 +339,10 @@ namespace CONFIG bool get_open_one_favorite(); // デフォルトの書き込み名 - const std::string get_write_name(); + std::string get_write_name(); // デフォルトのメールアドレス - const std::string get_write_mail(); + std::string get_write_mail(); // 書き込み時に書き込み確認ダイアログを出すかどうか bool get_always_write_ok(); diff --git a/src/control/buttonpref.cpp b/src/control/buttonpref.cpp index b42809451f..283e148074 100644 --- a/src/control/buttonpref.cpp +++ b/src/control/buttonpref.cpp @@ -36,7 +36,7 @@ InputDiag* ButtonDiag::create_inputdiag() } -const std::string ButtonDiag::get_default_motions( const int id ) +std::string ButtonDiag::get_default_motions( const int id ) { return CONTROL::get_default_buttonmotions( id ); } @@ -127,13 +127,13 @@ MouseKeyDiag* ButtonPref::create_setting_diag( const int id, const std::string& } -const std::string ButtonPref::get_str_motions( const int id ) +std::string ButtonPref::get_str_motions( const int id ) { return CONTROL::get_str_buttonmotions( id ); } -const std::string ButtonPref::get_default_motions( const int id ) +std::string ButtonPref::get_default_motions( const int id ) { return CONTROL::get_default_buttonmotions( id ); } diff --git a/src/control/buttonpref.h b/src/control/buttonpref.h index 3e77f31daa..55062ae44d 100644 --- a/src/control/buttonpref.h +++ b/src/control/buttonpref.h @@ -40,7 +40,7 @@ namespace CONTROL protected: InputDiag* create_inputdiag() override; - const std::string get_default_motions( const int id ) override; + std::string get_default_motions( const int id ) override; const std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; }; @@ -60,8 +60,8 @@ namespace CONTROL protected: MouseKeyDiag* create_setting_diag( const int id, const std::string& str_motions ) override; - const std::string get_str_motions( const int id ) override; - const std::string get_default_motions( const int id ) override; + std::string get_str_motions( const int id ) override; + std::string get_default_motions( const int id ) override; void set_motions( const int id, const std::string& str_motions ) override; bool remove_motions( const int id ) override; diff --git a/src/control/controlutil.cpp b/src/control/controlutil.cpp index f509db923f..0762098a80 100644 --- a/src/control/controlutil.cpp +++ b/src/control/controlutil.cpp @@ -249,7 +249,7 @@ int CONTROL::get_mode( const int id ) // 操作モードIDからモード名取得 // 例えば mode == CONTROL::MODE_COMMON の時は "共通" を返す -const std::string CONTROL::get_mode_label( const int mode ) +std::string CONTROL::get_mode_label( const int mode ) { if( mode < CONTROL::MODE_START || mode > MODE_END ) return std::string(); @@ -289,7 +289,7 @@ guint CONTROL::get_keysym( const std::string& keyname ) // keysymからキー名を取得 // 例えば keysym == GDK_space の時は "Space" を返す -const std::string CONTROL::get_keyname( const guint keysym ) +std::string CONTROL::get_keyname( const guint keysym ) { #ifdef _DEBUG std::cout << "CONTROL::get_keyname sym = " << keysym; @@ -336,7 +336,7 @@ int CONTROL::get_id( const std::string& name ) // IDから操作名取得 // 例えば id == CONTROL::Up の時は "Up" を返す -const std::string CONTROL::get_name( const int id ) +std::string CONTROL::get_name( const int id ) { if( id < CONTROL::COMMONMOTION || id >= CONTROL::CONTROL_END ) return std::string(); @@ -346,7 +346,7 @@ const std::string CONTROL::get_name( const int id ) // IDからラベル取得 // 例えば id == CONTROL::Up の時は "上移動" を返す -const std::string CONTROL::get_label( const int id ) +std::string CONTROL::get_label( const int id ) { if( id < CONTROL::COMMONMOTION || id >= CONTROL::CONTROL_END ) return std::string(); @@ -356,7 +356,7 @@ const std::string CONTROL::get_label( const int id ) // IDからショートカットを付けたラベルを取得 // 例えば id == CONTROL::Save の時は "名前を付けて保存(_S)..." を返す -const std::string CONTROL::get_label_with_mnemonic( const int id ) +std::string CONTROL::get_label_with_mnemonic( const int id ) { unsigned int pos; @@ -540,7 +540,7 @@ const std::string CONTROL::get_label_with_mnemonic( const int id ) // IDからキーボードとマウスジェスチャの両方を取得 -const std::string CONTROL::get_str_motions( const int id ) +std::string CONTROL::get_str_motions( const int id ) { int ctl = id; @@ -570,7 +570,7 @@ const std::string CONTROL::get_str_motions( const int id ) // IDからラベルと操作の両方を取得 -const std::string CONTROL::get_label_motions( const int id ) +std::string CONTROL::get_label_motions( const int id ) { std::string motion = CONTROL::get_str_motions( id ); return CONTROL::get_label( id ) + ( motion.empty() ? "" : " " ) + motion; @@ -740,14 +740,14 @@ void CONTROL::restore_keyconfig() // IDからキーボード操作を取得 -const std::string CONTROL::get_str_keymotions( const int id ) +std::string CONTROL::get_str_keymotions( const int id ) { return CONTROL::get_keyconfig()->get_str_motions( id ); } // IDからデフォルトキーボード操作を取得 -const std::string CONTROL::get_default_keymotions( const int id ) +std::string CONTROL::get_default_keymotions( const int id ) { return CONTROL::get_keyconfig()->get_default_motions( id ); } @@ -848,14 +848,14 @@ void CONTROL::restore_mouseconfig() // IDからマウスジェスチャを取得 -const std::string CONTROL::get_str_mousemotions( const int id ) +std::string CONTROL::get_str_mousemotions( const int id ) { return convert_mouse_motions( CONTROL::get_mouseconfig()->get_str_motions( id ) ); } // IDからデフォルトマウスジェスチャを取得 -const std::string CONTROL::get_default_mousemotions( const int id ) +std::string CONTROL::get_default_mousemotions( const int id ) { return convert_mouse_motions( CONTROL::get_mouseconfig()->get_default_motions( id ) ); } @@ -903,14 +903,14 @@ void CONTROL::restore_buttonconfig() // IDからボタン設定を取得 -const std::string CONTROL::get_str_buttonmotions( const int id ) +std::string CONTROL::get_str_buttonmotions( const int id ) { return CONTROL::get_buttonconfig()->get_str_motions( id ); } // IDからデフォルトボタン設定を取得 -const std::string CONTROL::get_default_buttonmotions( const int id ) +std::string CONTROL::get_default_buttonmotions( const int id ) { return CONTROL::get_buttonconfig()->get_default_motions( id ); } diff --git a/src/control/controlutil.h b/src/control/controlutil.h index 6692f4a9de..6fad44571b 100644 --- a/src/control/controlutil.h +++ b/src/control/controlutil.h @@ -36,7 +36,7 @@ namespace CONTROL // 操作モードIDからモード名取得 // 例えば mode == CONTROL::MODE_COMMON の時は "共通" を返す - const std::string get_mode_label( const int mode ); + std::string get_mode_label( const int mode ); // キー名からkeysymを取得 // 例えば keyname == "Space" の時は GDK_space を返す @@ -44,7 +44,7 @@ namespace CONTROL // keysymからキー名を取得 // 例えば keysym == GDK_space の時は "Space" を返す - const std::string get_keyname( const guint keysym ); + std::string get_keyname( const guint keysym ); // 操作名からID取得 // 例えば name == "Up" の時は CONTROL::Up を返す @@ -52,21 +52,21 @@ namespace CONTROL // IDから操作名取得 // 例えば id == CONTROL::Up の時は "Up" を返す - const std::string get_name( const int id ); + std::string get_name( const int id ); // IDからラベル取得 // 例えば id == CONTROL::Up の時は "上移動" を返す - const std::string get_label( const int id ); + std::string get_label( const int id ); // IDからショートカットを付けたラベルを取得 // 例えば id == CONTROL::Save の時は "名前を付けて保存(_S)..." を返す - const std::string get_label_with_mnemonic( const int id ); + std::string get_label_with_mnemonic( const int id ); // IDからキーボードとマウスジェスチャの両方を取得 - const std::string get_str_motions( const int id ); + std::string get_str_motions( const int id ); // IDからラベルと操作の両方を取得 - const std::string get_label_motions( const int id ); + std::string get_label_motions( const int id ); // 共通操作 bool operate_common( const int control, const std::string& url, SKELETON::Admin* admin ); @@ -80,10 +80,10 @@ namespace CONTROL void restore_keyconfig(); // IDからキーボード操作を取得 - const std::string get_str_keymotions( const int id ); + std::string get_str_keymotions( const int id ); // IDからデフォルトキーボード操作を取得 - const std::string get_default_keymotions( const int id ); + std::string get_default_keymotions( const int id ); // スペースで区切られた複数のキーボード操作をデータベースに登録 void set_keymotions( const int id, const std::string& str_motions ); @@ -114,10 +114,10 @@ namespace CONTROL void restore_mouseconfig(); // IDからマウスジェスチャを取得 - const std::string get_str_mousemotions( const int id ); + std::string get_str_mousemotions( const int id ); // IDからデフォルトマウスジェスチャを取得 - const std::string get_default_mousemotions( const int id ); + std::string get_default_mousemotions( const int id ); // スペースで区切られた複数のマウスジェスチャをデータベースに登録 void set_mousemotions( const int id, const std::string& str_motions ); @@ -137,10 +137,10 @@ namespace CONTROL void restore_buttonconfig(); // IDからボタン設定を取得 - const std::string get_str_buttonmotions( const int id ); + std::string get_str_buttonmotions( const int id ); // IDからデフォルトボタン設定を取得 - const std::string get_default_buttonmotions( const int id ); + std::string get_default_buttonmotions( const int id ); // スペースで区切られた複数のボタン設定をデータベースに登録 void set_buttonmotions( const int id, const std::string& str_motions ); diff --git a/src/control/keypref.cpp b/src/control/keypref.cpp index 1dffc268f7..b3f83437f1 100644 --- a/src/control/keypref.cpp +++ b/src/control/keypref.cpp @@ -42,7 +42,7 @@ InputDiag* KeyDiag::create_inputdiag() } -const std::string KeyDiag::get_default_motions( const int id ) +std::string KeyDiag::get_default_motions( const int id ) { return CONTROL::get_default_keymotions( id ); } @@ -237,13 +237,13 @@ MouseKeyDiag* KeyPref::create_setting_diag( const int id, const std::string& str } -const std::string KeyPref::get_str_motions( const int id ) +std::string KeyPref::get_str_motions( const int id ) { return CONTROL::get_str_keymotions( id ); } -const std::string KeyPref::get_default_motions( const int id ) +std::string KeyPref::get_default_motions( const int id ) { return CONTROL::get_default_keymotions( id ); } diff --git a/src/control/keypref.h b/src/control/keypref.h index 69b9cdc212..54e3b71fb1 100644 --- a/src/control/keypref.h +++ b/src/control/keypref.h @@ -38,7 +38,7 @@ namespace CONTROL protected: InputDiag* create_inputdiag() override; - const std::string get_default_motions( const int id ) override; + std::string get_default_motions( const int id ) override; const std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; }; @@ -57,8 +57,8 @@ namespace CONTROL protected: MouseKeyDiag* create_setting_diag( const int id, const std::string& str_motions ) override; - const std::string get_str_motions( const int id ) override; - const std::string get_default_motions( const int id ) override; + std::string get_str_motions( const int id ) override; + std::string get_default_motions( const int id ) override; void set_motions( const int id, const std::string& str_motions ) override; bool remove_motions( const int id ) override; diff --git a/src/control/mouseconfig.cpp b/src/control/mouseconfig.cpp index a81a4cd095..7be686ed1e 100644 --- a/src/control/mouseconfig.cpp +++ b/src/control/mouseconfig.cpp @@ -105,7 +105,7 @@ void MouseConfig::set_one_motion_impl( const int id, const int mode, const std:: // 操作文字列取得 -const std::string MouseConfig::get_str_motions( const int id_ ) +std::string MouseConfig::get_str_motions( const int id_ ) { int id = id_; @@ -117,7 +117,7 @@ const std::string MouseConfig::get_str_motions( const int id_ ) // IDからデフォルトの操作文字列取得 -const std::string MouseConfig::get_default_motions( const int id_ ) +std::string MouseConfig::get_default_motions( const int id_ ) { int id = id_; if( id == CONTROL::CancelMosaic ) id = CONTROL::CancelMosaicButton; diff --git a/src/control/mouseconfig.h b/src/control/mouseconfig.h index 8c2ed4ef8c..31b504afb0 100644 --- a/src/control/mouseconfig.h +++ b/src/control/mouseconfig.h @@ -21,10 +21,10 @@ namespace CONTROL void load_conf() override; // 操作文字列取得 - const std::string get_str_motions( const int id ) override; + std::string get_str_motions( const int id ) override; // IDからデフォルトの操作文字列取得 - const std::string get_default_motions( const int id ) override; + std::string get_default_motions( const int id ) override; private: diff --git a/src/control/mousekeyconf.cpp b/src/control/mousekeyconf.cpp index e12dc4e46f..90fe222f75 100644 --- a/src/control/mousekeyconf.cpp +++ b/src/control/mousekeyconf.cpp @@ -140,7 +140,7 @@ const std::vector< int > MouseKeyConf::check_conflict( const int mode, const st // IDから操作文字列取得 -const std::string MouseKeyConf::get_str_motions( const int id ) +std::string MouseKeyConf::get_str_motions( const int id ) { std::string motions; @@ -158,7 +158,7 @@ const std::string MouseKeyConf::get_str_motions( const int id ) // IDからデフォルトの操作文字列取得 -const std::string MouseKeyConf::get_default_motions( const int id ) +std::string MouseKeyConf::get_default_motions( const int id ) { std::map< int, std::string >::iterator it = m_map_default_motions.find( id ); if( it != m_map_default_motions.end() ) return ( *it ).second; diff --git a/src/control/mousekeyconf.h b/src/control/mousekeyconf.h index 326700aaf0..a3e3da3af8 100644 --- a/src/control/mousekeyconf.h +++ b/src/control/mousekeyconf.h @@ -50,10 +50,10 @@ namespace CONTROL const bool dblclick, const bool trpclick ); // IDから操作文字列取得 - virtual const std::string get_str_motions( const int id ); + virtual std::string get_str_motions( const int id ); // IDからデフォルトの操作文字列取得 - virtual const std::string get_default_motions( const int id ); + virtual std::string get_default_motions( const int id ); // 同じモード内でモーションが重複していないかチェック // 戻り値 : コントロールID diff --git a/src/control/mousekeypref.cpp b/src/control/mousekeypref.cpp index 522f8e5226..6f4d3fe445 100644 --- a/src/control/mousekeypref.cpp +++ b/src/control/mousekeypref.cpp @@ -205,7 +205,7 @@ bool InputDiag::on_motion_notify_event( GdkEventMotion* event ) } -const std::string InputDiag::get_key_label() +std::string InputDiag::get_key_label() { std::string label; @@ -225,7 +225,7 @@ const std::string InputDiag::get_key_label() -const std::string InputDiag::get_mouse_label() +std::string InputDiag::get_mouse_label() { std::string label; @@ -244,7 +244,7 @@ const std::string InputDiag::get_mouse_label() } -const std::string InputDiag::get_button_label() +std::string InputDiag::get_button_label() { std::string label; @@ -335,7 +335,7 @@ Gtk::TreeModel::Row MouseKeyDiag::append_row( const std::string& motion ) } -const std::string MouseKeyDiag::get_str_motions() +std::string MouseKeyDiag::get_str_motions() { std::string str_motions; @@ -357,7 +357,7 @@ const std::string MouseKeyDiag::get_str_motions() // // 入力ダイアログを表示 // -const std::string MouseKeyDiag::show_inputdiag( bool is_append ) +std::string MouseKeyDiag::show_inputdiag( bool is_append ) { std::string str_motion; diff --git a/src/control/mousekeypref.h b/src/control/mousekeypref.h index b78c238dad..7c3a9f01b1 100644 --- a/src/control/mousekeypref.h +++ b/src/control/mousekeypref.h @@ -48,9 +48,9 @@ namespace CONTROL int get_id() const { return m_id; } - const std::string get_key_label(); - const std::string get_mouse_label(); - const std::string get_button_label(); + std::string get_key_label(); + std::string get_mouse_label(); + std::string get_button_label(); private: @@ -105,7 +105,7 @@ namespace CONTROL MouseKeyDiag( Gtk::Window* parent, const std::string& url, const int id, const std::string& target, const std::string& str_motions ); - const std::string get_str_motions(); + std::string get_str_motions(); protected: @@ -117,7 +117,7 @@ namespace CONTROL void set_single( bool single ){ m_single = single; } virtual InputDiag* create_inputdiag() = 0; - virtual const std::string get_default_motions( const int id ) = 0; + virtual std::string get_default_motions( const int id ) = 0; virtual const std::vector< int > check_conflict( const int mode, const std::string& str_motion ) = 0; private: @@ -125,7 +125,7 @@ namespace CONTROL Gtk::TreeModel::Row append_row( const std::string& motion ); // 入力ダイアログを表示 - const std::string show_inputdiag( bool is_append ); + std::string show_inputdiag( bool is_append ); // 行をダブルクリック void slot_row_activated( const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column ); @@ -191,8 +191,8 @@ namespace CONTROL void append_comment_row( const std::string& comment ); virtual MouseKeyDiag* create_setting_diag( const int id, const std::string& str_motions ) = 0; - virtual const std::string get_str_motions( const int id ) = 0; - virtual const std::string get_default_motions( const int id ) = 0; + virtual std::string get_str_motions( const int id ) = 0; + virtual std::string get_default_motions( const int id ) = 0; virtual void set_motions( const int id, const std::string& str_motions ) = 0; virtual bool remove_motions( const int id ) = 0; diff --git a/src/control/mousepref.cpp b/src/control/mousepref.cpp index d7c995dc96..7c07f1fcfd 100644 --- a/src/control/mousepref.cpp +++ b/src/control/mousepref.cpp @@ -36,7 +36,7 @@ InputDiag* MouseDiag::create_inputdiag() } -const std::string MouseDiag::get_default_motions( const int id ) +std::string MouseDiag::get_default_motions( const int id ) { return CONTROL::get_default_mousemotions( id ); } @@ -118,13 +118,13 @@ MouseKeyDiag* MousePref::create_setting_diag( const int id, const std::string& s } -const std::string MousePref::get_str_motions( const int id ) +std::string MousePref::get_str_motions( const int id ) { return CONTROL::get_str_mousemotions( id ); } -const std::string MousePref::get_default_motions( const int id ) +std::string MousePref::get_default_motions( const int id ) { return CONTROL::get_default_mousemotions( id ); } diff --git a/src/control/mousepref.h b/src/control/mousepref.h index cfe835c2eb..e9acc8a326 100644 --- a/src/control/mousepref.h +++ b/src/control/mousepref.h @@ -39,7 +39,7 @@ namespace CONTROL protected: InputDiag* create_inputdiag() override; - const std::string get_default_motions( const int id ) override; + std::string get_default_motions( const int id ) override; const std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; }; @@ -59,8 +59,8 @@ namespace CONTROL protected: MouseKeyDiag* create_setting_diag( const int id, const std::string& str_motions ) override; - const std::string get_str_motions( const int id ) override; - const std::string get_default_motions( const int id ) override; + std::string get_str_motions( const int id ) override; + std::string get_default_motions( const int id ) override; void set_motions( const int id, const std::string& str_motions ) override; bool remove_motions( const int id ) override; diff --git a/src/dbimg/img.cpp b/src/dbimg/img.cpp index b08c08998d..0b87ba03cd 100644 --- a/src/dbimg/img.cpp +++ b/src/dbimg/img.cpp @@ -239,7 +239,7 @@ void Img::set_abone( bool abone ) } -const std::string Img::get_cache_path() +std::string Img::get_cache_path() { if( m_protect ) return CACHE::path_img_protect( m_url ); diff --git a/src/dbimg/img.h b/src/dbimg/img.h index a177923b41..c6a7c06cbc 100644 --- a/src/dbimg/img.h +++ b/src/dbimg/img.h @@ -62,7 +62,7 @@ namespace DBIMG void clear(); const std::string& url() const { return m_url; } - const std::string get_cache_path(); + std::string get_cache_path(); bool is_wait() const { return m_wait; } diff --git a/src/dbimg/imginterface.cpp b/src/dbimg/imginterface.cpp index 1506eb9e98..5bd35a6423 100644 --- a/src/dbimg/imginterface.cpp +++ b/src/dbimg/imginterface.cpp @@ -81,7 +81,7 @@ DBIMG::Img* DBIMG::get_img( const std::string& url ) } -const std::string DBIMG::get_cache_path( const std::string& url ) +std::string DBIMG::get_cache_path( const std::string& url ) { DBIMG::Img* img = DBIMG::get_img( url ); if( img ) return img->get_cache_path(); @@ -201,7 +201,7 @@ int DBIMG::get_code( const std::string& url ) } -const std::string DBIMG::get_str_code( const std::string& url ) +std::string DBIMG::get_str_code( const std::string& url ) { DBIMG::Img* img = DBIMG::get_img( url ); if( img ) return img->get_str_code(); @@ -261,7 +261,7 @@ void DBIMG::set_size( const std::string& url, int size ) } -const std::string DBIMG::get_refurl( const std::string& url ) +std::string DBIMG::get_refurl( const std::string& url ) { DBIMG::Img* img = DBIMG::get_img( url ); if( img ) return img->get_refurl(); diff --git a/src/dbimg/imginterface.h b/src/dbimg/imginterface.h index e93c0fd535..54de4e77cd 100644 --- a/src/dbimg/imginterface.h +++ b/src/dbimg/imginterface.h @@ -62,7 +62,7 @@ namespace DBIMG int get_type_real( const std::string& url ); DBIMG::Img* get_img( const std::string& url ); - const std::string get_cache_path( const std::string& url ); + std::string get_cache_path( const std::string& url ); // ロード開始 // refurl : 参照元のスレのアドレス @@ -86,7 +86,7 @@ namespace DBIMG bool is_loading( const std::string& url ); bool is_wait( const std::string& url ); int get_code( const std::string& url ); - const std::string get_str_code( const std::string& url ); + std::string get_str_code( const std::string& url ); bool get_mosaic( const std::string& url ); void set_mosaic( const std::string& url, bool mosaic ); void show_large_img( const std::string& url ); @@ -94,7 +94,7 @@ namespace DBIMG void set_zoom_to_fit( const std::string& url, bool fit ); int get_size( const std::string& url ); void set_size( const std::string& url, int size ); - const std::string get_refurl( const std::string& url ); + std::string get_refurl( const std::string& url ); size_t byte( const std::string& url ); size_t get_filesize( const std::string& url ); diff --git a/src/dbtree/article2ch.cpp b/src/dbtree/article2ch.cpp index d1b9a87337..0e38ab06f6 100644 --- a/src/dbtree/article2ch.cpp +++ b/src/dbtree/article2ch.cpp @@ -31,7 +31,7 @@ Article2ch::~Article2ch() noexcept // 書き込みメッセージ変換 -const std::string Article2ch::create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) +std::string Article2ch::create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) { if( msg.empty() ) return std::string(); @@ -82,7 +82,7 @@ const std::string Article2ch::create_write_message( const std::string& name, con // (例) "http://www.hoge2ch.net/test/bbs.cgi" // // -const std::string Article2ch::url_bbscgi() +std::string Article2ch::url_bbscgi() { if( CORE::get_loginp2()->login_now() ) return CONFIG::get_url_loginp2() + "post.php"; @@ -96,7 +96,7 @@ const std::string Article2ch::url_bbscgi() // // (例) "http://www.hoge2ch.net/test/subbbs.cgi" // -const std::string Article2ch::url_subbbscgi() +std::string Article2ch::url_subbbscgi() { if( CORE::get_loginp2()->login_now() ) return CONFIG::get_url_loginp2() + "post.php"; diff --git a/src/dbtree/article2ch.h b/src/dbtree/article2ch.h index 8d317b1946..ad84e40ba8 100644 --- a/src/dbtree/article2ch.h +++ b/src/dbtree/article2ch.h @@ -19,14 +19,14 @@ namespace DBTREE ~Article2ch() noexcept; // 書き込みメッセージ変換 - const std::string create_write_message( const std::string& name, const std::string& mail, - const std::string& msg ) override; + std::string create_write_message( const std::string& name, const std::string& mail, + const std::string& msg ) override; // bbscgi のURL - const std::string url_bbscgi() override; + std::string url_bbscgi() override; // subbbscgi のURL - const std::string url_subbbscgi() override; + std::string url_subbbscgi() override; protected: diff --git a/src/dbtree/article2chcompati.cpp b/src/dbtree/article2chcompati.cpp index bbb026352f..d00be05432 100644 --- a/src/dbtree/article2chcompati.cpp +++ b/src/dbtree/article2chcompati.cpp @@ -41,7 +41,7 @@ Article2chCompati::~Article2chCompati() noexcept // 書き込みメッセージ変換 -const std::string Article2chCompati::create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) +std::string Article2chCompati::create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) { if( msg.empty() ) return std::string(); @@ -73,7 +73,7 @@ const std::string Article2chCompati::create_write_message( const std::string& na // (例) "http://www.hoge2ch.net/test/bbs.cgi" // // -const std::string Article2chCompati::url_bbscgi() +std::string Article2chCompati::url_bbscgi() { std::string cgibase = DBTREE::url_bbscgibase( get_url() ); return cgibase.substr( 0, cgibase.length() -1 ); // 最後の '/' を除く @@ -86,7 +86,7 @@ const std::string Article2chCompati::url_bbscgi() // // (例) "http://www.hoge2ch.net/test/subbbs.cgi" // -const std::string Article2chCompati::url_subbbscgi() +std::string Article2chCompati::url_subbbscgi() { std::string cgibase = DBTREE::url_subbbscgibase( get_url() ); return cgibase.substr( 0, cgibase.length() -1 ); // 最後の '/' を除く diff --git a/src/dbtree/article2chcompati.h b/src/dbtree/article2chcompati.h index 2507f34197..2030730b3e 100644 --- a/src/dbtree/article2chcompati.h +++ b/src/dbtree/article2chcompati.h @@ -19,14 +19,14 @@ namespace DBTREE ~Article2chCompati() noexcept; // 書き込みメッセージ変換 - const std::string create_write_message( const std::string& name, const std::string& mail, - const std::string& msg ) override; + std::string create_write_message( const std::string& name, const std::string& mail, + const std::string& msg ) override; // bbscgi のURL - const std::string url_bbscgi() override; + std::string url_bbscgi() override; // subbbscgi のURL - const std::string url_subbbscgi() override; + std::string url_subbbscgi() override; private: diff --git a/src/dbtree/articlebase.cpp b/src/dbtree/articlebase.cpp index 9cbf9f177d..8b5549e369 100644 --- a/src/dbtree/articlebase.cpp +++ b/src/dbtree/articlebase.cpp @@ -137,7 +137,7 @@ bool ArticleBase::equal( const std::string& datbase, const std::string& id ) // // 移転する前のオリジナルのURL // -const std::string ArticleBase::get_org_url() +std::string ArticleBase::get_org_url() { std::string newhost = MISC::get_hostname( m_url ); return m_org_host + m_url.substr( newhost.length() ); @@ -185,7 +185,7 @@ NODE* ArticleBase::res_header( int number ) // // number番の名前 // -const std::string ArticleBase::get_name( int number ) +std::string ArticleBase::get_name( int number ) { return get_nodetree()->get_name( number ); } @@ -213,7 +213,7 @@ std::list< int > ArticleBase::get_res_name( const std::string& name ) // number番のレスの時刻を文字列で取得 // 内部で regex を使っているので遅い // -const std::string ArticleBase::get_time_str( int number ) +std::string ArticleBase::get_time_str( int number ) { return get_nodetree()->get_time_str( number ); } @@ -222,7 +222,7 @@ const std::string ArticleBase::get_time_str( int number ) // // number番の発言者ID // -const std::string ArticleBase::get_id_name( int number ) +std::string ArticleBase::get_id_name( int number ) { return get_nodetree()->get_id_name( number ); } @@ -334,7 +334,7 @@ const std::list< int > ArticleBase::get_res_query( const std::string& query, con // number番のレスの文字列を返す // ref == true なら先頭に ">" を付ける // -const std::string ArticleBase::get_res_str( int number, bool ref ) +std::string ArticleBase::get_res_str( int number, bool ref ) { return get_nodetree()->get_res_str( number, ref ); } @@ -343,7 +343,7 @@ const std::string ArticleBase::get_res_str( int number, bool ref ) // // number 番のレスの生文字列を返す // -const std::string ArticleBase::get_raw_res_str( int number ) +std::string ArticleBase::get_raw_res_str( int number ) { return get_nodetree()->get_raw_res_str( number ); } @@ -424,7 +424,7 @@ void ArticleBase::set_org_host( const std::string& host ) // // access_time を 文字列に変換して返す // -const std::string ArticleBase::get_access_time_str() +std::string ArticleBase::get_access_time_str() { return MISC::timevaltostr( m_access_time ); } diff --git a/src/dbtree/articlebase.h b/src/dbtree/articlebase.h index 215fdf86b9..fdac34f2d2 100644 --- a/src/dbtree/articlebase.h +++ b/src/dbtree/articlebase.h @@ -132,7 +132,7 @@ namespace DBTREE void update_datbase( const std::string& datbase ); // 移転する前のオリジナルのURL - const std::string get_org_url(); + std::string get_org_url(); // 移転する前のオリジナルのホスト名 const std::string& get_org_host() const { return m_org_host; } @@ -159,7 +159,7 @@ namespace DBTREE NODE* res_header( int number ); // number番のレスの発言者の名前 - const std::string get_name( int number ); + std::string get_name( int number ); // number番の名前の重複数( = 発言数 ) int get_num_name( int number ); @@ -169,10 +169,10 @@ namespace DBTREE // number番のレスの時刻を文字列で取得 // 内部で regex を使っているので遅い - const std::string get_time_str( int number ); + std::string get_time_str( int number ); // number番のレスの発言者ID( スレIDではなくて名前の横のID ) - const std::string get_id_name( int number ); + std::string get_id_name( int number ); // 指定した発言者ID の重複数( = 発言数 ) // (注) 下の get_num_id_name( int number )と違って検索するので遅い @@ -210,10 +210,10 @@ namespace DBTREE // number番のレスの文字列を返す // ref == true なら先頭に ">" を付ける - const std::string get_res_str( int number, bool ref = false ); + std::string get_res_str( int number, bool ref = false ); // number 番のレスの生文字列を返す - const std::string get_raw_res_str( int number ); + std::string get_raw_res_str( int number ); // 書き込み時の名前とメアド const std::string& get_write_name() const { return m_write_name; } @@ -227,17 +227,17 @@ namespace DBTREE void set_write_fixmail( bool set ){ m_save_info = true; m_write_fixmail = set; } // 書き込みメッセージ作成 - virtual const std::string create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) - { return std::string(); } + virtual std::string create_write_message( const std::string& name, const std::string& mail, + const std::string& msg ) { return {}; } // bbscgi のURL - virtual const std::string url_bbscgi() { return std::string(); } + virtual std::string url_bbscgi() { return std::string(); } // subbbscgi のURL - virtual const std::string url_subbbscgi() { return std::string(); } + virtual std::string url_subbbscgi() { return std::string(); } // 最終アクセス時間 - const std::string get_access_time_str(); + std::string get_access_time_str(); const time_t& get_access_time() const { return m_access_time.tv_sec; } // 秒 const std::string& get_access_date(); // string型 void reset_access_date(){ m_access_date = std::string(); } diff --git a/src/dbtree/articlejbbs.cpp b/src/dbtree/articlejbbs.cpp index c28d8c4b9e..04589056b5 100644 --- a/src/dbtree/articlejbbs.cpp +++ b/src/dbtree/articlejbbs.cpp @@ -31,7 +31,7 @@ ArticleJBBS::~ArticleJBBS() {} -const std::string ArticleJBBS::create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) +std::string ArticleJBBS::create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) { if( msg.empty() ) return std::string(); @@ -70,7 +70,7 @@ const std::string ArticleJBBS::create_write_message( const std::string& name, co // (例) "http://jbbs.shitaraba.net/bbs/write.cgi/computer/123/1234567/" // // -const std::string ArticleJBBS::url_bbscgi() +std::string ArticleJBBS::url_bbscgi() { return DBTREE::url_bbscgibase( get_url() ) + DBTREE::board_id( get_url() ) + "/" + get_key() + "/"; } @@ -81,7 +81,7 @@ const std::string ArticleJBBS::url_bbscgi() // // (例) "http://jbbs.shitaraba.net/bbs/write.cgi/computer/123/1234567/" // -const std::string ArticleJBBS::url_subbbscgi() +std::string ArticleJBBS::url_subbbscgi() { return DBTREE::url_subbbscgibase( get_url() ) + DBTREE::board_id( get_url() ) + "/" + get_key() + "/"; } diff --git a/src/dbtree/articlejbbs.h b/src/dbtree/articlejbbs.h index 10d99e03c0..e3a83d8746 100644 --- a/src/dbtree/articlejbbs.h +++ b/src/dbtree/articlejbbs.h @@ -21,14 +21,14 @@ namespace DBTREE ~ArticleJBBS(); // 書き込みメッセージ変換 - const std::string create_write_message( const std::string& name, const std::string& mail, - const std::string& msg ) override; + std::string create_write_message( const std::string& name, const std::string& mail, + const std::string& msg ) override; // bbscgi のURL - const std::string url_bbscgi() override; + std::string url_bbscgi() override; // subbbscgi のURL - const std::string url_subbbscgi() override; + std::string url_subbbscgi() override; private: diff --git a/src/dbtree/articlemachi.cpp b/src/dbtree/articlemachi.cpp index a51843efd4..3ede4c4cb4 100644 --- a/src/dbtree/articlemachi.cpp +++ b/src/dbtree/articlemachi.cpp @@ -34,7 +34,7 @@ ArticleMachi::~ArticleMachi() noexcept {} -const std::string ArticleMachi::create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) +std::string ArticleMachi::create_write_message( const std::string& name, const std::string& mail, const std::string& msg ) { if( msg.empty() ) return std::string(); @@ -66,7 +66,7 @@ const std::string ArticleMachi::create_write_message( const std::string& name, c // (例) "http://www.machi.to/bbs/write.cgi" // // -const std::string ArticleMachi::url_bbscgi() +std::string ArticleMachi::url_bbscgi() { std::string cgibase = DBTREE::url_bbscgibase( get_url() ); return cgibase.substr( 0, cgibase.length() -1 ); // 最後の '/' を除く @@ -78,7 +78,7 @@ const std::string ArticleMachi::url_bbscgi() // // (例) "http://www.machi.to/bbs/write.cgi" // -const std::string ArticleMachi::url_subbbscgi() +std::string ArticleMachi::url_subbbscgi() { std::string cgibase = DBTREE::url_subbbscgibase( get_url() ); return cgibase.substr( 0, cgibase.length() -1 ); // 最後の '/' を除く diff --git a/src/dbtree/articlemachi.h b/src/dbtree/articlemachi.h index 63d64b4981..3383f251c3 100644 --- a/src/dbtree/articlemachi.h +++ b/src/dbtree/articlemachi.h @@ -21,14 +21,14 @@ namespace DBTREE ~ArticleMachi() noexcept; // 書き込みメッセージ変換 - const std::string create_write_message( const std::string& name, const std::string& mail, - const std::string& msg ) override; + std::string create_write_message( const std::string& name, const std::string& mail, + const std::string& msg ) override; // bbscgi のURL - const std::string url_bbscgi() override; + std::string url_bbscgi() override; // subbbscgi のURL - const std::string url_subbbscgi() override; + std::string url_subbbscgi() override; private: diff --git a/src/dbtree/board2ch.cpp b/src/dbtree/board2ch.cpp index 07c7906af9..1b6925816c 100644 --- a/src/dbtree/board2ch.cpp +++ b/src/dbtree/board2ch.cpp @@ -52,7 +52,7 @@ const std::string& Board2ch::get_agent_w() // 読み込み用プロキシ -const std::string Board2ch::get_proxy_host() +std::string Board2ch::get_proxy_host() { const int mode = get_mode_local_proxy(); @@ -75,7 +75,7 @@ int Board2ch::get_proxy_port() return 0; } -const std::string Board2ch::get_proxy_basicauth() +std::string Board2ch::get_proxy_basicauth() { const int mode = get_mode_local_proxy(); @@ -87,7 +87,7 @@ const std::string Board2ch::get_proxy_basicauth() // 書き込み用プロキシ -const std::string Board2ch::get_proxy_host_w() +std::string Board2ch::get_proxy_host_w() { if( CORE::get_loginp2()->login_now() ){ @@ -118,7 +118,7 @@ int Board2ch::get_proxy_port_w() } -const std::string Board2ch::get_proxy_basicauth_w() +std::string Board2ch::get_proxy_basicauth_w() { if( CORE::get_loginp2()->login_now() ) return CONFIG::get_proxy_basicauth_for_data(); @@ -132,7 +132,7 @@ const std::string Board2ch::get_proxy_basicauth_w() //書き込み用クッキー作成 -const std::string Board2ch::cookie_for_write() +std::string Board2ch::cookie_for_write() { #ifdef _DEBUG std::cout << "Board2ch::cookie_for_write\n"; @@ -161,7 +161,7 @@ const std::string Board2ch::cookie_for_write() } -const std::string Board2ch::get_write_referer() +std::string Board2ch::get_write_referer() { // p2ログインの場合はとりあえず空文字 if( CORE::get_loginp2()->login_now() ) return std::string(); @@ -171,8 +171,8 @@ const std::string Board2ch::get_write_referer() // 新スレ作成時の書き込みメッセージ作成 -const std::string Board2ch::create_newarticle_message( const std::string& subject, - const std::string& name, const std::string& mail, const std::string& msg ) +std::string Board2ch::create_newarticle_message( const std::string& subject, const std::string& name, + const std::string& mail, const std::string& msg ) { if( subject.empty() ) return std::string(); if( msg.empty() ) return std::string(); @@ -225,7 +225,7 @@ const std::string Board2ch::create_newarticle_message( const std::string& subjec // (例) "http://www.hoge2ch.net/test/bbs.cgi" // // -const std::string Board2ch::url_bbscgi_new() +std::string Board2ch::url_bbscgi_new() { if( CORE::get_loginp2()->login_now() ) return CONFIG::get_url_loginp2() + "post.php"; @@ -238,7 +238,7 @@ const std::string Board2ch::url_bbscgi_new() // // (例) "http://www.hoge2ch.net/test/subbbs.cgi" // -const std::string Board2ch::url_subbbscgi_new() +std::string Board2ch::url_subbbscgi_new() { if( CORE::get_loginp2()->login_now() ) return CONFIG::get_url_loginp2() + "post.php"; @@ -271,7 +271,7 @@ ArticleBase* Board2ch::append_article( const std::string& datbase, const std::st // 2chのクッキー:HAP -const std::string Board2ch::get_hap() +std::string Board2ch::get_hap() { if( ! CONFIG::get_use_cookie_hap() ) return std::string(); diff --git a/src/dbtree/board2ch.h b/src/dbtree/board2ch.h index 25190cf589..14b2325a96 100644 --- a/src/dbtree/board2ch.h +++ b/src/dbtree/board2ch.h @@ -29,30 +29,30 @@ namespace DBTREE const std::string& get_agent_w() override; // 書き込み用 // 読み込み用プロキシ - const std::string get_proxy_host() override; + std::string get_proxy_host() override; int get_proxy_port() override; - const std::string get_proxy_basicauth() override; + std::string get_proxy_basicauth() override; // 書き込み用プロキシ - const std::string get_proxy_host_w() override; + std::string get_proxy_host_w() override; int get_proxy_port_w() override; - const std::string get_proxy_basicauth_w() override; + std::string get_proxy_basicauth_w() override; // 書き込み用クッキー - const std::string cookie_for_write() override; + std::string cookie_for_write() override; // 書き込み時のリファラ - const std::string get_write_referer() override; + std::string get_write_referer() override; // 新スレ作成用のメッセージ変換 - const std::string create_newarticle_message( const std::string& subject, const std::string& name, - const std::string& mail, const std::string& msg ) override; + std::string create_newarticle_message( const std::string& subject, const std::string& name, + const std::string& mail, const std::string& msg ) override; // 新スレ作成用のbbscgi のURL - const std::string url_bbscgi_new() override; + std::string url_bbscgi_new() override; // 新スレ作成用のsubbbscgi のURL - const std::string url_subbbscgi_new() override; + std::string url_subbbscgi_new() override; // datの最大サイズ(Kバイト) int get_max_dat_lng() const override { return DEFAULT_MAX_DAT_LNG; } @@ -60,7 +60,7 @@ namespace DBTREE protected: // クッキー:HAP - const std::string get_hap() override; + std::string get_hap() override; void set_hap( const std::string& hap ) override; // クッキー:HAPの更新 (クッキーをセットした時に実行) diff --git a/src/dbtree/board2chcompati.cpp b/src/dbtree/board2chcompati.cpp index 6c18de0ecb..b336427311 100644 --- a/src/dbtree/board2chcompati.cpp +++ b/src/dbtree/board2chcompati.cpp @@ -88,7 +88,7 @@ bool Board2chCompati::is_valid( const std::string& filename ) //書き込み用クッキー作成 -const std::string Board2chCompati::cookie_for_write() +std::string Board2chCompati::cookie_for_write() { const std::list< std::string > list_cookies = BoardBase::list_cookies_for_write(); if( list_cookies.empty() ) return std::string(); @@ -252,7 +252,7 @@ void Board2chCompati::analyze_keyword_for_write( const std::string& html ) // 新スレ作成時の書き込みメッセージ作成 -const std::string Board2chCompati::create_newarticle_message( const std::string& subject, +std::string Board2chCompati::create_newarticle_message( const std::string& subject, const std::string& name, const std::string& mail, const std::string& msg ) { if( subject.empty() ) return std::string(); @@ -283,7 +283,7 @@ const std::string Board2chCompati::create_newarticle_message( const std::string& // (例) "http://www.hoge2ch.net/test/bbs.cgi" // // -const std::string Board2chCompati::url_bbscgi_new() +std::string Board2chCompati::url_bbscgi_new() { std::string cgibase = url_bbscgibase(); return cgibase.substr( 0, cgibase.length() -1 ); // 最後の '/' を除く @@ -295,7 +295,7 @@ const std::string Board2chCompati::url_bbscgi_new() // // (例) "http://www.hoge2ch.net/test/subbbs.cgi" // -const std::string Board2chCompati::url_subbbscgi_new() +std::string Board2chCompati::url_subbbscgi_new() { std::string cgibase = url_subbbscgibase(); return cgibase.substr( 0, cgibase.length() -1 ); // 最後の '/' を除く @@ -481,7 +481,7 @@ void Board2chCompati::regist_article( const bool is_online ) } -const std::string Board2chCompati::localrule() +std::string Board2chCompati::localrule() { if( m_ruleloader ){ if( m_ruleloader->is_loading() ) return "ロード中です"; @@ -496,7 +496,7 @@ const std::string Board2chCompati::localrule() } -const std::string Board2chCompati::settingtxt() +std::string Board2chCompati::settingtxt() { if( m_settingloader ){ if( m_settingloader->is_loading() ) return "ロード中です"; @@ -511,7 +511,7 @@ const std::string Board2chCompati::settingtxt() } -const std::string Board2chCompati::default_noname() +std::string Board2chCompati::default_noname() { if( m_settingloader && m_settingloader->get_code() == HTTP_OK ) return m_settingloader->default_noname(); @@ -538,7 +538,7 @@ int Board2chCompati::message_count() } -const std::string Board2chCompati::get_unicode() +std::string Board2chCompati::get_unicode() { if( m_settingloader && m_settingloader->get_code() == HTTP_OK ) return m_settingloader->get_unicode(); diff --git a/src/dbtree/board2chcompati.h b/src/dbtree/board2chcompati.h index 1ad123d54d..f056092c81 100644 --- a/src/dbtree/board2chcompati.h +++ b/src/dbtree/board2chcompati.h @@ -25,31 +25,31 @@ namespace DBTREE ~Board2chCompati(); // 書き込み用クッキー - const std::string cookie_for_write() override; + std::string cookie_for_write() override; // 書き込み時に必要なキーワード( hana=mogera や suka=pontan など )を // 確認画面のhtmlから解析する void analyze_keyword_for_write( const std::string& html ) override; // 新スレ作成用のメッセージ変換 - const std::string create_newarticle_message( const std::string& subject, const std::string& name, - const std::string& mail, const std::string& msg ) override; + std::string create_newarticle_message( const std::string& subject, const std::string& name, + const std::string& mail, const std::string& msg ) override; // 新スレ作成用のbbscgi のURL - const std::string url_bbscgi_new() override; + std::string url_bbscgi_new() override; // 新スレ作成用のsubbbscgi のURL - const std::string url_subbbscgi_new() override; + std::string url_subbbscgi_new() override; // ローカルルール - const std::string localrule() override; + std::string localrule() override; // SETTING.TXT - const std::string settingtxt() override; - const std::string default_noname() override; + std::string settingtxt() override; + std::string default_noname() override; int line_number() override; int message_count() override; - const std::string get_unicode() override; + std::string get_unicode() override; private: diff --git a/src/dbtree/boardbase.cpp b/src/dbtree/boardbase.cpp index a3d8c2b2ac..80339d73fb 100644 --- a/src/dbtree/boardbase.cpp +++ b/src/dbtree/boardbase.cpp @@ -165,7 +165,7 @@ const std::string& BoardBase::get_agent_w() // 読み込み用プロキシ -const std::string BoardBase::get_proxy_host() +std::string BoardBase::get_proxy_host() { const int mode = get_mode_local_proxy(); @@ -188,7 +188,7 @@ int BoardBase::get_proxy_port() return 0; } -const std::string BoardBase::get_proxy_basicauth() +std::string BoardBase::get_proxy_basicauth() { const int mode = get_mode_local_proxy(); @@ -200,7 +200,7 @@ const std::string BoardBase::get_proxy_basicauth() // 書き込み用プロキシ -const std::string BoardBase::get_proxy_host_w() +std::string BoardBase::get_proxy_host_w() { const int mode = get_mode_local_proxy_w(); @@ -224,7 +224,7 @@ int BoardBase::get_proxy_port_w() } -const std::string BoardBase::get_proxy_basicauth_w() +std::string BoardBase::get_proxy_basicauth_w() { const int mode = get_mode_local_proxy_w(); @@ -236,20 +236,20 @@ const std::string BoardBase::get_proxy_basicauth_w() // ローカルルール -const std::string BoardBase::localrule() +std::string BoardBase::localrule() { return "利用できません"; } // setting.txt -const std::string BoardBase::settingtxt() +std::string BoardBase::settingtxt() { return "利用できません"; } // デフォルトの名無し名 -const std::string BoardBase::default_noname() +std::string BoardBase::default_noname() { return "???"; } @@ -270,14 +270,14 @@ int BoardBase::message_count() // 特殊文字書き込み可能か( pass なら可能、 change なら不可 ) -const std::string BoardBase::get_unicode() +std::string BoardBase::get_unicode() { - return ""; + return {}; } //書き込み用クッキー -const std::string BoardBase::cookie_for_write() +std::string BoardBase::cookie_for_write() { if( m_list_cookies_for_write.empty() ) return std::string(); @@ -570,7 +570,7 @@ void BoardBase::update_url( const std::string& root, const std::string& path_boa // // 戻り値 : "http://www.hoge2ch.net/hogeboard/dat/12345.dat", num_from = 12, num_to = 15, num_str = "12-15" // -const std::string BoardBase::url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) +std::string BoardBase::url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) { if( empty() ) return std::string(); @@ -719,7 +719,7 @@ const std::string BoardBase::url_dat( const std::string& url, int& num_from, int // // 戻り値 : "http://www.hoge2ch.net/test/read.cgi/hogeboard/12345/12-15" // -const std::string BoardBase::url_readcgi( const std::string& url, int num_from, int num_to ) +std::string BoardBase::url_readcgi( const std::string& url, int num_from, int num_to ) { if( empty() ) return std::string(); @@ -757,7 +757,7 @@ const std::string BoardBase::url_readcgi( const std::string& url, int num_from, // // (例) "http://www.hoge2ch.net/hogeboard/subject.txt" // -const std::string BoardBase::url_subject() +std::string BoardBase::url_subject() { if( empty() ) return std::string(); @@ -771,7 +771,7 @@ const std::string BoardBase::url_subject() // // (例) "http://www.hoge2ch.net/" (最後に '/' がつく) // -const std::string BoardBase::url_root() +std::string BoardBase::url_root() { if( empty() ) return std::string(); @@ -784,7 +784,7 @@ const std::string BoardBase::url_root() // // (例) "http://www.hoge2ch.net/hogeboard/" (最後に '/' がつく) // -const std::string BoardBase::url_boardbase() +std::string BoardBase::url_boardbase() { if( empty() ) return std::string(); @@ -797,7 +797,7 @@ const std::string BoardBase::url_boardbase() // // (例) "http://www.hoge2ch.net/hogeboard/dat/" (最後に '/' がつく) // -const std::string BoardBase::url_datbase() +std::string BoardBase::url_datbase() { if( empty() ) return std::string(); @@ -810,7 +810,7 @@ const std::string BoardBase::url_datbase() // // (例) "/hogeboard/dat/" (最初と最後に '/' がつく) // -const std::string BoardBase::url_datpath() +std::string BoardBase::url_datpath() { if( empty() ) return std::string(); @@ -824,7 +824,7 @@ const std::string BoardBase::url_datpath() // // (例) "http://www.hoge2ch.net/test/read.cgi/hogeboard/" (最後に '/' がつく) // -const std::string BoardBase::url_readcgibase() +std::string BoardBase::url_readcgibase() { if( empty() ) return std::string(); @@ -837,7 +837,7 @@ const std::string BoardBase::url_readcgibase() // // (例) "/test/read.cgi/hogeboard/" (最初と最後に '/' がつく) // -const std::string BoardBase::url_readcgipath() +std::string BoardBase::url_readcgipath() { if( empty() ) return std::string(); @@ -851,7 +851,7 @@ const std::string BoardBase::url_readcgipath() // (例) "http://www.hoge2ch.net/test/bbs.cgi/" ( 最後に '/' がつく ) // // -const std::string BoardBase::url_bbscgibase() +std::string BoardBase::url_bbscgibase() { if( empty() ) return std::string(); @@ -864,7 +864,7 @@ const std::string BoardBase::url_bbscgibase() // // (例) "http://www.hoge2ch.net/test/subbbs.cgi/" ( 最後に '/' がつく ) // -const std::string BoardBase::url_subbbscgibase() +std::string BoardBase::url_subbbscgibase() { if( empty() ) return std::string(); @@ -1930,7 +1930,7 @@ void BoardBase::search_cache( std::vector< DBTREE::ArticleBase* >& list_article, // datファイルのインポート // 成功したらdat型のurlを返す -const std::string BoardBase::import_dat( const std::string& filename ) +std::string BoardBase::import_dat( const std::string& filename ) { if( empty() ) return std::string(); if( CACHE::file_exists( filename ) != CACHE::EXIST_FILE ){ diff --git a/src/dbtree/boardbase.h b/src/dbtree/boardbase.h index 8e6a4d132a..bf59d5aa70 100644 --- a/src/dbtree/boardbase.h +++ b/src/dbtree/boardbase.h @@ -237,7 +237,7 @@ namespace DBTREE void send_update_board(); // クッキー:HAP - virtual const std::string get_hap(){ return std::string(); } + virtual std::string get_hap(){ return std::string(); } virtual void set_hap( const std::string& hap ){} // クッキー:HAPの更新 (クッキーをセットした時に実行) @@ -302,23 +302,23 @@ namespace DBTREE virtual const std::string& get_agent_w(); // 書き込み用 // ダウンロード時のプロキシ - virtual const std::string get_proxy_host(); + virtual std::string get_proxy_host(); virtual int get_proxy_port(); - virtual const std::string get_proxy_basicauth(); + virtual std::string get_proxy_basicauth(); // 書き込み時のプロキシ - virtual const std::string get_proxy_host_w(); + virtual std::string get_proxy_host_w(); virtual int get_proxy_port_w(); - virtual const std::string get_proxy_basicauth_w(); + virtual std::string get_proxy_basicauth_w(); // ローカルルール - virtual const std::string localrule(); + virtual std::string localrule(); // SETTING.TXT - virtual const std::string settingtxt(); + virtual std::string settingtxt(); // 書き込みの時のデフォルト名 - virtual const std::string default_noname(); + virtual std::string default_noname(); // 最大改行数/2 virtual int line_number(); @@ -327,10 +327,10 @@ namespace DBTREE virtual int message_count(); // 特殊文字書き込み可能か( pass なら可能、 change なら不可 ) - virtual const std::string get_unicode(); + virtual std::string get_unicode(); // 書き込み用クッキー - virtual const std::string cookie_for_write(); + virtual std::string cookie_for_write(); const std::list< std::string >& list_cookies_for_write() { return m_list_cookies_for_write; } void set_list_cookies_for_write( const std::list< std::string >& list_cookies ); void reset_list_cookies_for_write(){ m_list_cookies_for_write.clear(); } @@ -345,7 +345,7 @@ namespace DBTREE virtual void analyze_keyword_for_write( const std::string& html ){} // 書き込み時のリファラ - virtual const std::string get_write_referer(){ return url_boardbase(); } + virtual std::string get_write_referer(){ return url_boardbase(); } // basic認証 const std::string& get_basicauth() const { return m_basicauth; } @@ -356,50 +356,50 @@ namespace DBTREE // もしurlが移転前の旧ホストのものだったら対応するarticlebaseクラスに旧ホスト名を知らせる // (例) url = "http://www.hoge2ch.net/test/read.cgi/hogeboard/12345/12-15"のとき、 // "http://www.hoge2ch.net/hogeboard/dat/12345.dat", num_from = 12, num_to = 15, num_str = "12-15" - virtual const std::string url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ); + virtual std::string url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ); // スレの url を read.cgi型のurlに変換 // url がスレッドのURLで無い時はempty()が返る // num_from と num_to が 0 で無い時はスレ番号を付ける // (例) "http://www.hoge2ch.net/hogeboard/dat/12345.dat", num_from = 12, num_to = 15 のとき // "http://www.hoge2ch.net/test/read.cgi/hogeboard/12345/12-15" - virtual const std::string url_readcgi( const std::string& url, int num_from, int num_to ); + virtual std::string url_readcgi( const std::string& url, int num_from, int num_to ); // subject.txt の URLを取得 // (例) "http://www.hoge2ch.net/hogeboard/subject.txt" - const std::string url_subject(); + std::string url_subject(); // ルートアドレス // (例) "http://www.hoge2ch.net/hogeboard/" なら "http://www.hoge2ch.net/" - const std::string url_root(); + std::string url_root(); // 板のベースアドレス // (例) "http://www.hoge2ch.net/hogeboard/" - const std::string url_boardbase(); + std::string url_boardbase(); // dat ファイルのURLのベースアドレスを返す // (例) "http://www.hoge2ch.net/hogeboard/dat/12345.dat" なら "http://www.hoge2ch.net/hogeboard/dat/" - const std::string url_datbase(); + std::string url_datbase(); // dat ファイルのURLのパスを返す // (例) "http://www.hoge2ch.net/hogeboard/dat/12345.dat" なら "/hogeboard/dat/" - virtual const std::string url_datpath(); + virtual std::string url_datpath(); // read.cgi のURLのベースアドレスを返す // (例) "http://www.hoge2ch.net/test/read.cgi/hogeboard/12345" なら "http://www.hoge2ch.net/test/read.cgi/hogeboard/" - const std::string url_readcgibase(); + std::string url_readcgibase(); // read.cgi のURLのパスを返す // (例) "http://www.hoge2ch.net/test/read.cgi/hogeboard/12345" なら "/test/read.cgi/hogeboard/" - const std::string url_readcgipath(); + std::string url_readcgipath(); // bbscgi のURLのベースアドレス // (例) "http://www.hoge2ch.net/test/bbs.cgi/" ( 最後に '/' がつく ) - const std::string url_bbscgibase(); - + std::string url_bbscgibase(); + // subbbscgi のURLのベースアドレス // (例) "http://www.hoge2ch.net/test/subbbs.cgi/" ( 最後に '/' がつく ) - const std::string url_subbbscgibase(); + std::string url_subbbscgibase(); // article クラスのポインタ取得 ArticleBase* get_article_fromURL( const std::string& url ); @@ -410,17 +410,17 @@ namespace DBTREE virtual void download_subject( const std::string& url_update_view, const bool read_from_cache ); // 新スレ作成用のメッセージ変換 - virtual const std::string create_newarticle_message( const std::string& subject, - const std::string& name, const std::string& mail, const std::string& msg ) + virtual std::string create_newarticle_message( const std::string& subject, const std::string& name, + const std::string& mail, const std::string& msg ) { - return std::string(); + return {}; } // 新スレ作成用のbbscgi のURL - virtual const std::string url_bbscgi_new() { return std::string(); } + virtual std::string url_bbscgi_new() { return {}; } // 新スレ作成用のsubbbscgi のURL - virtual const std::string url_subbbscgi_new() { return std::string(); } + virtual std::string url_subbbscgi_new() { return {}; } // 配下の全articlebaseクラスのあぼーん状態の更新 void update_abone_all_article(); @@ -546,7 +546,7 @@ namespace DBTREE // datファイルのインポート // 成功したらdat型のurlを返す - virtual const std::string import_dat( const std::string& filename ); + virtual std::string import_dat( const std::string& filename ); // 更新可能状態にしてお気に入りやスレ一覧のタブのアイコンに更新マークを表示 // update == true の時に表示。falseなら戻す diff --git a/src/dbtree/boardjbbs.cpp b/src/dbtree/boardjbbs.cpp index a0236a1226..5c6c749504 100644 --- a/src/dbtree/boardjbbs.cpp +++ b/src/dbtree/boardjbbs.cpp @@ -81,7 +81,7 @@ ArticleBase* BoardJBBS::append_article( const std::string& datbase, const std::s // // (例) "/bbs/rawmode.cgi/board/" (最初と最後に '/' がつく) // -const std::string BoardJBBS::url_datpath() +std::string BoardJBBS::url_datpath() { if( empty() ) return std::string(); @@ -90,8 +90,8 @@ const std::string BoardJBBS::url_datpath() -const std::string BoardJBBS::create_newarticle_message( const std::string& subject, - const std::string& name, const std::string& mail, const std::string& msg ) +std::string BoardJBBS::create_newarticle_message( const std::string& subject, const std::string& name, + const std::string& mail, const std::string& msg ) { if( subject.empty() ) return std::string(); if( msg.empty() ) return std::string(); @@ -127,7 +127,7 @@ const std::string BoardJBBS::create_newarticle_message( const std::string& subje // (例) "http://jbbs.shitaraba.net/bbs/write.cgi/computer/123/new/" // // -const std::string BoardJBBS::url_bbscgi_new() +std::string BoardJBBS::url_bbscgi_new() { return url_bbscgibase() + get_id() + "/new/"; } @@ -138,7 +138,7 @@ const std::string BoardJBBS::url_bbscgi_new() // // (例) "http://jbbs.shitaraba.net/bbs/write.cgi/computer/123/new/" // -const std::string BoardJBBS::url_subbbscgi_new() +std::string BoardJBBS::url_subbbscgi_new() { return url_subbbscgibase() + get_id() + "/new/"; } diff --git a/src/dbtree/boardjbbs.h b/src/dbtree/boardjbbs.h index 8ceceba6de..7c2ec95b24 100644 --- a/src/dbtree/boardjbbs.h +++ b/src/dbtree/boardjbbs.h @@ -17,17 +17,17 @@ namespace DBTREE BoardJBBS( const std::string& root, const std::string& path_board,const std::string& name ); - const std::string url_datpath() override; + std::string url_datpath() override; // 新スレ作成用のメッセージ変換 - const std::string create_newarticle_message( const std::string& subject, const std::string& name, - const std::string& mail, const std::string& msg ) override; + std::string create_newarticle_message( const std::string& subject, const std::string& name, + const std::string& mail, const std::string& msg ) override; // 新スレ作成用のbbscgi のURL - const std::string url_bbscgi_new() override; + std::string url_bbscgi_new() override; // 新スレ作成用のsubbbscgi のURL - const std::string url_subbbscgi_new() override; + std::string url_subbbscgi_new() override; private: diff --git a/src/dbtree/boardlocal.cpp b/src/dbtree/boardlocal.cpp index 190ec0f1a8..9d44c76f70 100644 --- a/src/dbtree/boardlocal.cpp +++ b/src/dbtree/boardlocal.cpp @@ -40,7 +40,7 @@ bool BoardLocal::equal( const std::string& url ) // そのまま出力 -const std::string BoardLocal::url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) +std::string BoardLocal::url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) { num_from = 0; num_to = 0; @@ -51,7 +51,7 @@ const std::string BoardLocal::url_dat( const std::string& url, int& num_from, in // そのまま出力 -const std::string BoardLocal::url_readcgi( const std::string& url, int num_from, int num_to ) +std::string BoardLocal::url_readcgi( const std::string& url, int num_from, int num_to ) { JDLIB::Regex regex; const size_t offset = 0; @@ -101,7 +101,7 @@ ArticleBase* BoardLocal::append_article( const std::string& datbase, const std:: // datファイルのインポート -const std::string BoardLocal::import_dat( const std::string& filename ) +std::string BoardLocal::import_dat( const std::string& filename ) { if( empty() ) return FALSE; if( CACHE::file_exists( filename ) != CACHE::EXIST_FILE ) return std::string(); diff --git a/src/dbtree/boardlocal.h b/src/dbtree/boardlocal.h index 65da47872e..0171d4480a 100644 --- a/src/dbtree/boardlocal.h +++ b/src/dbtree/boardlocal.h @@ -21,8 +21,8 @@ namespace DBTREE // url がこの板のものかどうか bool equal( const std::string& url ) override; - const std::string url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) override; - const std::string url_readcgi( const std::string& url, int num_from, int num_to ) override; + std::string url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) override; + std::string url_readcgi( const std::string& url, int num_from, int num_to ) override; void download_subject( const std::string& url_update_view, const bool ) override; @@ -35,7 +35,7 @@ namespace DBTREE const bool& ) override {} // datファイルのインポート - const std::string import_dat( const std::string& filename ) override; + std::string import_dat( const std::string& filename ) override; private: diff --git a/src/dbtree/boardmachi.cpp b/src/dbtree/boardmachi.cpp index 349de7e633..f68af9e04b 100644 --- a/src/dbtree/boardmachi.cpp +++ b/src/dbtree/boardmachi.cpp @@ -98,7 +98,7 @@ ArticleBase* BoardMachi::append_article( const std::string& datbase, const std:: // (例) "http://hoge.machi.to/bbs/read.cgi?BBS=board&KEY=12345&START=12&END=15"" のとき // 戻り値 : "http://hoge.machi.to/bbs/read.cgi?BBS=board&KEY=12345", num_from = 12, num_to = 15, num_str = 12-15 // -const std::string BoardMachi::url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) +std::string BoardMachi::url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) { if( empty() ) return std::string(); @@ -167,7 +167,7 @@ const std::string BoardMachi::url_dat( const std::string& url, int& num_from, in // // (例) "/bbs/read.cgi?BBS=board&KEY=" (最初に '/' がつく) // -const std::string BoardMachi::url_datpath() +std::string BoardMachi::url_datpath() { if( empty() ) return std::string(); @@ -175,8 +175,8 @@ const std::string BoardMachi::url_datpath() } -const std::string BoardMachi::create_newarticle_message( const std::string& subject, - const std::string& name, const std::string& mail, const std::string& msg ) +std::string BoardMachi::create_newarticle_message( const std::string& subject, const std::string& name, + const std::string& mail, const std::string& msg ) { if( subject.empty() ) return std::string(); if( msg.empty() ) return std::string(); @@ -189,7 +189,7 @@ const std::string BoardMachi::create_newarticle_message( const std::string& subj // // 新スレ作成時のbbscgi(write.cgi) のURL // -const std::string BoardMachi::url_bbscgi_new() +std::string BoardMachi::url_bbscgi_new() { return std::string(); } @@ -198,7 +198,7 @@ const std::string BoardMachi::url_bbscgi_new() // // 新スレ作成時のsubbbscgi のURL // -const std::string BoardMachi::url_subbbscgi_new() +std::string BoardMachi::url_subbbscgi_new() { return std::string(); } diff --git a/src/dbtree/boardmachi.h b/src/dbtree/boardmachi.h index e8e9c89273..f382fccf14 100644 --- a/src/dbtree/boardmachi.h +++ b/src/dbtree/boardmachi.h @@ -23,19 +23,19 @@ namespace DBTREE // スレの url を dat型のurlに変換して出力 // (例) "http://hoge.machi.to/bbs/read.cgi?BBS=board&KEY=12345&START=12&END=15"" のとき // 戻り値 : "http://hoge.machi.to/bbs/read.cgi?BBS=board&KEY=12345", num_from = 12, num_to = 15, num_str = 12-15 - const std::string url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) override; + std::string url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) override; - const std::string url_datpath() override; + std::string url_datpath() override; // 新スレ作成用のメッセージ変換 - const std::string create_newarticle_message( const std::string& subject, const std::string& name, - const std::string& mail, const std::string& msg ) override; + std::string create_newarticle_message( const std::string& subject, const std::string& name, + const std::string& mail, const std::string& msg ) override; // 新スレ作成用のbbscgi のURL - const std::string url_bbscgi_new() override; - + std::string url_bbscgi_new() override; + // 新スレ作成用のsubbbscgi のURL - const std::string url_subbbscgi_new() override; + std::string url_subbbscgi_new() override; private: diff --git a/src/dbtree/interface.cpp b/src/dbtree/interface.cpp index 8c82e6ad47..a9560e645c 100644 --- a/src/dbtree/interface.cpp +++ b/src/dbtree/interface.cpp @@ -60,39 +60,39 @@ DBTREE::ArticleBase* DBTREE::get_article( const std::string& url ) ////////////////////////////////////// -const std::string DBTREE::url_subject( const std::string& url ) +std::string DBTREE::url_subject( const std::string& url ) { return DBTREE::get_board( url )->url_subject(); } -const std::string DBTREE::url_root( const std::string& url ) +std::string DBTREE::url_root( const std::string& url ) { return DBTREE::get_board( url )->url_root(); } -const std::string DBTREE::url_boardbase( const std::string& url ) +std::string DBTREE::url_boardbase( const std::string& url ) { return DBTREE::get_board( url )->url_boardbase(); } -const std::string DBTREE::url_datbase( const std::string& url ) +std::string DBTREE::url_datbase( const std::string& url ) { return DBTREE::get_board( url )->url_datbase(); } // urlをdat型のurlに変換 -const std::string DBTREE::url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) +std::string DBTREE::url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ) { return DBTREE::get_board( url )->url_dat( url, num_from, num_to, num_str ); } // urlをdat型のurlに変換(簡易版) -const std::string DBTREE::url_dat( const std::string& url ) +std::string DBTREE::url_dat( const std::string& url ) { int num_from, num_to; std::string num_str; @@ -101,56 +101,55 @@ const std::string DBTREE::url_dat( const std::string& url ) // url を read.cgi型のurlに変換 -const std::string DBTREE::url_readcgi( const std::string& url, int num_from, int num_to ) +std::string DBTREE::url_readcgi( const std::string& url, int num_from, int num_to ) { return DBTREE::get_board( url )->url_readcgi( url, num_from, num_to ); } -const std::string DBTREE::url_bbscgibase( const std::string& url ) +std::string DBTREE::url_bbscgibase( const std::string& url ) { return DBTREE::get_board( url )->url_bbscgibase(); } -const std::string DBTREE::url_subbbscgibase( const std::string& url ) +std::string DBTREE::url_subbbscgibase( const std::string& url ) { return DBTREE::get_board( url )->url_subbbscgibase(); } -const std::string DBTREE::url_bbscgi( const std::string& url ) +std::string DBTREE::url_bbscgi( const std::string& url ) { return DBTREE::get_article( url )->url_bbscgi(); } -const std::string DBTREE::url_subbbscgi( const std::string& url ) +std::string DBTREE::url_subbbscgi( const std::string& url ) { return DBTREE::get_article( url )->url_subbbscgi(); } -const std::string DBTREE::url_bbscgi_new( const std::string& url ) +std::string DBTREE::url_bbscgi_new( const std::string& url ) { return DBTREE::get_board( url )->url_bbscgi_new(); } -const std::string DBTREE::url_subbbscgi_new( const std::string& url ) +std::string DBTREE::url_subbbscgi_new( const std::string& url ) { return DBTREE::get_board( url )->url_subbbscgi_new(); } // 簡易版 -const std::string DBTREE::is_board_moved( const std::string& url ) +std::string DBTREE::is_board_moved( const std::string& url ) { return get_root()->is_board_moved( url ); } -const std::string DBTREE::is_board_moved( const std::string& url, - std::string& old_root, - std::string& old_path_board, - std::string& new_root, - std::string& new_path_board - ) +std::string DBTREE::is_board_moved( const std::string& url, + std::string& old_root, + std::string& old_path_board, + std::string& new_root, + std::string& new_path_board ) { return get_root()->is_board_moved( url, old_root, old_path_board, new_root, new_path_board ); } @@ -218,7 +217,7 @@ void DBTREE::download_bbsmenu() // bbsmenuの更新時間( 文字列 ) -const std::string DBTREE::get_date_modified() +std::string DBTREE::get_date_modified() { return get_root()->get_date_modified(); } @@ -231,13 +230,13 @@ time_t DBTREE::get_time_modified() } -const std::string DBTREE::board_path( const std::string& url ) +std::string DBTREE::board_path( const std::string& url ) { return DBTREE::get_board( url )->get_path_board(); } -const std::string DBTREE::board_id( const std::string& url ) +std::string DBTREE::board_id( const std::string& url ) { return DBTREE::get_board( url )->get_id(); } @@ -249,7 +248,7 @@ time_t DBTREE::board_time_modified( const std::string& url ) } // 板の更新時間( 文字列 ) -const std::string DBTREE::board_date_modified( const std::string& url ) +std::string DBTREE::board_date_modified( const std::string& url ) { return DBTREE::get_board( url )->get_date_modified(); } @@ -281,25 +280,25 @@ void DBTREE::board_set_modified_setting( const std::string& url, const std::stri } -const std::string DBTREE::board_name( const std::string& url ) +std::string DBTREE::board_name( const std::string& url ) { return DBTREE::get_board( url )->get_name(); } -const std::string DBTREE::board_subjecttxt( const std::string& url ) +std::string DBTREE::board_subjecttxt( const std::string& url ) { return DBTREE::get_board( url )->get_subjecttxt(); } -const std::string DBTREE::board_charset( const std::string& url ) +std::string DBTREE::board_charset( const std::string& url ) { return DBTREE::get_board( url )->get_charset(); } -const std::string DBTREE::board_cookie_for_write( const std::string& url ) +std::string DBTREE::board_cookie_for_write( const std::string& url ) { return DBTREE::get_board( url )->cookie_for_write(); } @@ -321,7 +320,7 @@ void DBTREE::board_reset_list_cookies_for_write( const std::string& url ) DBTREE::get_board( url )->reset_list_cookies_for_write(); } -const std::string DBTREE::board_keyword_for_write( const std::string& url ) +std::string DBTREE::board_keyword_for_write( const std::string& url ) { return DBTREE::get_board( url )->get_keyword_for_write(); } @@ -339,13 +338,13 @@ void DBTREE::board_analyze_keyword_for_write( const std::string& url, const std: } -const std::string DBTREE::board_basicauth( const std::string& url ) +std::string DBTREE::board_basicauth( const std::string& url ) { return DBTREE::get_board( url )->get_basicauth(); } -const std::string DBTREE::board_ext( const std::string& url ) +std::string DBTREE::board_ext( const std::string& url ) { return DBTREE::get_board( url )->get_ext(); } @@ -363,7 +362,7 @@ int DBTREE::board_code( const std::string& url ) } -const std::string DBTREE::board_str_code( const std::string& url ) +std::string DBTREE::board_str_code( const std::string& url ) { return DBTREE::get_board( url )->get_str_code(); } @@ -626,7 +625,7 @@ const std::list< std::string > DBTREE::board_get_check_update_articles( const st } // datファイルのインポート -const std::string DBTREE::board_import_dat( const std::string& url, const std::string& filename ) +std::string DBTREE::board_import_dat( const std::string& url, const std::string& filename ) { return DBTREE::get_board( url )->import_dat( filename ); } @@ -785,21 +784,21 @@ bool DBTREE::article_is_cached( const std::string& url ) // 拡張子付き -const std::string DBTREE::article_id( const std::string& url ) +std::string DBTREE::article_id( const std::string& url ) { return DBTREE::get_article( url )->get_id(); } // idから拡張子を取ったもの -const std::string DBTREE::article_key( const std::string& url ) +std::string DBTREE::article_key( const std::string& url ) { return DBTREE::get_article( url )->get_key(); } // 移転する前のオリジナルのURL -const std::string DBTREE::article_org_host( const std::string& url ) +std::string DBTREE::article_org_host( const std::string& url ) { return DBTREE::get_article( url )->get_org_host(); } @@ -811,7 +810,7 @@ time_t DBTREE::article_since_time( const std::string& url ) } -const std::string DBTREE::article_since_date( const std::string& url ) +std::string DBTREE::article_since_date( const std::string& url ) { return DBTREE::get_article( url )->get_since_date(); } @@ -825,7 +824,7 @@ time_t DBTREE::article_time_modified( const std::string& url ) // スレの更新時間( 文字列 ) -const std::string DBTREE::article_date_modified( const std::string& url ) +std::string DBTREE::article_date_modified( const std::string& url ) { return DBTREE::get_article( url )->get_date_modified(); } @@ -849,7 +848,7 @@ time_t DBTREE::article_write_time( const std::string& url ) } // 最終書き込み時刻(文字列) -const std::string DBTREE::article_write_date( const std::string& url ) +std::string DBTREE::article_write_date( const std::string& url ) { return DBTREE::get_article( url )->get_write_date(); } @@ -866,17 +865,17 @@ int DBTREE::article_code( const std::string& url ) return DBTREE::get_article( url )->get_code(); } -const std::string DBTREE::article_str_code( const std::string& url ) +std::string DBTREE::article_str_code( const std::string& url ) { return DBTREE::get_article( url )->get_str_code(); } -const std::string DBTREE::article_ext_err( const std::string& url ) +std::string DBTREE::article_ext_err( const std::string& url ) { return DBTREE::get_article( url )->get_ext_err(); } -const std::string DBTREE::article_subject( const std::string& url ) +std::string DBTREE::article_subject( const std::string& url ) { return DBTREE::get_article( url )->get_subject(); } @@ -965,7 +964,7 @@ const std::string& DBTREE::get_agent_w( const std::string& url ) } -const std::string DBTREE::get_proxy_host( const std::string& url ) +std::string DBTREE::get_proxy_host( const std::string& url ) { return DBTREE::get_board( url )->get_proxy_host(); } @@ -975,12 +974,12 @@ int DBTREE::get_proxy_port( const std::string& url ) return DBTREE::get_board( url )->get_proxy_port(); } -const std::string DBTREE::get_proxy_basicauth( const std::string& url ) +std::string DBTREE::get_proxy_basicauth( const std::string& url ) { return DBTREE::get_board( url )->get_proxy_basicauth(); } -const std::string DBTREE::get_proxy_host_w( const std::string& url ) +std::string DBTREE::get_proxy_host_w( const std::string& url ) { return DBTREE::get_board( url )->get_proxy_host_w(); } @@ -990,25 +989,25 @@ int DBTREE::get_proxy_port_w( const std::string& url ) return DBTREE::get_board( url )->get_proxy_port_w(); } -const std::string DBTREE::get_proxy_basicauth_w( const std::string& url ) +std::string DBTREE::get_proxy_basicauth_w( const std::string& url ) { return DBTREE::get_board( url )->get_proxy_basicauth_w(); } -const std::string DBTREE::localrule( const std::string& url ) +std::string DBTREE::localrule( const std::string& url ) { return DBTREE::get_board( url )->localrule(); } -const std::string DBTREE::settingtxt( const std::string& url ) +std::string DBTREE::settingtxt( const std::string& url ) { return DBTREE::get_board( url )->settingtxt(); } -const std::string DBTREE::default_noname( const std::string& url ) +std::string DBTREE::default_noname( const std::string& url ) { return DBTREE::get_board( url )->default_noname(); } @@ -1024,7 +1023,7 @@ int DBTREE::message_count( const std::string& url ) } // 特殊文字書き込み可能か( pass なら可能、 change なら不可 ) -const std::string DBTREE::get_unicode( const std::string& url ) +std::string DBTREE::get_unicode( const std::string& url ) { return DBTREE::get_board( url )->get_unicode(); } @@ -1070,21 +1069,22 @@ void DBTREE::set_write_fixmail( const std::string& url, bool set ) } -const std::string DBTREE::create_write_message( const std::string& url, - const std::string& name, const std::string& mail, const std::string& msg ) +std::string DBTREE::create_write_message( const std::string& url, const std::string& name, const std::string& mail, + const std::string& msg ) { return DBTREE::get_article( url )->create_write_message( name, mail, msg ); } -const std::string DBTREE::create_newarticle_message( const std::string& url, const std::string& subject, - const std::string& name, const std::string& mail, const std::string& msg ) +std::string DBTREE::create_newarticle_message( const std::string& url, const std::string& subject, + const std::string& name, const std::string& mail, + const std::string& msg ) { return DBTREE::get_board( url )->create_newarticle_message( subject, name, mail, msg ); } -const std::string DBTREE::get_write_referer( const std::string& url ) +std::string DBTREE::get_write_referer( const std::string& url ) { return DBTREE::get_board( url )->get_write_referer(); } diff --git a/src/dbtree/interface.h b/src/dbtree/interface.h index e5bd79b337..02acef5a45 100644 --- a/src/dbtree/interface.h +++ b/src/dbtree/interface.h @@ -36,37 +36,36 @@ namespace DBTREE ArticleBase* get_article( const std::string& url ); // urlの変換関係 - const std::string url_subject( const std::string& url ); // 板の subject.txt の URL - const std::string url_root( const std::string& url ); - const std::string url_boardbase( const std::string& url ); - const std::string url_datbase( const std::string& url ); + std::string url_subject( const std::string& url ); // 板の subject.txt の URL + std::string url_root( const std::string& url ); + std::string url_boardbase( const std::string& url ); + std::string url_datbase( const std::string& url ); // dat型のurlに変換 - const std::string url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ); + std::string url_dat( const std::string& url, int& num_from, int& num_to, std::string& num_str ); // dat型のurlに変換(簡易版) - const std::string url_dat( const std::string& url ); + std::string url_dat( const std::string& url ); // read.cgi型のurlに変換 - const std::string url_readcgi( const std::string& url, int num_from, int num_to ); + std::string url_readcgi( const std::string& url, int num_from, int num_to ); - const std::string url_bbscgibase( const std::string& url ); - const std::string url_subbbscgibase( const std::string& url ); - const std::string url_bbscgi( const std::string& url ); - const std::string url_subbbscgi( const std::string& url ); - const std::string url_bbscgi_new( const std::string& url ); - const std::string url_subbbscgi_new( const std::string& url ); + std::string url_bbscgibase( const std::string& url ); + std::string url_subbbscgibase( const std::string& url ); + std::string url_bbscgi( const std::string& url ); + std::string url_subbbscgi( const std::string& url ); + std::string url_bbscgi_new( const std::string& url ); + std::string url_subbbscgi_new( const std::string& url ); // 板が移転したかチェックする // 移転した時は移転後のURLを返す - const std::string is_board_moved( const std::string& url ); + std::string is_board_moved( const std::string& url ); - const std::string is_board_moved( const std::string& url, - std::string& old_root, - std::string& old_path_board, - std::string& new_root, - std::string& new_path_board - ); + std::string is_board_moved( const std::string& url, + std::string& old_root, + std::string& old_path_board, + std::string& new_root, + std::string& new_path_board ); // 板移転 bool move_board( const std::string& url_old, const std::string& url_new ); @@ -87,34 +86,34 @@ namespace DBTREE bool remove_etc( const std::string& url, const std::string& name ); void save_etc(); void download_bbsmenu(); - const std::string get_date_modified(); // bbsmenuの更新時間( 文字列 ) + std::string get_date_modified(); // bbsmenuの更新時間( 文字列 ) time_t get_time_modified(); // bbsmenuの更新時間( time_t ) // board 系 - const std::string board_path( const std::string& url ); - const std::string board_id( const std::string& url ); + std::string board_path( const std::string& url ); + std::string board_id( const std::string& url ); time_t board_time_modified( const std::string& url ); // 板の更新時間( time_t ) - const std::string board_date_modified( const std::string& url ); // 板の更新時間( 文字列 ) + std::string board_date_modified( const std::string& url ); // 板の更新時間( 文字列 ) void board_set_date_modified( const std::string& url, const std::string& date ); // 板の更新時間( 文字列 )をセット const std::string& board_get_modified_localrule( const std::string& url ); void board_set_modified_localrule( const std::string& url, const std::string& modified ); const std::string& board_get_modified_setting( const std::string& url ); void board_set_modified_setting( const std::string& url, const std::string& modified ); - const std::string board_name( const std::string& url ); - const std::string board_subjecttxt( const std::string& url ); - const std::string board_charset( const std::string& url ); - const std::string board_cookie_for_write( const std::string& url ); + std::string board_name( const std::string& url ); + std::string board_subjecttxt( const std::string& url ); + std::string board_charset( const std::string& url ); + std::string board_cookie_for_write( const std::string& url ); const std::list< std::string >& board_list_cookies_for_write( const std::string& url ); void board_set_list_cookies_for_write( const std::string& url, const std::list< std::string>& list_cookies ); void board_reset_list_cookies_for_write( const std::string& url ); - const std::string board_keyword_for_write( const std::string& url ); + std::string board_keyword_for_write( const std::string& url ); void board_set_keyword_for_write( const std::string& url, const std::string& keyword ); void board_analyze_keyword_for_write( const std::string& url, const std::string& html ); - const std::string board_basicauth( const std::string& url ); - const std::string board_ext( const std::string& url ); + std::string board_basicauth( const std::string& url ); + std::string board_ext( const std::string& url ); int board_status( const std::string& url ); int board_code( const std::string& url ); - const std::string board_str_code( const std::string& url ); + std::string board_str_code( const std::string& url ); void board_save_info( const std::string& url ); void board_download_subject( const std::string& url, const std::string& url_update_view ); void board_read_subject_from_cache( const std::string& url ); @@ -168,7 +167,7 @@ namespace DBTREE // datファイルのインポート // 成功したらdat型のurlを返す - const std::string board_import_dat( const std::string& url, const std::string& filename ); + std::string board_import_dat( const std::string& url, const std::string& filename ); // 各板に属する全スレの書き込み履歴のリセット void board_clear_all_post_history( const std::string& url ); @@ -200,22 +199,22 @@ namespace DBTREE // article 系 bool article_is_cached( const std::string& url ); // キャッシュにあるかどうか - const std::string article_id( const std::string& url ); // 拡張子込み "12345.dat" みたいに - const std::string article_key( const std::string& url ); // idから拡張子を取ったもの。書き込み用 - const std::string article_org_host( const std::string& url ); // 移転する前のオリジナルのURL + std::string article_id( const std::string& url ); // 拡張子込み "12345.dat" みたいに + std::string article_key( const std::string& url ); // idから拡張子を取ったもの。書き込み用 + std::string article_org_host( const std::string& url ); // 移転する前のオリジナルのURL time_t article_since_time( const std::string& url ); - const std::string article_since_date( const std::string& url ); + std::string article_since_date( const std::string& url ); time_t article_time_modified( const std::string& url ); // スレの更新時間( time_t ) - const std::string article_date_modified( const std::string& url ); // スレの更新時間( 文字列 ) + std::string article_date_modified( const std::string& url ); // スレの更新時間( 文字列 ) void article_set_date_modified( const std::string& url, const std::string& date ); // スレの更新時間( 文字列 )をセット int article_hour( const std::string& url ); time_t article_write_time( const std::string& url ); - const std::string article_write_date( const std::string& url ); + std::string article_write_date( const std::string& url ); int article_status( const std::string& url ); int article_code( const std::string& url ); - const std::string article_str_code( const std::string& url ); - const std::string article_ext_err( const std::string& url ); - const std::string article_subject( const std::string& url ); + std::string article_str_code( const std::string& url ); + std::string article_ext_err( const std::string& url ); + std::string article_subject( const std::string& url ); int article_number( const std::string& url ); int article_number_load( const std::string& url ); int article_number_seen( const std::string& url ); @@ -250,25 +249,25 @@ namespace DBTREE const std::string& get_agent_w( const std::string& url ); // 書き込み用 // 読み込み用プロキシ - const std::string get_proxy_host( const std::string& url ); + std::string get_proxy_host( const std::string& url ); int get_proxy_port( const std::string& url ); - const std::string get_proxy_basicauth( const std::string& url ); + std::string get_proxy_basicauth( const std::string& url ); // 書き込み用プロキシ - const std::string get_proxy_host_w( const std::string& url ); + std::string get_proxy_host_w( const std::string& url ); int get_proxy_port_w( const std::string& url ); - const std::string get_proxy_basicauth_w( const std::string& url ); + std::string get_proxy_basicauth_w( const std::string& url ); // ローカルルール - const std::string localrule( const std::string& url ); + std::string localrule( const std::string& url ); // setting.txt - const std::string settingtxt( const std::string& url ); + std::string settingtxt( const std::string& url ); // 書き込み関係 // デフォルトの名無し名 - const std::string default_noname( const std::string& url ); + std::string default_noname( const std::string& url ); // 最大改行数/2 int line_number( const std::string& url ); @@ -277,7 +276,7 @@ namespace DBTREE int message_count( const std::string& url ); // 特殊文字書き込み可能か( pass なら可能、 change なら不可 ) - const std::string get_unicode( const std::string& url ); + std::string get_unicode( const std::string& url ); // 書き込み時の名前とメール const std::string& write_name( const std::string& url ); @@ -291,13 +290,14 @@ namespace DBTREE void set_write_fixmail( const std::string& url, bool set ); // ポストするメッセージの作成 - const std::string create_write_message( const std::string& url, - const std::string& name, const std::string& mail, const std::string& msg ); - const std::string create_newarticle_message( const std::string& url, const std::string& subject, - const std::string& name, const std::string& mail, const std::string& msg ); + std::string create_write_message( const std::string& url, const std::string& name, const std::string& mail, + const std::string& msg ); + std::string create_newarticle_message( const std::string& url, const std::string& subject, + const std::string& name, const std::string& mail, + const std::string& msg ); // 書き込み時のリファラ - const std::string get_write_referer( const std::string& url ); + std::string get_write_referer( const std::string& url ); // あぼーん関係 diff --git a/src/dbtree/nodetreebase.cpp b/src/dbtree/nodetreebase.cpp index 74253761d8..9d4c28cb93 100644 --- a/src/dbtree/nodetreebase.cpp +++ b/src/dbtree/nodetreebase.cpp @@ -626,7 +626,7 @@ else if( node->text ) str_res += node->text; \ node = node->next_node; \ } }while(0) \ -const std::string NodeTreeBase::get_res_str( int number, bool ref ) +std::string NodeTreeBase::get_res_str( int number, bool ref ) { std::string str_res; @@ -667,7 +667,7 @@ const std::string NodeTreeBase::get_res_str( int number, bool ref ) // // number 番のレスの生文字列を返す // -const std::string NodeTreeBase::get_raw_res_str( int number ) +std::string NodeTreeBase::get_raw_res_str( int number ) { #ifdef _DEBUG std::cout << "NodeTreeBase::get_raw_res_str : num = " << number << std::endl; @@ -714,7 +714,7 @@ const std::string NodeTreeBase::get_raw_res_str( int number ) // // number番を書いた人の名前を取得 // -const std::string NodeTreeBase::get_name( int number ) +std::string NodeTreeBase::get_name( int number ) { NODE* head = res_header( number ); if( ! head ) return std::string(); @@ -762,7 +762,7 @@ std::list< int > NodeTreeBase::get_res_name( const std::string& name ) // number番のレスの時刻を文字列で取得 // 内部で regex を使っているので遅い // -const std::string NodeTreeBase::get_time_str( int number ) +std::string NodeTreeBase::get_time_str( int number ) { std::string res_str = get_res_str( number ); if( res_str.empty() ) return std::string(); @@ -786,7 +786,7 @@ const std::string NodeTreeBase::get_time_str( int number ) // // number番の ID 取得 // -const std::string NodeTreeBase::get_id_name( int number ) +std::string NodeTreeBase::get_id_name( int number ) { NODE* head = res_header( number ); if( ! head ) return std::string(); diff --git a/src/dbtree/nodetreebase.h b/src/dbtree/nodetreebase.h index 3e8b58855b..a1c12c2394 100644 --- a/src/dbtree/nodetreebase.h +++ b/src/dbtree/nodetreebase.h @@ -160,7 +160,7 @@ namespace DBTREE NODE* res_header( int number ); // number番の名前 - const std::string get_name( int number ); + std::string get_name( int number ); // number番の名前の重複数( = 発言数 ) int get_num_name( int number ); @@ -170,10 +170,10 @@ namespace DBTREE // number番のレスの時刻を文字列で取得 // 内部で regex を使っているので遅い - const std::string get_time_str( int number ); + std::string get_time_str( int number ); // number番のID - const std::string get_id_name( int number ); + std::string get_id_name( int number ); // 指定したID の重複数( = 発言数 ) // 下のget_num_id_name( int number )と違って検索するので遅い @@ -209,10 +209,10 @@ namespace DBTREE // number番のレスの文字列を返す // ref == true なら先頭に ">" を付ける - const std::string get_res_str( int number, bool ref = false ); + std::string get_res_str( int number, bool ref = false ); // number 番のレスの生文字列を返す - const std::string get_raw_res_str( int number ); + std::string get_raw_res_str( int number ); // 明示的にhtml を加える // パースして追加したノードのポインタを返す diff --git a/src/dbtree/root.cpp b/src/dbtree/root.cpp index 3c93894a2b..74a36c8892 100644 --- a/src/dbtree/root.cpp +++ b/src/dbtree/root.cpp @@ -1315,7 +1315,7 @@ void Root::load_movetable() // // 移転した時は移転後のURLを返す // -const std::string Root::is_board_moved( const std::string& url ) // 簡易版 +std::string Root::is_board_moved( const std::string& url ) // 簡易版 { std::string old_root; std::string old_path_board; @@ -1325,13 +1325,12 @@ const std::string Root::is_board_moved( const std::string& url ) // 簡易版 } -const std::string Root::is_board_moved( const std::string& url, - std::string& old_root, - std::string& old_path_board, - std::string& new_root, - std::string& new_path_board, - const int count - ) +std::string Root::is_board_moved( const std::string& url, + std::string& old_root, + std::string& old_path_board, + std::string& new_root, + std::string& new_path_board, + const int count ) { const int max_count = 50; diff --git a/src/dbtree/root.h b/src/dbtree/root.h index d2039702ad..27fd7916ea 100644 --- a/src/dbtree/root.h +++ b/src/dbtree/root.h @@ -123,15 +123,14 @@ namespace DBTREE // 板が移転したかチェックする // 移転した時は移転後のURLを返す - const std::string is_board_moved( const std::string& url ); // 簡易版 - - const std::string is_board_moved( const std::string& url, - std::string& old_root, - std::string& old_path_board, - std::string& new_root, - std::string& new_path_board, - const int count = 0 - ); + std::string is_board_moved( const std::string& url ); // 簡易版 + + std::string is_board_moved( const std::string& url, + std::string& old_root, + std::string& old_path_board, + std::string& new_root, + std::string& new_path_board, + const int count = 0 ); // 移転情報保存の有効切り替え void set_enable_save_movetable( const bool set ){ m_enable_save_movetable = set; } diff --git a/src/dbtree/ruleloader.cpp b/src/dbtree/ruleloader.cpp index 832be6cbdb..c07339db59 100644 --- a/src/dbtree/ruleloader.cpp +++ b/src/dbtree/ruleloader.cpp @@ -37,19 +37,19 @@ RuleLoader::~RuleLoader() } -const std::string RuleLoader::get_url() +std::string RuleLoader::get_url() { return m_url_boadbase + HEAD_TXT; } -const std::string RuleLoader::get_path() +std::string RuleLoader::get_path() { return CACHE::path_board_root( m_url_boadbase ) + HEAD_TXT; } -const std::string RuleLoader::get_charset() +std::string RuleLoader::get_charset() { return DBTREE::board_charset( m_url_boadbase ); } diff --git a/src/dbtree/ruleloader.h b/src/dbtree/ruleloader.h index 73c8c439be..81765b952c 100644 --- a/src/dbtree/ruleloader.h +++ b/src/dbtree/ruleloader.h @@ -28,9 +28,9 @@ namespace DBTREE protected: - const std::string get_url() override; - const std::string get_path() override; - const std::string get_charset() override; + std::string get_url() override; + std::string get_path() override; + std::string get_charset() override; // ロード用データ作成 void create_loaderdata( JDLIB::LOADERDATA& data ) override; diff --git a/src/dbtree/settingloader.cpp b/src/dbtree/settingloader.cpp index cf35df4452..c4ef9baf0b 100644 --- a/src/dbtree/settingloader.cpp +++ b/src/dbtree/settingloader.cpp @@ -39,19 +39,19 @@ SettingLoader::~SettingLoader() } -const std::string SettingLoader::get_url() +std::string SettingLoader::get_url() { return m_url_boadbase + SETTING_TXT; } -const std::string SettingLoader::get_path() +std::string SettingLoader::get_path() { return CACHE::path_board_root( m_url_boadbase ) + SETTING_TXT; } -const std::string SettingLoader::get_charset() +std::string SettingLoader::get_charset() { return DBTREE::board_charset( m_url_boadbase ); } diff --git a/src/dbtree/settingloader.h b/src/dbtree/settingloader.h index 072e342390..179b3044ab 100644 --- a/src/dbtree/settingloader.h +++ b/src/dbtree/settingloader.h @@ -45,9 +45,9 @@ namespace DBTREE protected: - const std::string get_url() override; - const std::string get_path() override; - const std::string get_charset() override; + std::string get_url() override; + std::string get_path() override; + std::string get_charset() override; // ロード用データ作成 void create_loaderdata( JDLIB::LOADERDATA& data ) override; diff --git a/src/jdlib/confloader.cpp b/src/jdlib/confloader.cpp index 7030c0359b..5dc04e1cd8 100644 --- a/src/jdlib/confloader.cpp +++ b/src/jdlib/confloader.cpp @@ -143,7 +143,7 @@ void ConfLoader::update( const std::string& name, const double value ) // string 型 // // dflt はデフォルト値, デフォルト引数 maxlength = 0 -const std::string ConfLoader::get_option_str( const std::string& name, const std::string& dflt, const size_t maxlength ) +std::string ConfLoader::get_option_str( const std::string& name, const std::string& dflt, const size_t maxlength ) { if( name.empty() ) return std::string(); diff --git a/src/jdlib/confloader.h b/src/jdlib/confloader.h index 1004be9035..4f35d9d40d 100644 --- a/src/jdlib/confloader.h +++ b/src/jdlib/confloader.h @@ -48,7 +48,7 @@ namespace JDLIB void update( const std::string& name, const double value ); // 値取得 - const std::string get_option_str( const std::string& name, const std::string& dflt, const size_t maxlength = 0 ); + std::string get_option_str( const std::string& name, const std::string& dflt, const size_t maxlength = 0 ); bool get_option_bool( const std::string& name, const bool dflt ); int get_option_int( const std::string& name, const int dflt, const int min, const int max ); double get_option_double( const std::string& name, const double dflt, const double min , const double max ); diff --git a/src/jdlib/jdregex.cpp b/src/jdlib/jdregex.cpp index d6fa47bf32..04f3955075 100644 --- a/src/jdlib/jdregex.cpp +++ b/src/jdlib/jdregex.cpp @@ -227,7 +227,7 @@ bool Regex::exec( const std::string reg, const std::string& target, } -const std::string Regex::str( const size_t num ) +std::string Regex::str( const size_t num ) { if( m_results.size() > num ) return m_results[ num ]; diff --git a/src/jdlib/jdregex.h b/src/jdlib/jdregex.h index afb9c79214..6a5f57749b 100644 --- a/src/jdlib/jdregex.h +++ b/src/jdlib/jdregex.h @@ -52,7 +52,7 @@ namespace JDLIB const bool newline, const bool usemigemo, const bool wchar ); int pos( const size_t num ); - const std::string str( const size_t num ); + std::string str( const size_t num ); }; } diff --git a/src/jdlib/loader.cpp b/src/jdlib/loader.cpp index 573737a84c..40ba556db2 100644 --- a/src/jdlib/loader.cpp +++ b/src/jdlib/loader.cpp @@ -1105,7 +1105,7 @@ struct addrinfo* Loader::get_addrinfo( const std::string& hostname, const int po // // 送信メッセージ作成 // -const std::string Loader::create_msg_send() +std::string Loader::create_msg_send() { bool post_msg = ( !m_data.str_post.empty() && !m_data.head ); bool use_proxy = ( ! m_data.host_proxy.empty() ); diff --git a/src/jdlib/loader.h b/src/jdlib/loader.h index f061bb7eba..84ef2915bc 100644 --- a/src/jdlib/loader.h +++ b/src/jdlib/loader.h @@ -102,7 +102,7 @@ namespace JDLIB void clear(); void run_main(); struct addrinfo* get_addrinfo( const std::string& hostname, const int port ); - const std::string create_msg_send(); + std::string create_msg_send(); bool wait_recv_send( const int fd, const bool recv ); bool send_connect( const int soc, std::string& errmsg ); diff --git a/src/jdlib/misctime.cpp b/src/jdlib/misctime.cpp index 7cb7334abd..03d52b2f4f 100644 --- a/src/jdlib/misctime.cpp +++ b/src/jdlib/misctime.cpp @@ -27,7 +27,7 @@ // // gettimeofday()の秒を文字列で取得 // -const std::string MISC::get_sec_str() +std::string MISC::get_sec_str() { std::ostringstream sec_str; @@ -44,7 +44,7 @@ const std::string MISC::get_sec_str() // // timeval を str に変換 // -const std::string MISC::timevaltostr( const struct timeval& tv ) +std::string MISC::timevaltostr( const struct timeval& tv ) { std::ostringstream sstr; sstr << ( tv.tv_sec >> 16 ) << " " << ( tv.tv_sec & 0xffff ) << " " << tv.tv_usec; @@ -126,7 +126,7 @@ time_t MISC::datetotime( const std::string& date ) // // time_t を月日の文字列に変換 // -const std::string MISC::timettostr( const time_t& time_from, const int mode ) +std::string MISC::timettostr( const time_t& time_from, const int mode ) { const int lng = 64; struct tm tm_tmp; diff --git a/src/jdlib/misctime.h b/src/jdlib/misctime.h index b1164877f4..f46cec63b7 100644 --- a/src/jdlib/misctime.h +++ b/src/jdlib/misctime.h @@ -26,10 +26,10 @@ namespace MISC }; // gettimeofday()の秒を文字列で取得 - const std::string get_sec_str(); + std::string get_sec_str(); // timeval を str に変換 - const std::string timevaltostr( const struct timeval& tv ); + std::string timevaltostr( const struct timeval& tv ); // 時刻の文字列を紀元からの経過秒に直す // (例) Tue, 27 Dec 2005 14:28:10 GMT -> 1135693690 @@ -37,7 +37,7 @@ namespace MISC // time_t を月日の文字列に変換 // (例) mode == TIME_NORMAL なら 1135785252 -> 2005/12/29 0:54 - const std::string timettostr( const time_t& time_from, const int mode ); + std::string timettostr( const time_t& time_from, const int mode ); // 実行時間測定用 void start_measurement( const int id ); diff --git a/src/jdlib/misctrip.cpp b/src/jdlib/misctrip.cpp index b3a6ad24d5..664cc2e617 100644 --- a/src/jdlib/misctrip.cpp +++ b/src/jdlib/misctrip.cpp @@ -28,13 +28,13 @@ // ローカル関数の宣言 // SHA1を計算 -const std::string create_sha1( const std::string& key ); +std::string create_sha1( const std::string& key ); // トリップを計算(新方式) -const std::string create_trip_newtype( const std::string& key ); +std::string create_trip_newtype( const std::string& key ); // トリップを計算(従来方式) -const std::string create_trip_conventional( const std::string& key ); +std::string create_trip_conventional( const std::string& key ); /*--------------------------------------------------------------------*/ @@ -45,7 +45,7 @@ const std::string create_trip_conventional( const std::string& key ); // param1: 元となる文字列 // return: SHA1文字列 /*--------------------------------------------------------------------*/ -const std::string create_sha1( const std::string& key ) +std::string create_sha1( const std::string& key ) { if( key.empty() ) return std::string(); @@ -97,7 +97,7 @@ const std::string create_sha1( const std::string& key ) // param1: 元となる文字列 // return: トリップ文字列 /*--------------------------------------------------------------------*/ -const std::string create_trip_newtype( const std::string& key ) +std::string create_trip_newtype( const std::string& key ) { if( key.empty() ) return std::string(); @@ -190,7 +190,7 @@ const std::string create_trip_newtype( const std::string& key ) // param1: 元となる文字列 // return: トリップ文字列 /*--------------------------------------------------------------------*/ -const std::string create_trip_conventional( const std::string& key ) +std::string create_trip_conventional( const std::string& key ) { if( key.empty() ) return std::string(); @@ -241,7 +241,7 @@ const std::string create_trip_conventional( const std::string& key ) // param2: 書き込む掲示板の文字コード // return: トリップ文字列 /*--------------------------------------------------------------------*/ -const std::string MISC::get_trip( const std::string& str, const std::string& charset ) +std::string MISC::get_trip( const std::string& str, const std::string& charset ) { if( str.empty() ) return std::string(); diff --git a/src/jdlib/misctrip.h b/src/jdlib/misctrip.h index 37c515fdef..a4fbea2580 100644 --- a/src/jdlib/misctrip.h +++ b/src/jdlib/misctrip.h @@ -10,7 +10,7 @@ namespace MISC { // トリップを取得 (SHA1等の新方式対応) - const std::string get_trip( const std::string& str, const std::string& charset ); + std::string get_trip( const std::string& str, const std::string& charset ); } #endif diff --git a/src/jdlib/miscutil.cpp b/src/jdlib/miscutil.cpp index c9da4c0e73..d53cbb3294 100644 --- a/src/jdlib/miscutil.cpp +++ b/src/jdlib/miscutil.cpp @@ -276,7 +276,7 @@ const std::list< std::string > MISC::strtolist( const std::string& str_in ) // // (例) "aaa" "bbb" "\"ccc\"" // -const std::string MISC::listtostr( const std::list< std::string >& list_in ) +std::string MISC::listtostr( const std::list< std::string >& list_in ) { std::string str_out; std::list< std::string >::const_iterator it = list_in.begin(); @@ -292,7 +292,7 @@ const std::string MISC::listtostr( const std::list< std::string >& list_in ) // // strの前後の空白削除 // -const std::string MISC::remove_space( const std::string& str ) +std::string MISC::remove_space( const std::string& str ) { std::string str_space = " "; size_t lng_space = str_space.length(); @@ -338,7 +338,7 @@ const std::string MISC::remove_space( const std::string& str ) // // str前後の改行、タブ、スペースを削除 // -const std::string MISC::remove_spaces( const std::string& str ) +std::string MISC::remove_spaces( const std::string& str ) { if( str.empty() ) return std::string(); @@ -366,7 +366,7 @@ const std::string MISC::remove_spaces( const std::string& str ) // // str1からstr2で示された文字列を除く // -const std::string MISC::remove_str( const std::string& str1, const std::string& str2 ) +std::string MISC::remove_str( const std::string& str1, const std::string& str2 ) { return MISC::replace_str( str1, str2, "" ); } @@ -375,7 +375,7 @@ const std::string MISC::remove_str( const std::string& str1, const std::string& // // start 〜 end の範囲をstrから取り除く ( /* コメント */ など ) // -const std::string MISC::remove_str( const std::string& str, const std::string& start, const std::string& end ) +std::string MISC::remove_str( const std::string& str, const std::string& start, const std::string& end ) { std::string str_out = str; @@ -397,7 +397,7 @@ const std::string MISC::remove_str( const std::string& str, const std::string& s // // 正規表現を使ってstr1からqueryで示された文字列を除く // -const std::string MISC::remove_str_regex( const std::string& str1, const std::string& query ) +std::string MISC::remove_str_regex( const std::string& str1, const std::string& query ) { JDLIB::Regex regex; const size_t offset = 0; @@ -413,7 +413,7 @@ const std::string MISC::remove_str_regex( const std::string& str1, const std::st // // str1, str2 に囲まれた文字列を切り出す // -const std::string MISC::cut_str( const std::string& str, const std::string& str1, const std::string& str2 ) +std::string MISC::cut_str( const std::string& str, const std::string& str1, const std::string& str2 ) { size_t i = str.find( str1 ); if( i == std::string::npos ) return std::string(); @@ -428,7 +428,7 @@ const std::string MISC::cut_str( const std::string& str, const std::string& str1 // // str1 を str2 に置き換え // -const std::string MISC::replace_str( const std::string& str, const std::string& str1, const std::string& str2 ) +std::string MISC::replace_str( const std::string& str, const std::string& str1, const std::string& str2 ) { size_t i, pos = 0; if( ( i = str.find( str1 , pos ) ) == std::string::npos ) return str; @@ -464,7 +464,7 @@ const std::list< std::string > MISC::replace_str_list( const std::list< std::str // // str_in に含まれる改行文字を replace に置き換え // -const std::string MISC::replace_newlines_to_str( const std::string& str_in, const std::string& replace ) +std::string MISC::replace_newlines_to_str( const std::string& str_in, const std::string& replace ) { if( str_in.empty() || replace.empty() ) return str_in; @@ -491,7 +491,7 @@ const std::string MISC::replace_newlines_to_str( const std::string& str_in, cons // // " を \" に置き換え // -const std::string MISC::replace_quot( const std::string& str ) +std::string MISC::replace_quot( const std::string& str ) { return MISC::replace_str( str, "\"", "\\\"" ); } @@ -500,7 +500,7 @@ const std::string MISC::replace_quot( const std::string& str ) // // \" を " に置き換え // -const std::string MISC::recover_quot( const std::string& str ) +std::string MISC::recover_quot( const std::string& str ) { return MISC::replace_str( str, "\\\"", "\"" ); } @@ -591,7 +591,7 @@ int MISC::str_to_uint( const char* str, size_t& dig, size_t& n ) // // 数字 -> 文字変換 // -const std::string MISC::itostr( const int n ) +std::string MISC::itostr( const int n ) { std::ostringstream ss; ss << n; @@ -603,7 +603,7 @@ const std::string MISC::itostr( const int n ) // // listで指定した数字を文字に変換 // -const std::string MISC::intlisttostr( const std::list< int >& list_num ) +std::string MISC::intlisttostr( const std::list< int >& list_num ) { std::ostringstream comment; @@ -676,7 +676,7 @@ size_t MISC::chrtobin( const char* chr_in, char* chr_out ) // // strが半角でmaxsize文字を超えたらカットして後ろに...を付ける // -const std::string MISC::cut_str( const std::string& str, const unsigned int maxsize ) +std::string MISC::cut_str( const std::string& str, const unsigned int maxsize ) { std::string outstr = str; unsigned int pos, lng_str; @@ -745,7 +745,7 @@ bool MISC::has_regex_metachar( const std::string& str, const bool escape ) // // escape == true ならエスケープを考慮 (例) escape == true なら \+ → \+ のまま、falseなら \+ → \\\+ // -const std::string MISC::regex_escape( const std::string& str, const bool escape ) +std::string MISC::regex_escape( const std::string& str, const bool escape ) { if( ! has_regex_metachar( str, escape ) ) return str; @@ -802,7 +802,7 @@ const std::string MISC::regex_escape( const std::string& str, const bool escape // // 正規表現のメタ文字をアンエスケープ // -const std::string MISC::regex_unescape( const std::string& str ) +std::string MISC::regex_unescape( const std::string& str ) { #ifdef _DEBUG std::cout << "MISC::regex_unescape" << std::endl; @@ -844,7 +844,7 @@ const std::string MISC::regex_unescape( const std::string& str ) // // include_url : URL中でもエスケープする( デフォルト = true ) // -const std::string MISC::html_escape( const std::string& str, const bool include_url ) +std::string MISC::html_escape( const std::string& str, const bool include_url ) { if( str.empty() ) return str; @@ -908,7 +908,7 @@ const std::string MISC::html_escape( const std::string& str, const bool include_ // // HTMLアンエスケープ // -const std::string MISC::html_unescape( const std::string& str ) +std::string MISC::html_unescape( const std::string& str ) { if( str.empty() ) return str; if( str.find( "&" ) == std::string::npos ) return str; @@ -1054,7 +1054,7 @@ bool MISC::is_url_char( const char* str_in, const bool loose_url ) // // URLデコード // -const std::string MISC::url_decode( const std::string& url ) +std::string MISC::url_decode( const std::string& url ) { if( url.empty() ) return std::string(); @@ -1099,7 +1099,7 @@ const std::string MISC::url_decode( const std::string& url ) // // url エンコード // -const std::string MISC::url_encode( const char* str, const size_t n ) +std::string MISC::url_encode( const char* str, const size_t n ) { if( str[ n ] != '\0' ){ ERRMSG( "url_encode : invalid input." ); @@ -1137,7 +1137,7 @@ const std::string MISC::url_encode( const char* str, const size_t n ) } -const std::string MISC::url_encode( const std::string& str ) +std::string MISC::url_encode( const std::string& str ) { return url_encode( str.c_str(), str.length() ); } @@ -1148,7 +1148,7 @@ const std::string MISC::url_encode( const std::string& str ) // // str は UTF-8 であること // -const std::string MISC::charset_url_encode( const std::string& str, const std::string& charset ) +std::string MISC::charset_url_encode( const std::string& str, const std::string& charset ) { if( charset.empty() || charset == "UTF-8" ) return MISC::url_encode( str.c_str(), str.length() ); @@ -1162,7 +1162,7 @@ const std::string MISC::charset_url_encode( const std::string& str, const std::s // // ただし半角スペースのところを+に置き換えて区切る // -const std::string MISC::charset_url_encode_split( const std::string& str, const std::string& charset ) +std::string MISC::charset_url_encode_split( const std::string& str, const std::string& charset ) { std::list< std::string > list_str = MISC::split_line( str ); std::list< std::string >::iterator it = list_str.begin(); @@ -1180,7 +1180,7 @@ const std::string MISC::charset_url_encode_split( const std::string& str, const // // BASE64 // -const std::string MISC::base64( const std::string& str ) +std::string MISC::base64( const std::string& str ) { char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; @@ -1230,7 +1230,7 @@ const std::string MISC::base64( const std::string& str ) // // 遅いので連続的な処理が必要な時は使わないこと // -const std::string MISC::Iconv( const std::string& str, const std::string& coding_from, const std::string& coding_to ) +std::string MISC::Iconv( const std::string& str, const std::string& coding_from, const std::string& coding_to ) { if( coding_from == coding_to ) return str; @@ -1338,7 +1338,7 @@ int MISC::decode_spchar_number( const char* in_char, const int offset, const int // // str に含まれる「&#数字;」形式の数字参照文字列を全てユニーコード文字に変換する // -const std::string MISC::decode_spchar_number( const std::string& str ) +std::string MISC::decode_spchar_number( const std::string& str ) { std::string str_out; const size_t str_length = str.length(); @@ -1485,7 +1485,7 @@ int MISC::get_ucs2mode( const int ucs2 ) // // WAVEDASHなどのWindows系UTF-8文字をUnix系文字と相互変換 // -const std::string MISC::utf8_fix_wavedash( const std::string& str, const int mode ) +std::string MISC::utf8_fix_wavedash( const std::string& str, const int mode ) { // WAVE DASH 問題 const size_t size = 4; @@ -1538,7 +1538,7 @@ const std::string MISC::utf8_fix_wavedash( const std::string& str, const int mod // // str を大文字化 // -const std::string MISC::toupper_str( const std::string& str ) +std::string MISC::toupper_str( const std::string& str ) { std::string str_out; const size_t str_length = str.length(); @@ -1566,7 +1566,7 @@ const std::list< std::string > MISC::toupper_list( const std::list< std::string // // str を小文字化 // -const std::string MISC::tolower_str( const std::string& str ) +std::string MISC::tolower_str( const std::string& str ) { std::string str_out; const size_t str_length = str.length(); @@ -1583,7 +1583,7 @@ const std::string MISC::tolower_str( const std::string& str ) // // protocol = false のときはプロトコルを除く // -const std::string MISC::get_hostname( const std::string& path, bool protocol ) +std::string MISC::get_hostname( const std::string& path, bool protocol ) { int lng = 0; if( path.find( "http://" ) == 0 ) lng = strlen( "http://" ); @@ -1606,7 +1606,7 @@ const std::string MISC::get_hostname( const std::string& path, bool protocol ) // // path からファイル名だけ取り出す // -const std::string MISC::get_filename( const std::string& path ) +std::string MISC::get_filename( const std::string& path ) { if( path.empty() ) return std::string(); @@ -1621,7 +1621,7 @@ const std::string MISC::get_filename( const std::string& path ) // // path からファイル名を除いてディレクトリだけ取り出す // -const std::string MISC::get_dir( const std::string& path ) +std::string MISC::get_dir( const std::string& path ) { if( path.empty() ) return std::string(); @@ -1636,7 +1636,7 @@ const std::string MISC::get_dir( const std::string& path ) // // 文字数を限定して環境変数の値を返す // -const std::string MISC::getenv_limited( const char *name, const size_t size ) +std::string MISC::getenv_limited( const char *name, const size_t size ) { if( ! name || ! getenv( name ) ) return std::string(); @@ -1654,7 +1654,7 @@ const std::string MISC::getenv_limited( const char *name, const size_t size ) // // pathセパレータを / に置き換える // -const std::string MISC::recover_path( const std::string& str ) +std::string MISC::recover_path( const std::string& str ) { #ifdef _WIN32 // Windowsのpathセパレータ \ を、jdの / に置き換える diff --git a/src/jdlib/miscutil.h b/src/jdlib/miscutil.h index 3b3d60622f..cd4154ca2f 100644 --- a/src/jdlib/miscutil.h +++ b/src/jdlib/miscutil.h @@ -72,40 +72,40 @@ namespace MISC // list_in の文字列リストを空白と""で区切ってストリングにして出力 // "は \" に置換される // (例) "aaa" "bbb" "\"ccc\"" - const std::string listtostr( const std::list< std::string >& list_in ); + std::string listtostr( const std::list< std::string >& list_in ); // strの前後の空白削除 - const std::string remove_space( const std::string& str ); + std::string remove_space( const std::string& str ); // str前後の改行、タブ、スペースを削除 - const std::string remove_spaces( const std::string& str ); + std::string remove_spaces( const std::string& str ); // str1からstr2で示された文字列を除く - const std::string remove_str( const std::string& str1, const std::string& str2 ); + std::string remove_str( const std::string& str1, const std::string& str2 ); // start 〜 end の範囲をstrから取り除く ( /* コメント */ など ) - const std::string remove_str( const std::string& str, const std::string& start, const std::string& end ); + std::string remove_str( const std::string& str, const std::string& start, const std::string& end ); // 正規表現を使ってstr1からqueryで示された文字列を除く - const std::string remove_str_regex( const std::string& str1, const std::string& query ); + std::string remove_str_regex( const std::string& str1, const std::string& query ); // str1, str2 に囲まれた文字列を切り出す - const std::string cut_str( const std::string& str, const std::string& str1, const std::string& str2 ); + std::string cut_str( const std::string& str, const std::string& str1, const std::string& str2 ); // str1 を str2 に置き換え - const std::string replace_str( const std::string& str, const std::string& str1, const std::string& str2 ); + std::string replace_str( const std::string& str, const std::string& str1, const std::string& str2 ); // list_inから str1 を str2 に置き換えてリストを返す const std::list< std::string > replace_str_list( const std::list< std::string >& list_in, const std::string& str1, const std::string& str2 ); // str_in に含まれる改行文字を replace に置き換え - const std::string replace_newlines_to_str( const std::string& str_in, const std::string& replace ); + std::string replace_newlines_to_str( const std::string& str_in, const std::string& replace ); // " を \" に置き換え - const std::string replace_quot( const std::string& str ); + std::string replace_quot( const std::string& str ); // \" を " に置き換え - const std::string recover_quot( const std::string& str ); + std::string recover_quot( const std::string& str ); // str 中に含まれている str2 の 数を返す int count_str( const std::string& str, const std::string& str2 ); @@ -123,10 +123,10 @@ namespace MISC int str_to_uint( const char* str, size_t& dig, size_t& n ); // 数字 -> 文字変換 - const std::string itostr( const int n ); + std::string itostr( const int n ); // listで指定した数字を文字に変換 - const std::string intlisttostr( const std::list< int >& list_num ); + std::string intlisttostr( const std::list< int >& list_num ); // 16進数表記文字をバイナリに変換する( 例 "E38182" -> 0xE38182 ) // 出力 : char_out @@ -134,7 +134,7 @@ namespace MISC size_t chrtobin( const char* chr_in, char* chr_out ); // strが半角でmaxsize文字を超えたらカットして後ろに...を付ける - const std::string cut_str( const std::string& str, const unsigned int maxsize ); + std::string cut_str( const std::string& str, const unsigned int maxsize ); // 正規表現のメタ文字が含まれているか // escape == true ならエスケープを考慮 (例) escape == true なら \+ → \+ のまま、falseなら \+ → \\\+ @@ -142,17 +142,17 @@ namespace MISC // 正規表現のメタ文字をエスケープ // escape == true ならエスケープを考慮 (例) escape == true なら \+ → \+ のまま、falseなら \+ → \\\+ - const std::string regex_escape( const std::string& str, const bool escape ); + std::string regex_escape( const std::string& str, const bool escape ); // 正規表現のメタ文字をアンエスケープ - const std::string regex_unescape( const std::string& str ); + std::string regex_unescape( const std::string& str ); // HTMLエスケープ // include_url : URL中でもエスケープする( デフォルト = true ) - const std::string html_escape( const std::string& str, const bool include_url = true ); + std::string html_escape( const std::string& str, const bool include_url = true ); // HTMLアンエスケープ - const std::string html_unescape( const std::string& str ); + std::string html_unescape( const std::string& str ); // URL中のスキームを判別する // 戻り値 : スキームタイプ @@ -169,26 +169,26 @@ namespace MISC bool is_url_char( const char* str_in, const bool loose_url ); // URLデコード - const std::string url_decode( const std::string& url ); + std::string url_decode( const std::string& url ); // urlエンコード - const std::string url_encode( const char* str, const size_t n ); - const std::string url_encode( const std::string& str ); + std::string url_encode( const char* str, const size_t n ); + std::string url_encode( const std::string& str ); // 文字コードを変換して url エンコード // str は UTF-8 であること - const std::string charset_url_encode( const std::string& str, const std::string& charset ); + std::string charset_url_encode( const std::string& str, const std::string& charset ); // 文字コード変換して url エンコード // ただし半角スペースのところを+に置き換えて区切る - const std::string charset_url_encode_split( const std::string& str, const std::string& charset ); + std::string charset_url_encode_split( const std::string& str, const std::string& charset ); // BASE64 - const std::string base64( const std::string& str ); + std::string base64( const std::string& str ); // 文字コードを coding_from から coding_to に変換 // 遅いので連続的な処理が必要な時は使わないこと - const std::string Iconv( const std::string& str, const std::string& coding_from, const std::string& coding_to ); + std::string Iconv( const std::string& str, const std::string& coding_from, const std::string& coding_to ); // 「&#数字;」形式の数字参照文字列の中の「数字」部分の文字列長 // @@ -214,7 +214,7 @@ namespace MISC int decode_spchar_number( const char* in_char, const int offset, const int lng ); // str に含まれる「&#数字;」形式の数字参照文字列を全てユニーコード文字に変換する - const std::string decode_spchar_number( const std::string& str ); + std::string decode_spchar_number( const std::string& str ); // utf-8 -> ucs2 変換 // 入力 : utfstr 入力文字 (UTF-8) @@ -231,32 +231,32 @@ namespace MISC int ucs2toutf8( const int ucs2, char* utfstr ); // WAVEDASHなどのWindows系UTF-8文字をUnix系文字と相互変換 - const std::string utf8_fix_wavedash( const std::string& str, const int mode ); + std::string utf8_fix_wavedash( const std::string& str, const int mode ); // str を大文字化 - const std::string toupper_str( const std::string& str ); + std::string toupper_str( const std::string& str ); // list 内のアイテムを全部大文字化 const std::list< std::string > toupper_list( const std::list< std::string >& list_str ); //str を小文字化 - const std::string tolower_str( const std::string& str ); + std::string tolower_str( const std::string& str ); // path からホスト名だけ取り出す // protocol = false のときはプロトコルを除く - const std::string get_hostname( const std::string& path, const bool protocol = true ); + std::string get_hostname( const std::string& path, const bool protocol = true ); // path からファイル名だけ取り出す - const std::string get_filename( const std::string& path ); + std::string get_filename( const std::string& path ); // path からファイル名を除いてディレクトリだけ取り出す - const std::string get_dir( const std::string& path ); + std::string get_dir( const std::string& path ); // 文字数を限定して環境変数の値を返す - const std::string getenv_limited( const char *name, const size_t size = 1 ); + std::string getenv_limited( const char *name, const size_t size = 1 ); // pathセパレータを / に置き換える - const std::string recover_path( const std::string& str ); + std::string recover_path( const std::string& str ); std::vector< std::string > recover_path( std::vector< std::string >&& list_str ); // 文字列(utf-8)に全角英数字が含まれるか判定する diff --git a/src/linkfilterpref.h b/src/linkfilterpref.h index 0d4bb2c446..bc64cab71e 100644 --- a/src/linkfilterpref.h +++ b/src/linkfilterpref.h @@ -26,8 +26,8 @@ namespace CORE LinkFilterDiag( Gtk::Window* parent, const std::string& url, const std::string& cmd ); - const Glib::ustring get_url() { return m_entry_url.get_text(); } - const Glib::ustring get_cmd() { return m_entry_cmd.get_text(); } + Glib::ustring get_url() { return m_entry_url.get_text(); } + Glib::ustring get_cmd() { return m_entry_cmd.get_text(); } private: void slot_show_manual(); diff --git a/src/message/logmanager.cpp b/src/message/logmanager.cpp index e678458c19..c96a7e0c73 100644 --- a/src/message/logmanager.cpp +++ b/src/message/logmanager.cpp @@ -361,7 +361,7 @@ void Log_Manager::save( const std::string& url, // // 書き込みログ取得 // -const std::string Log_Manager::get_post_log( const int num ) +std::string Log_Manager::get_post_log( const int num ) { std::string path = CACHE::path_postlog(); diff --git a/src/message/logmanager.h b/src/message/logmanager.h index 54c071f021..4ce1a1e787 100644 --- a/src/message/logmanager.h +++ b/src/message/logmanager.h @@ -40,7 +40,7 @@ namespace MESSAGE const std::string& subject, const std::string& msg, const std::string& name, const std::string& mail ); // 書き込みログ取得 - const std::string get_post_log( const int num ); + std::string get_post_log( const int num ); // ログファイル( log/postlog-* ) の最大数 int get_max_num_of_log(); diff --git a/src/message/messageview.cpp b/src/message/messageview.cpp index 975f9d3320..cf0eb85abd 100644 --- a/src/message/messageview.cpp +++ b/src/message/messageview.cpp @@ -48,7 +48,7 @@ MessageViewMain::~MessageViewMain() // // ポストするメッセージ作成 // -const std::string MessageViewMain::create_message() +std::string MessageViewMain::create_message() { if( ! get_text_message() ) return std::string(); @@ -161,7 +161,7 @@ void MessageViewMain::reload() // // ポストするメッセージ作成 // -const std::string MessageViewNew::create_message() +std::string MessageViewNew::create_message() { if( ! get_text_message() ) return std::string(); diff --git a/src/message/messageview.h b/src/message/messageview.h index 9d5eaef4ac..a34289309c 100644 --- a/src/message/messageview.h +++ b/src/message/messageview.h @@ -18,7 +18,7 @@ namespace MESSAGE private: void write_impl( const std::string& msg ) override; - const std::string create_message() override; + std::string create_message() override; }; @@ -33,7 +33,7 @@ namespace MESSAGE private: void write_impl( const std::string& msg ) override; - const std::string create_message() override; + std::string create_message() override; }; } diff --git a/src/message/messageviewbase.cpp b/src/message/messageviewbase.cpp index 02116747a6..e28b73ec29 100644 --- a/src/message/messageviewbase.cpp +++ b/src/message/messageviewbase.cpp @@ -145,7 +145,7 @@ Gtk::Window* MessageViewBase::get_parent_win() // // メインウィンドウのURLバーなどに表示する) // -const std::string MessageViewBase::url_for_copy() +std::string MessageViewBase::url_for_copy() { return DBTREE::url_readcgi( get_url(), 0, 0 ); } @@ -269,7 +269,7 @@ void MessageViewBase::set_message( const std::string& msg ) } -const Glib::ustring MessageViewBase::get_message() +Glib::ustring MessageViewBase::get_message() { if( m_text_message ) return m_text_message->get_text(); diff --git a/src/message/messageviewbase.h b/src/message/messageviewbase.h index 3c86af5008..a5af09a384 100644 --- a/src/message/messageviewbase.h +++ b/src/message/messageviewbase.h @@ -96,7 +96,7 @@ namespace MESSAGE Gtk::Window* get_parent_win() override; // コピー用のURL - const std::string url_for_copy() override; + std::string url_for_copy() override; // コマンド bool set_command( const std::string& command, @@ -157,7 +157,7 @@ namespace MESSAGE void slot_switch_page( GtkNotebookPage*, guint page ); void slot_text_changed(); - virtual const std::string create_message() = 0; + virtual std::string create_message() = 0; void show_status(); @@ -167,7 +167,7 @@ namespace MESSAGE SKELETON::Admin* get_admin() override; void set_message( const std::string& msg ); - const Glib::ustring get_message(); + Glib::ustring get_message(); SKELETON::CompletionEntry& get_entry_name(){ return m_entry_name; } SKELETON::CompletionEntry& get_entry_mail(){ return m_entry_mail; } diff --git a/src/searchloader.cpp b/src/searchloader.cpp index 8f18785f3e..1bcac8cc40 100644 --- a/src/searchloader.cpp +++ b/src/searchloader.cpp @@ -44,7 +44,7 @@ SearchLoader::~SearchLoader() } -const std::string SearchLoader::get_url() +std::string SearchLoader::get_url() { std::string url = get_usrcmd_manager()->replace_cmd( CONFIG::get_url_search_title(), "", "", m_query, 0 ); diff --git a/src/searchloader.h b/src/searchloader.h index 09fa14e100..bf764b8a44 100644 --- a/src/searchloader.h +++ b/src/searchloader.h @@ -33,9 +33,9 @@ namespace CORE protected: - const std::string get_url() override; - const std::string get_path() override { return {}; } - const std::string get_charset() override { return m_charset; } + std::string get_url() override; + std::string get_path() override { return {}; } + std::string get_charset() override { return m_charset; } // ロード用データ作成 void create_loaderdata( JDLIB::LOADERDATA& data ) override; diff --git a/src/session.cpp b/src/session.cpp index 41d93e0387..50867a5465 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -934,7 +934,7 @@ void SESSION::set_image_locked( const std::list< bool >& locked ){ image_locked // サイドバーのツールバーの項目 const std::string& SESSION::get_items_sidebar_toolbar_str(){ return items_sidebar_toolbar_str; } -const std::string SESSION::get_items_sidebar_toolbar_default_str() +std::string SESSION::get_items_sidebar_toolbar_default_str() { return ITEM_NAME_SEARCHBOX + std::string ( " " ) + @@ -951,7 +951,7 @@ int SESSION::get_item_sidebar_toolbar( const int num ){ return items_sidebar_too // メインツールバーの項目 const std::string& SESSION::get_items_main_toolbar_str(){ return items_main_toolbar_str; } -const std::string SESSION::get_items_main_toolbar_default_str() +std::string SESSION::get_items_main_toolbar_default_str() { return ITEM_NAME_BBSLISTVIEW + std::string ( " " ) + @@ -972,7 +972,7 @@ int SESSION::get_item_main_toolbar( const int num ){ return items_main_toolbar[ // スレビューのツールバーの項目 const std::string& SESSION::get_items_article_toolbar_str(){ return items_article_toolbar_str; } -const std::string SESSION::get_items_article_toolbar_default_str() +std::string SESSION::get_items_article_toolbar_default_str() { return ITEM_NAME_WRITEMSG + std::string ( " " ) + @@ -994,7 +994,7 @@ int SESSION::get_item_article_toolbar( const int num ){ return items_article_too // 検索ビューのツールバーの項目 const std::string& SESSION::get_items_search_toolbar_str(){ return items_search_toolbar_str; } -const std::string SESSION::get_items_search_toolbar_default_str() +std::string SESSION::get_items_search_toolbar_default_str() { return ITEM_NAME_NAME + std::string ( " " ) + @@ -1012,7 +1012,7 @@ int SESSION::get_item_search_toolbar( const int num ){ return items_search_toolb // スレ一覧のツールバー項目 const std::string& SESSION::get_items_board_toolbar_str(){ return items_board_toolbar_str; } -const std::string SESSION::get_items_board_toolbar_default_str() +std::string SESSION::get_items_board_toolbar_default_str() { return ITEM_NAME_NEWARTICLE + std::string ( " " ) + @@ -1034,7 +1034,7 @@ int SESSION::get_item_board_toolbar( const int num ){ return items_board_toolbar // 書き込みビューのツールバー項目 const std::string& SESSION::get_items_msg_toolbar_str(){ return items_msg_toolbar_str; } -const std::string SESSION::get_items_msg_toolbar_default_str() +std::string SESSION::get_items_msg_toolbar_default_str() { return ITEM_NAME_PREVIEW + std::string ( " " ) + @@ -1054,7 +1054,7 @@ int SESSION::get_item_msg_toolbar( const int num ){ return items_msg_toolbar[ nu // スレ一覧の列項目 const std::string& SESSION::get_items_board_col_str(){ return items_board_col_str; } -const std::string SESSION::get_items_board_col_default_str() +std::string SESSION::get_items_board_col_default_str() { return ITEM_NAME_MARK + std::string ( " " ) + @@ -1076,7 +1076,7 @@ int SESSION::get_item_board_col( const int num ){ return items_board_col[ num ]; // スレ一覧のコンテキストメニュー項目 const std::string& SESSION::get_items_board_menu_str(){ return items_board_menu_str; } -const std::string SESSION::get_items_board_menu_default_str() +std::string SESSION::get_items_board_menu_default_str() { return ITEM_NAME_BOOKMARK + std::string ( " " ) + @@ -1106,7 +1106,7 @@ int SESSION::get_item_board_menu( const int num ){ return items_board_menu[ num // スレビューのコンテキストメニュー項目 const std::string& SESSION::get_items_article_menu_str(){ return items_article_menu_str; } -const std::string SESSION::get_items_article_menu_default_str() +std::string SESSION::get_items_article_menu_default_str() { return ITEM_NAME_DRAWOUT + std::string ( " " ) + @@ -1166,7 +1166,7 @@ int SESSION::get_sidebar_current_page() } // 現在開いているサイドバーのurl -const std::string SESSION::get_sidebar_current_url() +std::string SESSION::get_sidebar_current_url() { return BBSLIST::get_admin()->get_current_url(); } @@ -1202,7 +1202,7 @@ ARTICLE::DrawAreaBase* SESSION::get_base_drawarea() // 現在開いているarticle のurl -const std::string SESSION::get_article_current_url() +std::string SESSION::get_article_current_url() { return ARTICLE::get_admin()->get_current_url(); } @@ -1360,7 +1360,7 @@ void SESSION::get_sidebar_threads( const std::string& url, const int dirid, std: // サイドバーの指定したidのディレクトリの名前を取得 -const std::string SESSION::get_sidebar_dirname( const std::string& url, const int dirid ) +std::string SESSION::get_sidebar_dirname( const std::string& url, const int dirid ) { return BBSLIST::get_admin()->get_dirname( url, dirid ); } diff --git a/src/session.h b/src/session.h index 8d2514a4fa..21b82825d2 100644 --- a/src/session.h +++ b/src/session.h @@ -301,62 +301,62 @@ namespace SESSION int get_sidebar_current_page(); // 現在開いているサイドバーのurl - const std::string get_sidebar_current_url(); + std::string get_sidebar_current_url(); // ツールバー等の項目名 -> ID 変換 int parse_item( const std::string& item_name ); // サイドバーのツールバー項目 const std::string& get_items_sidebar_toolbar_str(); - const std::string get_items_sidebar_toolbar_default_str(); + std::string get_items_sidebar_toolbar_default_str(); void set_items_sidebar_toolbar_str( const std::string& items ); int get_item_sidebar_toolbar( const int num ); // メインツールバーの項目 const std::string& get_items_main_toolbar_str(); - const std::string get_items_main_toolbar_default_str(); + std::string get_items_main_toolbar_default_str(); void set_items_main_toolbar_str( const std::string& items_str ); int get_item_main_toolbar( const int num ); // スレビューのツールバーの項目 const std::string& get_items_article_toolbar_str(); - const std::string get_items_article_toolbar_default_str(); + std::string get_items_article_toolbar_default_str(); void set_items_article_toolbar_str( const std::string& items_str ); int get_item_article_toolbar( const int num ); // 検索ビューのツールバーの項目 const std::string& get_items_search_toolbar_str(); - const std::string get_items_search_toolbar_default_str(); + std::string get_items_search_toolbar_default_str(); void set_items_search_toolbar_str( const std::string& items_str ); int get_item_search_toolbar( const int num ); // スレ一覧のツールバー項目 const std::string& get_items_board_toolbar_str(); - const std::string get_items_board_toolbar_default_str(); + std::string get_items_board_toolbar_default_str(); void set_items_board_toolbar_str( const std::string& items ); int get_item_board_toolbar( const int num ); // 書き込みビューのツールバー項目 const std::string& get_items_msg_toolbar_str(); - const std::string get_items_msg_toolbar_default_str(); + std::string get_items_msg_toolbar_default_str(); void set_items_msg_toolbar_str( const std::string& items ); int get_item_msg_toolbar( const int num ); // スレ一覧の列項目 const std::string& get_items_board_col_str(); - const std::string get_items_board_col_default_str(); + std::string get_items_board_col_default_str(); void set_items_board_col_str( const std::string& items ); int get_item_board_col( const int num ); // スレ一覧のコンテキストメニュー項目 const std::string& get_items_board_menu_str(); - const std::string get_items_board_menu_default_str(); + std::string get_items_board_menu_default_str(); void set_items_board_menu_str( const std::string& items_str ); int get_item_board_menu( const int num ); // スレビューのコンテキストメニュー項目 const std::string& get_items_article_menu_str(); - const std::string get_items_article_menu_default_str(); + std::string get_items_article_menu_default_str(); void set_items_article_menu_str( const std::string& items_str ); int get_item_article_menu( const int num ); @@ -402,7 +402,7 @@ namespace SESSION ARTICLE::DrawAreaBase* get_base_drawarea(); // 現在開いているarticle のurl - const std::string get_article_current_url(); + std::string get_article_current_url(); // 埋め込みimage使用 @@ -460,7 +460,7 @@ namespace SESSION void get_sidebar_threads( const std::string& url, const int dirid, std::vector< std::string >& list_url ); // サイドバーの指定したidのディレクトリの名前を取得 - const std::string get_sidebar_dirname( const std::string& url, const int dirid ); + std::string get_sidebar_dirname( const std::string& url, const int dirid ); } diff --git a/src/skeleton/admin.cpp b/src/skeleton/admin.cpp index 040c3e76a7..0581fe69da 100644 --- a/src/skeleton/admin.cpp +++ b/src/skeleton/admin.cpp @@ -2055,7 +2055,7 @@ int Admin::get_current_page() // // 現在表示されているページのURL // -const std::string Admin::get_current_url() +std::string Admin::get_current_url() { SKELETON::View* view = get_current_view(); if( ! view ) return std::string(); @@ -2856,7 +2856,7 @@ void Admin::remove_switchhistory( const std::string& url ) // また、その不一致なタブの切り替え履歴を、セッション情報 ( article_switchhistoryなど ) に // 保存してしまっていたため、ここで不一致な履歴の削除を行うことで、履歴を修復する。 // -const std::string Admin::get_valid_switchhistory() +std::string Admin::get_valid_switchhistory() { if( ! m_use_switchhistory ) return std::string(); diff --git a/src/skeleton/admin.h b/src/skeleton/admin.h index 71c266b6e3..83b2e367f1 100644 --- a/src/skeleton/admin.h +++ b/src/skeleton/admin.h @@ -125,7 +125,7 @@ namespace SKELETON // 現在表示してるページ番号およびURL // 表示ページを指定したいときは "set_page" コマンドを使う virtual int get_current_page(); - const std::string get_current_url(); + std::string get_current_url(); // urlで指定されるタブがロックされているか bool is_locked( const std::string& url ); @@ -177,7 +177,7 @@ namespace SKELETON virtual COMMAND_ARGS url_to_openarg( const std::string& url, const bool tab, const bool lock ) = 0; // COMMAND_ARGS からビューの URL を取得する - virtual const std::string command_to_url( const COMMAND_ARGS& command ){ return command.url; } + virtual std::string command_to_url( const COMMAND_ARGS& command ){ return command.url; } // view_modeに該当するページを探す virtual int find_view( const std::string& view_mode ){ return -1; }; @@ -344,7 +344,7 @@ namespace SKELETON // タブの切り替え履歴を更新 void append_switchhistory( const std::string& url ); void remove_switchhistory( const std::string& url ); - const std::string get_valid_switchhistory(); + std::string get_valid_switchhistory(); }; } diff --git a/src/skeleton/label_entry.cpp b/src/skeleton/label_entry.cpp index 12907d80d7..c56f76e8af 100644 --- a/src/skeleton/label_entry.cpp +++ b/src/skeleton/label_entry.cpp @@ -70,7 +70,7 @@ void LabelEntry::set_text( const std::string& text ) } -const Glib::ustring LabelEntry::get_text() +Glib::ustring LabelEntry::get_text() const { if( m_editable ) return m_entry.get_text(); return m_info.get_text(); diff --git a/src/skeleton/label_entry.h b/src/skeleton/label_entry.h index cad4677435..52bab44777 100644 --- a/src/skeleton/label_entry.h +++ b/src/skeleton/label_entry.h @@ -36,7 +36,7 @@ namespace SKELETON void set_label( const std::string& label ); void set_text( const std::string& text ); - const Glib::ustring get_text(); + Glib::ustring get_text() const; void grab_focus(); bool has_grab(); diff --git a/src/skeleton/loadable.cpp b/src/skeleton/loadable.cpp index 6ca2d28089..3e4835a0a2 100644 --- a/src/skeleton/loadable.cpp +++ b/src/skeleton/loadable.cpp @@ -212,7 +212,7 @@ int Loadable::get_loader_code() } -const std::string Loadable::get_loader_str_code() +std::string Loadable::get_loader_str_code() { if( ! m_loader ) return std::string(); @@ -220,7 +220,7 @@ const std::string Loadable::get_loader_str_code() } -const std::string Loadable::get_loader_contenttype() +std::string Loadable::get_loader_contenttype() { if( ! m_loader ) return std::string(); @@ -228,7 +228,7 @@ const std::string Loadable::get_loader_contenttype() } -const std::string Loadable::get_loader_modified() +std::string Loadable::get_loader_modified() { if( ! m_loader ) return std::string(); @@ -244,7 +244,7 @@ const std::list< std::string > Loadable::get_loader_cookies() } -const std::string Loadable::get_loader_location() +std::string Loadable::get_loader_location() { if( ! m_loader ) return std::string(); diff --git a/src/skeleton/loadable.h b/src/skeleton/loadable.h index 39458b85c2..6acbaa2028 100644 --- a/src/skeleton/loadable.h +++ b/src/skeleton/loadable.h @@ -142,11 +142,11 @@ namespace SKELETON void callback_dispatch() override; int get_loader_code(); - const std::string get_loader_str_code(); - const std::string get_loader_contenttype(); - const std::string get_loader_modified(); + std::string get_loader_str_code(); + std::string get_loader_contenttype(); + std::string get_loader_modified(); const std::list< std::string > get_loader_cookies(); - const std::string get_loader_location(); + std::string get_loader_location(); size_t get_loader_length(); }; } diff --git a/src/skeleton/textloader.h b/src/skeleton/textloader.h index 1d1707bf1c..b918fa2cc7 100644 --- a/src/skeleton/textloader.h +++ b/src/skeleton/textloader.h @@ -47,9 +47,9 @@ namespace SKELETON protected: - virtual const std::string get_url() = 0; - virtual const std::string get_path() = 0; - virtual const std::string get_charset() = 0; + virtual std::string get_url() = 0; + virtual std::string get_path() = 0; + virtual std::string get_charset() = 0; // ロード用データ作成 virtual void create_loaderdata( JDLIB::LOADERDATA& data ) = 0; diff --git a/src/skeleton/toolbar.cpp b/src/skeleton/toolbar.cpp index 0fd872b3a1..864d07aa17 100644 --- a/src/skeleton/toolbar.cpp +++ b/src/skeleton/toolbar.cpp @@ -521,7 +521,7 @@ void ToolBar::add_search_control_mode( const int mode ) } -const std::string ToolBar::get_search_text() +std::string ToolBar::get_search_text() { if( ! m_entry_search ) return std::string(); diff --git a/src/skeleton/toolbar.h b/src/skeleton/toolbar.h index 798f479241..3d625395b3 100644 --- a/src/skeleton/toolbar.h +++ b/src/skeleton/toolbar.h @@ -143,7 +143,7 @@ namespace SKELETON // CompletionEntry の入力コントローラのモード設定 void add_search_control_mode( const int mode ); - const std::string get_search_text(); + std::string get_search_text(); // 上検索 Gtk::ToolButton* get_button_up_search(); diff --git a/src/skeleton/view.cpp b/src/skeleton/view.cpp index 73a2716e44..ae38ba8e46 100644 --- a/src/skeleton/view.cpp +++ b/src/skeleton/view.cpp @@ -275,7 +275,7 @@ void View::slot_hide_popupmenu() // // ラベルやステータスバーの色 // -const std::string View::get_color() +std::string View::get_color() { if( is_broken() ) return "red"; else if( is_old() ) return "blue"; diff --git a/src/skeleton/view.h b/src/skeleton/view.h index 87a1673909..87bf24b5a4 100644 --- a/src/skeleton/view.h +++ b/src/skeleton/view.h @@ -210,7 +210,7 @@ namespace SKELETON const std::string& arg2 = {} ) { return true; } // コピー用のURL - virtual const std::string url_for_copy(){ return m_url; } + virtual std::string url_for_copy(){ return m_url; } // ツールバーのラベルに表示する文字列 const std::string& get_label(){ return m_label; } @@ -259,7 +259,7 @@ namespace SKELETON virtual bool is_broken(){ return false; } // ラベルやステータスバーの色 - const std::string get_color(); + std::string get_color(); // キーを押した virtual bool slot_key_press( GdkEventKey* event ){ return false; } diff --git a/src/urlreplacemanager.h b/src/urlreplacemanager.h index 040c207fc0..14c51eb1c3 100644 --- a/src/urlreplacemanager.h +++ b/src/urlreplacemanager.h @@ -42,21 +42,21 @@ namespace CORE virtual ~Urlreplace_Manager() noexcept {} // URLを任意の正規表現で変換する - bool exec( std::string &url ); + bool exec( std::string& url ); // URLからリファラを求める - bool referer( const std::string &url, std::string &referer ); + bool referer( const std::string& url, std::string& referer ); // URLの画像コントロールを取得する - int get_imgctrl( const std::string &url ); + int get_imgctrl( const std::string& url ); private: void conf2list( const std::string& conf ); - int get_imgctrl_impl( const std::string &url ); + int get_imgctrl_impl( const std::string& url ); // 置換文字列を変換 - void replace( JDLIB::Regex ®ex, std::string &str ); + void replace( JDLIB::Regex& regex, std::string& str ); }; /////////////////////////////////////// diff --git a/src/usrcmdmanager.cpp b/src/usrcmdmanager.cpp index 49e633bc45..ef680f6510 100644 --- a/src/usrcmdmanager.cpp +++ b/src/usrcmdmanager.cpp @@ -291,12 +291,11 @@ bool Usrcmd_Manager::show_replacetextdiag( std::string& texti, const std::string // コマンド置換 // cmdの$URLをurl, $LINKをlink, $TEXT*をtext, $NUMBERをnumberで置き換えて出力 // text は UTF-8 であること -const std::string Usrcmd_Manager::replace_cmd( const std::string& cmd, - const std::string& url, - const std::string& link, - const std::string& text, - const int number - ) +std::string Usrcmd_Manager::replace_cmd( const std::string& cmd, + const std::string& url, + const std::string& link, + const std::string& text, + const int number ) { std::string cmd_out = cmd; const std::string oldhostl = DBTREE::article_org_host( link ); @@ -490,7 +489,7 @@ bool Usrcmd_Manager::is_hide( int num, const std::string& url ) // // ユーザコマンドの登録とメニュー作成 // -const std::string Usrcmd_Manager::create_usrcmd_menu( Glib::RefPtr< Gtk::ActionGroup >& action_group ) +std::string Usrcmd_Manager::create_usrcmd_menu( Glib::RefPtr< Gtk::ActionGroup >& action_group ) { int dirno = 0; int cmdno = 0; @@ -499,8 +498,8 @@ const std::string Usrcmd_Manager::create_usrcmd_menu( Glib::RefPtr< Gtk::ActionG } // ユーザコマンドの登録とメニュー作成(再帰用) -const std::string Usrcmd_Manager::create_usrcmd_menu( Glib::RefPtr< Gtk::ActionGroup >& action_group, - XML::Dom* dom, int& dirno, int& cmdno ) +std::string Usrcmd_Manager::create_usrcmd_menu( Glib::RefPtr< Gtk::ActionGroup >& action_group, + XML::Dom* dom, int& dirno, int& cmdno ) { std::string menu; if( ! dom ) return menu; diff --git a/src/usrcmdmanager.h b/src/usrcmdmanager.h index 01226983f2..2202ebdf4e 100644 --- a/src/usrcmdmanager.h +++ b/src/usrcmdmanager.h @@ -54,17 +54,16 @@ namespace CORE // コマンド置換 // cmdの$URLをurl, $LINKをlink, $TEXT*をtext, $NUMBERをnumberで置き換えて出力 // text は UTF-8 であること - const std::string replace_cmd( const std::string& cmd, - const std::string& url, - const std::string& link, - const std::string& text, - const int number - ); + std::string replace_cmd( const std::string& cmd, + const std::string& url, + const std::string& link, + const std::string& text, + const int number ); // ユーザコマンドメニューの作成 - const std::string create_usrcmd_menu( Glib::RefPtr< Gtk::ActionGroup >& action_group ); - const std::string create_usrcmd_menu( Glib::RefPtr< Gtk::ActionGroup >& action_group, - XML::Dom* dom, int& dirno, int& cmdno ); + std::string create_usrcmd_menu( Glib::RefPtr< Gtk::ActionGroup >& action_group ); + std::string create_usrcmd_menu( Glib::RefPtr< Gtk::ActionGroup >& action_group, + XML::Dom* dom, int& dirno, int& cmdno ); Glib::RefPtr< Gtk::Action > get_action( Glib::RefPtr< Gtk::ActionGroup >& action_group, const int num ); diff --git a/src/usrcmdpref.h b/src/usrcmdpref.h index a56fd8f013..4f57135134 100644 --- a/src/usrcmdpref.h +++ b/src/usrcmdpref.h @@ -27,8 +27,8 @@ namespace CORE UsrCmdDiag( Gtk::Window* parent, const Glib::ustring& name, const Glib::ustring& cmd ); - const Glib::ustring get_name() { return m_entry_name.get_text(); } - const Glib::ustring get_cmd() { return m_entry_cmd.get_text(); } + Glib::ustring get_name() { return m_entry_name.get_text(); } + Glib::ustring get_cmd() { return m_entry_cmd.get_text(); } private: void slot_show_manual(); diff --git a/src/xml/dom.cpp b/src/xml/dom.cpp index 11ba1a3460..0e00bddc8f 100644 --- a/src/xml/dom.cpp +++ b/src/xml/dom.cpp @@ -535,7 +535,7 @@ int Dom::nodeType() return m_nodeType; } -const std::string Dom::nodeName() +std::string Dom::nodeName() { return m_nodeName; } diff --git a/src/xml/dom.h b/src/xml/dom.h index c4eb6d50b2..07e95f8a33 100644 --- a/src/xml/dom.h +++ b/src/xml/dom.h @@ -101,7 +101,7 @@ namespace XML // プロパティを扱うアクセッサ int nodeType(); - const std::string nodeName(); + std::string nodeName(); std::string nodeValue(); void nodeValue( const std::string& value ); From 09b6bf428442f5daba1b13805103d69583c3e6d8 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 19 Dec 2018 21:52:07 +0900 Subject: [PATCH 42/51] Remove const qualifier of return type for std::vector and std::list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit C++11モードではmoveの妨げになるので戻り値のconstを取り除く --- src/control/buttonpref.cpp | 5 ++--- src/control/buttonpref.h | 2 +- src/control/controlutil.cpp | 6 +++--- src/control/controlutil.h | 6 +++--- src/control/keypref.cpp | 2 +- src/control/keypref.h | 2 +- src/control/mousekeyconf.cpp | 2 +- src/control/mousekeyconf.h | 2 +- src/control/mousekeypref.h | 2 +- src/control/mousepref.cpp | 2 +- src/control/mousepref.h | 2 +- src/dbtree/articlebase.cpp | 2 +- src/dbtree/articlebase.h | 2 +- src/dbtree/boardbase.cpp | 2 +- src/dbtree/boardbase.h | 2 +- src/dbtree/interface.cpp | 2 +- src/dbtree/interface.h | 2 +- src/dbtree/nodetreebase.cpp | 2 +- src/dbtree/nodetreebase.h | 2 +- src/image/imageadmin.cpp | 2 +- src/image/imageadmin.h | 2 +- src/jdlib/miscutil.cpp | 20 ++++++++++---------- src/jdlib/miscutil.h | 21 +++++++++++---------- src/skeleton/admin.cpp | 2 +- src/skeleton/admin.h | 2 +- src/skeleton/loadable.cpp | 2 +- src/skeleton/loadable.h | 2 +- 27 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/control/buttonpref.cpp b/src/control/buttonpref.cpp index 283e148074..2240399d76 100644 --- a/src/control/buttonpref.cpp +++ b/src/control/buttonpref.cpp @@ -42,11 +42,10 @@ std::string ButtonDiag::get_default_motions( const int id ) } -const std::vector< int > ButtonDiag::check_conflict( const int mode, const std::string& str_motion ) +std::vector< int > ButtonDiag::check_conflict( const int mode, const std::string& str_motion ) { // 衝突判定をしない - std::vector< int > vec_ids; - return vec_ids; + return {}; } diff --git a/src/control/buttonpref.h b/src/control/buttonpref.h index 55062ae44d..7eaf44bcd2 100644 --- a/src/control/buttonpref.h +++ b/src/control/buttonpref.h @@ -41,7 +41,7 @@ namespace CONTROL InputDiag* create_inputdiag() override; std::string get_default_motions( const int id ) override; - const std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; + std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; }; diff --git a/src/control/controlutil.cpp b/src/control/controlutil.cpp index 0762098a80..418e3a77df 100644 --- a/src/control/controlutil.cpp +++ b/src/control/controlutil.cpp @@ -768,7 +768,7 @@ bool CONTROL::remove_keymotions( const int id ) // キーボード操作が重複していないか -const std::vector< int > CONTROL::check_key_conflict( const int mode, const std::string& str_motion ) +std::vector< int > CONTROL::check_key_conflict( const int mode, const std::string& str_motion ) { return CONTROL::get_keyconfig()->check_conflict( mode, str_motion ); } @@ -877,7 +877,7 @@ bool CONTROL::remove_mousemotions( const int id ) // マウスジェスチャが重複していないか -const std::vector< int > CONTROL::check_mouse_conflict( const int mode, const std::string& str_motion ) +std::vector< int > CONTROL::check_mouse_conflict( const int mode, const std::string& str_motion ) { const std::string motion = convert_mouse_motions_reverse( str_motion ); return CONTROL::get_mouseconfig()->check_conflict( mode, motion ); @@ -930,7 +930,7 @@ bool CONTROL::remove_buttonmotions( const int id ) // ボタンが重複していないか -const std::vector< int > CONTROL::check_button_conflict( const int mode, const std::string& str_motion ) +std::vector< int > CONTROL::check_button_conflict( const int mode, const std::string& str_motion ) { return CONTROL::get_buttonconfig()->check_conflict( mode, str_motion ); } diff --git a/src/control/controlutil.h b/src/control/controlutil.h index 6fad44571b..1e701f3e48 100644 --- a/src/control/controlutil.h +++ b/src/control/controlutil.h @@ -92,7 +92,7 @@ namespace CONTROL bool remove_keymotions( const int id ); // キーボード操作が重複していないか - const std::vector< int > check_key_conflict( const int mode, const std::string& str_motion ); + std::vector< int > check_key_conflict( const int mode, const std::string& str_motion ); // editviewの操作をemacs風にする bool is_emacs_mode(); @@ -126,7 +126,7 @@ namespace CONTROL bool remove_mousemotions( const int id ); // マウスジェスチャが重複していないか - const std::vector< int > check_mouse_conflict( const int mode, const std::string& str_motion ); + std::vector< int > check_mouse_conflict( const int mode, const std::string& str_motion ); /////////////////////// @@ -149,7 +149,7 @@ namespace CONTROL bool remove_buttonmotions( const int id ); // ボタンが重複していないか - const std::vector< int > check_button_conflict( const int mode, const std::string& str_motion ); + std::vector< int > check_button_conflict( const int mode, const std::string& str_motion ); /////////////////////// diff --git a/src/control/keypref.cpp b/src/control/keypref.cpp index b3f83437f1..66a6b5a8d6 100644 --- a/src/control/keypref.cpp +++ b/src/control/keypref.cpp @@ -48,7 +48,7 @@ std::string KeyDiag::get_default_motions( const int id ) } -const std::vector< int > KeyDiag::check_conflict( const int mode, const std::string& str_motion ) +std::vector< int > KeyDiag::check_conflict( const int mode, const std::string& str_motion ) { return CONTROL::check_key_conflict( mode, str_motion ); } diff --git a/src/control/keypref.h b/src/control/keypref.h index 54e3b71fb1..1a3f6bd1ee 100644 --- a/src/control/keypref.h +++ b/src/control/keypref.h @@ -39,7 +39,7 @@ namespace CONTROL InputDiag* create_inputdiag() override; std::string get_default_motions( const int id ) override; - const std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; + std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; }; diff --git a/src/control/mousekeyconf.cpp b/src/control/mousekeyconf.cpp index 90fe222f75..cb4cb2f15e 100644 --- a/src/control/mousekeyconf.cpp +++ b/src/control/mousekeyconf.cpp @@ -124,7 +124,7 @@ bool MouseKeyConf::alloted( const int id, // 同じモード内でモーションが重複していないかチェック -const std::vector< int > MouseKeyConf::check_conflict( const int mode, const std::string& str_motion ) +std::vector< int > MouseKeyConf::check_conflict( const int mode, const std::string& str_motion ) { std::vector< int > vec_ids; diff --git a/src/control/mousekeyconf.h b/src/control/mousekeyconf.h index a3e3da3af8..e2209570f3 100644 --- a/src/control/mousekeyconf.h +++ b/src/control/mousekeyconf.h @@ -57,7 +57,7 @@ namespace CONTROL // 同じモード内でモーションが重複していないかチェック // 戻り値 : コントロールID - const std::vector< int > check_conflict( const int mode, const std::string& str_motion ); + std::vector< int > check_conflict( const int mode, const std::string& str_motion ); // スペースで区切られた複数の操作をデータベースに登録 void set_motions( const int id, const std::string& str_motions ); diff --git a/src/control/mousekeypref.h b/src/control/mousekeypref.h index 7c3a9f01b1..6f43c0f4d2 100644 --- a/src/control/mousekeypref.h +++ b/src/control/mousekeypref.h @@ -118,7 +118,7 @@ namespace CONTROL virtual InputDiag* create_inputdiag() = 0; virtual std::string get_default_motions( const int id ) = 0; - virtual const std::vector< int > check_conflict( const int mode, const std::string& str_motion ) = 0; + virtual std::vector< int > check_conflict( const int mode, const std::string& str_motion ) = 0; private: diff --git a/src/control/mousepref.cpp b/src/control/mousepref.cpp index 7c07f1fcfd..fc95a31a14 100644 --- a/src/control/mousepref.cpp +++ b/src/control/mousepref.cpp @@ -42,7 +42,7 @@ std::string MouseDiag::get_default_motions( const int id ) } -const std::vector< int > MouseDiag::check_conflict( const int mode, const std::string& str_motion ) +std::vector< int > MouseDiag::check_conflict( const int mode, const std::string& str_motion ) { return CONTROL::check_mouse_conflict( mode, str_motion ); } diff --git a/src/control/mousepref.h b/src/control/mousepref.h index e9acc8a326..990e4fca12 100644 --- a/src/control/mousepref.h +++ b/src/control/mousepref.h @@ -40,7 +40,7 @@ namespace CONTROL InputDiag* create_inputdiag() override; std::string get_default_motions( const int id ) override; - const std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; + std::vector< int > check_conflict( const int mode, const std::string& str_motion ) override; }; diff --git a/src/dbtree/articlebase.cpp b/src/dbtree/articlebase.cpp index 8b5549e369..8bc7a45f7a 100644 --- a/src/dbtree/articlebase.cpp +++ b/src/dbtree/articlebase.cpp @@ -322,7 +322,7 @@ std::list< int > ArticleBase::get_res_with_url() // // mode_or == true なら OR抽出 // -const std::list< int > ArticleBase::get_res_query( const std::string& query, const bool mode_or ) +std::list< int > ArticleBase::get_res_query( const std::string& query, const bool mode_or ) { if( empty() ){ std::list< int > tmp; return tmp; } diff --git a/src/dbtree/articlebase.h b/src/dbtree/articlebase.h index fdac34f2d2..df3dea077c 100644 --- a/src/dbtree/articlebase.h +++ b/src/dbtree/articlebase.h @@ -206,7 +206,7 @@ namespace DBTREE // query を含むレス番号をリストにして取得 // mode_or == true なら OR抽出 - const std::list< int > get_res_query( const std::string& query, const bool mode_or ); + std::list< int > get_res_query( const std::string& query, const bool mode_or ); // number番のレスの文字列を返す // ref == true なら先頭に ">" を付ける diff --git a/src/dbtree/boardbase.cpp b/src/dbtree/boardbase.cpp index 80339d73fb..b7d7ca861b 100644 --- a/src/dbtree/boardbase.cpp +++ b/src/dbtree/boardbase.cpp @@ -2341,7 +2341,7 @@ void BoardBase::show_updateicon( const bool update ) // 板の更新チェック時に、更新チェックを行うスレのアドレスのリスト // キャッシュが存在し、かつdat落ちしていないで新着数が0のスレを速度の順でソートして返す -const std::list< std::string > BoardBase::get_check_update_articles() +std::list< std::string > BoardBase::get_check_update_articles() { std::list< std::string > list_url; diff --git a/src/dbtree/boardbase.h b/src/dbtree/boardbase.h index bf59d5aa70..1736930748 100644 --- a/src/dbtree/boardbase.h +++ b/src/dbtree/boardbase.h @@ -554,7 +554,7 @@ namespace DBTREE // 板の更新チェック時に、更新チェックを行うスレのアドレスのリスト // キャッシュが存在し、かつdat落ちしていないで新着数が0のスレを速度の順でソートして返す - const std::list< std::string > get_check_update_articles(); + std::list< std::string > get_check_update_articles(); private: diff --git a/src/dbtree/interface.cpp b/src/dbtree/interface.cpp index a9560e645c..bd3824d2b8 100644 --- a/src/dbtree/interface.cpp +++ b/src/dbtree/interface.cpp @@ -619,7 +619,7 @@ void DBTREE::board_show_updateicon( const std::string& url, const bool update ) DBTREE::get_board( url )->show_updateicon( update ); } -const std::list< std::string > DBTREE::board_get_check_update_articles( const std::string& url ) +std::list< std::string > DBTREE::board_get_check_update_articles( const std::string& url ) { return DBTREE::get_board( url )->get_check_update_articles(); } diff --git a/src/dbtree/interface.h b/src/dbtree/interface.h index 02acef5a45..09b7f5328c 100644 --- a/src/dbtree/interface.h +++ b/src/dbtree/interface.h @@ -163,7 +163,7 @@ namespace DBTREE // 板の更新チェック時に、更新チェックを行うスレのアドレスのリスト // キャッシュが存在し、かつdat落ちしていないで新着数が0のスレを速度の順でソートして返す - const std::list< std::string > board_get_check_update_articles( const std::string& url ); + std::list< std::string > board_get_check_update_articles( const std::string& url ); // datファイルのインポート // 成功したらdat型のurlを返す diff --git a/src/dbtree/nodetreebase.cpp b/src/dbtree/nodetreebase.cpp index 9d4c28cb93..fb7fb2f10a 100644 --- a/src/dbtree/nodetreebase.cpp +++ b/src/dbtree/nodetreebase.cpp @@ -547,7 +547,7 @@ std::list< ANCINFO* > NodeTreeBase::get_res_anchors( const int number ) // // mode_or == true なら OR抽出 // -const std::list< int > NodeTreeBase::get_res_query( const std::string& query, const bool mode_or ) +std::list< int > NodeTreeBase::get_res_query( const std::string& query, const bool mode_or ) { std::list< int > list_resnum; if( query.empty() ) return list_resnum; diff --git a/src/dbtree/nodetreebase.h b/src/dbtree/nodetreebase.h index a1c12c2394..3d53a48f89 100644 --- a/src/dbtree/nodetreebase.h +++ b/src/dbtree/nodetreebase.h @@ -204,7 +204,7 @@ namespace DBTREE // query を含むレス番号をリストにして取得 // mode_or == true なら OR抽出 - const std::list< int > get_res_query( const std::string& query, const bool mode_or ); + std::list< int > get_res_query( const std::string& query, const bool mode_or ); // number番のレスの文字列を返す diff --git a/src/image/imageadmin.cpp b/src/image/imageadmin.cpp index e8011e5311..af46b82f2a 100644 --- a/src/image/imageadmin.cpp +++ b/src/image/imageadmin.cpp @@ -181,7 +181,7 @@ int ImageAdmin::get_tab_nums() // // 含まれているページのURLのリスト取得 // -const std::list< std::string > ImageAdmin::get_URLs() +std::list< std::string > ImageAdmin::get_URLs() { std::list< std::string > urls; m_iconbox.foreach( [&urls]( Gtk::Widget& w ) { diff --git a/src/image/imageadmin.h b/src/image/imageadmin.h index bed5806f2d..c486b253e0 100644 --- a/src/image/imageadmin.h +++ b/src/image/imageadmin.h @@ -50,7 +50,7 @@ namespace IMAGE int get_tab_nums() override; // 含まれているページのURLのリスト取得 - const std::list< std::string > get_URLs() override; + std::list< std::string > get_URLs() override; // 現在表示してるページ番号 int get_current_page() override; diff --git a/src/jdlib/miscutil.cpp b/src/jdlib/miscutil.cpp index d53cbb3294..242a9b73b1 100644 --- a/src/jdlib/miscutil.cpp +++ b/src/jdlib/miscutil.cpp @@ -21,7 +21,7 @@ // // str を "\n" ごとに区切ってlistにして出力 // -const std::list< std::string > MISC::get_lines( const std::string& str ){ +std::list< std::string > MISC::get_lines( const std::string& str ){ std::list< std::string > lines; size_t i = 0, i2 = 0, r = 0; @@ -44,7 +44,7 @@ const std::list< std::string > MISC::get_lines( const std::string& str ){ // // emacs lisp のリスト型を要素ごとにlistにして出力 // -const std::list< std::string > MISC::get_elisp_lists( const std::string& str ) +std::list< std::string > MISC::get_elisp_lists( const std::string& str ) { #ifdef _DEBUG std::cout << "MISC::get_elisp_lists\n"; @@ -109,7 +109,7 @@ const std::list< std::string > MISC::get_elisp_lists( const std::string& str ) // // strを空白または "" 単位で区切って list で出力 // -const std::list< std::string > MISC::split_line( const std::string& str ) +std::list< std::string > MISC::split_line( const std::string& str ) { std::string str_space = " "; size_t lng_space = str_space.length(); @@ -176,7 +176,7 @@ const std::list< std::string > MISC::split_line( const std::string& str ) // strを delimで区切って list で出力 -const std::list< std::string > MISC::StringTokenizer( const std::string& str, const char delim ) +std::list< std::string > MISC::StringTokenizer( const std::string& str, const char delim ) { std::list< std::string > list_str; @@ -198,7 +198,7 @@ const std::list< std::string > MISC::StringTokenizer( const std::string& str, co // // list_inから空白行を除いてリストを返す // -const std::list< std::string > MISC::remove_nullline_from_list( const std::list< std::string >& list_in ) +std::list< std::string > MISC::remove_nullline_from_list( const std::list< std::string >& list_in ) { std::list< std::string > list_ret; std::list< std::string >::const_iterator it; @@ -214,7 +214,7 @@ const std::list< std::string > MISC::remove_nullline_from_list( const std::list< // // list_inの各行から前後の空白を除いてリストを返す // -const std::list< std::string > MISC::remove_space_from_list( const std::list< std::string >& list_in ) +std::list< std::string > MISC::remove_space_from_list( const std::list< std::string >& list_in ) { std::list< std::string > list_ret; std::list< std::string >::const_iterator it; @@ -230,7 +230,7 @@ const std::list< std::string > MISC::remove_space_from_list( const std::list< st // // list_inからコメント行(#)を除いてリストを返す // -const std::list< std::string > MISC::remove_commentline_from_list( const std::list< std::string >& list_in ) +std::list< std::string > MISC::remove_commentline_from_list( const std::list< std::string >& list_in ) { const char commentchr = '#'; @@ -253,7 +253,7 @@ const std::list< std::string > MISC::remove_commentline_from_list( const std::li // // (例) "aaa" "bbb" "\"ccc\"" → aaa と bbb と "ccc" // -const std::list< std::string > MISC::strtolist( const std::string& str_in ) +std::list< std::string > MISC::strtolist( const std::string& str_in ) { std::list< std::string > list_tmp; std::list< std::string > list_ret; @@ -451,7 +451,7 @@ std::string MISC::replace_str( const std::string& str, const std::string& str1, // // list_inから str1 を str2 に置き換えてリストを返す // -const std::list< std::string > MISC::replace_str_list( const std::list< std::string >& list_in, +std::list< std::string > MISC::replace_str_list( const std::list< std::string >& list_in, const std::string& str1, const std::string& str2 ) { std::list< std::string > list_out; @@ -1552,7 +1552,7 @@ std::string MISC::toupper_str( const std::string& str ) // // list 内のアイテムを全部大文字化 // -const std::list< std::string > MISC::toupper_list( const std::list< std::string >& list_str ) +std::list< std::string > MISC::toupper_list( const std::list< std::string >& list_str ) { std::list< std::string > list_out; std::list< std::string >::const_iterator it = list_str.begin(); diff --git a/src/jdlib/miscutil.h b/src/jdlib/miscutil.h index cd4154ca2f..11eb1f51a4 100644 --- a/src/jdlib/miscutil.h +++ b/src/jdlib/miscutil.h @@ -44,30 +44,30 @@ namespace MISC }; // str を "\n" ごとに区切ってlistにして出力 - const std::list< std::string > get_lines( const std::string& str ); + std::list< std::string > get_lines( const std::string& str ); // strを空白または "" 単位で区切って list で出力 - const std::list< std::string > split_line( const std::string& str ); + std::list< std::string > split_line( const std::string& str ); // strを delimで区切って list で出力 - const std::list< std::string > StringTokenizer( const std::string& str, const char delim ); + std::list< std::string > StringTokenizer( const std::string& str, const char delim ); // emacs lisp のリスト型を要素ごとにlistにして出力 - const std::list< std::string > get_elisp_lists( const std::string& str ); + std::list< std::string > get_elisp_lists( const std::string& str ); // list_inから空白行を除いてリストを返す - const std::list< std::string > remove_nullline_from_list( const std::list< std::string >& list_in ); + std::list< std::string > remove_nullline_from_list( const std::list< std::string >& list_in ); // list_inの各行から前後の空白を除いてリストを返す - const std::list< std::string > remove_space_from_list( const std::list< std::string >& list_in ); + std::list< std::string > remove_space_from_list( const std::list< std::string >& list_in ); // list_inからコメント行(#)を除いてリストを返す - const std::list< std::string > remove_commentline_from_list( const std::list< std::string >& list_in ); + std::list< std::string > remove_commentline_from_list( const std::list< std::string >& list_in ); // 空白と""で区切られた str_in の文字列をリストにして出力 // \"は " に置換される // (例) "aaa" "bbb" "\"ccc\"" → aaa と bbb と "ccc" - const std::list< std::string > strtolist( const std::string& str_in ); + std::list< std::string > strtolist( const std::string& str_in ); // list_in の文字列リストを空白と""で区切ってストリングにして出力 // "は \" に置換される @@ -96,7 +96,8 @@ namespace MISC std::string replace_str( const std::string& str, const std::string& str1, const std::string& str2 ); // list_inから str1 を str2 に置き換えてリストを返す - const std::list< std::string > replace_str_list( const std::list< std::string >& list_in, const std::string& str1, const std::string& str2 ); + std::list< std::string > replace_str_list( const std::list< std::string >& list_in, + const std::string& str1, const std::string& str2 ); // str_in に含まれる改行文字を replace に置き換え std::string replace_newlines_to_str( const std::string& str_in, const std::string& replace ); @@ -237,7 +238,7 @@ namespace MISC std::string toupper_str( const std::string& str ); // list 内のアイテムを全部大文字化 - const std::list< std::string > toupper_list( const std::list< std::string >& list_str ); + std::list< std::string > toupper_list( const std::list< std::string >& list_str ); //str を小文字化 std::string tolower_str( const std::string& str ); diff --git a/src/skeleton/admin.cpp b/src/skeleton/admin.cpp index 0581fe69da..cd25416182 100644 --- a/src/skeleton/admin.cpp +++ b/src/skeleton/admin.cpp @@ -324,7 +324,7 @@ int Admin::get_tab_nums() // // 含まれているページのURLのリスト取得 // -const std::list Admin::get_URLs() +std::list Admin::get_URLs() { std::list urls; diff --git a/src/skeleton/admin.h b/src/skeleton/admin.h index 83b2e367f1..7f9a825ab0 100644 --- a/src/skeleton/admin.h +++ b/src/skeleton/admin.h @@ -86,7 +86,7 @@ namespace SKELETON virtual int get_tab_nums(); // 含まれているページのURLのリスト取得 - virtual const std::list< std::string > get_URLs(); + virtual std::list< std::string > get_URLs(); // Core からのクロック入力。 // Coreでタイマーをひとつ動かして全体の同期を取るようにしているので diff --git a/src/skeleton/loadable.cpp b/src/skeleton/loadable.cpp index 3e4835a0a2..842acbd1be 100644 --- a/src/skeleton/loadable.cpp +++ b/src/skeleton/loadable.cpp @@ -236,7 +236,7 @@ std::string Loadable::get_loader_modified() } -const std::list< std::string > Loadable::get_loader_cookies() +std::list< std::string > Loadable::get_loader_cookies() { if( ! m_loader ) return std::list< std::string >(); diff --git a/src/skeleton/loadable.h b/src/skeleton/loadable.h index 6acbaa2028..1d6b45c507 100644 --- a/src/skeleton/loadable.h +++ b/src/skeleton/loadable.h @@ -145,7 +145,7 @@ namespace SKELETON std::string get_loader_str_code(); std::string get_loader_contenttype(); std::string get_loader_modified(); - const std::list< std::string > get_loader_cookies(); + std::list< std::string > get_loader_cookies(); std::string get_loader_location(); size_t get_loader_length(); }; From 9313fb246bd8612fd50c1d21dfaa1fd5d9f3d182 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 19 Dec 2018 22:29:06 +0900 Subject: [PATCH 43/51] Remove const reference qualifier for arithmetic types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 算術型の引数と戻り値はconst参照を取り除き値渡し/値返しする --- src/article/drawareabase.h | 4 ++-- src/bbslist/bbslistviewbase.h | 2 +- src/config/aboutconfig.cpp | 4 ++-- src/config/aboutconfig.h | 4 ++-- src/dbtree/articlebase.h | 6 +++--- src/dbtree/boardbase.cpp | 2 +- src/dbtree/boardbase.h | 4 ++-- src/dbtree/boardlocal.h | 2 +- src/dbtree/interface.cpp | 4 ++-- src/dbtree/interface.h | 4 ++-- src/dbtree/root.cpp | 2 +- src/dbtree/root.h | 2 +- src/jdlib/misctime.cpp | 2 +- src/jdlib/misctime.h | 2 +- src/skeleton/dragtreeview.cpp | 2 +- src/skeleton/dragtreeview.h | 2 +- src/skeleton/tooltip.h | 2 +- src/xml/dom.cpp | 4 ++-- src/xml/dom.h | 4 ++-- 19 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/article/drawareabase.h b/src/article/drawareabase.h index 413691a362..94b8acc9e3 100644 --- a/src/article/drawareabase.h +++ b/src/article/drawareabase.h @@ -251,8 +251,8 @@ namespace ARTICLE ~DrawAreaBase(); const std::string& get_url() const { return m_url; } - const int& width_client() const { return m_width_client; } - const int& height_client() const { return m_height_client; } + int width_client() const { return m_width_client; } + int height_client() const { return m_height_client; } void clock_in(); void clock_in_smooth_scroll(); diff --git a/src/bbslist/bbslistviewbase.h b/src/bbslist/bbslistviewbase.h index ebd2f6312c..73ff1d96b4 100644 --- a/src/bbslist/bbslistviewbase.h +++ b/src/bbslist/bbslistviewbase.h @@ -103,7 +103,7 @@ namespace BBSLIST Glib::RefPtr< Gtk::TreeStore >& get_treestore() { return m_treestore; } SKELETON::EditTreeView& get_treeview() { return m_treeview; } - const bool& get_ready_tree() const{ return m_ready_tree; } + bool get_ready_tree() const { return m_ready_tree; } void set_open_only_onedir( const bool set ){ m_open_only_onedir = set; } void activate_act_before_popupmenu( const std::string& url ) override; diff --git a/src/config/aboutconfig.cpp b/src/config/aboutconfig.cpp index 2b97ebf296..aafe5aec1b 100644 --- a/src/config/aboutconfig.cpp +++ b/src/config/aboutconfig.cpp @@ -363,7 +363,7 @@ void AboutConfig::set_value( Gtk::TreeModel::Row& row, const std::string& value } -void AboutConfig::set_value( Gtk::TreeModel::Row& row, const int& value ) +void AboutConfig::set_value( Gtk::TreeModel::Row& row, const int value ) { row[ m_columns.m_col_value ] = MISC::itostr( value ); @@ -373,7 +373,7 @@ void AboutConfig::set_value( Gtk::TreeModel::Row& row, const int& value ) } -void AboutConfig::set_value( Gtk::TreeModel::Row& row, const bool& value ) +void AboutConfig::set_value( Gtk::TreeModel::Row& row, const bool value ) { if( value ) row[ m_columns.m_col_value ] = "はい"; else row[ m_columns.m_col_value ] = "いいえ"; diff --git a/src/config/aboutconfig.h b/src/config/aboutconfig.h index a367a47e74..4988eab2f6 100644 --- a/src/config/aboutconfig.h +++ b/src/config/aboutconfig.h @@ -78,8 +78,8 @@ namespace CONFIG void append_row( const std::string& comment ); void set_value( Gtk::TreeModel::Row& row, const std::string& value ); - void set_value( Gtk::TreeModel::Row& row, const int& value ); - void set_value( Gtk::TreeModel::Row& row, const bool& value ); + void set_value( Gtk::TreeModel::Row& row, const int value ); + void set_value( Gtk::TreeModel::Row& row, const bool value ); void slot_row_activated( const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column ); }; diff --git a/src/dbtree/articlebase.h b/src/dbtree/articlebase.h index df3dea077c..0190ffa494 100644 --- a/src/dbtree/articlebase.h +++ b/src/dbtree/articlebase.h @@ -238,12 +238,12 @@ namespace DBTREE // 最終アクセス時間 std::string get_access_time_str(); - const time_t& get_access_time() const { return m_access_time.tv_sec; } // 秒 + time_t get_access_time() const { return m_access_time.tv_sec; } // 秒 const std::string& get_access_date(); // string型 void reset_access_date(){ m_access_date = std::string(); } // 最終書き込み時間 - const time_t& get_write_time() const { return m_write_time.tv_sec; } // 秒 + time_t get_write_time() const { return m_write_time.tv_sec; } // 秒 const std::string& get_write_date(); // string型 void reset_write_date(){ m_write_time_date = std::string(); } @@ -263,7 +263,7 @@ namespace DBTREE void clear_post_history(); // スレ立て時刻 - const time_t& get_since_time() const { return m_since_time; }; + time_t get_since_time() const { return m_since_time; }; const std::string& get_since_date(); void reset_since_date(){ m_since_date = std::string(); } diff --git a/src/dbtree/boardbase.cpp b/src/dbtree/boardbase.cpp index b7d7ca861b..de005972a0 100644 --- a/src/dbtree/boardbase.cpp +++ b/src/dbtree/boardbase.cpp @@ -1847,7 +1847,7 @@ void BoardBase::search_cache( std::vector< DBTREE::ArticleBase* >& list_article, const std::string& query, const bool mode_or, // 今のところ無視 const bool bm, - const bool& stop // 呼出元のスレッドで true にセットすると検索を停止する + const bool stop // 呼出元のスレッドで true にセットすると検索を停止する ) { #ifdef _DEBUG diff --git a/src/dbtree/boardbase.h b/src/dbtree/boardbase.h index 1736930748..d56a93645f 100644 --- a/src/dbtree/boardbase.h +++ b/src/dbtree/boardbase.h @@ -496,7 +496,7 @@ namespace DBTREE // 最終書き込み時間 void update_writetime(); - const time_t& get_write_time() const { return m_write_time.tv_sec; } // 秒 + time_t get_write_time() const { return m_write_time.tv_sec; } // 秒 time_t get_write_pass(); // 経過時間(秒) time_t get_samba_sec() const { return m_samba_sec; } // samba(秒) void set_samba_sec( time_t sec ){ m_samba_sec = sec; } @@ -541,7 +541,7 @@ namespace DBTREE const std::string& query, const bool mode_or, // 今のところ無視 const bool bm, - const bool& stop // 呼出元のスレッドで true にセットすると検索を停止する + const bool stop // 呼出元のスレッドで true にセットすると検索を停止する ); // datファイルのインポート diff --git a/src/dbtree/boardlocal.h b/src/dbtree/boardlocal.h index 0171d4480a..4c35ddd402 100644 --- a/src/dbtree/boardlocal.h +++ b/src/dbtree/boardlocal.h @@ -32,7 +32,7 @@ namespace DBTREE // キャッシュサーチをキャンセル void search_cache( std::vector< ArticleBase* >&, const std::string&, const bool, const bool, - const bool& ) override {} + const bool ) override {} // datファイルのインポート std::string import_dat( const std::string& filename ) override; diff --git a/src/dbtree/interface.cpp b/src/dbtree/interface.cpp index bd3824d2b8..26a63a5b06 100644 --- a/src/dbtree/interface.cpp +++ b/src/dbtree/interface.cpp @@ -573,13 +573,13 @@ void DBTREE::read_boardinfo_all() } void DBTREE::search_cache_all( std::vector< DBTREE::ArticleBase* >& list_article, - const std::string& query, const bool mode_or, const bool bm, const bool& stop ) + const std::string& query, const bool mode_or, const bool bm, const bool stop ) { DBTREE::get_root()->search_cache( list_article, query, mode_or, bm, stop ); } void DBTREE::search_cache( const std::string& url, std::vector< DBTREE::ArticleBase* >& list_article, const std::string& query, - const bool mode_or, const bool bm, const bool& stop ) + const bool mode_or, const bool bm, const bool stop ) { DBTREE::get_board( url )->search_cache( list_article, query, mode_or, bm, stop ); } diff --git a/src/dbtree/interface.h b/src/dbtree/interface.h index 09b7f5328c..8e7462cd98 100644 --- a/src/dbtree/interface.h +++ b/src/dbtree/interface.h @@ -193,9 +193,9 @@ namespace DBTREE // query が空の時はキャッシュにあるログを全てヒットさせる // bm がtrueの時、しおりが付いている(スレ一覧でしおりを付けた or レスに一つでもしおりが付いている)スレのみを対象に検索する void search_cache_all( std::vector< DBTREE::ArticleBase* >& list_article, - const std::string& query, const bool mode_or, const bool bm, const bool& stop ); + const std::string& query, const bool mode_or, const bool bm, const bool stop ); void search_cache( const std::string& url, std::vector< DBTREE::ArticleBase* >& list_article, - const std::string& query, const bool mode_or, const bool bm, const bool& stop ); + const std::string& query, const bool mode_or, const bool bm, const bool stop ); // article 系 bool article_is_cached( const std::string& url ); // キャッシュにあるかどうか diff --git a/src/dbtree/root.cpp b/src/dbtree/root.cpp index 74a36c8892..86b8913dd4 100644 --- a/src/dbtree/root.cpp +++ b/src/dbtree/root.cpp @@ -1485,7 +1485,7 @@ void Root::save_articleinfo_all() // 全ログ検索 void Root::search_cache( std::vector< ArticleBase* >& list_article, - const std::string& query, const bool mode_or, const bool bm, const bool& stop ) + const std::string& query, const bool mode_or, const bool bm, const bool stop ) { std::list< BoardBase* >::iterator it; for( it = m_list_board.begin(); it != m_list_board.end(); ++it ){ diff --git a/src/dbtree/root.h b/src/dbtree/root.h index 27fd7916ea..3c0b3764f0 100644 --- a/src/dbtree/root.h +++ b/src/dbtree/root.h @@ -145,7 +145,7 @@ namespace DBTREE void save_articleinfo_all(); // 全ログ検索 - void search_cache( std::vector< ArticleBase* >& list_article, const std::string& query, const bool mode_or, const bool bm, const bool& stop ); + void search_cache( std::vector< ArticleBase* >& list_article, const std::string& query, const bool mode_or, const bool bm, const bool stop ); // 全てのスレの書き込み履歴削除 void clear_all_post_history(); diff --git a/src/jdlib/misctime.cpp b/src/jdlib/misctime.cpp index 03d52b2f4f..2890f5437f 100644 --- a/src/jdlib/misctime.cpp +++ b/src/jdlib/misctime.cpp @@ -126,7 +126,7 @@ time_t MISC::datetotime( const std::string& date ) // // time_t を月日の文字列に変換 // -std::string MISC::timettostr( const time_t& time_from, const int mode ) +std::string MISC::timettostr( const time_t time_from, const int mode ) { const int lng = 64; struct tm tm_tmp; diff --git a/src/jdlib/misctime.h b/src/jdlib/misctime.h index f46cec63b7..09230de415 100644 --- a/src/jdlib/misctime.h +++ b/src/jdlib/misctime.h @@ -37,7 +37,7 @@ namespace MISC // time_t を月日の文字列に変換 // (例) mode == TIME_NORMAL なら 1135785252 -> 2005/12/29 0:54 - std::string timettostr( const time_t& time_from, const int mode ); + std::string timettostr( const time_t time_from, const int mode ); // 実行時間測定用 void start_measurement( const int id ); diff --git a/src/skeleton/dragtreeview.cpp b/src/skeleton/dragtreeview.cpp index 01db4b0cac..f9c503e741 100644 --- a/src/skeleton/dragtreeview.cpp +++ b/src/skeleton/dragtreeview.cpp @@ -207,7 +207,7 @@ void DragTreeView::set_str_tooltip( const std::string& text ) // // ツールチップ最小幅設定 // -void DragTreeView::set_tooltip_min_width( const int& min_width ) +void DragTreeView::set_tooltip_min_width( const int min_width ) { m_tooltip.set_min_width( min_width); } diff --git a/src/skeleton/dragtreeview.h b/src/skeleton/dragtreeview.h index 8e17e01fe0..7d9f76ad81 100644 --- a/src/skeleton/dragtreeview.h +++ b/src/skeleton/dragtreeview.h @@ -93,7 +93,7 @@ namespace SKELETON // ツールチップ表示 // set_tooltip_min_width()で指定した幅よりもツールチップが広い場合は表示 void set_str_tooltip( const std::string& str ); - void set_tooltip_min_width( const int& min_width ); + void set_tooltip_min_width( const int min_width ); void hide_tooltip(); void show_tooltip(); diff --git a/src/skeleton/tooltip.h b/src/skeleton/tooltip.h index 69df05860e..8a1959efd1 100644 --- a/src/skeleton/tooltip.h +++ b/src/skeleton/tooltip.h @@ -26,7 +26,7 @@ namespace SKELETON void modify_font_label( const std::string& fontname ); void set_text( const std::string& text ); - void set_min_width( const int& min_width ){ m_min_width = min_width; } + void set_min_width( const int min_width ){ m_min_width = min_width; } void show_tooltip(); void hide_tooltip(); diff --git a/src/xml/dom.cpp b/src/xml/dom.cpp index 0e00bddc8f..e0747b47ee 100644 --- a/src/xml/dom.cpp +++ b/src/xml/dom.cpp @@ -26,7 +26,7 @@ std::set< std::string > Dom::m_static_html_elements; // コンストラクタ -Dom::Dom( const int& type, const std::string& name, const bool html ) +Dom::Dom( const int type, const std::string& name, const bool html ) : m_html( html ), m_nodeType( type ), m_nodeName( name ), @@ -914,7 +914,7 @@ bool Dom::setAttribute( const std::string& name, const std::string& value ) // // 属性:setAttribute( int ) // -bool Dom::setAttribute( const std::string& name, const int& value ) +bool Dom::setAttribute( const std::string& name, const int value ) { if( name.empty() || m_nodeType != NODE_TYPE_ELEMENT ) return false; diff --git a/src/xml/dom.h b/src/xml/dom.h index 07e95f8a33..98c403add4 100644 --- a/src/xml/dom.h +++ b/src/xml/dom.h @@ -86,7 +86,7 @@ namespace XML public: // コンストラクタ、デストラクタ - Dom( const int& type, const std::string& name, const bool html = false ); + Dom( const int type, const std::string& name, const bool html = false ); virtual ~Dom(); // クリア @@ -133,7 +133,7 @@ namespace XML bool hasAttribute( const std::string& name ); std::string getAttribute( const std::string& name ); bool setAttribute( const std::string& name, const std::string& value ); - bool setAttribute( const std::string& name, const int& value ); + bool setAttribute( const std::string& name, const int value ); bool removeAttribute( const std::string& name ); }; } From ce394dac7eabf1d101e4634391adbd4a987ec0cc Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Wed, 19 Dec 2018 22:30:26 +0900 Subject: [PATCH 44/51] Remove const qualifier of more return types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit C++11モードではmoveの妨げになるので戻り値のconstを取り除く --- src/board/boardviewbase.cpp | 2 +- src/board/boardviewbase.h | 2 +- src/dbtree/articlehash.cpp | 2 +- src/dbtree/articlehash.h | 2 +- src/linkfilterpref.cpp | 6 +++--- src/linkfilterpref.h | 6 +++--- src/skeleton/dragnote.cpp | 2 +- src/skeleton/dragnote.h | 2 +- src/skeleton/edittreeview.cpp | 11 ++++++----- src/skeleton/edittreeview.h | 13 +++++++------ 10 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/board/boardviewbase.cpp b/src/board/boardviewbase.cpp index 95b4f11f7c..43bf34eccb 100644 --- a/src/board/boardviewbase.cpp +++ b/src/board/boardviewbase.cpp @@ -1817,7 +1817,7 @@ void BoardViewBase::update_item_all() // // 行を作って内容をセット // -const Gtk::TreeModel::Row BoardViewBase::prepend_row( DBTREE::ArticleBase* art, const int id ) +Gtk::TreeModel::Row BoardViewBase::prepend_row( DBTREE::ArticleBase* art, const int id ) { Gtk::TreeModel::Row row = *( m_liststore->prepend() ); // append より prepend の方が速いらしい diff --git a/src/board/boardviewbase.h b/src/board/boardviewbase.h index 618f11c029..daa039513e 100644 --- a/src/board/boardviewbase.h +++ b/src/board/boardviewbase.h @@ -201,7 +201,7 @@ namespace BOARD void set_load_subject_txt( const bool load ){ m_load_subject_txt = load; } // 行を作って内容をセット - const Gtk::TreeModel::Row prepend_row( DBTREE::ArticleBase* art, const int id ); + Gtk::TreeModel::Row prepend_row( DBTREE::ArticleBase* art, const int id ); // デフォルトのソート状態 virtual int get_default_sort_column(); diff --git a/src/dbtree/articlehash.cpp b/src/dbtree/articlehash.cpp index 625f54bde5..d3ce7835fe 100644 --- a/src/dbtree/articlehash.cpp +++ b/src/dbtree/articlehash.cpp @@ -82,7 +82,7 @@ ArticleBase* ArticleHash::find( const std::string& datbase, const std::string& i } -const ArticleHashIterator ArticleHash::begin() +ArticleHashIterator ArticleHash::begin() { m_it_hash = m_min_hash; m_it_pos = 0; diff --git a/src/dbtree/articlehash.h b/src/dbtree/articlehash.h index c1e324bbdb..99a8737e51 100644 --- a/src/dbtree/articlehash.h +++ b/src/dbtree/articlehash.h @@ -41,7 +41,7 @@ namespace DBTREE ArticleBase* find( const std::string& datbase, const std::string& id ); - const ArticleHashIterator begin(); + ArticleHashIterator begin(); size_t end() const { return size(); } private: diff --git a/src/linkfilterpref.cpp b/src/linkfilterpref.cpp index daa4dc77d4..e013ee1cea 100644 --- a/src/linkfilterpref.cpp +++ b/src/linkfilterpref.cpp @@ -145,7 +145,7 @@ void LinkFilterPref::append_row( const std::string& url, const std::string& cmd } -const Gtk::TreeModel::iterator LinkFilterPref::get_selected_row() +Gtk::TreeModel::iterator LinkFilterPref::get_selected_row() { Gtk::TreeModel::iterator row; @@ -157,7 +157,7 @@ const Gtk::TreeModel::iterator LinkFilterPref::get_selected_row() } -const Gtk::TreeModel::iterator LinkFilterPref::get_top_row() +Gtk::TreeModel::iterator LinkFilterPref::get_top_row() { Gtk::TreeModel::iterator row; @@ -169,7 +169,7 @@ const Gtk::TreeModel::iterator LinkFilterPref::get_top_row() } -const Gtk::TreeModel::iterator LinkFilterPref::get_bottom_row() +Gtk::TreeModel::iterator LinkFilterPref::get_bottom_row() { Gtk::TreeModel::iterator row; diff --git a/src/linkfilterpref.h b/src/linkfilterpref.h index bc64cab71e..8a3cc1fc3b 100644 --- a/src/linkfilterpref.h +++ b/src/linkfilterpref.h @@ -78,9 +78,9 @@ namespace CORE void append_rows(); void append_row( const std::string& url, const std::string& cmd ); - const Gtk::TreeModel::iterator get_selected_row(); - const Gtk::TreeModel::iterator get_top_row(); - const Gtk::TreeModel::iterator get_bottom_row(); + Gtk::TreeModel::iterator get_selected_row(); + Gtk::TreeModel::iterator get_top_row(); + Gtk::TreeModel::iterator get_bottom_row(); void select_row( const Gtk::TreeModel::iterator& row ); diff --git a/src/skeleton/dragnote.cpp b/src/skeleton/dragnote.cpp index 17a74a98ec..ca217ee74f 100644 --- a/src/skeleton/dragnote.cpp +++ b/src/skeleton/dragnote.cpp @@ -153,7 +153,7 @@ bool DragableNoteBook::on_expose_event( GdkEventExpose* event ) // 及びタブの高さと位置を取得 ( 枠の描画用 ) // #if !GTKMM_CHECK_VERSION(3,0,0) -const Alloc_NoteBook DragableNoteBook::get_alloc_notebook() +Alloc_NoteBook DragableNoteBook::get_alloc_notebook() { Alloc_NoteBook alloc; diff --git a/src/skeleton/dragnote.h b/src/skeleton/dragnote.h index 6959858807..39ca83c041 100644 --- a/src/skeleton/dragnote.h +++ b/src/skeleton/dragnote.h @@ -177,7 +177,7 @@ namespace SKELETON #if !GTKMM_CHECK_VERSION(3,0,0) // DragableNoteBook を構成している各Notebookの高さ // 及びタブの高さと位置を取得 ( 枠の描画用 ) - const Alloc_NoteBook get_alloc_notebook(); + Alloc_NoteBook get_alloc_notebook(); #endif // ツールバー取得 diff --git a/src/skeleton/edittreeview.cpp b/src/skeleton/edittreeview.cpp index 8da875354d..6e1943dc79 100644 --- a/src/skeleton/edittreeview.cpp +++ b/src/skeleton/edittreeview.cpp @@ -511,7 +511,7 @@ Gtk::TreeViewColumn* EditTreeView::create_column( const int ypad ) // // 新規ディレクトリ作成 // -const Gtk::TreePath EditTreeView::create_newdir( const Gtk::TreePath& path ) +Gtk::TreePath EditTreeView::create_newdir( const Gtk::TreePath& path ) { CORE::DATA_INFO_LIST list_info; CORE::DATA_INFO info; @@ -541,7 +541,7 @@ const Gtk::TreePath EditTreeView::create_newdir( const Gtk::TreePath& path ) // ディレクトリIDとパスを相互変換 -const Gtk::TreePath EditTreeView::dirid_to_path( const size_t dirid ) +Gtk::TreePath EditTreeView::dirid_to_path( const size_t dirid ) { if( ! dirid ) return Gtk::TreePath(); @@ -572,7 +572,7 @@ size_t EditTreeView::path_to_dirid( const Gtk::TreePath path ) // // コメント挿入 // -const Gtk::TreePath EditTreeView::create_newcomment( const Gtk::TreePath& path ) +Gtk::TreePath EditTreeView::create_newcomment( const Gtk::TreePath& path ) { CORE::DATA_INFO_LIST list_info; CORE::DATA_INFO info; @@ -1567,8 +1567,9 @@ void EditTreeView::path2info( CORE::DATA_INFO& info, const Gtk::TreePath& path ) // // (4) そうでなければ path_dest の後に追加 // -const Gtk::TreePath EditTreeView::append_one_row( const std::string& url, const std::string& name, const int type, const size_t dirid, const std::string& data, - const Gtk::TreePath& path_dest, const bool before, const bool subdir ) +Gtk::TreePath EditTreeView::append_one_row( const std::string& url, const std::string& name, const int type, + const size_t dirid, const std::string& data, + const Gtk::TreePath& path_dest, const bool before, const bool subdir ) { Glib::RefPtr< Gtk::TreeStore > treestore = Glib::RefPtr< Gtk::TreeStore >::cast_dynamic( get_model() ); if( ! treestore ) return Gtk::TreePath(); diff --git a/src/skeleton/edittreeview.h b/src/skeleton/edittreeview.h index 9c9f6496d3..5d1f136df5 100644 --- a/src/skeleton/edittreeview.h +++ b/src/skeleton/edittreeview.h @@ -131,14 +131,14 @@ namespace SKELETON void select_all_dir( Gtk::TreePath path_dir ); // 新規ディレクトリ作成 - const Gtk::TreePath create_newdir( const Gtk::TreePath& path ); + Gtk::TreePath create_newdir( const Gtk::TreePath& path ); // ディレクトリIDとパスを相互変換 - const Gtk::TreePath dirid_to_path( const size_t dirid ); + Gtk::TreePath dirid_to_path( const size_t dirid ); size_t path_to_dirid( const Gtk::TreePath path ); // コメント挿入 - const Gtk::TreePath create_newcomment( const Gtk::TreePath& path ); + Gtk::TreePath create_newcomment( const Gtk::TreePath& path ); // pathで指定した行の名前の変更 void rename_row( const Gtk::TreePath& path ); @@ -182,8 +182,9 @@ namespace SKELETON // (2) before = true なら前に作る // (3) path_dest がディレクトリかつ sudir == true なら path_dest の下に追加。 // (4) そうでなければ path_dest の後に追加 - const Gtk::TreePath append_one_row( const std::string& url, const std::string& name, const int type, const size_t dirid, const std::string& data, - const Gtk::TreePath& path_dest,const bool before, const bool subdir ); + Gtk::TreePath append_one_row( const std::string& url, const std::string& name, const int type, + const size_t dirid, const std::string& data, + const Gtk::TreePath& path_dest, const bool before, const bool subdir ); // ソート実行 void sort( const Gtk::TreePath& path, const int mode ); @@ -282,7 +283,7 @@ namespace SKELETON EditTreeViewIterator( EditTreeView& treeview, EditColumns& columns, const Gtk::TreePath path ); Gtk::TreeModel::Row operator * (); - const Gtk::TreePath get_path() const { return m_path; } + Gtk::TreePath get_path() const { return m_path; } void operator ++ (); From 720a8b62f3ad7f67ba5284d6fe9263c0db3c7db6 Mon Sep 17 00:00:00 2001 From: Hideki Yamane Date: Mon, 11 Feb 2019 20:14:34 +0900 Subject: [PATCH 45/51] =?UTF-8?q?Debian=E3=81=A7=E3=81=AE=E9=96=8B?= =?UTF-8?q?=E7=99=BA=E7=92=B0=E5=A2=83=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit jdパッケージの削除とjdimパッケージの導入に伴ってbuild-depの指定が変更。 その前の準備についても整理した --- README.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 34fb6a8fa7..5e87b43068 100644 --- a/README.md +++ b/README.md @@ -59,15 +59,12 @@ dnf install gtkmm24-devel gnutls-devel libgcrypt-devel libSM-devel libtool autom dnf install gtkmm30-devel gnutls-devel libgcrypt-devel libSM-devel libtool automake autoconf-archive git ``` -#### Debian系 +#### Debian ```sh -sudo apt-get build-dep jd -``` - -開発環境が入っていない場合は、 - -```sh -sudo apt-get install build-essential automake autoconf-archive git +sudo apt-get install libc6-dev make gcc g++ (開発環境の導入) +sudo vi /etc/apt/sources.list (エディタは何でも良い。deb-src行でstretch-backports以降を有効にする) +sudo apt update +sudo apt-get build-dep jdim ``` #### Ubuntu 18.04 From 051dff4f72acce745d8e5a5c4e7553726a48b7ed Mon Sep 17 00:00:00 2001 From: Hideki Yamane Date: Mon, 11 Feb 2019 20:16:36 +0900 Subject: [PATCH 46/51] use apt instead of apt-get MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit aptでコマンドを統一した --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5e87b43068..ed2f8ec7cd 100644 --- a/README.md +++ b/README.md @@ -61,10 +61,10 @@ dnf install gtkmm30-devel gnutls-devel libgcrypt-devel libSM-devel libtool autom #### Debian ```sh -sudo apt-get install libc6-dev make gcc g++ (開発環境の導入) +sudo apt install libc6-dev make gcc g++ (開発環境の導入) sudo vi /etc/apt/sources.list (エディタは何でも良い。deb-src行でstretch-backports以降を有効にする) sudo apt update -sudo apt-get build-dep jdim +sudo apt build-dep jdim ``` #### Ubuntu 18.04 From bfe21aa22fa474a2b529b6e3821ec383cd29a0e6 Mon Sep 17 00:00:00 2001 From: Hideki Yamane Date: Mon, 11 Feb 2019 20:18:09 +0900 Subject: [PATCH 47/51] more precise apt-line setting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stretch-backportsだけ、と読めてしまう可能性を考えbusterも追加しておいた --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ed2f8ec7cd..223ca1f534 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ dnf install gtkmm30-devel gnutls-devel libgcrypt-devel libSM-devel libtool autom #### Debian ```sh sudo apt install libc6-dev make gcc g++ (開発環境の導入) -sudo vi /etc/apt/sources.list (エディタは何でも良い。deb-src行でstretch-backports以降を有効にする) +sudo vi /etc/apt/sources.list (エディタは何でも良い。deb-src行でstretch-backportsあるいはbuster以降を有効にする) sudo apt update sudo apt build-dep jdim ``` From 5712a514f4ad4bfc1bcb71fabb74153f7af53c40 Mon Sep 17 00:00:00 2001 From: Hideki Yamane Date: Sat, 16 Feb 2019 19:09:18 +0900 Subject: [PATCH 48/51] add git and comment out description MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 頂いたコメントから * 導入する開発ツールにgitを追加 * 説明をコメントアウト --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 223ca1f534..507f07140f 100644 --- a/README.md +++ b/README.md @@ -59,10 +59,11 @@ dnf install gtkmm24-devel gnutls-devel libgcrypt-devel libSM-devel libtool autom dnf install gtkmm30-devel gnutls-devel libgcrypt-devel libSM-devel libtool automake autoconf-archive git ``` -#### Debian +#### Debian (stretch-backportsあるいはbuster以降) ```sh -sudo apt install libc6-dev make gcc g++ (開発環境の導入) -sudo vi /etc/apt/sources.list (エディタは何でも良い。deb-src行でstretch-backportsあるいはbuster以降を有効にする) +sudo apt install libc6-dev make gcc g++ git +sudo vi /etc/apt/sources.list +# ↑エディタは何でも良い。deb-src行でstretch-backportsあるいはbuster以降を有効にする sudo apt update sudo apt build-dep jdim ``` From 1ece135cc9623a5e7d3330cdd5726dc4835bcb47 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Mon, 11 Feb 2019 09:29:52 +0900 Subject: [PATCH 49/51] Fix GnuTLS data reception for chunked encoding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GnuTLSを使うとchunked transfer encoding方式の受信がエラーになる不具合を 修正する。このエラーはチャンク長を処理せず受信するデータがゼロになるまで 通信していることが原因だがこのコミットでは受信の方法自体は修正していない。 * データを受信するとき特定のエラーを受信データ無しに変換する。 * 新しいバージョンで導入された機能を使って初期化するように修正する。[1] * データの送受信をリトライするように修正する。 [1]: https://gnutls.org/manual/html_node/Client-example-with-X_002e509-certificate-support.html --- src/jdlib/ssl.cpp | 89 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 72 insertions(+), 17 deletions(-) diff --git a/src/jdlib/ssl.cpp b/src/jdlib/ssl.cpp index 1c31888ad9..98cef10cdd 100644 --- a/src/jdlib/ssl.cpp +++ b/src/jdlib/ssl.cpp @@ -65,41 +65,73 @@ bool JDSSL::connect( const int soc, const char *host ) int ret; + gnutls_certificate_allocate_credentials( &m_cred ); +#if GNUTLS_VERSION_NUMBER >= 0x030020 + ret = gnutls_certificate_set_x509_system_trust( m_cred ); + assert( ret >= 0 ); +#endif + ret = gnutls_init( &m_session, GNUTLS_CLIENT ); if( ret != 0 ){ m_errmsg = "gnutls_init failed"; return false; } +#if GNUTLS_VERSION_NUMBER >= 0x020104 + gnutls_set_default_priority( m_session ); #if GNUTLS_VERSION_NUMBER >= 0x020108 - // gnutls >= 2.1.7 (unreleased) gnutls_priority_set_direct( m_session, "NORMAL:%COMPAT", NULL ); -#else // GNUTLS_VERSION_NUMBER >= 0x020108 +#else static const int priority_prot[] = { GNUTLS_SSL3, 0 }; - // DEPRECATED (gnutls >= 2.1.4 gnutls =< 2.1.6) - // UNDEPRECATED (gnutls >= 2.1.7) - gnutls_set_default_priority( m_session ); // _GNUTLS_GCC_ATTR_DEPRECATE (gnutls >= 2.12.0) gnutls_protocol_set_priority( m_session, priority_prot ); #endif // GNUTLS_VERSION_NUMBER >= 0x020108 +#endif // GNUTLS_VERSION_NUMBER >= 0x020104 - gnutls_transport_set_ptr( m_session, (gnutls_transport_ptr_t)(long) soc ); - gnutls_certificate_allocate_credentials( &m_cred ); gnutls_credentials_set( m_session, GNUTLS_CRD_CERTIFICATE, m_cred ); gnutls_server_name_set( m_session, GNUTLS_NAME_DNS, host, strlen( host ) ); +#if GNUTLS_VERSION_NUMBER >= 0x030406 + gnutls_session_set_verify_cert( m_session, host, 0 ); +#endif + +#if GNUTLS_VERSION_NUMBER >= 0x030109 + gnutls_transport_set_int( m_session, soc ); +#else + gnutls_transport_set_ptr( m_session, static_cast< gnutls_transport_ptr_t >( soc ) ); +#endif +#if GNUTLS_VERSION_NUMBER >= 0x030100 + gnutls_handshake_set_timeout( m_session, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT ); +#endif - while ( ( ret = gnutls_handshake( m_session ) ) != GNUTLS_E_SUCCESS ) - { - if ( gnutls_error_is_fatal( ret ) != 0 ) - { - m_errmsg = "gnutls_handshake failed"; - return false; + do { + ret = gnutls_handshake( m_session ); + } while( ret < 0 && gnutls_error_is_fatal( ret ) == 0 ); + + if( ret < 0 ) { +#if defined(_DEBUG) && GNUTLS_VERSION_NUMBER >= 0x030406 + if( ret == GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR ) { + gnutls_certificate_type_t type = gnutls_certificate_type_get( m_session ); + const unsigned status = gnutls_session_get_verify_cert_status( m_session ); + gnutls_datum_t out; + gnutls_certificate_verification_status_print( status, type, &out, 0 ); + std::cout << "JDSSL::connect(gnutls) - cert verify output: " << out.data << std::endl; + gnutls_free( out.data ); } +#endif + m_errmsg = "JDSSL::connect(gnutls) *** Handshake failed: "; + m_errmsg += gnutls_strerror( ret ); + return false; } #ifdef _DEBUG - std::cout << "connect ok\n"; +#if GNUTLS_VERSION_NUMBER >= 0x030110 + char* desc = gnutls_session_get_desc( m_session ); + std::cout << "JDSSL::connect(gnutls) - Session info: " << desc << std::endl; + gnutls_free( desc ); +#elif + std::cout << "JDSSL::connect(gnutls)" << std::endl; #endif +#endif // _DEBUG return true; } @@ -108,7 +140,7 @@ bool JDSSL::connect( const int soc, const char *host ) bool JDSSL::close() { #ifdef _DEBUG - std::cout << "JDSSL::close(gnutlsl)\n"; + std::cout << "JDSSL::close(gnutls)\n"; #endif if( m_session ){ @@ -127,7 +159,15 @@ bool JDSSL::close() int JDSSL::write( const char* buf, const size_t bufsize ) { - int tmpsize = gnutls_record_send( m_session, buf, bufsize ); + int tmpsize; + do { + tmpsize = gnutls_record_send( m_session, buf, bufsize ); + } while( tmpsize == GNUTLS_E_AGAIN || tmpsize == GNUTLS_E_INTERRUPTED ); + +#ifdef _DEBUG + std::cout << "JDSSL::write(gnutls) tmpsize = " << tmpsize << "; bufsize = " << bufsize << std::endl; +#endif + if( tmpsize < 0 ) m_errmsg = "gnutls_record_send failed"; return tmpsize; @@ -136,7 +176,22 @@ int JDSSL::write( const char* buf, const size_t bufsize ) int JDSSL::read( char* buf, const size_t bufsize ) { - int tmpsize = gnutls_record_recv( m_session, buf, bufsize ); + int tmpsize; + do { + tmpsize = gnutls_record_recv( m_session, buf, bufsize ); + } while( tmpsize == GNUTLS_E_AGAIN || tmpsize == GNUTLS_E_INTERRUPTED ); + +#ifdef _DEBUG + std::cout << "JDSSL::read(gnutls) tmpsize = " << tmpsize << "; bufsize = " << bufsize << std::endl; +#endif + +#ifdef GNUTLS_E_PREMATURE_TERMINATION + if( tmpsize == GNUTLS_E_PREMATURE_TERMINATION || tmpsize == GNUTLS_E_INVALID_SESSION ) { + // Transfer-Encoding: chuncked のときはデータの長さが分からない + // そのため受信エラーをデータ無しに置き換えて受信終了を判断する + return 0; + } +#endif if( tmpsize < 0 ) m_errmsg = "gnutls_record_recv failed"; return tmpsize; From f0330abd1c50dab2c3f7ff976e2649e07d3356fa Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sun, 17 Feb 2019 10:05:55 +0900 Subject: [PATCH 50/51] Update JDim-0.1.0-20190217 --- src/jdversion.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jdversion.h b/src/jdversion.h index 9ef02d1d91..b26a549807 100644 --- a/src/jdversion.h +++ b/src/jdversion.h @@ -20,7 +20,7 @@ #define MAJORVERSION 0 #define MINORVERSION 1 #define MICROVERSION 0 -#define JDDATE_FALLBACK "20190202" +#define JDDATE_FALLBACK "20190217" #define JDTAG "" //--------------------------------- From 9090d85334a7b6b0613d728b76b8615eb5896615 Mon Sep 17 00:00:00 2001 From: Masayuki Yamamoto Date: Sun, 17 Feb 2019 11:43:26 +0900 Subject: [PATCH 51/51] Create CONTRIBUTING.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JDimの修正に興味を持ったユーザーのためのガイドを用意する。 * パッチ歓迎 * GitHubユーザー向けの説明 * やりたいことを軸に見出しを立てる --- CONTRIBUTING.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..7cd5f8573b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,60 @@ +# JDimへコントリビュートする + +はじめに、ガイドを読む時間を取っていただきありがとうございます。:+1: +私達はJDimを開発・保守してくためにパッチを歓迎しています!:revolving_hearts: + +JDimへのコントリビュート方法を案内します。 + +* :beginner: まずはJDimproved/JDimをforkしてリポジトリを用意し、ローカルにcloneしてJDimをビルドしてみましょう。 + → [README.md][readme-md] +* :mag: [Issues][issues]や[Pull requests][pull-requests]を確認すると興味関心のあるトピックが見つかるかもしれません。 +* :earth_asia: [Linux板@5ちゃんねる][linux-5ch]のJD/JDimスレで質問やバグ報告をすることもできます。 +* :heart_decoration: JDimはボランティアによって開発・保守されています。 + そのため速やかに返信することが難しい場合がありますが予めご了承ください。 + + +## :question: 質問をしたい +Issueを開いて質問をします。 → [New issue][new-issue] + +使い方や設定方法の情報は[オンラインマニュアル (JD)][manual]や +2ch/5chのスレッド・過去ログにありますのでそちらも参照してください。 + + +## :beetle: バグを報告したい +Issueを開いてバグを報告します。 → [New issue][new-issue] + +以下の情報は原因特定の手がかりになりますのでご報告くださいますようお願いいたします。 + +* 動作環境(クリップボードへのコピーを利用してください) +* やりたいこと・期待する動作 +* バグが現れるまでの手順・操作 +* 実際の結果・エラーメッセージ + + +## :muscle: 機能のリクエストをしたい +Issueを開いて欲しい機能の要望を出しフィードバックを集めます。 → [New issue][new-issue] +可能ならコードを書き始めてください。実証用でもコードがあると具体的なフィードバックが集まりやすいです。 + + +## :mailbox_with_mail: Pull requestを提出する + +Pull requestは`master`ブランチに対してお願いいたします。 + +* 文書やソースコードのタイプミス修正、バグ修正、文書の改善、機能の改善などは直接PRを受け付けています。 +* ユーザーインタフェースの変更や互換性に影響が出る修正は最初にissueを開いて意見・要望をお伝えいただければ幸いです。 + +#### :pencil: C++ソースコードを修正するときの注意 + +* C++11の機能を使う。迷ったときは[C++ Core Guidelines][isocpp]を参考にする。 +* コーディングスタイルは周囲のコードになるべく合わせる。 +* ソースコードを修正したときはビルド可能なことチェックする。 +* 修正前よりコンパイル時警告を増やさないように気をつける。 + + +[readme-md]: https://github.com/JDimproved/JDim/tree/master/README.md +[issues]: https://github.com/JDimproved/JDim/issues +[pull-requests]: https://github.com/JDimproved/JDim/pulls +[linux-5ch]: https://mao.5ch.net/linux/ +[new-issue]: https://github.com/JDimproved/JDim/issues/new +[manual]: https://jd4linux.osdn.jp/manual/289/ +[isocpp]: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines