comparison src/dialogs.c @ 7330:5500f20a4331

[gaim-migrate @ 7918] I made the "clear log" button use gaim_request_whatever. This fixes bug 824285, which is: Gaim crashes if you 1) Open log viewer 2) Click on "Clear"" 3) Close log viewer 4) Click on "Ok" A side effect of this is that I removed some gtk code from dialogs.c I hope I didn't step on Sean's toe's too much... committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sat, 25 Oct 2003 21:08:57 +0000
parents 1930e3d00ecd
children d81406d44e0d
comparison
equal deleted inserted replaced
7329:e3b88394d1b0 7330:5500f20a4331
179 int options; 179 int options;
180 char *name; 180 char *name;
181 GtkWidget *bbox; 181 GtkWidget *bbox;
182 GtkWidget *window; 182 GtkWidget *window;
183 GtkWidget *layout; 183 GtkWidget *layout;
184 void *clear_handle;
184 }; 185 };
185 186
186 /* Wrapper to get all the text from a GtkTextView */ 187 /* Wrapper to get all the text from a GtkTextView */
187 gchar* gtk_text_view_get_text(GtkTextView *text, gboolean include_hidden_chars) 188 gchar* gtk_text_view_get_text(GtkTextView *text, gboolean include_hidden_chars)
188 { 189 {
1949 gtk_widget_show(filesel); 1950 gtk_widget_show(filesel);
1950 1951
1951 return; 1952 return;
1952 } 1953 }
1953 1954
1954 static void do_clear_log_file(GtkWidget *w, gchar *name) 1955 static void do_clear_log_file(struct view_log *view)
1955 { 1956 {
1956 gchar buf[256]; 1957 gchar *filename, *buf;
1957 gchar filename[256];
1958 GtkWidget *window;
1959 char *tmp; 1958 char *tmp;
1960 1959
1961 tmp = gaim_user_dir(); 1960 tmp = gaim_user_dir();
1962 g_snprintf(filename, 256, "%s" G_DIR_SEPARATOR_S "logs" G_DIR_SEPARATOR_S "%s%s", tmp, 1961 filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "logs" G_DIR_SEPARATOR_S "%s%s", tmp,
1963 name ? gaim_normalize(NULL, name) : "system", name ? ".log" : ""); 1962 view ? gaim_normalize(NULL, view->name) : "system", view ? ".log" : "");
1964 1963
1965 if ((remove(filename)) == -1) { 1964 if ((remove(filename)) == -1) {
1966 g_snprintf(buf, 256, _("Couldn't remove file %s." ), filename); 1965 buf = g_strdup_printf(_("Couldn't remove file %s." ), filename);
1967 gaim_notify_error(NULL, NULL, buf, strerror(errno)); 1966 gaim_notify_error(NULL, NULL, buf, strerror(errno));
1968 } 1967 g_free(buf);
1969 1968 }
1970 window = g_object_get_data(G_OBJECT(w), "log_window"); 1969
1971 destroy_dialog(NULL, window); 1970 g_free(filename);
1972 } 1971
1973 1972 gtk_widget_destroy(view->window);
1974 static void show_clear_log(GtkWidget *w, gchar *name) 1973 }
1975 { 1974
1976 GtkWidget *window; 1975 static void show_clear_log(GtkWidget *w, struct view_log *view)
1977 GtkWidget *box; 1976 {
1978 GtkWidget *hbox; 1977 char *text;
1979 GtkWidget *button; 1978
1980 GtkWidget *label; 1979 if (view->clear_handle != NULL)
1981 GtkWidget *hsep; 1980 return;
1982 1981
1983 GAIM_DIALOG(window); 1982 text = g_strdup_printf(_("You are about to remove the log file for %s. Do you want to continue?"),
1984 gtk_window_set_role(GTK_WINDOW(window), "dialog"); 1983 view->name);
1985 gtk_window_set_title(GTK_WINDOW(window), _("Clear Log")); 1984 view->clear_handle = gaim_request_action(NULL, NULL, _("Remove Log"),
1986 gtk_container_set_border_width(GTK_CONTAINER(window), 10); 1985 text, -1, view, 2,
1987 gtk_window_set_resizable(GTK_WINDOW(window), TRUE); 1986 _("Remove Log"),
1988 g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(destroy_dialog), window); 1987 G_CALLBACK(do_clear_log_file),
1989 gtk_widget_realize(window); 1988 _("Cancel"), NULL);
1990 1989 g_free(text);
1991 box = gtk_vbox_new(FALSE, 5);
1992 gtk_container_add(GTK_CONTAINER(window), box);
1993
1994 label = gtk_label_new(_("Really clear log?"));
1995 gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 15);
1996
1997 hsep = gtk_hseparator_new();
1998 gtk_box_pack_start(GTK_BOX(box), hsep, FALSE, FALSE, 0);
1999
2000 hbox = gtk_hbox_new(FALSE, 0);
2001 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
2002
2003 button = gaim_pixbuf_button_from_stock(_("OK"), GTK_STOCK_OK, GAIM_BUTTON_HORIZONTAL);
2004 g_object_set_data(G_OBJECT(button), "log_window", g_object_get_data(G_OBJECT(w),
2005 "log_window"));
2006 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(do_clear_log_file), name);
2007 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(destroy_dialog), window);
2008 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5);
2009
2010 button = gaim_pixbuf_button_from_stock(_("Cancel"), GTK_STOCK_CANCEL, GAIM_BUTTON_HORIZONTAL);
2011 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(destroy_dialog), window);
2012 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5);
2013
2014 gtk_widget_show_all(window);
2015
2016 return;
2017 } 1990 }
2018 1991
2019 static void log_show_convo(struct view_log *view) 1992 static void log_show_convo(struct view_log *view)
2020 { 1993 {
2021 gchar buf[BUF_LONG]; 1994 gchar buf[BUF_LONG];
2104 2077
2105 static void des_view_item(GtkObject *obj, struct view_log *view) 2078 static void des_view_item(GtkObject *obj, struct view_log *view)
2106 { 2079 {
2107 if (view->name) 2080 if (view->name)
2108 g_free(view->name); 2081 g_free(view->name);
2082 if (view->clear_handle)
2083 gaim_request_close(GAIM_REQUEST_ACTION, view->clear_handle);
2109 g_free(view); 2084 g_free(view);
2110 } 2085 }
2111 2086
2112 static void des_log_win(GObject *win, gpointer data) 2087 static void des_log_win(GObject *win, gpointer data)
2113 { 2088 {
2158 GtkTreeSelection *sel = NULL; 2133 GtkTreeSelection *sel = NULL;
2159 GtkTreePath *path; 2134 GtkTreePath *path;
2160 GtkWidget *item = NULL; 2135 GtkWidget *item = NULL;
2161 GtkWidget *last = NULL; 2136 GtkWidget *last = NULL;
2162 GtkWidget *frame; 2137 GtkWidget *frame;
2163 struct view_log *view; 2138 struct view_log *view = NULL;
2164 char *name = nm ? g_strdup(nm) : NULL; 2139 char *name = nm ? g_strdup(nm) : NULL;
2165 2140
2166 int options; 2141 int options;
2167 guint block; 2142 guint block;
2168 char convo_start[32]; 2143 char convo_start[32];
2309 g_signal_connect(G_OBJECT(close_button), "clicked", G_CALLBACK(destroy_dialog), window); 2284 g_signal_connect(G_OBJECT(close_button), "clicked", G_CALLBACK(destroy_dialog), window);
2310 2285
2311 clear_button = gaim_pixbuf_button_from_stock(_("Clear"), GTK_STOCK_CLEAR, GAIM_BUTTON_HORIZONTAL); 2286 clear_button = gaim_pixbuf_button_from_stock(_("Clear"), GTK_STOCK_CLEAR, GAIM_BUTTON_HORIZONTAL);
2312 g_object_set_data(G_OBJECT(clear_button), "log_window", window); 2287 g_object_set_data(G_OBJECT(clear_button), "log_window", window);
2313 gtk_box_pack_end(GTK_BOX(bbox), clear_button, FALSE, FALSE, 5); 2288 gtk_box_pack_end(GTK_BOX(bbox), clear_button, FALSE, FALSE, 5);
2314 g_signal_connect(G_OBJECT(clear_button), "clicked", G_CALLBACK(show_clear_log), name); 2289 g_signal_connect(G_OBJECT(clear_button), "clicked", G_CALLBACK(show_clear_log), view);
2315 2290
2316 save_button = gaim_pixbuf_button_from_stock(_("Save"), GTK_STOCK_SAVE, GAIM_BUTTON_HORIZONTAL); 2291 save_button = gaim_pixbuf_button_from_stock(_("Save"), GTK_STOCK_SAVE, GAIM_BUTTON_HORIZONTAL);
2317 gtk_box_pack_end(GTK_BOX(bbox), save_button, FALSE, FALSE, 5); 2292 gtk_box_pack_end(GTK_BOX(bbox), save_button, FALSE, FALSE, 5);
2318 g_signal_connect(G_OBJECT(save_button), "clicked", G_CALLBACK(show_save_log), name); 2293 g_signal_connect(G_OBJECT(save_button), "clicked", G_CALLBACK(show_save_log), name);
2319 2294