[gnome-commander/NoGnomeFileEntry] Migrate deprecated GnomeFileEntry to GtkFileChooserButton, fixing #29



commit 2a3a8f6c7d11ed3c09a03d6dd0eb9ba1c7985669
Author: Uwe Scholz <u scholz83 gmx de>
Date:   Sun Mar 22 22:33:46 2020 +0100

    Migrate deprecated GnomeFileEntry to GtkFileChooserButton, fixing #29

 libgcmd/libgcmd-widget-factory.cc            | 49 ++++++++++++++++++++--------
 libgcmd/libgcmd-widget-factory.h             |  4 ++-
 src/dialogs/gnome-cmd-options-dialog.cc      | 29 +++++++++++-----
 src/dialogs/gnome-cmd-prepare-xfer-dialog.cc | 22 +++++--------
 4 files changed, 67 insertions(+), 37 deletions(-)
---
diff --git a/libgcmd/libgcmd-widget-factory.cc b/libgcmd/libgcmd-widget-factory.cc
index f77938cc..4b868a1b 100644
--- a/libgcmd/libgcmd-widget-factory.cc
+++ b/libgcmd/libgcmd-widget-factory.cc
@@ -1,4 +1,4 @@
-/** 
+/**
  * @file libgcmd-widget-factory.cc
  * @copyright (C) 2001-2006 Marcus Bjurman\n
  * @copyright (C) 2007-2012 Piotr Eljasiak\n
@@ -356,23 +356,44 @@ GtkWidget *create_scale (GtkWidget *parent, const gchar *name, gint value, gint
 }
 
 
-GtkWidget *create_file_entry (GtkWidget *parent, const gchar *name, const gchar *value)
+GtkWidget *create_directory_chooser_button (GtkWidget *parent, const gchar *name, const gchar *value)
 {
-    GtkWidget *fentry, *entry;
+    GtkWidget *chooser;
+    chooser = gtk_file_chooser_button_new (_("Folder selection"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+    if (value == nullptr)
+    {
+        gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), "");
+    }
+    else
+    {
+        gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), value);
+    }
+    g_object_ref (chooser);
+    g_object_set_data_full (G_OBJECT (parent), name, chooser, g_object_unref);
+    gtk_widget_show (chooser);
 
-    fentry = gnome_file_entry_new (NULL, NULL);
-    g_object_ref (fentry);
-    g_object_set_data_full (G_OBJECT (parent), "fileentry", fentry, g_object_unref);
-    gtk_widget_show (fentry);
+    return chooser;
+}
 
-    entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (fentry));
-    g_object_ref (entry);
-    g_object_set_data_full (G_OBJECT (parent), name, entry, g_object_unref);
-    if (value)
-        gtk_entry_set_text (GTK_ENTRY (entry), value);
-    gtk_widget_show (entry);
 
-    return fentry;
+GtkWidget *create_file_chooser_button (GtkWidget *parent, const gchar *name, const gchar *value)
+{
+    GtkWidget *chooser;
+    chooser = gtk_file_chooser_button_new (_("File selection"), GTK_FILE_CHOOSER_ACTION_OPEN);
+    if (value == nullptr)
+    {
+        gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), "");
+    }
+    else
+    {
+        gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (chooser), value);
+    }
+
+    g_object_ref (chooser);
+    g_object_set_data_full (G_OBJECT (parent), name, chooser, g_object_unref);
+    gtk_widget_show (chooser);
+
+    return chooser;
 }
 
 
diff --git a/libgcmd/libgcmd-widget-factory.h b/libgcmd/libgcmd-widget-factory.h
index 1b5e6bf4..872dda0e 100644
--- a/libgcmd/libgcmd-widget-factory.h
+++ b/libgcmd/libgcmd-widget-factory.h
@@ -109,7 +109,9 @@ GtkWidget *create_icon_entry (GtkWidget *parent, const gchar *name, const gchar
 
 GtkWidget *create_scale (GtkWidget *parent, const gchar *name, gint value, gint min, gint max);
 
-GtkWidget *create_file_entry (GtkWidget *parent, const gchar *name, const gchar *value);
+GtkWidget *create_directory_chooser_button (GtkWidget *parent, const gchar *name, const gchar *value);
+
+GtkWidget *create_file_chooser_button (GtkWidget *parent, const gchar *name, const gchar *value);
 
 GtkWidget *create_clist (GtkWidget *parent, const gchar *name, gint cols, gint rowh, GtkSignalFunc 
on_row_selected, GtkSignalFunc on_row_moved);
 
diff --git a/src/dialogs/gnome-cmd-options-dialog.cc b/src/dialogs/gnome-cmd-options-dialog.cc
index 59290786..d69b5c83 100644
--- a/src/dialogs/gnome-cmd-options-dialog.cc
+++ b/src/dialogs/gnome-cmd-options-dialog.cc
@@ -851,7 +851,7 @@ static GtkWidget *create_layout_tab (GtkWidget *parent, GnomeCmdData::Options &c
     table_add (table, spin, 1, 0, (GtkAttachOptions) GTK_FILL);
     scale = create_scale (parent, "iconquality_scale", cfg.icon_scale_quality, 0, 3);
     table_add (table, scale, 1, 1, (GtkAttachOptions) GTK_FILL);
-    entry = create_file_entry (parent, "theme_icondir_entry", cfg.theme_icon_dir);
+    entry = create_directory_chooser_button (parent, "theme_icondir_entry", cfg.theme_icon_dir);
     table_add (table, entry, 1, 2, (GtkAttachOptions)0);
 
     label = create_label (parent, _("Icon size:"));
@@ -873,7 +873,7 @@ inline void store_layout_options (GtkWidget *dialog, GnomeCmdData::Options &cfg)
 {
     GtkWidget *iconsize_spin       = lookup_widget (dialog, "iconsize_spin");
     GtkWidget *iconquality_scale   = lookup_widget (dialog, "iconquality_scale");
-    GtkWidget *theme_icondir_entry = lookup_widget (dialog, "theme_icondir_entry");
+    GtkWidget *theme_icondir_chooser = lookup_widget (dialog, "theme_icondir_entry");
     GtkWidget *row_height_spin     = lookup_widget (dialog, "row_height_spin");
     GtkWidget *use_ls              = lookup_widget (dialog, "use_ls_colors");
 
@@ -892,7 +892,8 @@ inline void store_layout_options (GtkWidget *dialog, GnomeCmdData::Options &cfg)
     const gchar *list_font = gtk_font_button_get_font_name (GTK_FONT_BUTTON (list_font_picker));
     cfg.set_list_font (list_font);
 
-    cfg.set_theme_icon_dir (gtk_entry_get_text (GTK_ENTRY (theme_icondir_entry)));
+    gchar* icondir = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (theme_icondir_chooser));
+    cfg.set_theme_icon_dir (g_filename_to_utf8(icondir, -1, nullptr, nullptr, nullptr));
 #if defined (__GNUC__)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wcast-align"
@@ -913,6 +914,7 @@ inline void store_layout_options (GtkWidget *dialog, GnomeCmdData::Options &cfg)
 #if defined (__GNUC__)
 #pragma GCC diagnostic pop
 #endif
+    g_free(icondir);
 }
 
 
@@ -1805,17 +1807,24 @@ static void on_device_dialog_cancel (GtkButton *button, GtkWidget *dialog)
 }
 
 
-inline void get_device_dialog_values (GtkWidget *dialog, gchar **alias, gchar **device, gchar **mountp, 
gchar **icon_path)
+inline void get_device_dialog_values (GtkWidget *dialog, gchar **alias, gchar **device_utf8,
+    gchar **mountp_utf8, gchar **icon_path)
 {
     GtkWidget *alias_entry = lookup_widget (dialog, "alias_entry");
     GtkWidget *device_entry = lookup_widget (dialog, "device_entry");
     GtkWidget *mountp_entry = lookup_widget (dialog, "mountp_entry");
     GtkWidget *icon_entry = lookup_widget (dialog, "device_iconentry");
 
+    gchar* device = (gchar *) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (device_entry));
+    gchar* mountp = (gchar *) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (mountp_entry));
+
     *alias = (gchar *) gtk_entry_get_text (GTK_ENTRY (alias_entry));
-    *device = (gchar *) gtk_entry_get_text (GTK_ENTRY (device_entry));
-    *mountp = (gchar *) gtk_entry_get_text (GTK_ENTRY (mountp_entry));
+    *device_utf8 = g_filename_to_utf8(device, -1, nullptr, nullptr, nullptr);
+    *mountp_utf8 = g_filename_to_utf8(mountp, -1, nullptr, nullptr, nullptr);
     *icon_path = gnome_icon_entry_get_filename (GNOME_ICON_ENTRY (icon_entry));
+
+    g_free(device);
+    g_free(mountp);
 }
 
 
@@ -1835,6 +1844,8 @@ static void on_add_device_dialog_ok (GtkButton *button, GtkWidget *dialog)
 
     gnome_cmd_con_list_get()->add(dev);
 
+    g_free (device);
+    g_free (mountp);
     g_free (icon_path);
 }
 
@@ -1855,6 +1866,8 @@ static void on_edit_device_dialog_ok (GtkButton *button, GtkWidget *dialog)
     update_device_in_list (GTK_CLIST (clist), dev, alias, device, mountp, icon_path);
     gtk_widget_destroy (dialog);
 
+    g_free (device);
+    g_free (mountp);
     g_free (icon_path);
 }
 
@@ -1892,11 +1905,11 @@ static GtkWidget *create_device_dialog (GnomeCmdConDevice *dev, GtkSignalFunc on
     gtk_widget_grab_focus (entry);
 
     if (dev) s = gnome_cmd_con_device_get_device_fn (dev);
-    entry = create_file_entry (dialog, "device_entry", s);
+    entry = create_file_chooser_button (dialog, "device_entry", s);
     table_add (table, entry, 1, 1, (GtkAttachOptions) (GTK_EXPAND|GTK_FILL));
 
     if (dev) s = gnome_cmd_con_device_get_mountp (dev);
-    entry = create_file_entry (dialog, "mountp_entry", s);
+    entry = create_directory_chooser_button (dialog, "mountp_entry", s);
     table_add (table, entry, 1, 2, (GtkAttachOptions) (GTK_EXPAND|GTK_FILL));
 
     if (dev) s = gnome_cmd_con_device_get_icon_path (dev);
diff --git a/src/dialogs/gnome-cmd-prepare-xfer-dialog.cc b/src/dialogs/gnome-cmd-prepare-xfer-dialog.cc
index 07a8a6a7..555925e7 100644
--- a/src/dialogs/gnome-cmd-prepare-xfer-dialog.cc
+++ b/src/dialogs/gnome-cmd-prepare-xfer-dialog.cc
@@ -1,4 +1,4 @@
-/** 
+/**
  * @file gnome-cmd-prepare-xfer-dialog.cc
  * @copyright (C) 2001-2006 Marcus Bjurman\n
  * @copyright (C) 2007-2012 Piotr Eljasiak\n
@@ -48,7 +48,9 @@ inline gboolean con_device_has_path (FileSelectorID fsID, GnomeCmdCon *&dev, con
 static void on_ok (GtkButton *button, GnomeCmdPrepareXferDialog *dialog)
 {
     GnomeCmdCon *con = gnome_cmd_dir_get_connection (dialog->default_dest_dir);
-    gchar *user_path = g_strstrip (g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->dest_dir_entry))));
+    gchar *user_path = g_strstrip (g_strdup (gtk_label_get_text (GTK_LABEL (dialog->dest_dir_entry))));
+    gchar *user_directory_path = g_strstrip (g_strdup (gtk_label_get_text (GTK_LABEL 
(dialog->dest_dir_entry))));
+
     gchar *dest_path = NULL;
     gchar *dest_fn = NULL;
     gint user_path_len;
@@ -255,10 +257,6 @@ static gboolean on_dest_dir_entry_keypressed (GtkEntry *entry, GdkEventKey *even
             gtk_signal_emit_by_name (GTK_OBJECT (dialog->ok_button), "clicked", dialog, NULL);
             return TRUE;
 
-        case GDK_F5:
-        case GDK_F6:
-            gnome_cmd_toggle_file_name_selection (dialog->dest_dir_entry);
-            return TRUE;
         default:
             return FALSE;
     }
@@ -309,11 +307,9 @@ static void init (GnomeCmdPrepareXferDialog *dialog)
     dialog->dest_dir_frame = create_category (GTK_WIDGET (dialog), dest_dir_vbox, "");
     gnome_cmd_dialog_add_category (GNOME_CMD_DIALOG (dialog), dialog->dest_dir_frame);
 
-    GtkWidget *dest_dir_fileentry = create_file_entry (GTK_WIDGET (dialog), "file-entry", "");
-    gtk_box_pack_start (GTK_BOX (dest_dir_vbox), dest_dir_fileentry, FALSE, FALSE, 0);
-    dialog->dest_dir_entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (dest_dir_fileentry));
-
-    g_signal_connect (dialog->dest_dir_entry, "key-press-event", G_CALLBACK (on_dest_dir_entry_keypressed), 
dialog);
+    GtkWidget *dest_dir_file_label = create_label (GTK_WIDGET (dialog), "");
+    gtk_box_pack_start (GTK_BOX (dest_dir_vbox), dest_dir_file_label, FALSE, FALSE, 0);
+    dialog->dest_dir_entry = dest_dir_file_label;
 
     // options
     GtkWidget *options_hbox = create_hbox (GTK_WIDGET (dialog), TRUE, 6);
@@ -430,11 +426,9 @@ GtkWidget *gnome_cmd_prepare_xfer_dialog_new (GnomeCmdFileSelector *from, GnomeC
 
     if (dest_str)
     {
-        gtk_entry_set_text (GTK_ENTRY (dialog->dest_dir_entry), dest_str);
+        gtk_label_set_text (GTK_LABEL (dialog->dest_dir_entry), dest_str);
         g_free (dest_str);
     }
 
-    gtk_widget_grab_focus (GTK_WIDGET (dialog->dest_dir_entry));
-
     return GTK_WIDGET (dialog);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]