Mercurial > dwindows
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 ) |