src/dialogs.c

changeset 311
971d26b73be6
parent 308
61686e78caa9
child 334
520b6eb5ed7e
equal deleted inserted replaced
310:ac9df52e876d 311:971d26b73be6
42 char *fontface; 42 char *fontface;
43 char *fontname; 43 char *fontname;
44 44
45 static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */ 45 static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */
46 static GList *dialogwindows = NULL; 46 static GList *dialogwindows = NULL;
47 static GtkWidget *linkdialog, *colordialog, *exportdialog, *importdialog, *logdialog, *fontdialog; 47 static GtkWidget *linkdialog, *exportdialog, *importdialog, *logdialog;
48 48
49 static void accept_callback(GtkWidget *widget, struct file_transfer *t); 49 static void accept_callback(GtkWidget *widget, struct file_transfer *t);
50 50
51 struct create_away { 51 struct create_away {
52 GtkWidget *window; 52 GtkWidget *window;
243 243
244 /*------------------------------------------------------------------------*/ 244 /*------------------------------------------------------------------------*/
245 /* Destroys */ 245 /* Destroys */
246 /*------------------------------------------------------------------------*/ 246 /*------------------------------------------------------------------------*/
247 247
248 static gint delete_event_dialog(GtkWidget *w, GdkEventAny *e, struct conversation *c)
249 {
250 dialogwindows = g_list_remove(dialogwindows, w);
251 gtk_widget_destroy(w);
252
253 if (GTK_IS_COLOR_SELECTION_DIALOG(w))
254 c->color_dialog = NULL;
255 if (GTK_IS_FONT_SELECTION_DIALOG(w))
256 c->font_dialog = NULL;
257
258 return FALSE;
259 }
248 260
249 static void destroy_dialog(GtkWidget *w, GtkWidget *w2) 261 static void destroy_dialog(GtkWidget *w, GtkWidget *w2)
250 { 262 {
251 GtkWidget *dest; 263 GtkWidget *dest;
252 264
265 importdialog = NULL; 277 importdialog = NULL;
266 278
267 if (dest == logdialog) 279 if (dest == logdialog)
268 logdialog = NULL; 280 logdialog = NULL;
269 281
270 if (dest == colordialog) 282 /* if (GTK_COLOR_SELECTION_DIALOG(dest))
271 colordialog = NULL; 283 color_dialog = NULL;*/
272 284
273 if (dest == linkdialog) 285 if (dest == linkdialog)
274 linkdialog = NULL; 286 linkdialog = NULL;
275 287
276 if (dest == fontdialog) 288 /* if (dest == fontdialog)
277 fontdialog = NULL; 289 fontdialog = NULL;*/
278 290
279 dialogwindows = g_list_remove(dialogwindows, dest); 291 dialogwindows = g_list_remove(dialogwindows, dest);
280 gtk_widget_destroy(dest); 292 gtk_widget_destroy(dest);
281 293
282 } 294 }
303 315
304 if (linkdialog) { 316 if (linkdialog) {
305 destroy_dialog(NULL, linkdialog); 317 destroy_dialog(NULL, linkdialog);
306 linkdialog = NULL; 318 linkdialog = NULL;
307 } 319 }
308 if (colordialog) { 320 /* is this needed? */
321 /* if (colordialog) {
309 destroy_dialog(NULL, colordialog); 322 destroy_dialog(NULL, colordialog);
310 colordialog = NULL; 323 colordialog = NULL;
311 } 324 }*/
312 325
313 if (exportdialog) { 326 if (exportdialog) {
314 destroy_dialog(NULL, exportdialog); 327 destroy_dialog(NULL, exportdialog);
315 exportdialog = NULL; 328 exportdialog = NULL;
316 } 329 }
322 335
323 if (logdialog) { 336 if (logdialog) {
324 destroy_dialog(NULL, logdialog); 337 destroy_dialog(NULL, logdialog);
325 logdialog = NULL; 338 logdialog = NULL;
326 } 339 }
327 340 /* is this needed? */
328 if (fontdialog) { 341 /* if (fontdialog) {
329 destroy_dialog(NULL, fontdialog); 342 destroy_dialog(NULL, fontdialog);
330 fontdialog = NULL; 343 fontdialog = NULL;
331 } 344 }*/
332 } 345 }
333 346
334 static void do_warn(GtkWidget *widget, struct warning *w) 347 static void do_warn(GtkWidget *widget, struct warning *w)
335 { 348 {
336 serv_warn(w->who, (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->anon))) ? 349 serv_warn(w->who, (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->anon))) ?
1872 1885
1873 /*------------------------------------------------------*/ 1886 /*------------------------------------------------------*/
1874 /* Color Selection Dialog */ 1887 /* Color Selection Dialog */
1875 /*------------------------------------------------------*/ 1888 /*------------------------------------------------------*/
1876 1889
1877 void cancel_color(GtkWidget *widget, GtkWidget *color) 1890 void cancel_color(GtkWidget *widget, struct conversation *c)
1878 { 1891 {
1879 if (color) 1892 if (c->palette && widget)
1880 { 1893 {
1881 set_state_lock(1); 1894 set_state_lock(1);
1882 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(color), FALSE); 1895 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->palette), FALSE);
1883 set_state_lock(0); 1896 set_state_lock(0);
1884 } 1897 }
1885 destroy_dialog(NULL, colordialog); 1898 dialogwindows = g_list_remove(dialogwindows, c->color_dialog);
1886 } 1899 gtk_widget_destroy(c->color_dialog);
1887 1900 c->color_dialog = NULL;
1888 1901 }
1889 1902
1890 void do_color(GtkWidget *widget, GtkColorSelection *colorsel) 1903 void do_color(GtkWidget *widget, GtkColorSelection *colorsel)
1891 { 1904 {
1892 gdouble color[3]; 1905 gdouble color[3];
1893 GdkColor text_color; 1906 GdkColor text_color;
1894 GtkWidget *entry; 1907 struct conversation *c;
1895 char *open_tag; 1908 char *open_tag;
1896 1909
1897 open_tag = g_malloc(30); 1910 open_tag = g_malloc(30);
1898 1911
1899 gtk_color_selection_get_color (colorsel, color); 1912 gtk_color_selection_get_color (colorsel, color);
1900 1913
1901 entry = gtk_object_get_user_data(GTK_OBJECT(colorsel)); 1914 c = gtk_object_get_user_data(GTK_OBJECT(colorsel));
1902 1915 GTK_IS_EDITABLE(c->entry);
1903 text_color.red = ((guint16)(color[0]*65535))>>8; 1916
1904 text_color.green = ((guint16)(color[1]*65535))>>8; 1917 text_color.red = ((guint16)(color[0]*65535))>>8;
1905 text_color.blue = ((guint16)(color[2]*65535))>>8; 1918 text_color.green = ((guint16)(color[1]*65535))>>8;
1919 text_color.blue = ((guint16)(color[2]*65535))>>8;
1906 1920
1907 g_snprintf(open_tag, 23, "<FONT COLOR=\"#%02X%02X%02X\">", text_color.red, text_color.green, text_color.blue); 1921 g_snprintf(open_tag, 23, "<FONT COLOR=\"#%02X%02X%02X\">", text_color.red, text_color.green, text_color.blue);
1908 1922 surround(c->entry, open_tag, "</FONT>");
1909 surround(entry, open_tag, "</FONT>");
1910 sprintf(debug_buff,"#%02X%02X%02X\n", text_color.red, text_color.green, text_color.blue); 1923 sprintf(debug_buff,"#%02X%02X%02X\n", text_color.red, text_color.green, text_color.blue);
1911 debug_print(debug_buff); 1924 debug_print(debug_buff);
1912 g_free(open_tag); 1925 g_free(open_tag);
1913 cancel_color(NULL, NULL); 1926 cancel_color(NULL, c);
1914 } 1927 }
1915 1928
1916 1929
1917 void show_color_dialog(GtkWidget *entry, GtkWidget *color) 1930 void show_color_dialog(struct conversation *c, GtkWidget *color)
1918 { 1931 {
1919 GtkWidget *colorsel; 1932 GtkWidget *colorsel;
1920 1933
1921 if (!colordialog) { 1934 if (!c->color_dialog)
1922 1935 {
1923 1936 c->color_dialog = gtk_color_selection_dialog_new("Select Text Color");
1924 colordialog = gtk_color_selection_dialog_new("Select Text Color"); 1937 colorsel = GTK_COLOR_SELECTION_DIALOG(c->color_dialog)->colorsel;
1925 colorsel = GTK_COLOR_SELECTION_DIALOG(colordialog)->colorsel; 1938
1939 gtk_object_set_user_data(GTK_OBJECT(colorsel), c);
1926 1940
1927 /* XXX: Modality is evil, but we need it until we have 1941 gtk_signal_connect(GTK_OBJECT(c->color_dialog), "delete_event", GTK_SIGNAL_FUNC(delete_event_dialog), c);
1928 * per-conversation color dialogs */ 1942 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(c->color_dialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(do_color), colorsel);
1929 1943 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(c->color_dialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cancel_color), c);
1930 gtk_window_set_modal(GTK_WINDOW(colordialog), TRUE); 1944
1931 1945 gtk_widget_realize(c->color_dialog);
1932 gtk_object_set_user_data(GTK_OBJECT(colorsel), entry); 1946 aol_icon(c->color_dialog->window);
1933 1947 }
1934 gtk_signal_connect(GTK_OBJECT(colordialog), "delete_event", GTK_SIGNAL_FUNC(cancel_color), color); 1948
1935 1949 gtk_widget_show(c->color_dialog);
1936 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(colordialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(do_color), colorsel); 1950 gdk_window_raise(c->color_dialog->window);
1937
1938 gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(colordialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cancel_color), color);
1939 gtk_widget_realize(colordialog);
1940 aol_icon(colordialog->window);
1941
1942 }
1943
1944 gtk_widget_show(colordialog);
1945 gdk_window_raise(colordialog->window);
1946 } 1951 }
1947 1952
1948 /*------------------------------------------------------------------------*/ 1953 /*------------------------------------------------------------------------*/
1949 /* Font Selection Dialog */ 1954 /* Font Selection Dialog */
1950 /*------------------------------------------------------------------------*/ 1955 /*------------------------------------------------------------------------*/
1951 1956
1952 void cancel_font(GtkWidget *widget, GtkWidget *window) 1957 void cancel_font(GtkWidget *widget, struct conversation *c)
1953 { 1958 {
1954 destroy_dialog(NULL, fontdialog); 1959 if (c->font && widget)
1960 {
1961 set_state_lock(1);
1962 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->font), FALSE);
1963 set_state_lock(0);
1964 }
1965 dialogwindows = g_list_remove(dialogwindows, c->font_dialog);
1966 gtk_widget_destroy(c->font_dialog);
1967 c->font_dialog = NULL;
1955 } 1968 }
1956 1969
1957 void apply_font(GtkWidget *widget, GtkFontSelection *fontsel) 1970 void apply_font(GtkWidget *widget, GtkFontSelection *fontsel)
1958 { 1971 {
1959 /* this could be expanded to include font size, weight, etc. 1972 /* this could be expanded to include font size, weight, etc.
2001 fontface[k] = '\0'; 2014 fontface[k] = '\0';
2002 2015
2003 save_prefs(); 2016 save_prefs();
2004 } 2017 }
2005 2018
2006 cancel_font(widget, NULL); 2019 cancel_font(NULL, c);
2007 } 2020 }
2008 2021
2009 void show_font_dialog(GtkWidget *widget, GtkWidget *font) 2022 void show_font_dialog(struct conversation *c, GtkWidget *font)
2010 { 2023 {
2011 GtkWidget *fontsel; 2024 GtkWidget *fontsel;
2012 2025
2013 fontdialog = gtk_font_selection_dialog_new("Select Font"); 2026 if (!c->font_dialog)
2014 fontsel = GTK_FONT_SELECTION_DIALOG(fontdialog)->fontsel; 2027 {
2015 2028 c->font_dialog = gtk_font_selection_dialog_new("Select Font");
2016 if (font) 2029 fontsel = GTK_FONT_SELECTION_DIALOG(c->font_dialog)->fontsel;
2017 gtk_object_set_user_data(GTK_OBJECT(fontsel), gtk_object_get_user_data(GTK_OBJECT(font))); 2030
2018 else 2031 if (font)
2019 gtk_object_set_user_data(GTK_OBJECT(fontsel), NULL); 2032 gtk_object_set_user_data(GTK_OBJECT(fontsel), c);
2033 else
2034 gtk_object_set_user_data(GTK_OBJECT(fontsel), NULL);
2020 2035
2021 gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *)fontdialog, DEFAULT_FONT_NAME); 2036 gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *)c->font_dialog, DEFAULT_FONT_NAME);
2022 gtk_window_set_modal(GTK_WINDOW(fontdialog), TRUE);
2023 gtk_signal_connect(GTK_OBJECT(fontdialog), "delete_event", GTK_SIGNAL_FUNC(cancel_font), font);
2024 gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(fontdialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(apply_font), fontsel);
2025 gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(fontdialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cancel_font), font);
2026
2027 if (fontname)
2028 gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *)fontdialog, fontname);
2029 else
2030 gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *)fontdialog, DEFAULT_FONT_NAME);
2031 2037
2032 gtk_widget_realize(fontdialog); 2038 gtk_signal_connect(GTK_OBJECT(c->font_dialog), "delete_event", GTK_SIGNAL_FUNC(delete_event_dialog), c);
2033 2039 gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(c->font_dialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(apply_font), fontsel);
2034 aol_icon(fontdialog->window); 2040 gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(c->font_dialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cancel_font), c);
2041
2042 if (fontname)
2043 gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *)c->font_dialog, fontname);
2044 else
2045 gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *)c->font_dialog, DEFAULT_FONT_NAME);
2035 2046
2036 gtk_widget_show(fontdialog); 2047 gtk_widget_realize(c->font_dialog);
2037 gdk_window_raise(fontdialog->window); 2048
2049 aol_icon(c->font_dialog->window);
2050 }
2051 gtk_widget_show(c->font_dialog);
2052 gdk_window_raise(c->font_dialog->window);
2038 } 2053 }
2039 2054
2040 /*------------------------------------------------------------------------*/ 2055 /*------------------------------------------------------------------------*/
2041 /* The dialog for import/export */ 2056 /* The dialog for import/export */
2042 /*------------------------------------------------------------------------*/ 2057 /*------------------------------------------------------------------------*/

mercurial