X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=gtk-gui.c;h=39703ff60eaad94102aad648fe41b2da687ac92c;hb=86fdd83e7b9cc661940470c7b7d83316b223f572;hp=151f0fa1798e67c5462ec4e17dcf661238d8c0a0;hpb=dbdd42b31f73ad8e8117d5b2a5b4ac4e061bf202;p=ext%2Fsubsurface.git diff --git a/gtk-gui.c b/gtk-gui.c index 151f0fa..39703ff 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -43,6 +43,7 @@ void repaint_dive(void) } static char *existing_filename; +static gboolean need_icon = TRUE; static void on_info_bar_response(GtkWidget *widget, gint response, gpointer data) @@ -116,7 +117,7 @@ static void file_open(GtkWidget *w, gpointer data) GError *error = NULL; while(filenames != NULL) { - filename = (char *)filenames->data; + filename = filenames->data; parse_xml_file(filename, &error); if (error != NULL) { @@ -428,11 +429,14 @@ static void about_dialog(GtkWidget *w, gpointer data) { const char *logo_property = NULL; GdkPixbuf *logo = NULL; - GtkWidget *image = gtk_image_new_from_file("icon.svg"); - if (image) { - logo = gtk_image_get_pixbuf(GTK_IMAGE(image)); - logo_property = "logo"; + if (need_icon) { + GtkWidget *image = gtk_image_new_from_file("subsurface.svg"); + + if (image) { + logo = gtk_image_get_pixbuf(GTK_IMAGE(image)); + logo_property = "logo"; + } } gtk_show_about_dialog(NULL, @@ -441,6 +445,7 @@ static void about_dialog(GtkWidget *w, gpointer data) "license", "GPLv2", "version", VERSION_STRING, "copyright", "Linus Torvalds 2011", + "logo-icon-name", "subsurface", /* Must be last: */ logo_property, logo, NULL); @@ -524,6 +529,7 @@ static GtkNotebook *create_new_notebook_window(GtkNotebook *source, { GtkWidget *win, *notebook, *vbox; notebook_data_t *nbdp; + GtkAllocation allocation; /* pick the right notebook page data and return if both are detached */ if (nbd[0].widget == NULL) @@ -551,7 +557,8 @@ static GtkNotebook *create_new_notebook_window(GtkNotebook *source, /* disallow drop events */ gtk_drag_dest_set(notebook, 0, NULL, 0, 0); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 6); - gtk_widget_set_size_request(notebook, 450, 350); + gtk_widget_get_allocation(page, &allocation); + gtk_window_set_default_size(GTK_WINDOW(win), allocation.width, allocation.height); gtk_widget_show_all(win); return GTK_NOTEBOOK(notebook); @@ -596,6 +603,8 @@ void init_ui(int argc, char **argv) GtkWidget *equipment; GtkWidget *menubar; GtkWidget *vbox; + GdkScreen *screen; + GtkIconTheme *icon_theme=NULL; GtkSettings *settings; static const GtkTargetEntry notebook_target = { "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, 0 @@ -627,7 +636,20 @@ void init_ui(int argc, char **argv) error_info_bar = NULL; win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_icon_from_file(GTK_WINDOW(win), "icon.svg", NULL); + g_set_application_name ("subsurface"); + /* Let's check if the subsurface icon has been installed or if + * we need to try to load it from the current directory */ + screen = gdk_screen_get_default(); + if (screen) + icon_theme = gtk_icon_theme_get_for_screen(screen); + if (icon_theme) { + if (gtk_icon_theme_has_icon(icon_theme, "subsurface")) { + need_icon = FALSE; + gtk_window_set_default_icon_name ("subsurface"); + } + } + if (need_icon) + gtk_window_set_icon_from_file(GTK_WINDOW(win), "subsurface.svg", NULL); g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK(on_delete), NULL); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL); main_window = win; @@ -836,7 +858,15 @@ static GtkEntry *dive_computer_device(GtkWidget *vbox) return GTK_ENTRY(entry); } -static GtkWidget *xml_file_selector(GtkWidget *vbox) +/* once a file is selected in the FileChooserButton we want to exit the import dialog */ +static void on_file_set(GtkFileChooserButton *widget, gpointer _data) +{ + GtkDialog *main_dialog = _data; + + gtk_dialog_response(main_dialog, GTK_RESPONSE_ACCEPT); +} + +static GtkWidget *xml_file_selector(GtkWidget *vbox, GtkWidget *main_dialog) { GtkWidget *hbox, *frame, *chooser, *dialog; GtkFileFilter *filter; @@ -852,7 +882,7 @@ static GtkWidget *xml_file_selector(GtkWidget *vbox) GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); - gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); + gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE); filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter, "*.xml"); @@ -864,6 +894,8 @@ static GtkWidget *xml_file_selector(GtkWidget *vbox) gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter); chooser = gtk_file_chooser_button_new_with_dialog(dialog); + g_signal_connect(G_OBJECT(chooser), "file-set", G_CALLBACK(on_file_set), main_dialog); + gtk_file_chooser_button_set_width_chars(GTK_FILE_CHOOSER_BUTTON(chooser), 30); gtk_container_add(GTK_CONTAINER(frame), chooser); @@ -873,7 +905,7 @@ static GtkWidget *xml_file_selector(GtkWidget *vbox) static void do_import_file(gpointer data, gpointer user_data) { GError *error = NULL; - parse_xml_file((char *)data, &error); + parse_xml_file(data, &error); if (error != NULL) { @@ -904,7 +936,7 @@ void import_dialog(GtkWidget *w, gpointer data) vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); label = gtk_label_new("Import: \nLoad XML file or import directly from dive computer"); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 3); - XMLchooser = xml_file_selector(vbox); + XMLchooser = xml_file_selector(vbox, dialog); computer = dive_computer_selector(vbox); device = dive_computer_device(vbox); hbox = gtk_hbox_new(FALSE, 6); @@ -957,7 +989,7 @@ void update_progressbar(progressbar_t *progress, double value) void set_filename(const char *filename) { - if (filename) + if (!existing_filename && filename) existing_filename = strdup(filename); return; }