■■■■■■□■■■■■■□■■■■■■□□□□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■■■■■□■■□□□□
■■□□■■□■■□□■■□■■□□□□□■■□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■□□■■□□□□□■■
■■□□■■□■■■■■■□■■■■■■□■■■■■■□■■■■■■

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

windows版gvimのタブをホイールクリックで閉じるパッチ

windows版gvimでタブのホイールクリックでタブを閉じたかったので
パッチを書いてみました。

それっぽいコードがあるんですが、どうやったら有効になるのか
よく分からなかったので適当にdirty hack
ベースは7.3.266+kaoriyaパッチ。

パッチ 7.3.xx3

--- src/gui_w32.c       2011-08-06 13:42:23.069250000 +0900
+++ src/gui_w32.c.mod   2011-08-08 19:11:29.640625000 +0900
@@ -4260,6 +4260,64 @@
 #endif
 
 #if defined(FEAT_GUI_TABLINE) || defined(PROTO)
+static tabpage_T* s_tp;
+static LONG DefTabControlProc;
+static tabpage_T* GetTabUnderCursor(){
+    tabpage_T* ptp;
+    ptp = NULL;
+    if (gui_mch_showing_tabline()){
+       TCHITTESTINFO htinfo;
+       GetCursorPos(&htinfo.pt);
+       /* ignore if a window under cusor is not tabcontrol. */
+       if (s_tabhwnd == WindowFromPoint(htinfo.pt)){
+           if (ScreenToClient(s_tabhwnd, &htinfo.pt) != 0){
+               int idx;
+               idx = TabCtrl_HitTest(s_tabhwnd, &htinfo);
+               if (idx != -1){
+                   ptp = find_tabpage(idx + 1);
+               }
+           }
+       }
+    }
+    return ptp;
+}
+static LRESULT CALLBACK MyTabControlProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
+    switch (uMsg){
+       case WM_MBUTTONDOWN:
+           {
+               s_tp = GetTabUnderCursor();
+               SetCapture(hWnd);
+               break;
+           }
+       case WM_MBUTTONUP:
+           {
+               /* when the mouse events was executed on the same tab */
+               if (GetTabUnderCursor() == s_tp){
+                   BOOL bResult;
+                   bResult = FALSE;
+                   if (s_tp == curtab){
+                       if (first_tabpage->tp_next != NULL){
+                           tabpage_close(FALSE);
+                           bResult = TRUE;
+                       }
+                   }
+                   else if (s_tp != NULL){
+                       tabpage_close_other(s_tp, FALSE);
+                       bResult = TRUE;
+                   }
+
+                   if  (bResult == TRUE) update_screen(0);
+               }
+               ReleaseCapture();
+               s_tp = NULL;
+               break;
+           }
+       default:
+           break;
+    }
+    /* call default TabControl proc */
+    return CallWindowProc(DefTabControlProc, hWnd, uMsg, wParam, lParam);
+}
     static void
 initialise_tabline(void)
 {
@@ -4270,6 +4328,8 @@
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, s_hwnd, NULL, s_hinst, NULL);
 
+    DefTabControlProc = SetWindowLong(s_tabhwnd, GWL_WNDPROC, (LONG)MyTabControlProc);
+
     gui.tabline_height = TABLINE_HEIGHT;
 
 # ifdef USE_SYSMENU_FONT
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。

テーマ:フリーソフト - ジャンル:コンピュータ

  1. 2011/08/08(月) 23:21:39|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0
<<これは欲しい!かな? | ホーム | NYAOS + Lua + Migemo (2)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://nocd5.blog59.fc2.com/tb.php/470-5a3d76ff
この記事にトラックバックする(FC2ブログユーザー)
home

プロフィール

Author:nocd5
30歳(男)
会社員

Last.fm



最近の記事

カテゴリー

カレンダー

09 | 2017/10 | 11
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

Amazonアソシエイト

RSSフィード

リンク

このブログをリンクに追加する

FC2ブログランキング

FC2Blog Ranking

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。