comparison gtk3/dw.c @ 877:d3693ceec9b1

Implemented dw_listbox_set_top() for GTK3. Switched to using realpath() instead of rel2abs() in gtk_file_browse(). Cleaned up a few miscellaneous warnings. Removed some unsed MDI functions.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 06 Apr 2011 07:32:28 +0000
parents 13442724eb5d
children 63a8e77191c7
comparison
equal deleted inserted replaced
876:13442724eb5d 877:d3693ceec9b1
337 static void gtk_mdi_class_init(GtkMdiClass *klass); 337 static void gtk_mdi_class_init(GtkMdiClass *klass);
338 static void gtk_mdi_init(GtkMdi *mdi); 338 static void gtk_mdi_init(GtkMdi *mdi);
339 339
340 static void gtk_mdi_realize(GtkWidget *widget); 340 static void gtk_mdi_realize(GtkWidget *widget);
341 static void gtk_mdi_size_allocate(GtkWidget *widget, GtkAllocation *allocation); 341 static void gtk_mdi_size_allocate(GtkWidget *widget, GtkAllocation *allocation);
342 static gint gtk_mdi_expose(GtkWidget *widget, cairo_t *cr, gpointer data); 342 static gboolean gtk_mdi_draw(GtkWidget *widget, cairo_t *cr);
343 static void gtk_mdi_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width); 343 static void gtk_mdi_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width);
344 static void gtk_mdi_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height); 344 static void gtk_mdi_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height);
345 345
346 /* Callbacks */ 346 /* Callbacks */
347 static gboolean move_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data); 347 static gboolean move_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data);
408 container_class = (GtkContainerClass *) class; 408 container_class = (GtkContainerClass *) class;
409 409
410 parent_class = g_type_class_ref (GTK_TYPE_CONTAINER); 410 parent_class = g_type_class_ref (GTK_TYPE_CONTAINER);
411 411
412 widget_class->realize = gtk_mdi_realize; 412 widget_class->realize = gtk_mdi_realize;
413 widget_class->draw = gtk_mdi_expose; 413 widget_class->draw = gtk_mdi_draw;
414 widget_class->get_preferred_height = gtk_mdi_get_preferred_height; 414 widget_class->get_preferred_height = gtk_mdi_get_preferred_height;
415 widget_class->get_preferred_width = gtk_mdi_get_preferred_width; 415 widget_class->get_preferred_width = gtk_mdi_get_preferred_width;
416 widget_class->size_allocate = gtk_mdi_size_allocate; 416 widget_class->size_allocate = gtk_mdi_size_allocate;
417 417
418 container_class->add = gtk_mdi_add; 418 container_class->add = gtk_mdi_add;
611 child = get_child(mdi, widget); 611 child = get_child(mdi, widget);
612 g_return_if_fail(child); 612 g_return_if_fail(child);
613 613
614 *x = child->x; 614 *x = child->x;
615 *y = child->y; 615 *y = child->y;
616 }
617
618 static void gtk_mdi_tile(GtkMdi *mdi)
619 {
620 int i, n;
621 int width, height;
622 GList *children;
623 GtkMdiChild *child;
624
625 g_return_if_fail(GTK_IS_MDI(mdi));
626
627 children = mdi->children;
628 n = g_list_length (children);
629 width = gtk_widget_get_allocated_width(GTK_WIDGET (mdi));
630 height = gtk_widget_get_allocated_height(GTK_WIDGET (mdi)) / n;
631 for(i=0;i<n;i++)
632 {
633 child = (GtkMdiChild *) children->data;
634 children = children->next;
635 child->x = 0;
636 child->y = i * height;
637 gtk_widget_set_size_request (child->widget, width, height);
638 child->state = CHILD_NORMAL;
639 child->width = -1;
640 child->height = -1;
641 }
642 if (gtk_widget_get_visible(GTK_WIDGET (mdi)))
643 gtk_widget_queue_resize (GTK_WIDGET (mdi));
644 return;
645 }
646 static void gtk_mdi_cascade(GtkMdi *mdi)
647 {
648 int i, n;
649 int width, height;
650 GList *children;
651 GtkMdiChild *child;
652
653 g_return_if_fail(GTK_IS_MDI(mdi));
654 if(!gtk_widget_get_visible(GTK_WIDGET(mdi)))
655 return;
656
657 children = mdi->children;
658 n = g_list_length (children);
659 width = gtk_widget_get_allocated_width(GTK_WIDGET (mdi)) / (2 * n - 1);
660 height = gtk_widget_get_allocated_height(GTK_WIDGET (mdi)) / (2 * n - 1);
661 for (i = 0; i < n; i++)
662 {
663 child = (GtkMdiChild *) children->data;
664 children = children->next;
665 child->x = i * width;
666 child->y = i * height;
667 gtk_widget_set_size_request (child->widget, width * n, height * n);
668 child->state = CHILD_NORMAL;
669 child->width = -1;
670 child->height = -1;
671 }
672 if (gtk_widget_get_visible(GTK_WIDGET(mdi)))
673 gtk_widget_queue_resize(GTK_WIDGET(mdi));
674 return;
675 }
676
677 static GtkMdiChildState gtk_mdi_get_state(GtkMdi *mdi, GtkWidget *widget)
678 {
679 GtkMdiChild *child;
680
681 g_return_val_if_fail (GTK_IS_MDI (mdi), CHILD_NORMAL);
682 g_return_val_if_fail (GTK_IS_WIDGET (widget), CHILD_NORMAL);
683
684 child = get_child (mdi, widget);
685 g_return_val_if_fail (child, CHILD_NORMAL);
686
687 return child->state;
688 } 616 }
689 617
690 static void gtk_mdi_set_state(GtkMdi *mdi, GtkWidget *widget, GtkMdiChildState state) 618 static void gtk_mdi_set_state(GtkMdi *mdi, GtkWidget *widget, GtkMdiChildState state)
691 { 619 {
692 GtkMdiChild *child; 620 GtkMdiChild *child;
874 gtk_widget_size_allocate (child->widget, &child_allocation); 802 gtk_widget_size_allocate (child->widget, &child_allocation);
875 } 803 }
876 } 804 }
877 } 805 }
878 806
879 static gint gtk_mdi_expose(GtkWidget *widget, cairo_t *cr, gpointer data) 807 static gboolean gtk_mdi_draw(GtkWidget *widget, cairo_t *cr)
880 { 808 {
881 GtkMdiChild *child; 809 GtkMdiChild *child;
882 GList *children; 810 GList *children;
883 GtkMdi *mdi; 811 GtkMdi *mdi;
884 812
8872 { 8800 {
8873 GtkWidget *tmp = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); 8801 GtkWidget *tmp = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user");
8874 if(tmp) 8802 if(tmp)
8875 handle2 = tmp; 8803 handle2 = tmp;
8876 } 8804 }
8877 #if 0 8805
8878 if(GTK_IS_LIST(handle2)) 8806 /* Make sure it is the correct tree type */
8879 { 8807 if(handle2 && GTK_IS_TREE_VIEW(handle2) && g_object_get_data(G_OBJECT(handle2), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_LISTBOX))
8880 int count = dw_listbox_count(handle); 8808 {
8881 GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(handle)); 8809 GtkAdjustment *adjust = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(handle2));
8882 float pos, ratio; 8810 GtkListStore *store = (GtkListStore *)gtk_tree_view_get_model(GTK_TREE_VIEW(handle2));
8883 8811
8884 if(count) 8812 if(store && adjust)
8885 { 8813 {
8886 ratio = (float)top/(float)count; 8814 /* Get the number of children at the top level */
8887 8815 gint rowcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
8888 pos = (ratio * (float)(adj->upper - adj->lower)) + adj->lower; 8816 gdouble upper = gtk_adjustment_get_upper(adjust);
8889 8817 gdouble lower = gtk_adjustment_get_lower(adjust);
8890 gtk_adjustment_set_value(adj, pos); 8818 gdouble change;
8891 } 8819
8892 } 8820 /* Safety check */
8893 #endif 8821 if(rowcount < 1)
8822 {
8823 DW_MUTEX_UNLOCK;
8824 return;
8825 }
8826
8827 change = ((gdouble)top/(gdouble)rowcount) * (upper - lower);
8828
8829 gtk_adjustment_set_value(adjust, change + lower);
8830 }
8831 }
8894 DW_MUTEX_UNLOCK; 8832 DW_MUTEX_UNLOCK;
8895 } 8833 }
8896 8834
8897 /* 8835 /*
8898 * Copies the given index item's text into buffer. 8836 * Copies the given index item's text into buffer.
9647 GtkFileFilter *filter2 = NULL; 9585 GtkFileFilter *filter2 = NULL;
9648 gchar *button; 9586 gchar *button;
9649 char *filename = NULL; 9587 char *filename = NULL;
9650 char buf[1000]; 9588 char buf[1000];
9651 char mypath[PATH_MAX+1]; 9589 char mypath[PATH_MAX+1];
9652 char cwd[PATH_MAX+1];
9653 9590
9654 switch (flags ) 9591 switch (flags )
9655 { 9592 {
9656 case DW_DIRECTORY_OPEN: 9593 case DW_DIRECTORY_OPEN:
9657 action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER; 9594 action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
9695 gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( filew ), filter2 ); 9632 gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( filew ), filter2 );
9696 } 9633 }
9697 9634
9698 if ( defpath ) 9635 if ( defpath )
9699 { 9636 {
9700 if ( g_path_is_absolute( defpath ) ) 9637 if ( g_path_is_absolute( defpath ) || !realpath(defpath, mypath))
9701 { 9638 {
9702 strcpy( mypath, defpath ); 9639 strcpy( mypath, defpath );
9703 }
9704 else
9705 {
9706 if ( !getcwd(cwd, PATH_MAX ) )
9707 {
9708 }
9709 else
9710 {
9711 if ( rel2abs( defpath, cwd, mypath, PATH_MAX ) )
9712 {
9713 }
9714 }
9715 } 9640 }
9716 gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( filew ), mypath ); 9641 gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( filew ), mypath );
9717 } 9642 }
9718 9643
9719 if ( gtk_dialog_run( GTK_DIALOG( filew ) ) == GTK_RESPONSE_ACCEPT ) 9644 if ( gtk_dialog_run( GTK_DIALOG( filew ) ) == GTK_RESPONSE_ACCEPT )