Changeset 521

Show
Ignore:
Timestamp:
11/11/07 19:17:56 (1 year ago)
Author:
kickback
Message:

sweep: switch to gtk_file_chooser_dialog for open/save. revert to previous escaping for @PACKAGE_DATA_DIR@ in src/Makefile.am

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sweep/trunk/src/Makefile.am

    r518 r521  
    8080sweep_LDFLAGS = @EXPORT_DYNAMIC_FLAGS@ 
    8181 
    82 sweep_CFLAGS = -DPACKAGE_DATA_DIR=@PACKAGE_DATA_DIR@ 
     82sweep_CFLAGS = -DPACKAGE_DATA_DIR='@PACKAGE_DATA_DIR@' 
  • sweep/trunk/src/file_dialogs.c

    r519 r521  
    273273} 
    274274 
    275 static void 
    276 sample_load_destroy_cb (GtkWidget * widget, gpointer data) 
    277 { 
    278   sample_bank_remove (NULL); 
    279 } 
    280  
    281 static void 
    282 sample_load_ok_cb(GtkWidget * widget, gpointer data) 
    283 { 
    284   gchar **dir; 
    285   gint i; 
    286  
    287   dir = (gchar **)gtk_file_selection_get_selections(GTK_FILE_SELECTION(data)); 
    288   for( i = 0; dir[i]; i++) 
    289     { 
    290       sample_load(dir[i]); 
    291     } 
    292  
    293   gtk_widget_destroy(GTK_WIDGET(data)); 
    294 } 
    295  
    296 static void 
    297 sample_load_cancel_cb(GtkWidget * widget, gpointer data) 
    298 { 
    299   gtk_widget_destroy(GTK_WIDGET(data)); 
    300 } 
    301  
    302275void 
    303276sample_load_cb(GtkWidget * widget, gpointer data) 
    304277{ 
    305   GtkWidget *filesel; 
    306   char * load_current_file; 
     278 
     279  GtkWidget *dialog; 
     280  gchar *load_current_file; 
    307281  gint win_width, win_height; 
    308282  
     
    310284  win_height = gdk_screen_height () / 2; 
    311285 
    312   filesel = gtk_file_selection_new(_("Sweep: Load file")); 
    313   gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION(filesel), TRUE); 
    314   sweep_set_window_icon (GTK_WINDOW(filesel)); 
    315   gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_CENTER); 
    316   gtk_widget_set_size_request (filesel, win_width, win_height); 
    317  
    318   g_signal_connect (G_OBJECT(filesel), "destroy", 
    319                      G_CALLBACK(sample_load_destroy_cb), filesel); 
    320  
    321   attach_window_close_accel(GTK_WINDOW(filesel)); 
     286  dialog = gtk_file_chooser_dialog_new ("Sweep: Open File", 
     287                                      data, 
     288                                      GTK_FILE_CHOOSER_ACTION_OPEN, 
     289                                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
     290                                      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, 
     291                                      NULL); 
     292     
     293  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); 
     294  gtk_widget_set_size_request (dialog, win_width, win_height); 
     295   
     296  sweep_set_window_icon (GTK_WINDOW(dialog)); 
     297  attach_window_close_accel(GTK_WINDOW(dialog)); 
     298     
    322299  load_current_file = prefs_get_string (LAST_LOAD_KEY); 
    323  
    324   if(load_current_file) { 
    325       gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel),  
    326                                       load_current_file); 
    327       free (load_current_file); 
    328   } 
    329  
    330   g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), 
    331                    "clicked", G_CALLBACK(sample_load_ok_cb), filesel); 
    332  
    333  
    334   g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), 
    335               "clicked", G_CALLBACK(sample_load_cancel_cb), filesel); 
    336  
    337  
    338   gtk_widget_show(filesel); 
     300   
     301  if (load_current_file) { 
     302      gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(dialog), load_current_file); 
     303       
     304      g_free(load_current_file); 
     305  } 
     306     
     307  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { 
     308       
     309    char *filename; 
     310 
     311    filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); 
     312    sample_load (filename); 
     313    g_free (filename); 
     314  } 
     315 
     316  gtk_widget_destroy (dialog);   
     317     
    339318} 
    340319 
     
    558537 
    559538static void 
    560 sample_save_as_ok_cb(GtkWidget * widget, gpointer data) 
    561 { 
    562   sw_view * view = (sw_view *)data; 
    563   sw_sample * sample; 
    564   GtkWidget * filesel; 
    565   gchar * pathname; 
    566   struct stat statbuf; 
    567  
    568   save_as_data * sd; 
    569  
    570 #undef BUF_LEN 
    571 #define BUF_LEN 512 
    572   char buf[BUF_LEN]; 
    573      
    574   sample = view->sample; 
    575   filesel = gtk_widget_get_toplevel (widget); 
    576  
    577   pathname = 
    578     g_strdup (gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel))); 
    579  
    580   if (!sweep_dir_exists (pathname)) { 
    581     g_free (pathname); 
    582     return; 
    583   } 
    584  
    585   sd = g_malloc (sizeof (save_as_data)); 
    586   sd->sample = sample; 
    587   sd->pathname = pathname; 
    588  
    589   if (stat (pathname, &statbuf) == -1) { 
    590     switch (errno) { 
    591     case ENOENT: 
    592       /* If it doesn't exist, it's ok to save as */ 
    593       overwrite_ok_cb (NULL, sd); 
    594       break; 
    595     default: 
    596       sweep_perror (errno, pathname); 
    597       break; 
    598     } 
    599   } else { 
    600     /* file exists */ 
    601     if (access(pathname, W_OK) == -1) { 
    602       sweep_perror (errno, _("You are not allowed to write to\n%s"), pathname); 
    603       g_free (sd); 
    604     } else { 
    605       snprintf (buf, BUF_LEN, _("%s exists. Overwrite?"), pathname); 
    606       question_dialog_new (sample, _("File exists"), buf, 
    607                            _("Overwrite"), _("Don't overwrite"), 
    608                            G_CALLBACK (overwrite_ok_cb), sd, G_CALLBACK (overwrite_cancel_cb), sd, 
    609                            SWEEP_EDIT_MODE_META); 
    610     } 
    611   } 
    612  
    613   gtk_widget_destroy(GTK_WIDGET(filesel)); 
    614 } 
    615  
    616 static void 
    617 sample_save_as_cancel_cb(GtkWidget * widget, gpointer data) 
    618 { 
    619   gtk_widget_destroy(GTK_WIDGET(data)); 
    620 } 
    621  
    622 static void 
    623539file_set_format_cb (GtkWidget * widget, gpointer data) 
    624540{ 
     
    748664sample_save_as_cb(GtkWidget * widget, gpointer data) 
    749665{ 
     666  GtkWidget *dialog; 
     667  gint win_width, win_height; 
    750668  sw_view * view = (sw_view *)data; 
    751669  sw_sample * sample; 
    752   GtkWidget * filesel; 
    753670  GtkWidget * save_options; 
    754671  GtkWidget * frame; 
     
    757674  GtkWidget * option_menu; 
    758675  GtkWidget * save_menu; 
     676  struct stat statbuf; 
     677  gchar *filename; 
     678  gint retval; 
     679 
     680  save_as_data * sd; 
     681 
     682#undef BUF_LEN 
     683#define BUF_LEN 512 
     684  char buf[BUF_LEN]; 
    759685 
    760686  char * last_save; 
    761  
    762   gint win_width, win_height; 
    763687 
    764688  win_width = gdk_screen_width () / 2; 
    765689  win_height = gdk_screen_height () / 2; 
    766  
     690     
    767691  sample = view->sample; 
    768692 
    769   filesel = gtk_file_selection_new(_("Sweep: Save file")); 
    770   attach_window_close_accel(GTK_WINDOW(filesel)); 
    771   sweep_set_window_icon (GTK_WINDOW(filesel)); 
    772   gtk_window_set_position (GTK_WINDOW (filesel), GTK_WIN_POS_CENTER); 
    773   gtk_widget_set_size_request (filesel, win_width, win_height); 
    774  
    775   if (!strcmp (g_dirname (sample->pathname), ".")) { 
    776  
    777     last_save = prefs_get_string (LAST_SAVE_KEY); 
    778  
    779     if(last_save) { 
    780       gchar * last_save_dir = g_dirname (last_save); 
    781       gchar * new_pathname = 
    782         g_strdup_printf ("%s%c%s", 
    783                          last_save_dir, G_DIR_SEPARATOR, sample->pathname); 
    784                                                
    785       gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel),  
    786                                       new_pathname); 
    787  
    788       g_free (new_pathname); 
    789       g_free (last_save_dir); 
    790       g_free (last_save); 
    791     } 
    792   } else { 
    793     gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel),  
    794                                     sample->pathname); 
    795   } 
    796  
     693  dialog = gtk_file_chooser_dialog_new ("Sweep: Save file", 
     694                                      GTK_WINDOW(view->window), 
     695                                      GTK_FILE_CHOOSER_ACTION_SAVE, 
     696                                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 
     697                                      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, 
     698                                      NULL); 
     699           
     700     
     701  //gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); 
     702  attach_window_close_accel(GTK_WINDOW(dialog)); 
     703  sweep_set_window_icon (GTK_WINDOW(dialog)); 
     704     
    797705  save_options = gtk_hbox_new (TRUE, 1); 
    798706 
     
    820728 
    821729  /* pack the containing save_options hbox into the save-dialog */ 
    822   gtk_box_pack_end (GTK_BOX (GTK_FILE_SELECTION (filesel)->main_vbox), 
     730  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), 
    823731                    save_options, FALSE, FALSE, 0); 
    824732 
    825733  gtk_widget_show (save_options); 
    826  
    827   g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), 
    828                    "clicked", G_CALLBACK(sample_save_as_ok_cb), data); 
    829  
    830   g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), 
    831                "clicked", G_CALLBACK(sample_save_as_cancel_cb), filesel); 
    832  
    833  
    834   gtk_widget_show(filesel); 
     734     
     735  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); 
     736  gtk_widget_set_size_request (dialog, win_width, win_height); 
     737     
     738  if (strcmp (g_path_get_dirname(sample->pathname), ".") == 0) { 
     739 
     740    last_save = prefs_get_string (LAST_SAVE_KEY); 
     741 
     742    if (last_save != NULL) { 
     743      gchar * last_save_dir = g_dirname (last_save); 
     744             
     745          gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog), 
     746                                      last_save_dir);                          
     747      gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(dialog), 
     748                                      sample->pathname); 
     749 
     750      g_free (last_save_dir); 
     751      g_free (last_save); 
     752 
     753    }  
     754  } else { 
     755     retval =  gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(dialog),  
     756                                    sample->pathname); 
     757        /* FIXME: bug (local only?) causes gtk_file_chooser_set_filename 
     758           to fail silently in some cases*/ 
     759        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); 
     760        //printf("filename pre: %s\n", filename); 
     761        //printf("sample->pathname: %s\n", sample->pathname); 
     762 
     763  } 
     764  
     765  retval = gtk_dialog_run (GTK_DIALOG (dialog)); 
     766                            
     767  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); 
     768  //printf("filename post: %s\n", filename); 
     769  sample = view->sample; 
     770  sd = g_malloc (sizeof (save_as_data)); 
     771  sd->sample = sample; 
     772  sd->pathname = filename; 
     773 
     774  if (retval == GTK_RESPONSE_ACCEPT) { 
     775     
     776    if (!sweep_dir_exists (filename)) { 
     777      g_free (sd);   
     778      g_free (filename); 
     779      return; 
     780    } 
     781 
     782    if (stat (filename, &statbuf) == -1) { 
     783      switch (errno) { 
     784      case ENOENT: 
     785        /* If it doesn't exist, it's ok to save as */ 
     786        overwrite_ok_cb (NULL, sd); 
     787        break; 
     788      default: 
     789        sweep_perror (errno, filename); 
     790        break; 
     791      } 
     792    } else { 
     793      /* file exists */ 
     794         
     795      if (access(filename, W_OK) == -1) { 
     796        sweep_perror (errno, _("You are not allowed to write to\n%s"), filename); 
     797      } else { 
     798        snprintf (buf, BUF_LEN, _("%s exists. Overwrite?"), filename); 
     799 
     800        question_dialog_new (sample, _("File exists"), buf, 
     801                           _("Overwrite"), _("Don't overwrite"), 
     802                             G_CALLBACK (overwrite_ok_cb), sd, G_CALLBACK (overwrite_cancel_cb), sd, 
     803                             SWEEP_EDIT_MODE_META); 
     804      } 
     805    } 
     806    /* FIXME: wrapped this due to the above gtk_file_chooser_set_filename problem */ 
     807    } else if (sd->pathname != NULL) { 
     808      gchar * msg; 
     809 
     810      msg = g_strdup_printf (_("Save as %s cancelled"), g_basename (sd->pathname)); 
     811      sample_set_tmp_message (sd->sample, msg); 
     812      g_free (msg); 
     813       
     814    } else { 
     815   
     816    g_free (sd); 
     817    g_free (filename); 
     818    } 
     819  gtk_widget_destroy (dialog); 
     820     
     821     
    835822} 
    836823 
  • sweep/trunk/src/view.c

    r520 r521  
    458458  create_view_menu_item (submenu, _("Open ..."), "<Sweep-View>/File/Open ...", view, 
    459459                                                  sample_load_cb, FALSE, 
    460                                                                                                   GDK_o, GDK_CONTROL_MASK, view); 
     460                                                                                                  GDK_o, GDK_CONTROL_MASK, view->window); 
    461461     
    462462#if GTK_CHECK_VERSION (2, 10, 0) 
     
    477477    gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER(recent_menu), 20); 
    478478    gtk_recent_chooser_set_show_tips (GTK_RECENT_CHOOSER(recent_menu), TRUE); 
     479    gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER(recent_menu),  
     480                                      GTK_RECENT_SORT_MRU); 
    479481      
    480482    filter = gtk_recent_filter_new();                 
     
    17731775  button = create_pixmap_button (window, open_xpm, _("Open ..."), 
    17741776                                 NULL, VIEW_TOOLBAR_BUTTON, 
    1775                                 G_CALLBACK (sample_load_cb), NULL, NULL, NULL); 
     1777                                G_CALLBACK (sample_load_cb), NULL, NULL, window); 
    17761778  gtk_button_set_relief (GTK_BUTTON(button), GTK_RELIEF_NONE); 
    17771779  gtk_box_pack_start (GTK_BOX (tool_hbox), button, FALSE, TRUE, 0);