[PULL REQUEST] Some dialog changes and a potential issue in gtk-gui.c
Lubomir I. Ivanov
neolit123 at gmail.com
Fri Sep 21 12:44:26 PDT 2012
Only select last dive by default if no other dives are selected (2012-09-20 15:35:43 -0700)
are available in the git repository at:
git at github.com:neolit123/subsurface.git import
for you to fetch changes up to a045caa80d7e0474dbf27e110cbd08b1535b54be:
Make sure windows behind forward dialogs are truly inactive (2012-09-21 22:09:48 +0300)
----------------------------------------------------------------
Lubomir I. Ivanov (3):
Keep the "OK" button in "Import" disabled until a DC is selected
More cosmetic changes in the "Import" dialog
Make sure windows behind forward dialogs are truly inactive
gtk-gui.c | 56 +++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 39 insertions(+), 17 deletions(-)
diff --git a/gtk-gui.c b/gtk-gui.c
index 167517e..e15f72a 100644
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -485,7 +485,7 @@ static void event_toggle(GtkWidget *w, gpointer _data)
static void pick_default_file(GtkWidget *w, GtkButton *button)
{
- GtkWidget *fs_dialog, *preferences;
+ GtkWidget *fs_dialog, *parent;
const char *current_default;
char *current_def_file, *current_def_dir;
GtkFileFilter *filter;
@@ -497,8 +497,10 @@ static void pick_default_file(GtkWidget *w, GtkButton *button)
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
NULL);
- preferences = gtk_widget_get_ancestor(w, GTK_TYPE_DIALOG);
- gtk_window_set_accept_focus(GTK_WINDOW(preferences), FALSE);
+ parent = gtk_widget_get_ancestor(w, GTK_TYPE_DIALOG);
+ gtk_widget_set_sensitive(parent, FALSE);
+ gtk_window_set_decorated(GTK_WINDOW(parent), FALSE);
+ gtk_window_set_transient_for(GTK_WINDOW(fs_dialog), GTK_WINDOW(parent));
current_default = subsurface_default_filename();
current_def_dir = g_path_get_dirname(current_default);
@@ -528,7 +530,9 @@ static void pick_default_file(GtkWidget *w, GtkButton *button)
free(current_def_file);
free((void *)current_default);
gtk_widget_destroy(fs_dialog);
- gtk_window_set_accept_focus(GTK_WINDOW(preferences), TRUE);
+
+ gtk_widget_set_sensitive(parent, TRUE);
+ gtk_window_set_decorated(GTK_WINDOW(parent), TRUE);
}
static void preferences_dialog(GtkWidget *w, gpointer data)
@@ -1240,6 +1244,14 @@ void render_dive_computer(GtkCellLayout *cell,
g_object_set(renderer, "text", buffer, NULL);
}
+static void dive_computer_selector_changed(GtkWidget *combo, gpointer data)
+{
+ GtkWidget *import, *button;
+
+ import = gtk_widget_get_ancestor(combo, GTK_TYPE_DIALOG);
+ button = gtk_dialog_get_widget_for_response(GTK_DIALOG(import), GTK_RESPONSE_ACCEPT);
+ gtk_widget_set_sensitive(button, TRUE);
+}
static GtkComboBox *dive_computer_selector(GtkWidget *vbox)
{
@@ -1258,6 +1270,7 @@ static GtkComboBox *dive_computer_selector(GtkWidget *vbox)
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 3);
combo_box = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));
+ g_signal_connect(G_OBJECT(combo_box), "changed", G_CALLBACK(dive_computer_selector_changed), NULL);
gtk_container_add(GTK_CONTAINER(frame), combo_box);
renderer = gtk_cell_renderer_text_new();
@@ -1296,21 +1309,23 @@ static GtkEntry *dive_computer_device(GtkWidget *vbox)
static void pick_import_files(GtkWidget *w, GSList **filelist)
{
- GtkWidget *fs_dialog, *import;
+ GtkWidget *fs_dialog, *parent;
const char *current_default;
char *current_def_dir;
GtkFileFilter *filter;
struct stat sb;
*filelist = NULL;
- fs_dialog = gtk_file_chooser_dialog_new("Choose Files to import",
+ fs_dialog = gtk_file_chooser_dialog_new("Choose Files To Import",
GTK_WINDOW(main_window),
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
- import = gtk_widget_get_ancestor(w, GTK_TYPE_DIALOG);
- gtk_window_set_accept_focus(GTK_WINDOW(import), FALSE);
+ parent = gtk_widget_get_ancestor(w, GTK_TYPE_DIALOG);
+ gtk_widget_set_sensitive(parent, FALSE);
+ gtk_window_set_decorated(GTK_WINDOW(parent), FALSE);
+ gtk_window_set_transient_for(GTK_WINDOW(fs_dialog), GTK_WINDOW(parent));
/* I'm not sure what the best default path should be... */
if (existing_filename) {
@@ -1335,10 +1350,13 @@ static void pick_import_files(GtkWidget *w, GSList **filelist)
*filelist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(fs_dialog));
free(current_def_dir);
gtk_widget_destroy(fs_dialog);
- gtk_window_set_accept_focus(GTK_WINDOW(import), TRUE);
+
+ gtk_widget_set_sensitive(parent, TRUE);
+ gtk_window_set_decorated(GTK_WINDOW(parent), TRUE);
+
/* if we selected one or more files, pretent that we clicked OK in the import dialog */
if (*filelist != NULL)
- gtk_dialog_response(GTK_DIALOG(import), GTK_RESPONSE_ACCEPT);
+ gtk_dialog_response(GTK_DIALOG(parent), GTK_RESPONSE_ACCEPT);
}
static void xml_file_selector(GtkWidget *vbox, GtkWidget *main_dialog, GSList **list)
@@ -1348,12 +1366,12 @@ static void xml_file_selector(GtkWidget *vbox, GtkWidget *main_dialog, GSList **
hbox = gtk_hbox_new(FALSE, 6);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);
- frame = gtk_frame_new("XML file name");
+ frame = gtk_frame_new("XML files");
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 3);
box = gtk_hbox_new(FALSE, 6);
gtk_container_add(GTK_CONTAINER(frame), box);
- chooser = gtk_button_new_with_label("Pick XML file to import");
+ chooser = gtk_button_new_with_label("Choose Files To Import");
g_signal_connect(G_OBJECT(chooser), "clicked", G_CALLBACK(pick_import_files), list);
gtk_box_pack_start(GTK_BOX(box), chooser, FALSE, FALSE, 6);
}
@@ -1397,9 +1415,10 @@ static GtkWidget *import_dive_computer(device_data_t *data, GtkDialog *dialog)
void import_dialog(GtkWidget *w, gpointer data)
{
int result;
- GtkWidget *dialog, *hbox, *vbox, *label, *info = NULL;
+ GtkWidget *dialog, *button, *hbox, *vbox, *label, *info = NULL;
GSList *filenames = NULL;
GtkComboBox *computer;
+ GtkTreeIter iter;
GtkEntry *device;
device_data_t devicedata = {
.devname = NULL,
@@ -1413,7 +1432,7 @@ void import_dialog(GtkWidget *w, gpointer data)
NULL);
vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
- label = gtk_label_new("Load XML file or import directly from dive computer");
+ label = gtk_label_new("Choose what to import:");
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 3);
xml_file_selector(vbox, dialog, &filenames);
computer = dive_computer_selector(vbox);
@@ -1423,12 +1442,15 @@ void import_dialog(GtkWidget *w, gpointer data)
devicedata.progress.bar = gtk_progress_bar_new();
gtk_container_add(GTK_CONTAINER(hbox), devicedata.progress.bar);
+ button = gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+ if (!gtk_combo_box_get_active_iter(computer, &iter))
+ gtk_widget_set_sensitive(button, FALSE);
+
repeat:
gtk_widget_show_all(dialog);
result = gtk_dialog_run(GTK_DIALOG(dialog));
switch (result) {
dc_descriptor_t *descriptor;
- GtkTreeIter iter;
GtkTreeModel *model;
case GTK_RESPONSE_ACCEPT:
@@ -1441,6 +1463,7 @@ repeat:
if (!gtk_combo_box_get_active_iter(computer, &iter))
break;
+
model = gtk_combo_box_get_model(computer);
gtk_tree_model_get(model, &iter,
0, &descriptor,
@@ -1462,13 +1485,12 @@ repeat:
g_slist_foreach(filenames,do_import_file,NULL);
g_slist_free(filenames);
}
+ report_dives(TRUE);
break;
default:
break;
}
gtk_widget_destroy(dialog);
-
- report_dives(TRUE);
}
void update_progressbar(progressbar_t *progress, double value)
More information about the subsurface
mailing list