X-Git-Url: http://git.mutantstargoat.com?p=winnie;a=blobdiff_plain;f=src%2Fwm.cc;h=33f28795c30d65f4a63629f9379bd7378280c607;hp=ffe6f6acfd2534fa7b4b91ff4d86f92fe8117abc;hb=287b4d5d1b7eadfe9d5d0aa3b33700f3e1bed55e;hpb=f634e2d68f3f5b4ba5645891b2c8110f48e80129 diff --git a/src/wm.cc b/src/wm.cc index ffe6f6a..33f2879 100644 --- a/src/wm.cc +++ b/src/wm.cc @@ -45,6 +45,10 @@ void WindowManager::destroy_frame(Window *win) return; } + if(grab_win == win) { + release_mouse(); + } + std::list::iterator it; it = std::find(windows.begin(), windows.end(), frame); if(it != windows.end()) { @@ -167,7 +171,7 @@ void WindowManager::remove_window(Window *win) void WindowManager::set_focused_window(Window *win) { - if(win == focused_win) { + if(win && win == focused_win) { return; } @@ -225,6 +229,21 @@ Window *WindowManager::get_window_at_pos(int pointer_x, int pointer_y) return 0; } +Window *WindowManager::get_grab_window() const +{ + return grab_win; +} + +void WindowManager::grab_mouse(Window *win) +{ + grab_win = win; +} + +void WindowManager::release_mouse() +{ + grab_win = 0; +} + static void display(Window *win) { fill_rect(win->get_absolute_rect(), 255, 211, 5); @@ -236,9 +255,13 @@ static void mouse(Window *win, int bn, bool pressed, int x, int y) { if(bn == 0) { if(pressed) { + wm->grab_mouse(win); prev_x = x; prev_y = y; } + else { + wm->release_mouse(); + } } }