Browse Source

fix view and workbench destroy issue.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@944 bbd45198-f89e-11dd-88c7-29a3b14d5316
bernard.xiong@gmail.com 14 years ago
parent
commit
b324e1a2d2

+ 1 - 0
components/rtgui/include/rtgui/widgets/workbench.h

@@ -64,6 +64,7 @@ rtgui_type_t* rtgui_workbench_type_get(void);
 
 
 rtgui_workbench_t *rtgui_workbench_create(const char* panel_name, const unsigned char* title);
 rtgui_workbench_t *rtgui_workbench_create(const char* panel_name, const unsigned char* title);
 void rtgui_workbench_destroy(rtgui_workbench_t* workbench);
 void rtgui_workbench_destroy(rtgui_workbench_t* workbench);
+void rtgui_workbench_close(rtgui_workbench_t* workbench);
 
 
 rt_bool_t rtgui_workbench_event_handler(rtgui_widget_t* widget, rtgui_event_t* event);
 rt_bool_t rtgui_workbench_event_handler(rtgui_widget_t* widget, rtgui_event_t* event);
 
 

+ 17 - 2
components/rtgui/widgets/workbench.c

@@ -135,6 +135,20 @@ void rtgui_workbench_destroy(rtgui_workbench_t* workbench)
 {
 {
 	RT_ASSERT(workbench != RT_NULL);
 	RT_ASSERT(workbench != RT_NULL);
 
 
+	if (workbench->flag & RTGUI_WORKBENCH_FLAG_CLOSED)
+	{
+		rtgui_widget_destroy(RTGUI_WIDGET(workbench));
+	}
+	else
+	{
+		/* just close workbench */
+		rtgui_workbench_close(workbench);
+	}
+}
+
+void rtgui_workbench_close(rtgui_workbench_t* workbench)
+{
+	/* detach workbench in server */
 	if (RTGUI_TOPLEVEL(workbench)->server != RT_NULL)
 	if (RTGUI_TOPLEVEL(workbench)->server != RT_NULL)
 	{
 	{
 		struct rtgui_event_panel_detach edetach;
 		struct rtgui_event_panel_detach edetach;
@@ -148,10 +162,11 @@ void rtgui_workbench_destroy(rtgui_workbench_t* workbench)
 			RTGUI_EVENT(&edetach), sizeof(struct rtgui_event_panel_detach)) != RT_EOK)
 			RTGUI_EVENT(&edetach), sizeof(struct rtgui_event_panel_detach)) != RT_EOK)
 			return;
 			return;
 
 
-			RTGUI_TOPLEVEL(workbench)->server = RT_NULL;
+		RTGUI_TOPLEVEL(workbench)->server = RT_NULL;
 	}
 	}
 
 
-	rtgui_widget_destroy(RTGUI_WIDGET(workbench));
+	/* set status to close */
+	workbench->flag |= RTGUI_WORKBENCH_FLAG_CLOSED;
 }
 }
 
 
 void rtgui_workbench_set_flag(rtgui_workbench_t* workbench, rt_uint8_t flag)
 void rtgui_workbench_set_flag(rtgui_workbench_t* workbench, rt_uint8_t flag)