Mercurial > pidgin
comparison src/dialogs.c @ 311:0a8b4edc4732
[gaim-migrate @ 321]
Per-conversation font and color dialogs. Thanks fflew! :)
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 02 Jun 2000 06:08:29 +0000 |
| parents | e5fa88351dc8 |
| children | 0fa651368776 |
comparison
equal
deleted
inserted
replaced
| 310:27efd816ff48 | 311:0a8b4edc4732 |
|---|---|
| 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 /*------------------------------------------------------------------------*/ |
