| 1772 * (eg. file transfer) will be cancelled, then when a new filename is chosen |
1772 * (eg. file transfer) will be cancelled, then when a new filename is chosen |
| 1773 * things go BOOM */ |
1773 * things go BOOM */ |
| 1774 if (id == 1) { |
1774 if (id == 1) { |
| 1775 if (data->cbs[1] != NULL) |
1775 if (data->cbs[1] != NULL) |
| 1776 ((GaimRequestFileCb)data->cbs[1])(data->user_data, data->u.file.name); |
1776 ((GaimRequestFileCb)data->cbs[1])(data->user_data, data->u.file.name); |
| 1777 gaim_request_close(GAIM_REQUEST_FILE, data); |
1777 gaim_request_close(data->type, data); |
| 1778 } |
1778 } |
| 1779 } |
1779 } |
| 1780 |
1780 |
| 1781 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
1781 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| 1782 static void |
1782 static void |
| 1787 generic_response_start(data); |
1787 generic_response_start(data); |
| 1788 |
1788 |
| 1789 if (response != GTK_RESPONSE_ACCEPT) { |
1789 if (response != GTK_RESPONSE_ACCEPT) { |
| 1790 if (data->cbs[0] != NULL) |
1790 if (data->cbs[0] != NULL) |
| 1791 ((GaimRequestFileCb)data->cbs[0])(data->user_data, NULL); |
1791 ((GaimRequestFileCb)data->cbs[0])(data->user_data, NULL); |
| 1792 gaim_request_close(GAIM_REQUEST_FILE, data); |
1792 gaim_request_close(data->type, data); |
| 1793 return; |
1793 return; |
| 1794 } |
1794 } |
| 1795 |
1795 |
| 1796 data->u.file.name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data->dialog)); |
1796 data->u.file.name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data->dialog)); |
| 1797 current_folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(data->dialog)); |
1797 current_folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(data->dialog)); |
| 1815 generic_response_start(data); |
1815 generic_response_start(data); |
| 1816 |
1816 |
| 1817 name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data->dialog)); |
1817 name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data->dialog)); |
| 1818 |
1818 |
| 1819 /* If name is a directory then change directories */ |
1819 /* If name is a directory then change directories */ |
| 1820 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(data->dialog))) |
1820 if (data->type == GAIM_REQUEST_FILE) { |
| 1821 return; |
1821 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(data->dialog))) |
| |
1822 return; |
| |
1823 } |
| 1822 |
1824 |
| 1823 current_folder = g_path_get_dirname(name); |
1825 current_folder = g_path_get_dirname(name); |
| |
1826 |
| |
1827 g_free(data->u.file.name); |
| |
1828 if (data->type == GAIM_REQUEST_FILE) |
| |
1829 data->u.file.name = g_strdup(name); |
| |
1830 else |
| |
1831 { |
| |
1832 if (g_file_test(name, G_FILE_TEST_IS_DIR)) |
| |
1833 data->u.file.name = g_strdup(name); |
| |
1834 else |
| |
1835 data->u.file.name = g_strdup(current_folder); |
| |
1836 } |
| |
1837 |
| 1824 if (current_folder != NULL) { |
1838 if (current_folder != NULL) { |
| 1825 if (data->u.file.savedialog) { |
1839 if (data->u.file.savedialog) { |
| 1826 gaim_prefs_set_string("/gaim/gtk/filelocations/last_save_folder", current_folder); |
1840 gaim_prefs_set_string("/gaim/gtk/filelocations/last_save_folder", current_folder); |
| 1827 } else { |
1841 } else { |
| 1828 gaim_prefs_set_string("/gaim/gtk/filelocations/last_open_folder", current_folder); |
1842 gaim_prefs_set_string("/gaim/gtk/filelocations/last_open_folder", current_folder); |
| 1829 } |
1843 } |
| 1830 g_free(current_folder); |
1844 g_free(current_folder); |
| 1831 } |
1845 } |
| 1832 |
|
| 1833 data->u.file.name = g_strdup(name); |
|
| 1834 |
1846 |
| 1835 #endif /* FILECHOOSER */ |
1847 #endif /* FILECHOOSER */ |
| 1836 |
1848 |
| 1837 if ((data->u.file.savedialog == TRUE) && |
1849 if ((data->u.file.savedialog == TRUE) && |
| 1838 (g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) { |
1850 (g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) { |
| 1851 generic_response_start(data); |
1863 generic_response_start(data); |
| 1852 |
1864 |
| 1853 if (data->cbs[0] != NULL) |
1865 if (data->cbs[0] != NULL) |
| 1854 ((GaimRequestFileCb)data->cbs[0])(data->user_data, NULL); |
1866 ((GaimRequestFileCb)data->cbs[0])(data->user_data, NULL); |
| 1855 |
1867 |
| 1856 gaim_request_close(GAIM_REQUEST_FILE, data); |
1868 gaim_request_close(data->type, data); |
| 1857 } |
1869 } |
| 1858 #endif /* FILECHOOSER */ |
1870 #endif /* FILECHOOSER */ |
| 1859 |
1871 |
| 1860 static void * |
1872 static void * |
| 1861 gaim_gtk_request_file(const char *title, const char *filename, |
1873 gaim_gtk_request_file(const char *title, const char *filename, |
| 1949 gtk_widget_show(filesel); |
1961 gtk_widget_show(filesel); |
| 1950 |
1962 |
| 1951 return (void *)data; |
1963 return (void *)data; |
| 1952 } |
1964 } |
| 1953 |
1965 |
| |
1966 static void * |
| |
1967 gaim_gtk_request_folder(const char *title, const char *dirname, |
| |
1968 GCallback ok_cb, GCallback cancel_cb, |
| |
1969 void *user_data) |
| |
1970 { |
| |
1971 GaimGtkRequestData *data; |
| |
1972 GtkWidget *dirsel; |
| |
1973 |
| |
1974 data = g_new0(GaimGtkRequestData, 1); |
| |
1975 data->type = GAIM_REQUEST_FOLDER; |
| |
1976 data->user_data = user_data; |
| |
1977 data->cb_count = 2; |
| |
1978 data->cbs = g_new0(GCallback, 2); |
| |
1979 data->cbs[0] = cancel_cb; |
| |
1980 data->cbs[1] = ok_cb; |
| |
1981 data->u.file.savedialog = FALSE; |
| |
1982 |
| |
1983 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ |
| |
1984 /* Use a translated "Select Folder..." in place of NULL after strings thaw. */ |
| |
1985 dirsel = gtk_file_chooser_dialog_new( |
| |
1986 title ? title : NULL, |
| |
1987 NULL, |
| |
1988 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, |
| |
1989 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
| |
1990 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, |
| |
1991 NULL); |
| |
1992 gtk_dialog_set_default_response(GTK_DIALOG(dirsel), GTK_RESPONSE_ACCEPT); |
| |
1993 |
| |
1994 if ((dirname != NULL) && (*dirname != '\0')) |
| |
1995 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dirsel), dirname); |
| |
1996 |
| |
1997 g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(dirsel)), "response", |
| |
1998 G_CALLBACK(file_ok_check_if_exists_cb), data); |
| |
1999 #else |
| |
2000 /* Use a translated "Select Folder..." in place of NULL after strings thaw. */ |
| |
2001 dirsel = gtk_file_selection_new(title ? title : NULL); |
| |
2002 |
| |
2003 g_signal_connect_swapped(G_OBJECT(dirsel), "delete_event", |
| |
2004 G_CALLBACK(file_cancel_cb), data); |
| |
2005 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(dirsel)->cancel_button), |
| |
2006 "clicked", G_CALLBACK(file_cancel_cb), data); |
| |
2007 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dirsel)->ok_button), "clicked", |
| |
2008 G_CALLBACK(file_ok_check_if_exists_cb), data); |
| |
2009 #endif |
| |
2010 |
| |
2011 data->dialog = dirsel; |
| |
2012 gtk_widget_show(dirsel); |
| |
2013 |
| |
2014 return (void *)data; |
| |
2015 } |
| |
2016 |
| 1954 static void |
2017 static void |
| 1955 gaim_gtk_close_request(GaimRequestType type, void *ui_handle) |
2018 gaim_gtk_close_request(GaimRequestType type, void *ui_handle) |
| 1956 { |
2019 { |
| 1957 GaimGtkRequestData *data = (GaimGtkRequestData *)ui_handle; |
2020 GaimGtkRequestData *data = (GaimGtkRequestData *)ui_handle; |
| 1958 |
2021 |
| 1974 gaim_gtk_request_input, |
2037 gaim_gtk_request_input, |
| 1975 gaim_gtk_request_choice, |
2038 gaim_gtk_request_choice, |
| 1976 gaim_gtk_request_action, |
2039 gaim_gtk_request_action, |
| 1977 gaim_gtk_request_fields, |
2040 gaim_gtk_request_fields, |
| 1978 gaim_gtk_request_file, |
2041 gaim_gtk_request_file, |
| 1979 gaim_gtk_close_request |
2042 gaim_gtk_close_request, |
| |
2043 gaim_gtk_request_folder |
| 1980 }; |
2044 }; |
| 1981 |
2045 |
| 1982 GaimRequestUiOps * |
2046 GaimRequestUiOps * |
| 1983 gaim_gtk_request_get_ui_ops(void) |
2047 gaim_gtk_request_get_ui_ops(void) |
| 1984 { |
2048 { |