comparison gtk3/dw.c @ 836:28f9810dfebc

More work on getting MDI working again.... still doesn't work right unfortunately.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 27 Mar 2011 19:08:45 +0000
parents 82072ff08513
children d51e958aad95
comparison
equal deleted inserted replaced
835:82072ff08513 836:28f9810dfebc
238 gint cid; 238 gint cid;
239 void *intfunc; 239 void *intfunc;
240 240
241 } SignalHandler; 241 } SignalHandler;
242 242
243 #define SIGNALMAX 19 243 #define SIGNALMAX 18
244 244
245 /* A list of signal forwarders, to account for paramater differences. */ 245 /* A list of signal forwarders, to account for paramater differences. */
246 static SignalList SignalTranslate[SIGNALMAX] = { 246 static SignalList SignalTranslate[SIGNALMAX] = {
247 { _configure_event, DW_SIGNAL_CONFIGURE }, 247 { _configure_event, DW_SIGNAL_CONFIGURE },
248 { _key_press_event, DW_SIGNAL_KEY_PRESS }, 248 { _key_press_event, DW_SIGNAL_KEY_PRESS },
336 static void gtk_mdi_class_init(GtkMdiClass *klass); 336 static void gtk_mdi_class_init(GtkMdiClass *klass);
337 static void gtk_mdi_init(GtkMdi *mdi); 337 static void gtk_mdi_init(GtkMdi *mdi);
338 338
339 static void gtk_mdi_realize(GtkWidget *widget); 339 static void gtk_mdi_realize(GtkWidget *widget);
340 static void gtk_mdi_size_allocate(GtkWidget *widget, GtkAllocation *allocation); 340 static void gtk_mdi_size_allocate(GtkWidget *widget, GtkAllocation *allocation);
341 #if 0 341 static gint gtk_mdi_expose(GtkWidget *widget, cairo_t *cr, gpointer data);
342 static void gtk_mdi_size_request(GtkWidget *widget, GtkRequisition *requisition); 342 static void gtk_mdi_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width);
343 static gint gtk_mdi_expose(GtkWidget *widget, GdkEventExpose *event); 343 static void gtk_mdi_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height);
344 #endif
345 344
346 /* Callbacks */ 345 /* Callbacks */
347 static gboolean move_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data); 346 static gboolean move_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data);
348 static gboolean resize_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data); 347 static gboolean resize_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data);
349 static gboolean iconify_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data); 348 static gboolean iconify_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data);
408 container_class = (GtkContainerClass *) class; 407 container_class = (GtkContainerClass *) class;
409 408
410 parent_class = g_type_class_ref (GTK_TYPE_CONTAINER); 409 parent_class = g_type_class_ref (GTK_TYPE_CONTAINER);
411 410
412 widget_class->realize = gtk_mdi_realize; 411 widget_class->realize = gtk_mdi_realize;
413 #if 0 /* TODO */ 412 widget_class->draw = gtk_mdi_expose;
414 widget_class->expose_event = gtk_mdi_expose; 413 widget_class->get_preferred_height = gtk_mdi_get_preferred_height;
415 widget_class->size_request = gtk_mdi_size_request; 414 widget_class->get_preferred_width = gtk_mdi_get_preferred_width;
416 #endif
417 widget_class->size_allocate = gtk_mdi_size_allocate; 415 widget_class->size_allocate = gtk_mdi_size_allocate;
418 416
419 container_class->add = gtk_mdi_add; 417 container_class->add = gtk_mdi_add;
420 container_class->remove = gtk_mdi_remove_true; 418 container_class->remove = gtk_mdi_remove_true;
421 container_class->forall = gtk_mdi_forall; 419 container_class->forall = gtk_mdi_forall;
748 gdk_window_set_user_data (gtk_widget_get_window(widget), widget); 746 gdk_window_set_user_data (gtk_widget_get_window(widget), widget);
749 747
750 gtk_style_set_background (gtk_widget_get_style(widget), gtk_widget_get_window(widget), GTK_STATE_NORMAL); 748 gtk_style_set_background (gtk_widget_get_style(widget), gtk_widget_get_window(widget), GTK_STATE_NORMAL);
751 } 749 }
752 750
753 #if 0 751 static void gtk_mdi_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width)
754 static void gtk_mdi_size_request (GtkWidget *widget, GtkRequisition *requisition)
755 { 752 {
756 GtkMdi *mdi; 753 GtkMdi *mdi;
757 GtkMdiChild *child; 754 GtkMdiChild *child;
758 GList *children; 755 GList *children;
759 GtkRequisition child_requisition; 756 gint child_minimum_width, child_natural_width;
760 757
761 mdi = GTK_MDI (widget); 758 mdi = GTK_MDI (widget);
762 requisition->width = GTK_MDI_DEFAULT_WIDTH; 759 *natural_width = *minimum_width = GTK_MDI_DEFAULT_WIDTH;
763 requisition->height = GTK_MDI_DEFAULT_HEIGHT;
764 760
765 children = mdi->children; 761 children = mdi->children;
766 while(children) 762 while(children)
767 { 763 {
768 child = children->data; 764 child = children->data;
769 children = children->next; 765 children = children->next;
770 766
771 if(gtk_widget_get_visible(child->widget)) 767 if(gtk_widget_get_visible(child->widget))
772 { 768 {
773 gtk_widget_size_request(child->widget, &child_requisition); 769 gtk_widget_get_preferred_width(child->widget, &child_minimum_width, &child_natural_width);
774 } 770 }
775 } 771 }
776 } 772 }
777 #endif 773
774 static void gtk_mdi_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height)
775 {
776 GtkMdi *mdi;
777 GtkMdiChild *child;
778 GList *children;
779 gint child_minimum_height, child_natural_height;
780
781 mdi = GTK_MDI (widget);
782 *natural_height = *minimum_height = GTK_MDI_DEFAULT_HEIGHT;
783
784 children = mdi->children;
785 while(children)
786 {
787 child = children->data;
788 children = children->next;
789
790 if(gtk_widget_get_visible(child->widget))
791 {
792 gtk_widget_get_preferred_height(child->widget, &child_minimum_height, &child_natural_height);
793 }
794 }
795 }
778 796
779 static void gtk_mdi_size_allocate(GtkWidget *widget, GtkAllocation *allocation) 797 static void gtk_mdi_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
780 { 798 {
781 GtkMdi *mdi; 799 GtkMdi *mdi;
782 GtkMdiChild *child; 800 GtkMdiChild *child;
855 gtk_widget_size_allocate (child->widget, &child_allocation); 873 gtk_widget_size_allocate (child->widget, &child_allocation);
856 } 874 }
857 } 875 }
858 } 876 }
859 877
860 #if 0 /* TODO: Is this needed... propogate expose is no longer supported */ 878 static gint gtk_mdi_expose(GtkWidget *widget, cairo_t *cr, gpointer data)
861 static gint gtk_mdi_expose(GtkWidget *widget, GdkEventExpose *event)
862 { 879 {
863 GtkMdiChild *child; 880 GtkMdiChild *child;
864 GList *children; 881 GList *children;
865 GtkMdi *mdi; 882 GtkMdi *mdi;
866 883
867 g_return_val_if_fail (widget != NULL, FALSE); 884 g_return_val_if_fail (widget != NULL, FALSE);
868 g_return_val_if_fail (GTK_IS_MDI (widget), FALSE); 885 g_return_val_if_fail (GTK_IS_MDI (widget), FALSE);
869 g_return_val_if_fail (event != NULL, FALSE); 886 g_return_val_if_fail (cr != NULL, FALSE);
870 887
871 mdi = GTK_MDI (widget); 888 mdi = GTK_MDI (widget);
872 for (children = mdi->children; children; children = children->next) 889 for (children = mdi->children; children; children = children->next)
873 { 890 {
874 child = (GtkMdiChild *) children->data; 891 child = (GtkMdiChild *) children->data;
875 gtk_container_propagate_expose (GTK_CONTAINER (mdi), 892 gtk_container_propagate_draw (GTK_CONTAINER (mdi),
876 child->widget, 893 child->widget,
877 event); 894 cr);
878 } 895 }
879 return FALSE; 896 return FALSE;
880 } 897 }
881 #endif
882 898
883 static void gtk_mdi_add(GtkContainer *container, GtkWidget *widget) 899 static void gtk_mdi_add(GtkContainer *container, GtkWidget *widget)
884 { 900 {
885 GtkWidget *label; 901 GtkWidget *label;
886 label = gtk_label_new (""); 902 label = gtk_label_new ("");