Mercurial > dwindows
changeset 3002:a70d8ce6151c
GTK4: Fix a number of deprecation warnings in GTK 4.10 and later.
Migrate to GtkFileDialog for 4.10 from GtkFileChooserDialog.
Migrate to gtk_widget_get_width/height() instead of GtkAllocation funcions.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Wed, 06 Dec 2023 02:16:05 +0000 |
parents | a464a74505f7 |
children | dc33d380d614 |
files | gtk4/dw.c |
diffstat | 1 files changed, 130 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk4/dw.c Sun Sep 10 20:37:16 2023 +0000 +++ b/gtk4/dw.c Wed Dec 06 02:16:05 2023 +0000 @@ -4226,7 +4226,7 @@ * Parameters: * handle: Handle to the window. * Returns: - * text: The text associsated with a given window. + * text: The text associated with a given window. */ DW_FUNCTION_DEFINITION(dw_window_get_text, char *, HWND handle) DW_FUNCTION_ADD_PARAM1(handle) @@ -9929,16 +9929,24 @@ if(percent) { + int width, height; +#if GTK_CHECK_VERSION(4,12,0) + width = gtk_widget_get_width(widget); + height = gtk_widget_get_height(widget); +#else GtkAllocation alloc; gtk_widget_get_allocation(widget, &alloc); - - if(alloc.width > 10 && alloc.height > 10) + width = alloc.width; + height = alloc.height; +#endif + + if(width > 10 && height > 10) { if(gtk_orientable_get_orientation(GTK_ORIENTABLE(widget)) == GTK_ORIENTATION_HORIZONTAL) - gtk_paned_set_position(GTK_PANED(widget), (int)(alloc.width * (*percent / 100.0))); + gtk_paned_set_position(GTK_PANED(widget), (int)(width * (*percent / 100.0))); else - gtk_paned_set_position(GTK_PANED(widget), (int)(alloc.height * (*percent / 100.0))); + gtk_paned_set_position(GTK_PANED(widget), (int)(height * (*percent / 100.0))); g_object_set_data(G_OBJECT(widget), "_dw_percent", NULL); free(percent); } @@ -10007,9 +10015,21 @@ int size = 0, position; if(gtk_orientable_get_orientation(GTK_ORIENTABLE(handle)) == GTK_ORIENTATION_HORIZONTAL) + { +#if GTK_CHECK_VERSION(4,12,0) + size = gtk_widget_get_width(handle); +#else size = gtk_widget_get_allocated_width(handle); +#endif + } else + { +#if GTK_CHECK_VERSION(4,12,0) + size = gtk_widget_get_height(handle); +#else size = gtk_widget_get_allocated_height(handle); +#endif + } if(mypercent) *mypercent = percent; @@ -10278,12 +10298,48 @@ env->MajorVersion = atoi(tempbuf); } +#if GTK_CHECK_VERSION(4,10,0) +static void _dw_file_browse_response(GObject *gobject, GAsyncResult *result, gpointer data) +{ + DWDialog *tmp = data; + GError *error = NULL; + char *filename = NULL; + GFile *file = NULL; + + /* Bail out if there is no DWDialog */ + if(!tmp) + return; + + switch(DW_POINTER_TO_INT(tmp->data)) + { + case DW_DIRECTORY_OPEN: + gtk_file_dialog_select_folder_finish(GTK_FILE_DIALOG(gobject), result, &error); + break; + case DW_FILE_OPEN: + gtk_file_dialog_open_finish(GTK_FILE_DIALOG(gobject), result, &error); + break; + case DW_FILE_SAVE: + gtk_file_dialog_save_finish(GTK_FILE_DIALOG(gobject), result, &error); + break; + default: + break; + } + + if(error == NULL) + { + filename = g_file_get_path(file); + g_object_unref(G_OBJECT(file)); + } + dw_dialog_dismiss(tmp, filename); +} +#endif + /* * Opens a file dialog and queries user selection. * Parameters: * title: Title bar text for dialog. * defpath: The default path of the open dialog. - * ext: Default file extention. + * ext: Default file extension. * flags: DW_FILE_OPEN or DW_FILE_SAVE or DW_DIRECTORY_OPEN * Returns: * NULL on error. A malloced buffer containing @@ -10295,15 +10351,68 @@ DW_FUNCTION_RETURN(dw_file_browse, char *) DW_FUNCTION_RESTORE_PARAM4(title, const char *, defpath, const char *, ext, const char *, flags, int) { + char buf[1001] = {0}; + char *filename = NULL; + DWDialog *tmp = dw_dialog_new(DW_INT_TO_POINTER(flags)); +#if GTK_CHECK_VERSION(4,10,0) + GtkFileDialog *dialog = gtk_file_dialog_new(); + + gtk_file_dialog_set_title(dialog, title); + if(defpath) + { + GFile *path = g_file_new_for_path(defpath); + + /* See if the path exists */ + if(path) + { + /* If the path is a directory... set the current folder */ + if(g_file_query_file_type(path, G_FILE_QUERY_INFO_NONE, NULL) == G_FILE_TYPE_DIRECTORY) + gtk_file_dialog_set_initial_folder(dialog, path); + else + gtk_file_dialog_set_initial_file(dialog, path); + + g_object_unref(G_OBJECT(path)); + } + } + if(ext) + { + GListStore *filters = g_list_store_new (GTK_TYPE_FILE_FILTER); + GtkFileFilter *filter = gtk_file_filter_new(); + snprintf(buf, 1000, "*.%s", ext); + gtk_file_filter_add_pattern(filter, (gchar *)buf); + snprintf(buf, 1000, "\"%s\" files", ext); + gtk_file_filter_set_name(filter, (gchar *)buf); + g_list_store_append(filters, filter); + filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, (gchar *)"*"); + gtk_file_filter_set_name(filter, (gchar *)"All Files"); + g_list_store_append(filters, filter); + gtk_file_dialog_set_filters(dialog, G_LIST_MODEL(filters)); + } + + switch(flags) + { + case DW_DIRECTORY_OPEN: + gtk_file_dialog_select_folder(dialog, NULL, NULL, (GAsyncReadyCallback)_dw_file_browse_response, tmp); + break; + case DW_FILE_OPEN: + gtk_file_dialog_open(dialog, NULL, NULL, (GAsyncReadyCallback)_dw_file_browse_response, tmp); + break; + case DW_FILE_SAVE: + gtk_file_dialog_save(dialog, NULL, NULL, (GAsyncReadyCallback)_dw_file_browse_response, tmp); + break; + default: + dw_messagebox( "Coding error", DW_MB_OK|DW_MB_ERROR, "dw_file_browse() flags argument invalid."); + tmp = NULL; + break; + } + + if(tmp) + filename = dw_dialog_wait(tmp); +#else GtkWidget *filew; - GtkFileChooserAction action; - GtkFileFilter *filter1 = NULL; - GtkFileFilter *filter2 = NULL; gchar *button = NULL; - char *filename = NULL; - char buf[1001] = {0}; - DWDialog *tmp = dw_dialog_new(NULL); switch(flags) { @@ -10335,16 +10444,16 @@ if(ext) { - filter1 = gtk_file_filter_new(); + GtkFileFilter *filter = gtk_file_filter_new(); snprintf(buf, 1000, "*.%s", ext); - gtk_file_filter_add_pattern( filter1, (gchar *)buf); + gtk_file_filter_add_pattern(filter, (gchar *)buf); snprintf(buf, 1000, "\"%s\" files", ext); - gtk_file_filter_set_name(filter1, (gchar *)buf); - filter2 = gtk_file_filter_new(); - gtk_file_filter_add_pattern(filter2, (gchar *)"*"); - gtk_file_filter_set_name(filter2, (gchar *)"All Files"); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filew), filter1); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filew), filter2); + gtk_file_filter_set_name(filter, (gchar *)buf); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filew), filter); + filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter, (gchar *)"*"); + gtk_file_filter_set_name(filter, (gchar *)"All Files"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filew), filter); } if(defpath) @@ -10377,6 +10486,7 @@ if(GTK_IS_WINDOW(filew)) gtk_window_destroy(GTK_WINDOW(filew)); } +#endif DW_FUNCTION_RETURN_THIS(filename); }