Mercurial > pidgin.yaz
comparison src/dialogs.c @ 1213:1bdb08cc5d59
[gaim-migrate @ 1223]
redid the away msg dialog a bit
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Fri, 08 Dec 2000 06:21:44 +0000 |
parents | 265abea9db72 |
children | 64d67198c458 |
comparison
equal
deleted
inserted
replaced
1212:a487b35ac05a | 1213:1bdb08cc5d59 |
---|---|
39 | 39 |
40 #include <gtk/gtk.h> | 40 #include <gtk/gtk.h> |
41 #include "gaim.h" | 41 #include "gaim.h" |
42 #include "gtkhtml.h" | 42 #include "gtkhtml.h" |
43 | 43 |
44 #include "pixmaps/gnome_preferences.xpm" | |
44 #include "pixmaps/cancel.xpm" | 45 #include "pixmaps/cancel.xpm" |
45 #include "pixmaps/save.xpm" | 46 #include "pixmaps/save.xpm" |
46 #include "pixmaps/ok.xpm" | 47 #include "pixmaps/ok.xpm" |
47 #include "pixmaps/add.xpm" | 48 #include "pixmaps/add.xpm" |
48 #include "pixmaps/warn.xpm" | 49 #include "pixmaps/warn.xpm" |
82 | 83 |
83 struct create_away { | 84 struct create_away { |
84 GtkWidget *window; | 85 GtkWidget *window; |
85 GtkWidget *entry; | 86 GtkWidget *entry; |
86 GtkWidget *text; | 87 GtkWidget *text; |
87 GtkWidget *checkbx; | |
88 struct away_message *mess; | 88 struct away_message *mess; |
89 }; | 89 }; |
90 | 90 |
91 | 91 |
92 struct warning { | 92 struct warning { |
3029 | 3029 |
3030 /*------------------------------------------------------------------------*/ | 3030 /*------------------------------------------------------------------------*/ |
3031 /* The dialog for new away messages */ | 3031 /* The dialog for new away messages */ |
3032 /*------------------------------------------------------------------------*/ | 3032 /*------------------------------------------------------------------------*/ |
3033 | 3033 |
3034 void save_away_mess(GtkWidget *widget, struct create_away *ca) | 3034 static struct away_message *save_away_message(struct create_away *ca) |
3035 { | 3035 { |
3036 struct away_message *am; | 3036 struct away_message *am; |
3037 guint text_len; | 3037 guint text_len; |
3038 gchar *away_message; | 3038 gchar *away_message; |
3039 | 3039 |
3047 | 3047 |
3048 g_snprintf(am->message, sizeof(am->message), "%s", away_message); | 3048 g_snprintf(am->message, sizeof(am->message), "%s", away_message); |
3049 g_free(away_message); | 3049 g_free(away_message); |
3050 | 3050 |
3051 if (!ca->mess) { | 3051 if (!ca->mess) { |
3052 away_messages = g_slist_append(away_messages, am); | 3052 away_messages = g_slist_insert_sorted(away_messages, am, sort_awaymsg_list); |
3053 if (GTK_TOGGLE_BUTTON(ca->checkbx)->active) | |
3054 do_away_message(NULL, am); | |
3055 } | 3053 } |
3056 | 3054 |
3057 save_prefs(); | 3055 save_prefs(); |
3058 do_away_menu(); | 3056 do_away_menu(); |
3059 if (prefs_away_list != NULL) | 3057 if (prefs_away_list != NULL) |
3060 gtk_list_select_item(GTK_LIST(prefs_away_list), g_slist_index(away_messages, am)); | 3058 gtk_list_select_item(GTK_LIST(prefs_away_list), g_slist_index(away_messages, am)); |
3061 | 3059 |
3060 return am; | |
3061 } | |
3062 | |
3063 void save_away_mess(GtkWidget *widget, struct create_away *ca) | |
3064 { | |
3065 save_away_message(ca); | |
3062 destroy_dialog(NULL, ca->window); | 3066 destroy_dialog(NULL, ca->window); |
3063 | 3067 g_free(ca); |
3064 return; | 3068 } |
3069 | |
3070 void use_away_mess(GtkWidget *widget, struct create_away *ca) | |
3071 { | |
3072 static struct away_message am; | |
3073 guint text_len; | |
3074 gchar *away_message; | |
3075 | |
3076 g_snprintf(am.name, sizeof(am.name), "%s", gtk_entry_get_text(GTK_ENTRY(ca->entry))); | |
3077 text_len = gtk_text_get_length(GTK_TEXT(ca->text)); | |
3078 if (text_len < 0) return; | |
3079 away_message = gtk_editable_get_chars(GTK_EDITABLE(ca->text), 0, text_len); | |
3080 | |
3081 g_snprintf(am.message, sizeof(am.message), "%s", away_message); | |
3082 g_free(away_message); | |
3083 | |
3084 do_away_message(NULL, &am); | |
3085 | |
3086 destroy_dialog(NULL, ca->window); | |
3087 g_free(ca); | |
3088 } | |
3089 | |
3090 void su_away_mess(GtkWidget *widget, struct create_away *ca) | |
3091 { | |
3092 do_away_message(NULL, save_away_message(ca)); | |
3093 destroy_dialog(NULL, ca->window); | |
3094 g_free(ca); | |
3065 } | 3095 } |
3066 | 3096 |
3067 void create_away_mess(GtkWidget *widget, void *dummy) | 3097 void create_away_mess(GtkWidget *widget, void *dummy) |
3068 { | 3098 { |
3069 GtkWidget *hbox; | 3099 GtkWidget *hbox; |
3077 | 3107 |
3078 struct create_away *ca = g_new0(struct create_away, 1); | 3108 struct create_away *ca = g_new0(struct create_away, 1); |
3079 | 3109 |
3080 /* Set up window */ | 3110 /* Set up window */ |
3081 ca->window = gtk_window_new(GTK_WINDOW_DIALOG); | 3111 ca->window = gtk_window_new(GTK_WINDOW_DIALOG); |
3082 gtk_widget_set_usize(ca->window, 275, 200); | |
3083 gtk_container_border_width(GTK_CONTAINER(ca->window), 5); | 3112 gtk_container_border_width(GTK_CONTAINER(ca->window), 5); |
3084 gtk_window_set_wmclass(GTK_WINDOW(ca->window), "away_mess", "Gaim"); | 3113 gtk_window_set_wmclass(GTK_WINDOW(ca->window), "away_mess", "Gaim"); |
3085 gtk_window_set_title(GTK_WINDOW(ca->window), _("Gaim - New away message")); | 3114 gtk_window_set_title(GTK_WINDOW(ca->window), _("Gaim - New away message")); |
3086 gtk_widget_show(ca->window); | |
3087 gtk_signal_connect(GTK_OBJECT(ca->window),"delete_event", | 3115 gtk_signal_connect(GTK_OBJECT(ca->window),"delete_event", |
3088 GTK_SIGNAL_FUNC(destroy_dialog), ca->window); | 3116 GTK_SIGNAL_FUNC(destroy_dialog), ca->window); |
3089 | 3117 gtk_widget_realize(ca->window); |
3090 /* top level box */ | 3118 aol_icon(ca->window->window); |
3091 | 3119 |
3092 tbox = gtk_vbox_new(FALSE, 5); | 3120 tbox = gtk_vbox_new(FALSE, 5); |
3093 gtk_container_add(GTK_CONTAINER(ca->window), tbox); | 3121 gtk_container_add(GTK_CONTAINER(ca->window), tbox); |
3094 | 3122 gtk_widget_show(tbox); |
3095 /* Put frame and button-box in the toplevel */ | |
3096 | 3123 |
3097 frame = gtk_frame_new(_("New away message")); | 3124 frame = gtk_frame_new(_("New away message")); |
3098 gtk_container_set_border_width(GTK_CONTAINER(frame), 0); | 3125 gtk_container_set_border_width(GTK_CONTAINER(frame), 0); |
3099 gtk_box_pack_start(GTK_BOX(tbox), frame, TRUE, TRUE, 0); | 3126 gtk_box_pack_start(GTK_BOX(tbox), frame, TRUE, TRUE, 0); |
3127 gtk_widget_show(frame); | |
3128 | |
3100 fbox = gtk_vbox_new(FALSE, 5); | 3129 fbox = gtk_vbox_new(FALSE, 5); |
3101 gtk_container_border_width(GTK_CONTAINER(fbox), 5); | |
3102 gtk_container_add(GTK_CONTAINER(frame), fbox); | 3130 gtk_container_add(GTK_CONTAINER(frame), fbox); |
3103 | 3131 gtk_widget_show(fbox); |
3104 hbox = gtk_hbox_new(FALSE, 5); | |
3105 gtk_box_pack_start(GTK_BOX(tbox), hbox, FALSE, FALSE, 0); | |
3106 | |
3107 /* Make a label for away entry */ | |
3108 | 3132 |
3109 titlebox = gtk_hbox_new(FALSE, 5); | 3133 titlebox = gtk_hbox_new(FALSE, 5); |
3134 gtk_box_pack_start(GTK_BOX(fbox), titlebox, FALSE, FALSE, 0); | |
3135 gtk_widget_show(titlebox); | |
3136 | |
3110 label = gtk_label_new(_("Away title: ")); | 3137 label = gtk_label_new(_("Away title: ")); |
3111 gtk_box_pack_start(GTK_BOX(titlebox), label, FALSE, FALSE, 0); | 3138 gtk_box_pack_start(GTK_BOX(titlebox), label, FALSE, FALSE, 0); |
3112 gtk_widget_show(label); | 3139 gtk_widget_show(label); |
3113 gtk_box_pack_start(GTK_BOX(fbox), titlebox, FALSE, FALSE, 0); | |
3114 | |
3115 /* make away title entry */ | |
3116 | 3140 |
3117 ca->entry = gtk_entry_new(); | 3141 ca->entry = gtk_entry_new(); |
3118 gtk_box_pack_start(GTK_BOX(titlebox), ca->entry, TRUE, TRUE, 0); | 3142 gtk_box_pack_start(GTK_BOX(titlebox), ca->entry, TRUE, TRUE, 0); |
3143 gtk_widget_grab_focus(ca->entry); | |
3144 gtk_widget_show(ca->entry); | |
3119 | 3145 |
3120 sw = gtk_scrolled_window_new(NULL, NULL); | 3146 sw = gtk_scrolled_window_new(NULL, NULL); |
3121 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | 3147 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), |
3122 GTK_POLICY_AUTOMATIC, | 3148 GTK_POLICY_AUTOMATIC, |
3123 GTK_POLICY_AUTOMATIC); | 3149 GTK_POLICY_AUTOMATIC); |
3150 gtk_box_pack_start(GTK_BOX(fbox), sw, TRUE, TRUE, 0); | |
3124 gtk_widget_show(sw); | 3151 gtk_widget_show(sw); |
3125 | |
3126 /* create and format text box */ | |
3127 | 3152 |
3128 ca->text = gtk_text_new(NULL, NULL); | 3153 ca->text = gtk_text_new(NULL, NULL); |
3129 gtk_text_set_word_wrap(GTK_TEXT(ca->text), TRUE); | 3154 gtk_text_set_word_wrap(GTK_TEXT(ca->text), TRUE); |
3130 gtk_text_set_editable(GTK_TEXT(ca->text), TRUE); | 3155 gtk_text_set_editable(GTK_TEXT(ca->text), TRUE); |
3131 gtk_container_add(GTK_CONTAINER(sw), ca->text); | 3156 gtk_container_add(GTK_CONTAINER(sw), ca->text); |
3132 gtk_widget_show(ca->text); | 3157 gtk_widget_show(ca->text); |
3133 gtk_box_pack_start(GTK_BOX(fbox), sw, TRUE, TRUE, 0); | 3158 |
3134 | |
3135 /* fill hbox */ | |
3136 | |
3137 button = picture_button(ca->window, _("Cancel"), cancel_xpm); | |
3138 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), ca->window); | |
3139 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
3140 | |
3141 button = picture_button(ca->window, _("Save"), save_xpm); | |
3142 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(save_away_mess), ca); | |
3143 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
3144 | |
3145 if (dummy && GTK_LIST(prefs_away_list)->selection) { | 3159 if (dummy && GTK_LIST(prefs_away_list)->selection) { |
3146 GtkWidget *item = GTK_LIST(prefs_away_list)->selection->data; | 3160 GtkWidget *item = GTK_LIST(prefs_away_list)->selection->data; |
3147 struct away_message *amt = gtk_object_get_user_data(GTK_OBJECT(item)); | 3161 struct away_message *amt = gtk_object_get_user_data(GTK_OBJECT(item)); |
3148 int pos = 0; | 3162 int pos = 0; |
3149 gtk_entry_set_text(GTK_ENTRY(ca->entry), amt->name); | 3163 gtk_entry_set_text(GTK_ENTRY(ca->entry), amt->name); |
3150 gtk_editable_insert_text(GTK_EDITABLE(ca->text), amt->message, strlen(amt->message), &pos); | 3164 gtk_editable_insert_text(GTK_EDITABLE(ca->text), amt->message, |
3165 strlen(amt->message), &pos); | |
3151 ca->mess = amt; | 3166 ca->mess = amt; |
3152 } else { | 3167 } |
3153 /* Checkbox for showing away msg */ | 3168 |
3154 ca->checkbx = gtk_check_button_new_with_label(_("Make Away Now")); | 3169 hbox = gtk_hbox_new(FALSE, 5); |
3155 gtk_box_pack_start(GTK_BOX(fbox), ca->checkbx, FALSE, FALSE, 0); | 3170 gtk_box_pack_start(GTK_BOX(tbox), hbox, FALSE, FALSE, 0); |
3156 gtk_widget_show(ca->checkbx); | |
3157 } | |
3158 | |
3159 /* let the world see what we have done. */ | |
3160 gtk_widget_show(label); | |
3161 gtk_widget_show(ca->entry); | |
3162 gtk_widget_show(titlebox); | |
3163 gtk_widget_show(hbox); | 3171 gtk_widget_show(hbox); |
3164 gtk_widget_show(tbox); | 3172 |
3165 gtk_widget_show(fbox); | 3173 button = picture_button(ca->window, _("Cancel"), cancel_xpm); |
3166 gtk_widget_show(frame); | 3174 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), ca->window); |
3167 | 3175 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
3168 gtk_widget_realize(ca->window); | 3176 |
3169 aol_icon(ca->window->window); | 3177 button = picture_button(ca->window, _("Use"), gnome_preferences_xpm); |
3170 gtk_widget_grab_focus(ca->entry); | 3178 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(use_away_mess), ca); |
3179 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
3180 | |
3181 button = picture_button(ca->window, _("Save & Use"), add_xpm); | |
3182 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(su_away_mess), ca); | |
3183 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
3184 | |
3185 button = picture_button(ca->window, _("Save"), ok_xpm); | |
3186 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(save_away_mess), ca); | |
3187 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
3188 | |
3189 gtk_widget_show(ca->window); | |
3171 } | 3190 } |
3172 | 3191 |
3173 /* smiley dialog */ | 3192 /* smiley dialog */ |
3174 | 3193 |
3175 void close_smiley_dialog(GtkWidget *widget, struct conversation *c) | 3194 void close_smiley_dialog(GtkWidget *widget, struct conversation *c) |