+static void display(Window *win);
+static void mouse(Window *win, int bn, bool pressed, int x, int y);
+static void motion(Window *win, int x, int y);
+
+void WindowManager::create_frame(Window *win)
+{
+ Window *frame = new Window;
+ Window *parent = win->get_parent();
+
+ frame->set_display_callback(display);
+ frame->set_mouse_button_callback(mouse);
+ frame->set_mouse_motion_callback(motion);
+
+ frame->add_child(win);
+ frame->set_focusable(false);
+
+ windows.push_back(frame);
+
+ Rect win_rect = win->get_rect();
+ frame->move(win_rect.x - frame_thickness,
+ win_rect.y - frame_thickness - titlebar_thickness);
+ frame->resize(win_rect.width + frame_thickness * 2,
+ win_rect.height + frame_thickness * 2 + titlebar_thickness);
+
+ win->move(frame_thickness, frame_thickness + titlebar_thickness);
+ parent->add_child(frame);
+}
+
+void WindowManager::destroy_frame(Window *win)
+{
+ Window *frame = win->parent;
+ if(!frame) {
+ return;
+ }
+
+ std::list<Window*>::iterator it;
+ it = std::find(windows.begin(), windows.end(), frame);
+ if(it != windows.end()) {
+ root_win->add_child(win);
+ windows.erase(it);
+ delete frame;
+ }
+}
+