diff --git a/README.md b/README.md index 4458fc4ee..154a45ea2 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,8 @@ GDK_CORE_DEVICE_EVENTS=1 ./src/jdim * ~~スレビュー表示内にアスキーアート(AA)と判定されたレスがあると、スレビュー全体にAAのフォント設定が適用される。 この問題はオプション `--with-pangolayout` を追加してビルドすると回避できる。~~ **0.2.0-20190921以降のバージョンで修正されています。** +* ~~お気に入りにマウスオーバーすると表示されるツールチップがポインターからずれる。~~ + **0.2.0-20191005以降のバージョンで修正されています。** ## 通常の起動 diff --git a/docs/manual/2019.md b/docs/manual/2019.md index 3a051cff7..d9fa0a6fe 100644 --- a/docs/manual/2019.md +++ b/docs/manual/2019.md @@ -10,6 +10,12 @@ layout: default ### [0.3.0-unreleased](https://github.com/JDimproved/JDim/compare/JDim-v0.2.0...master) (unreleased) +- Fix tooltips which are not near mouse pointer on bbs list/thread list for GTK3 + ([#128](https://github.com/JDimproved/JDim/pull/128)) +- Add github links for previous version manuals + ([#130](https://github.com/JDimproved/JDim/pull/130)) +- Revert "[WORKAROUND] Fix build error for manual" + ([#129](https://github.com/JDimproved/JDim/pull/129)) - Use range-based for ([#126](https://github.com/JDimproved/JDim/pull/126)) - Refactor string operation diff --git a/docs/manual/start.md b/docs/manual/start.md index 7715ed1a8..6c832bfba 100644 --- a/docs/manual/start.md +++ b/docs/manual/start.md @@ -147,6 +147,8 @@ GDK_CORE_DEVICE_EVENTS=1 ./src/jdim * ~~スレビュー表示内にアスキーアート(AA)と判定されたレスがあると、スレビュー全体にAAのフォント設定が適用される。 この問題はオプション `--with-pangolayout` を追加してビルドすると回避できる。~~ **0.2.0-20190921以降のバージョンで修正された。** +* ~~お気に入りにマウスオーバーすると表示されるツールチップがポインターからずれる。~~ + **0.2.0-20191005以降のバージョンで修正された。** [pr-merged]: https://github.com/JDimproved/JDim/pulls?q=is%3Apr+is%3Amerged diff --git a/src/bbslist/bbslistviewbase.cpp b/src/bbslist/bbslistviewbase.cpp index 036fe79c3..a77868239 100644 --- a/src/bbslist/bbslistviewbase.cpp +++ b/src/bbslist/bbslistviewbase.cpp @@ -183,6 +183,8 @@ BBSListViewBase::BBSListViewBase( const std::string& url,const std::string& arg1 // treeviewのシグナルにコネクト m_treeview.signal_row_expanded().connect( sigc::mem_fun(*this, &BBSListViewBase::slot_row_exp ) ); m_treeview.signal_row_collapsed().connect( sigc::mem_fun(*this, &BBSListViewBase::slot_row_col ) ); + m_treeview.set_has_tooltip( true ); + m_treeview.signal_query_tooltip().connect( sigc::mem_fun(*this, &BBSListViewBase::slot_query_tooltip) ); m_treeview.sig_button_press().connect( sigc::mem_fun(*this, &BBSListViewBase::slot_button_press ) ); m_treeview.sig_button_release().connect( sigc::mem_fun(*this, &BBSListViewBase::slot_button_release ) ); @@ -676,7 +678,6 @@ void BBSListViewBase::focus_out() { SKELETON::View::focus_out(); - m_treeview.hide_tooltip(); m_treeview.hide_popup(); } @@ -1155,8 +1156,6 @@ bool BBSListViewBase::slot_motion_notify( GdkEventMotion* event ) if( m_treeview.get_path_at_pos( x, y, path, column, cell_x, cell_y ) && m_treeview.get_row( path ) ){ - const int mrg = 16; // アイコンの横幅。計算するのが面倒だったのでとりあえず - Gtk::TreeModel::Row row = m_treeview.get_row( path ); Glib::ustring subject = row[ m_columns.m_name ]; Glib::ustring url = row[ m_columns.m_url ]; @@ -1167,8 +1166,6 @@ bool BBSListViewBase::slot_motion_notify( GdkEventMotion* event ) // 画像ポップアップ if( type == TYPE_IMAGE ){ - m_treeview.hide_tooltip(); - if( DBIMG::get_type_ext( url ) != DBIMG::T_UNKNOWN && DBIMG::get_code( url ) != HTTP_INIT ){ if( m_treeview.pre_popup_url() != url ){ @@ -1180,19 +1177,12 @@ bool BBSListViewBase::slot_motion_notify( GdkEventMotion* event ) else m_treeview.hide_popup(); } - // ツールチップ + // ツールチップはslot_query_tooltipでセットする else{ - m_treeview.hide_popup(); - - Gdk::Rectangle rect; - m_treeview.get_cell_area( path, *column, rect ); - m_treeview.set_tooltip_min_width( rect.get_width() - mrg ); - m_treeview.set_str_tooltip( subject ); } } else{ - m_treeview.hide_tooltip(); m_treeview.hide_popup(); } @@ -3163,6 +3153,41 @@ void BBSListViewBase::slot_hide_editlistwin() } +// +// ツールチップのセット +// +bool BBSListViewBase::slot_query_tooltip( int x, int y, bool keyboard_tooltip, + const Glib::RefPtr& tooltip ) +{ + // NOTE: GTK2版で Gtk::TreeView::get_tooltip_context_path() を使うと + // マウスポインターをヘッダーや空行へ動かしたときに segmentation fault でクラッシュする + Gtk::TreeModel::iterator iter; + if( m_treeview.get_tooltip_context_iter( x, y, keyboard_tooltip, iter ) ) { + + const Gtk::TreeModel::Path path = m_treestore->get_path( iter ); + m_treeview.set_tooltip_row( tooltip, path ); + + const Gtk::TreeModel::Row row = m_treeview.get_row( path ); + const Glib::ustring& subject = row[ m_columns.m_name ]; + const Glib::ustring& url = row[ m_columns.m_url ]; + const int type = row[ m_columns.m_type ]; + + m_treeview.reset_pre_popupurl( url ); + + // 画像ポップアップはslot_motion_notifyでセットする + if( type == TYPE_IMAGE ) return false; + + // ツールチップ + m_treeview.hide_popup(); + tooltip->set_text( subject ); + return true; + } + m_treeview.hide_popup(); + return false; +} + + + // // XML保存 // diff --git a/src/bbslist/bbslistviewbase.h b/src/bbslist/bbslistviewbase.h index 5d7aa51fd..5bddec24a 100644 --- a/src/bbslist/bbslistviewbase.h +++ b/src/bbslist/bbslistviewbase.h @@ -322,6 +322,8 @@ namespace BBSLIST // ツリーの編集ウィンドウが閉じた void slot_hide_editlistwin(); + + bool slot_query_tooltip( int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip ); }; } diff --git a/src/board/boardviewbase.cpp b/src/board/boardviewbase.cpp index 5deb2eb48..e8ee5aa9f 100644 --- a/src/board/boardviewbase.cpp +++ b/src/board/boardviewbase.cpp @@ -177,6 +177,8 @@ BoardViewBase::BoardViewBase( const std::string& url, const bool show_col_board m_treeview.sig_key_press().connect( sigc::mem_fun(*this, &BoardViewBase::slot_key_press ) ); m_treeview.sig_key_release().connect( sigc::mem_fun(*this, &BoardViewBase::slot_key_release ) ); m_treeview.sig_scroll_event().connect( sigc::mem_fun(*this, &BoardViewBase::slot_scroll_event ) ); + m_treeview.set_has_tooltip( true ); + m_treeview.signal_query_tooltip().connect( sigc::mem_fun(*this, &BoardViewBase::slot_query_tooltip) ); m_treeview.signal_drag_data_get().connect( sigc::mem_fun(*this, &BoardViewBase::slot_drag_data_get ) ); m_treeview.sig_dropped_uri_list().connect( sigc::mem_fun(*this, &BoardViewBase::slot_dropped_url_list ) ); @@ -1370,8 +1372,6 @@ void BoardViewBase::focus_view() void BoardViewBase::focus_out() { SKELETON::View::focus_out(); - - m_treeview.hide_tooltip(); } @@ -2131,27 +2131,6 @@ bool BoardViewBase::slot_motion_notify( GdkEventMotion* event ) /// マウスジェスチャ get_control().MG_motion( event ); - const int x = (int)event->x; - const int y = (int)event->y; - Gtk::TreeModel::Path path; - Gtk::TreeView::Column* column; - int cell_x; - int cell_y; - - // ツールチップに文字列をセットする - if( m_treeview.get_path_at_pos( x, y, path, column, cell_x, cell_y ) ){ - - // 列幅よりもツールチップの幅が広い場合はツールチップを表示する - m_treeview.set_tooltip_min_width( column->get_width() ); - - if( column->get_title() == ITEM_NAME_BOARD ) m_treeview.set_str_tooltip( get_name_of_cell( path, m_columns.m_col_board ) ); - else if( column->get_title() == ITEM_NAME_NAME ) m_treeview.set_str_tooltip( get_name_of_cell( path, m_columns.m_col_subject ) ); - else if( column->get_title() == ITEM_NAME_SINCE ) m_treeview.set_str_tooltip( get_name_of_cell( path, m_columns.m_col_since ) ); - else if( column->get_title() == ITEM_NAME_LASTWRITE ) m_treeview.set_str_tooltip( get_name_of_cell( path, m_columns.m_col_write ) ); - else if( column->get_title() == ITEM_NAME_ACCESS ) m_treeview.set_str_tooltip( get_name_of_cell( path, m_columns.m_col_access ) ); - else m_treeview.set_str_tooltip( std::string() ); - } - return true; } @@ -2220,6 +2199,33 @@ bool BoardViewBase::slot_scroll_event( GdkEventScroll* event ) } +// +// ツールチップのセット +// +bool BoardViewBase::slot_query_tooltip( int x, int y, bool keyboard_tooltip, + const Glib::RefPtr& tooltip ) +{ + // NOTE: GTK2版で Gtk::TreeView::get_tooltip_context_path() を使うと + // マウスポインターをヘッダーや空行へ動かしたときに segmentation fault でクラッシュする + Gtk::TreeModel::iterator iter; + if( m_treeview.get_tooltip_context_iter( x, y, keyboard_tooltip, iter ) ) { + + const Gtk::TreeModel::Path path = m_liststore->get_path( iter ); + m_treeview.set_tooltip_row( tooltip, path ); + + const Gtk::TreeModel::Row row = m_treeview.get_row( path ); + const Glib::ustring& subject = row[ m_columns.m_col_subject ]; + +#ifdef _DEBUG + std::cout << "BoardViewBase::slot_query_tooltip subject: " << subject << std::endl; +#endif + tooltip->set_text( subject ); + return true; + } + return false; +} + + // // D&Dで受信側がデータ送信を要求してきた // diff --git a/src/board/boardviewbase.h b/src/board/boardviewbase.h index 68784969c..4fc2a1d22 100644 --- a/src/board/boardviewbase.h +++ b/src/board/boardviewbase.h @@ -255,6 +255,7 @@ namespace BOARD bool slot_motion_notify( GdkEventMotion* event ); bool slot_key_release( GdkEventKey* event ); bool slot_scroll_event( GdkEventScroll* event ); + bool slot_query_tooltip( int x, int y, bool keyboard_tooltip, const Glib::RefPtr& tooltip ); void slot_bookmark( int bookmark ); void slot_open_tab(); diff --git a/src/fontcolorpref.cpp b/src/fontcolorpref.cpp index 0c8f6048b..ed5ee4ef3 100644 --- a/src/fontcolorpref.cpp +++ b/src/fontcolorpref.cpp @@ -98,13 +98,8 @@ FontColorPref::FontColorPref( Gtk::Window* parent, const std::string& url ) m_combo_font.set_active( 0 ); m_fontbutton.set_font_name( CONFIG::get_fontname( m_font_tbl[ 0 ] ) ); -#if GTKMM_CHECK_VERSION(2,12,0) m_event_font.set_tooltip_text( m_tooltips_font[ 0 ] ); m_fontbutton.set_tooltip_text( m_tooltips_font[ 0 ] ); -#else - m_tooltips.set_tip( m_event_font, m_tooltips_font[ 0 ] ); - m_tooltips.set_tip( m_fontbutton, m_tooltips_font[ 0 ] ); -#endif set_title( "フォントと色の詳細設定" ); #if GTKMM_CHECK_VERSION(3,0,0) @@ -135,11 +130,7 @@ void FontColorPref::pack_widget() m_checkbutton_font.add_label( "スレビューでフォント幅の近似計算を厳密に行う(_S)", true ), m_checkbutton_font.set_active( CONFIG::get_strict_char_width() ); -#if GTKMM_CHECK_VERSION(2,12,0) m_checkbutton_font.set_tooltip_text( WARNING_STRICTCHAR ); -#else - m_tooltips.set_tip( m_checkbutton_font, WARNING_STRICTCHAR ); -#endif m_hbox_checkbutton.pack_start( m_checkbutton_font, Gtk::PACK_SHRINK ); m_vbox_font.pack_start( m_hbox_checkbutton, Gtk::PACK_SHRINK, mrg/2 ); @@ -154,12 +145,7 @@ void FontColorPref::pack_widget() m_hbox_space.set_spacing ( mrg ); m_hbox_space.pack_start( m_label_space, Gtk::PACK_SHRINK ); m_hbox_space.pack_start( m_spin_space, Gtk::PACK_SHRINK ); - constexpr const char* ss_tip = "スレビューにおいて行の高さを調節します( 標準は 1 )"; -#if GTKMM_CHECK_VERSION(2,12,0) - m_spin_space.set_tooltip_text( ss_tip ); -#else - m_tooltips.set_tip( m_spin_space, ss_tip ); -#endif + m_spin_space.set_tooltip_text( "スレビューにおいて行の高さを調節します( 標準は 1 )" ); m_vbox_font.pack_start( m_hbox_space, Gtk::PACK_SHRINK, mrg/2 ); set_activate_entry( m_spin_space ); @@ -175,25 +161,15 @@ void FontColorPref::pack_widget() m_hbox_ubar.pack_start( m_label_ubar, Gtk::PACK_SHRINK ); m_hbox_ubar.pack_start( m_spin_ubar, Gtk::PACK_SHRINK ); m_vbox_font.pack_start( m_hbox_ubar, Gtk::PACK_SHRINK, mrg/2 ); - constexpr const char* su_tip = "スレビューにおいてアンカーなどの下線の位置を調節します( 標準は 1 )"; -#if GTKMM_CHECK_VERSION(2,12,0) - m_spin_ubar.set_tooltip_text( su_tip ); -#else - m_tooltips.set_tip( m_spin_ubar, su_tip ); -#endif + m_spin_ubar.set_tooltip_text( "スレビューにおいてアンカーなどの下線の位置を調節します( 標準は 1 )" ); set_activate_entry( m_spin_ubar ); // AAレスと判定する正規表現 m_label_aafont.set_text( CONFIG::get_regex_res_aa() ); m_vbox_font.pack_start( m_label_aafont, Gtk::PACK_SHRINK, mrg/2 ); - constexpr const char* la_tip = - "この正規表現に一致したレスは、アスキーアートフォントで表示します( 次に開いたスレから有効 )"; -#if GTKMM_CHECK_VERSION(2,12,0) - m_label_aafont.set_tooltip_text( la_tip ); -#else - m_tooltips.set_tip( m_label_aafont, la_tip ); -#endif + m_label_aafont.set_tooltip_text( + "この正規表現に一致したレスは、アスキーアートフォントで表示します( 次に開いたスレから有効 )" ); set_activate_entry( m_label_aafont ); @@ -348,13 +324,8 @@ void FontColorPref::slot_combo_font_changed() { const int num = m_combo_font.get_active_row_number(); m_fontbutton.set_font_name( CONFIG::get_fontname( m_font_tbl[ num ] ) ); -#if GTKMM_CHECK_VERSION(2,12,0) m_event_font.set_tooltip_text( m_tooltips_font[ num ] ); m_fontbutton.set_tooltip_text( m_tooltips_font[ num ] ); -#else - m_tooltips.set_tip( m_event_font, m_tooltips_font[ num ] ); - m_tooltips.set_tip( m_fontbutton, m_tooltips_font[ num ] ); -#endif } diff --git a/src/fontcolorpref.h b/src/fontcolorpref.h index 3e7acb19c..5361689d2 100644 --- a/src/fontcolorpref.h +++ b/src/fontcolorpref.h @@ -37,11 +37,6 @@ namespace CORE { Gtk::Notebook m_notebook; -#if !GTKMM_CHECK_VERSION(2,12,0) - // ツールチップ - Gtk::Tooltips m_tooltips; -#endif - // フォントの設定 std::vector< int > m_font_tbl; std::vector< std::string > m_tooltips_font; diff --git a/src/message/messageviewbase.cpp b/src/message/messageviewbase.cpp index 944f7760c..801838fbc 100644 --- a/src/message/messageviewbase.cpp +++ b/src/message/messageviewbase.cpp @@ -441,15 +441,8 @@ void MessageViewBase::pack_widget() m_check_fixname.set_label( "固定" ); m_check_fixmail.set_label( "固定" ); - constexpr const char* name_tip = "チェックすると名前欄を保存して固定にする"; - constexpr const char* mail_tip = "チェックするとメール欄を保存して固定にする"; -#if GTKMM_CHECK_VERSION(2,12,0) - m_check_fixname.set_tooltip_text( name_tip ); - m_check_fixmail.set_tooltip_text( mail_tip ); -#else - m_tooltip.set_tip( m_check_fixname, name_tip ); - m_tooltip.set_tip( m_check_fixmail, mail_tip ); -#endif + m_check_fixname.set_tooltip_text( "チェックすると名前欄を保存して固定にする" ); + m_check_fixmail.set_tooltip_text( "チェックするとメール欄を保存して固定にする" ); set_name(); set_mail(); diff --git a/src/message/messageviewbase.h b/src/message/messageviewbase.h index 4c7697d0e..f8a951be7 100644 --- a/src/message/messageviewbase.h +++ b/src/message/messageviewbase.h @@ -37,10 +37,6 @@ namespace MESSAGE { Post* m_post; -#if !GTKMM_CHECK_VERSION(2,12,0) - Gtk::Tooltips m_tooltip; -#endif - Gtk::Notebook m_notebook; SKELETON::View* m_preview; Gtk::VBox m_msgview; diff --git a/src/skeleton/Makefile.am b/src/skeleton/Makefile.am index 23093cd63..a27bb271e 100644 --- a/src/skeleton/Makefile.am +++ b/src/skeleton/Makefile.am @@ -28,7 +28,6 @@ libskeleton_a_SOURCES = \ backforwardbutton.cpp \ popupwinbase.cpp \ popupwin.cpp \ - tooltip.cpp \ entry.cpp \ compentry.cpp \ label_entry.cpp \ @@ -80,7 +79,6 @@ noinst_HEADERS = \ popupwinbase.h \ popupwin.h \ iconpopup.h \ - tooltip.h \ entry.h \ compentry.h \ label_entry.h \ diff --git a/src/skeleton/admin.cpp b/src/skeleton/admin.cpp index cd2541618..dfa072e4d 100644 --- a/src/skeleton/admin.cpp +++ b/src/skeleton/admin.cpp @@ -1804,7 +1804,6 @@ void Admin::focus_out() SKELETON::View* view = get_current_view(); if( view ) view->focus_out(); - m_notebook->focus_out(); } diff --git a/src/skeleton/dragnote.cpp b/src/skeleton/dragnote.cpp index c59521048..b97201d5b 100644 --- a/src/skeleton/dragnote.cpp +++ b/src/skeleton/dragnote.cpp @@ -37,21 +37,13 @@ DragableNoteBook::DragableNoteBook() m_notebook_tab.sig_button_press().connect( sigc::mem_fun( *this, &DragableNoteBook::slot_button_press_event ) ); m_notebook_tab.sig_button_release().connect( sigc::mem_fun( *this, &DragableNoteBook::slot_button_release_event ) ); - m_notebook_tab.sig_tab_motion_event().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_motion_event ) ); - m_notebook_tab.sig_tab_leave_event().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_leave_event ) ); - m_notebook_tab.sig_tab_drag_motion().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_drag_motion ) ); m_notebook_tab.sig_scroll_event().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_scroll_event ) ); m_hbox_tab.pack_start( m_notebook_tab ); m_hbox_tab.pack_start( m_bt_tabswitch, Gtk::PACK_SHRINK ); - constexpr const char* bt_tabswitch_tip = "タブの一覧表示"; -#if GTKMM_CHECK_VERSION(2,12,0) - m_bt_tabswitch.set_tooltip_text( bt_tabswitch_tip ); -#else - m_tooltip_tabswitch.set_tip( m_bt_tabswitch, bt_tabswitch_tip ); -#endif + m_bt_tabswitch.set_tooltip_text( "タブの一覧表示" ); pack_start( m_hbox_tab, Gtk::PACK_SHRINK ); pack_start( m_notebook_toolbar, Gtk::PACK_SHRINK ); @@ -79,16 +71,6 @@ DragableNoteBook::~DragableNoteBook() void DragableNoteBook::clock_in() { m_notebook_tab.clock_in(); - m_tooltip.clock_in(); -} - - -// -// フォーカスアウト -// -void DragableNoteBook::focus_out() -{ - m_tooltip.hide_tooltip(); } @@ -381,8 +363,6 @@ void DragableNoteBook::remove_page( const int page, const bool adjust_tab ) if( tablabel ) delete tablabel; - m_tooltip.hide_tooltip(); - if( ! get_n_pages() ) m_bt_tabswitch.hide_button(); } @@ -555,9 +535,6 @@ SKELETON::TabLabel* DragableNoteBook::create_tablabel( const std::string& url ) m_control.get_eventbutton( CONTROL::DragStartButton, event ); tablabel->set_dragable( m_dragable, event.button ); - tablabel->sig_tab_motion_event().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_motion_event ) ); - tablabel->sig_tab_leave_event().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_leave_event ) ); - tablabel->sig_tab_drag_begin().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_drag_begin ) ); tablabel->sig_tab_drag_data_get().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_drag_data_get ) ); tablabel->sig_tab_drag_end().connect( sigc::mem_fun(*this, &DragableNoteBook::slot_drag_end ) ); @@ -688,39 +665,6 @@ bool DragableNoteBook::slot_button_release_event( GdkEventButton* event ) -// -// タブの中でマウスを動かした -// -void DragableNoteBook::slot_motion_event() -{ - const int page = m_notebook_tab.get_page_under_mouse(); - -#ifdef _DEBUG - std::cout << "DragableNoteBook::slot_motion_event page = " << page << std::endl; -#endif - - // ツールチップにテキストをセット - if( page >= 0 && page < m_notebook_tab.get_n_pages() ){ - SKELETON::TabLabel* tab = m_notebook_tab.get_tablabel( page ); - if( tab ) m_tooltip.set_text( tab->get_fulltext() ); - } - else m_tooltip.hide_tooltip(); -} - - -// -// タブからマウスが出た -// -void DragableNoteBook::slot_leave_event() -{ -#ifdef _DEBUG - std::cout << "DragableNoteBook::slot_leave_event page\n"; -#endif - - m_tooltip.hide_tooltip(); -} - - // notebook_tab の上でホイールを回した bool DragableNoteBook::slot_scroll_event( GdkEventScroll* event ) { diff --git a/src/skeleton/dragnote.h b/src/skeleton/dragnote.h index 1c943f64a..7ddc668f1 100644 --- a/src/skeleton/dragnote.h +++ b/src/skeleton/dragnote.h @@ -16,8 +16,6 @@ #include "viewnote.h" #include "tabswitchbutton.h" -#include "tooltip.h" - #include "control/control.h" #include @@ -77,9 +75,6 @@ namespace SKELETON Gtk::HBox m_hbox_tab; TabSwitchButton m_bt_tabswitch; // タブの切り替えボタン -#if !GTKMM_CHECK_VERSION(2,12,0) - Gtk::Tooltips m_tooltip_tabswitch; -#endif bool m_show_tabs; bool m_show_toolbar; @@ -94,8 +89,6 @@ namespace SKELETON // 入力コントローラ CONTROL::Control m_control; - Tooltip m_tooltip; - bool m_dragable; SKELETON::IconPopup* m_down_arrow; @@ -121,7 +114,6 @@ namespace SKELETON ~DragableNoteBook(); void clock_in(); - void focus_out(); #if !GTKMM_CHECK_VERSION(3,0,0) // 枠描画 @@ -205,10 +197,7 @@ namespace SKELETON // コントローラ CONTROL::Control& get_control(){ return m_control; } - // タブからくるシグナルにコネクトする - void slot_motion_event(); - void slot_leave_event(); - + // タブのドラッグ・アンド・ドロップ処理 void slot_drag_begin(); void slot_drag_motion( const int page, const int tab_x, const int tab_y, const int tab_width ); void slot_drag_data_get( Gtk::SelectionData& selection_data ); diff --git a/src/skeleton/dragtreeview.cpp b/src/skeleton/dragtreeview.cpp index be119e570..29ee5a486 100644 --- a/src/skeleton/dragtreeview.cpp +++ b/src/skeleton/dragtreeview.cpp @@ -175,8 +175,6 @@ void DragTreeView::init_font( const std::string& fontname ) #else modify_font( pfd ); #endif - - m_tooltip.modify_font_label( fontname ); } @@ -190,17 +188,6 @@ void DragTreeView::clock_in() m_popup_win->view()->clock_in(); return; } - - m_tooltip.clock_in(); -} - - -// -// ツールチップに文字をセット -// -void DragTreeView::set_str_tooltip( const std::string& text ) -{ - m_tooltip.set_text( text ); } @@ -550,7 +537,6 @@ void DragTreeView::wheelscroll( GdkEventScroll* event ) bool DragTreeView::on_leave_notify_event( GdkEventCrossing* event ) { - m_tooltip.hide_tooltip(); if( ! is_mouse_on_popup() ){ hide_popup(); m_pre_popup_url = std::string(); diff --git a/src/skeleton/dragtreeview.h b/src/skeleton/dragtreeview.h index bc7e7af83..ca0851dfb 100644 --- a/src/skeleton/dragtreeview.h +++ b/src/skeleton/dragtreeview.h @@ -11,9 +11,9 @@ #ifndef _DRAGTREEVIEW_H #define _DRAGTREEVIEW_H -#include "treeviewbase.h" +#include "gtkmmversion.h" -#include "tooltip.h" +#include "treeviewbase.h" #include "control/control.h" @@ -38,8 +38,6 @@ namespace SKELETON Gtk::TreeModel::Path m_path_dragstart; Gtk::TreeModel::Path m_path_dragpre; - Tooltip m_tooltip; - #if GTKMM_CHECK_VERSION(3,0,0) static constexpr const char* s_css_classname = u8"jd-dragtreeview"; Glib::RefPtr< Gtk::CssProvider > m_provider = Gtk::CssProvider::create(); @@ -93,13 +91,6 @@ namespace SKELETON // フォント初期化 void init_font( const std::string& fontname ); - - // ツールチップ表示 - void set_str_tooltip( const std::string& str ); - // ツールチップ最小幅設定(指定した幅よりもツールチップが広い場合は表示) - void set_tooltip_min_width( const int min_width ){ m_tooltip.set_min_width( min_width ); } - void hide_tooltip(){ m_tooltip.hide_tooltip(); } - void show_tooltip(){ m_tooltip.show_tooltip(); } // ポップアップウィンドウ表示 const std::string& pre_popup_url() const { return m_pre_popup_url; } diff --git a/src/skeleton/menubutton.cpp b/src/skeleton/menubutton.cpp index 0c77852cd..1cde75a94 100644 --- a/src/skeleton/menubutton.cpp +++ b/src/skeleton/menubutton.cpp @@ -89,14 +89,9 @@ MenuButton::~MenuButton() void MenuButton::set_tooltip_arrow( const std::string& tooltip ) { -#if GTKMM_CHECK_VERSION(2,12,0) if( m_arrow ) { m_arrow->set_tooltip_text( tooltip ); } -#else - // gtkmm-2.12.0より前のバージョンはボタンの中のWidgetにツールチップを設定できない - m_tooltip_arrow.set_tip( *this, tooltip ); -#endif } diff --git a/src/skeleton/menubutton.h b/src/skeleton/menubutton.h index 7cd28af1b..ea82842f9 100644 --- a/src/skeleton/menubutton.h +++ b/src/skeleton/menubutton.h @@ -25,9 +25,6 @@ namespace SKELETON std::vector< Gtk::MenuItem* > m_menuitems; Gtk::Widget* m_label; -#if !GTKMM_CHECK_VERSION(2,12,0) - Gtk::Tooltips m_tooltip_arrow; -#endif Gtk::Arrow* m_arrow; bool m_on_arrow; diff --git a/src/skeleton/tabnote.cpp b/src/skeleton/tabnote.cpp index 237a319b4..fb545476a 100644 --- a/src/skeleton/tabnote.cpp +++ b/src/skeleton/tabnote.cpp @@ -578,6 +578,7 @@ void TabNotebook::set_tab_fulltext( const std::string& str, int page ) SKELETON::TabLabel* tablabel = get_tablabel( page ); if( tablabel && str != tablabel->get_fulltext() ){ tablabel->set_fulltext( str ); + tablabel->set_tooltip_text( str ); if( m_fixtab ) tablabel->resize_tab( str.length() ); else adjust_tabwidth(); } diff --git a/src/skeleton/toolbar.cpp b/src/skeleton/toolbar.cpp index dee9ec9be..7fc34cab3 100644 --- a/src/skeleton/toolbar.cpp +++ b/src/skeleton/toolbar.cpp @@ -294,11 +294,7 @@ void ToolBar::pack_transparent_separator() // void ToolBar::set_tooltip( Gtk::ToolItem& toolitem, const std::string& tip ) { -#if GTKMM_CHECK_VERSION(2,12,0) toolitem.set_tooltip_text( tip ); -#else - toolitem.set_tooltip( m_tooltip, tip ); -#endif } diff --git a/src/skeleton/toolbar.h b/src/skeleton/toolbar.h index 50ee4762b..4a0f05a6e 100644 --- a/src/skeleton/toolbar.h +++ b/src/skeleton/toolbar.h @@ -29,10 +29,6 @@ namespace SKELETON bool m_enable_slot; -#if !GTKMM_CHECK_VERSION(2,12,0) - Gtk::Tooltips m_tooltip; -#endif - // ボタンバー SKELETON::JDToolbar m_buttonbar; bool m_buttonbar_shown; diff --git a/src/skeleton/tooltip.cpp b/src/skeleton/tooltip.cpp deleted file mode 100644 index 2e6f3a465..000000000 --- a/src/skeleton/tooltip.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// ライセンス: GPL2 - -//#define _DEBUG -#include "jddebug.h" - -#include "tooltip.h" - -#include "global.h" - -using namespace SKELETON; - -// ツールチップ -Tooltip::Tooltip() - : PopupWinBase( POPUPWIN_DRAWFRAME ), - m_counter( 0 ), - m_min_width( 0 ) -{ - // 背景色をテーマに合わせる - set_name( "gtk-tooltips" ); - set_border_width( 4 ); - add( m_label ); - show_all_children(); -} - - -Tooltip::~Tooltip() noexcept = default; - - -// フォント -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 -} - - -// -// クロック入力 -// -void Tooltip::clock_in() -{ - const int popup_time = 500 // msec - / TIMER_TIMEOUT ; - - // カウンターが一杯になったらツールチップ表示 - ++m_counter; - if( m_counter == popup_time ) show_tooltip(); -} - - - - -void Tooltip::set_text( const std::string& text ) -{ - if( m_label.get_text() == text ) return; - -#ifdef _DEBUG - std::cout << "Tooltip::set_text" << text << std::endl; -#endif - - hide_tooltip(); - resize( 1, 1 ); - m_label.set_text( text ); - m_counter = 0; -} - - - -// -// 表示 -// -void Tooltip::show_tooltip() -{ - if( m_label.get_text().empty() ) return; - -#ifdef _DEBUG - std::cout << "Tooltip::show_tooltip" << m_label.get_text() << std::endl; -#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 よりも - // 幅が大きければマウスの位置に移動する - move( -100, -100 ); - show(); - const int width = get_width(); - const int height = get_height(); - -#ifdef _DEBUG - std::cout << "width / min_width = " << width << " / " << m_min_width << std::endl; -#endif - if( width >= m_min_width ){ - - // 画面外にはみださないように調整 - const int mrg = 4; - const int width_desktop = get_screen()->get_width(); - if( x_mouse + width > width_desktop ) x_mouse = MAX( 0, width_desktop - width ); - - move( x_mouse, y_mouse - height - mrg ); - } -} - - -void Tooltip::hide_tooltip() -{ -#ifdef _DEBUG - std::cout << "Tooltip::hide_tooltip\n"; -#endif - - m_counter = 10000; - hide(); - m_label.set_text( std::string() ); -} diff --git a/src/skeleton/tooltip.h b/src/skeleton/tooltip.h deleted file mode 100644 index 3fab9d5c1..000000000 --- a/src/skeleton/tooltip.h +++ /dev/null @@ -1,39 +0,0 @@ -// ライセンス: GPL2 -// -// 自前のツールチップクラス -// - -#ifndef _TOOLTIP_H -#define _TOOLTIP_H - -#include "popupwinbase.h" - -namespace SKELETON -{ - class Tooltip : public PopupWinBase - { - Gtk::Label m_label; - - int m_counter; - - // 横幅が m_min_width より大きければ表示 - int m_min_width; - - public: - - Tooltip(); - ~Tooltip() noexcept; - - void clock_in(); - 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 show_tooltip(); - void hide_tooltip(); - }; -} - - -#endif diff --git a/src/skeleton/window.cpp b/src/skeleton/window.cpp index e3a8d92c2..4ac40601d 100644 --- a/src/skeleton/window.cpp +++ b/src/skeleton/window.cpp @@ -404,11 +404,7 @@ void JDWindow::set_status( const std::string& stat ) #if GTKMM_CHECK_VERSION(2,5,0) m_label_stat.set_text( stat ); -#if GTKMM_CHECK_VERSION(2,12,0) m_label_stat_ebox.set_tooltip_text( stat ); -#else - m_tooltip.set_tip( m_label_stat_ebox, stat ); -#endif #else m_statbar.push( stat ); #endif diff --git a/src/skeleton/window.h b/src/skeleton/window.h index c646c1cf7..224cb0bcf 100644 --- a/src/skeleton/window.h +++ b/src/skeleton/window.h @@ -45,9 +45,6 @@ namespace SKELETON Gtk::Label m_label_stat; Gtk::EventBox m_label_stat_ebox; Gtk::EventBox m_mginfo_ebox; -#if !GTKMM_CHECK_VERSION(2,12,0) - Gtk::Tooltips m_tooltip; -#endif #else Gtk::Statusbar m_statbar; #endif