changeset 518:7efc5f99c4cc

Implemented dw_window_show/hide/minimize/destroy/set_text for MDI children. reparent needs to be implemented.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 16 Mar 2004 06:53:23 +0000
parents 63e5812d64ba
children b3404a94a15d
files gtk/dw.c
diffstat 1 files changed, 66 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/gtk/dw.c	Tue Mar 16 06:18:40 2004 +0000
+++ b/gtk/dw.c	Tue Mar 16 06:53:23 2004 +0000
@@ -595,7 +595,6 @@
 	g_return_if_fail (GTK_IS_MDI (mdi));
 	child = get_child (mdi, widget);
 	g_return_if_fail (child);
-	g_return_if_fail (GTK_IS_WIDGET (child));
 	gtk_mdi_remove_true (GTK_CONTAINER (mdi), child->widget);
 }
 
@@ -2251,14 +2250,24 @@
 int dw_window_minimize(HWND handle)
 {
 	int _locked_by_me = FALSE;
+	GtkWidget *mdi = NULL;
 
 	if(!handle)
 		return 0;
 
 	DW_MUTEX_LOCK;
-	XIconifyWindow(GDK_WINDOW_XDISPLAY(GTK_WIDGET(handle)->window),
-				   GDK_WINDOW_XWINDOW(GTK_WIDGET(handle)->window),
-				   DefaultScreen (GDK_DISPLAY ()));
+#if GTK_MAJOR_VERSION > 1
+	if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi))
+	{
+		gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_ICONIFIED);
+	}
+	else
+#endif
+	{
+		XIconifyWindow(GDK_WINDOW_XDISPLAY(GTK_WIDGET(handle)->window),
+					   GDK_WINDOW_XWINDOW(GTK_WIDGET(handle)->window),
+					   DefaultScreen (GDK_DISPLAY ()));
+	}
 	DW_MUTEX_UNLOCK;
 	return 0;
 }
@@ -2307,33 +2316,42 @@
 int dw_window_show(HWND handle)
 {
 	int _locked_by_me = FALSE;
-	GtkWidget *defaultitem;
+	GtkWidget *defaultitem, *mdi;
 
 	if(!handle)
 		return 0;
 
 	DW_MUTEX_LOCK;
 	gtk_widget_show(handle);
-	if(GTK_WIDGET(handle)->window)
-	{
-		int width = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_width");
-		int height = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_height");
-
-		if(width && height)
-		{
-			gtk_widget_set_usize(handle, width, height);
-			gtk_object_set_data(GTK_OBJECT(handle), "_dw_width", 0);
-			gtk_object_set_data(GTK_OBJECT(handle), "_dw_height", 0);
-		}
-
-		gdk_window_raise(GTK_WIDGET(handle)->window);
-		gdk_flush();
-		gdk_window_show(GTK_WIDGET(handle)->window);
-		gdk_flush();
-	}
-	defaultitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_defaultitem");
-	if(defaultitem)
-		gtk_widget_grab_focus(defaultitem);
+#if GTK_MAJOR_VERSION > 1
+	if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi))
+	{
+		gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_NORMAL);
+	}
+	else
+#endif
+	{
+		if(GTK_WIDGET(handle)->window)
+		{
+			int width = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_width");
+			int height = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_height");
+
+			if(width && height)
+			{
+				gtk_widget_set_usize(handle, width, height);
+				gtk_object_set_data(GTK_OBJECT(handle), "_dw_width", 0);
+				gtk_object_set_data(GTK_OBJECT(handle), "_dw_height", 0);
+			}
+
+			gdk_window_raise(GTK_WIDGET(handle)->window);
+			gdk_flush();
+			gdk_window_show(GTK_WIDGET(handle)->window);
+			gdk_flush();
+		}
+		defaultitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_defaultitem");
+		if(defaultitem)
+			gtk_widget_grab_focus(defaultitem);
+	}
 	DW_MUTEX_UNLOCK;
 	return 0;
 }
@@ -2346,12 +2364,20 @@
 int dw_window_hide(HWND handle)
 {
 	int _locked_by_me = FALSE;
+	GtkWidget *mdi = NULL;
 
 	if(!handle)
 		return 0;
 
 	DW_MUTEX_LOCK;
-	gtk_widget_hide(handle);
+#if GTK_MAJOR_VERSION > 1
+	if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi))
+	{
+		gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_ICONIFIED);
+	}
+	else
+#endif
+		gtk_widget_hide(handle);
 	DW_MUTEX_UNLOCK;
 	return 0;
 }
@@ -2364,18 +2390,25 @@
 int dw_window_destroy(HWND handle)
 {
 	int _locked_by_me = FALSE;
+	GtkWidget *mdi = NULL;
 
 	if(!handle)
 		return 0;
 
 	DW_MUTEX_LOCK;
+#if GTK_MAJOR_VERSION > 1
+	if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi))
+	{
+		gtk_mdi_remove(GTK_MDI(mdi), handle);
+	}
+#endif
 	if(GTK_IS_WIDGET(handle))
 	{
 		GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_eventbox");
 
 		if(eventbox && GTK_IS_WIDGET(eventbox))
 			gtk_widget_destroy(eventbox);
-        else
+		else
 			gtk_widget_destroy(handle);
 	}
 	DW_MUTEX_UNLOCK;
@@ -2739,6 +2772,7 @@
 		gtk_widget_show(label);
 		gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi_child", (gpointer)1);
 		gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi_title", (gpointer)label);
+		gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi", (gpointer)hwndOwner);
 
 		gtk_mdi_put(GTK_MDI(hwndOwner), tmp, 100, 75, label);
 	}
@@ -3844,8 +3878,11 @@
 void dw_window_set_text(HWND handle, char *text)
 {
 	int _locked_by_me = FALSE;
-
-	DW_MUTEX_LOCK;
+	GtkWidget *tmp;
+
+	DW_MUTEX_LOCK;
+	if((tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi_title")))
+		handle = tmp;
 	if(GTK_IS_ENTRY(handle))
 		gtk_entry_set_text(GTK_ENTRY(handle), text);
 	else if(GTK_IS_COMBO(handle))