From: Sean E. <sea...@us...> - 2002-08-05 07:33:12
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv18277/src Modified Files: buddy.c conversation.c dialogs.c gtkimhtml.c plugins.c prefs.c Log Message: I had terrible days today and yesterday--a really terrible weekend. No cool stuff from me--the prefs away message page works a bit better. Ari and Chip both sent some patches to make things work a bit better in GTK 2, and Etan rewrote the notify plugin so it's really cool now! Thanks, guys! Index: buddy.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/buddy.c,v retrieving revision 1.318 retrieving revision 1.319 diff -u -d -r1.318 -r1.319 --- buddy.c 2 Aug 2002 04:52:42 -0000 1.318 +++ buddy.c 5 Aug 2002 07:33:08 -0000 1.319 @@ -2233,7 +2233,9 @@ gtk_widget_show(bs->idle); style = gtk_style_new(); +#if !GTK_CHECK_VERSION(1,3,0) gdk_font_unref(gtk_style_get_font(style)); +#endif gtk_style_set_font(style, gdk_font_ref(gtk_style_get_font(bs->label->style))); for (i = 0; i < 5; i++) style->fg[i] = bs->idle->style->fg[i]; Index: conversation.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/conversation.c,v retrieving revision 1.360 retrieving revision 1.361 diff -u -d -r1.360 -r1.361 --- conversation.c 2 Aug 2002 04:52:47 -0000 1.360 +++ conversation.c 5 Aug 2002 07:33:08 -0000 1.361 @@ -2601,7 +2601,9 @@ return; if (c->unseen == -1) return; style = gtk_style_new(); +#if !GTK_CHECK_VERSION(1,3,0) gdk_font_unref(gtk_style_get_font(style)); +#endif gtk_style_set_font(style, gdk_font_ref(gtk_style_get_font(label->style))); gtk_widget_set_style(label, style); gtk_style_unref(style); @@ -3574,7 +3576,8 @@ gtk_timeout_remove(c->icon_timer); c->icon_timer = 0; #if GTK_CHECK_VERSION(1,3,0) - g_object_unref(c->iter); + if(c->iter) + g_object_unref(c->iter); #else c->frame = 0; #endif Index: dialogs.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/dialogs.c,v retrieving revision 1.327 retrieving revision 1.328 diff -u -d -r1.327 -r1.328 --- dialogs.c 2 Aug 2002 04:52:48 -0000 1.327 +++ dialogs.c 5 Aug 2002 07:33:09 -0000 1.328 @@ -556,7 +556,30 @@ GtkWidget *d; GtkWidget *label; GtkWidget *close; - + GtkWidget *img = NULL; + /* +#if GTK_CHECK_VERSION(1,3,0) + char *filename; + switch (type){ + case GAIM_LOGO: + filename = g_build_filename(DATADIR, "pixmaps", "gaim", "gaim.png", NULL); + break; + case GAIM_INFO: + filename = g_build_filename(DATADIR, "pixmaps", "gaim", "dialogs", "gaim_info.png", NULL); + break; + case GAIM_WARNING: + filename = g_build_filename(DATADIR, "pixmaps", "gaim", "dialogs", "gaim_warning.png", NULL); + break; + case GAIM_ERROR: + filename = g_build_filename(DATADIR, "pixmaps", "gaim", "dialogs", "gaim_error.png", NULL); + break; + case GAIM_QUESTION: + filename = g_build_filename(DATADIR, "pixmaps", "gaim", "dialogs", "gaim_question.png", NULL); + break; + } + img = gtk_image_new_from_file(filename); +#endif + */ d = gtk_dialog_new(); gtk_window_set_policy(GTK_WINDOW(d), FALSE, FALSE, TRUE); @@ -3524,7 +3547,27 @@ gtk_container_add(GTK_CONTAINER(sw), ca->text); gtk_widget_show(ca->text); - if (dummy && GTK_LIST(prefs_away_list)->selection) { + +#if GTK_CHECK_VERSION(1,3,0) + if (dummy) { + struct away_message *amt; + GtkTreeIter iter; + int pos = 0; + GtkListStore *ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dummy))); + GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(dummy)); + GValue val = { 0, }; + + if (! gtk_tree_selection_get_selected (sel, &ls, &iter)) + return; + gtk_tree_model_get_value (ls, &iter, 1, &val); + amt = g_value_get_pointer (&val); + gtk_entry_set_text(GTK_ENTRY(ca->entry), amt->name); + gtk_editable_insert_text(GTK_EDITABLE(ca->text), amt->message, + strlen(amt->message), &pos); + ca->mess = amt; + } +#else + if (dummy && GTK_LIST(prefs_away_list)->selection) { GtkWidget *item = GTK_LIST(prefs_away_list)->selection->data; struct away_message *amt = gtk_object_get_user_data(GTK_OBJECT(item)); int pos = 0; @@ -3533,6 +3576,8 @@ strlen(amt->message), &pos); ca->mess = amt; } +#endif + hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(tbox), hbox, FALSE, FALSE, 0); Index: gtkimhtml.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkimhtml.c,v retrieving revision 1.108 retrieving revision 1.109 diff -u -d -r1.108 -r1.109 --- gtkimhtml.c 15 May 2002 02:21:21 -0000 1.108 +++ gtkimhtml.c 5 Aug 2002 07:33:09 -0000 1.109 @@ -1660,7 +1660,7 @@ { struct imgsv *is = data; struct im_image *img = is->img; - gchar *filename; + const gchar *filename; FILE *f; filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(is->savedialog)); g_print("Saving %s\n", filename); @@ -2076,11 +2076,11 @@ #define RGSTRY 13 #define ENCDNG 14 -static gchar* +static const gchar* gtk_imhtml_get_font_name (GdkFont *font) { #if GTK_CHECK_VERSION(1,3,0) - return "--*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*"; + return gdk_x11_font_get_name(font); #else GdkFontPrivate *fontpriv = (GdkFontPrivate *) font; return fontpriv->names->data; @@ -2095,7 +2095,7 @@ gint fontsize) { GdkFont *default_font = imhtml->default_font; - gchar *default_name; + const gchar *default_name; gchar **xnames; gchar **pos; gchar *tmp = NULL; Index: plugins.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/plugins.c,v retrieving revision 1.87 retrieving revision 1.88 diff -u -d -r1.87 -r1.88 --- plugins.c 9 Mar 2002 18:39:46 -0000 1.87 +++ plugins.c 5 Aug 2002 07:33:09 -0000 1.88 @@ -87,9 +87,16 @@ static void destroy_plugins(GtkWidget *, gpointer); static void load_file(GtkWidget *, gpointer); static void load_which_plugin(GtkWidget *, gpointer); -static void list_clicked(GtkWidget *, struct gaim_plugin *); void update_show_plugins(); static void hide_plugins(GtkWidget *, gpointer); +static void clear_plugin_display(); +#if GTK_CHECK_VERSION(1,3,0) +static struct gaim_plugin *get_selected_plugin(GtkWidget *); +static void select_plugin(GtkWidget *w, struct gaim_plugin *p); +static void list_clicked(GtkWidget *, gpointer); +#else +static void list_clicked(GtkWidget *, struct gaim_plugin *); +#endif /* ------------------ Code Below ---------------------------- */ @@ -138,20 +145,31 @@ static void load_which_plugin(GtkWidget *w, gpointer data) { char *file; - - file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(plugin_dialog)); + struct gaim_plugin *p; + + file = (char *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(plugin_dialog)); if (file_is_dir(file, plugin_dialog)) { return; } if (file) - load_plugin(file); + p = load_plugin(file); + else + p = NULL; if (plugin_dialog) gtk_widget_destroy(plugin_dialog); plugin_dialog = NULL; update_show_plugins(); + /* Select newly loaded plugin */ + if(p == NULL) + return; +#if GTK_CHECK_VERSION(1,3,0) + select_plugin(pluglist, p); +#else + gtk_list_select_item(GTK_LIST(pluglist), g_list_index(plugins, p)); +#endif } void show_plugins(GtkWidget *w, gpointer data) @@ -167,7 +185,16 @@ GtkWidget *label; GtkWidget *add; GtkWidget *close; - +#if GTK_CHECK_VERSION(1,3,0) + /* stuff needed for GtkTreeView *pluglist */ + GtkListStore *store; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + GtkTreeSelection *selection; + /* needed for GtkTextView *plugtext */ + GtkTextBuffer *buffer; +#endif + if (plugwindow) return; @@ -176,7 +203,9 @@ gtk_widget_realize(plugwindow); aol_icon(plugwindow->window); gtk_window_set_title(GTK_WINDOW(plugwindow), _("Gaim - Plugins")); +#if !GTK_CHECK_VERSION(1,3,0) gtk_widget_set_usize(plugwindow, 515, 300); +#endif gtk_signal_connect(GTK_OBJECT(plugwindow), "destroy", GTK_SIGNAL_FUNC(hide_plugins), NULL); mainvbox = gtk_vbox_new(FALSE, 0); @@ -191,7 +220,9 @@ /* Left side: frame with list of plugin file names */ frame = gtk_frame_new(_("Loaded Plugins")); gtk_box_pack_start(GTK_BOX(tophbox), frame, FALSE, FALSE, 0); +#if !GTK_CHECK_VERSION(1,3,0) gtk_widget_set_usize(frame, 140, -1); +#endif gtk_container_set_border_width(GTK_CONTAINER(frame), 6); gtk_frame_set_label_align(GTK_FRAME(frame), 0.05, 0.5); gtk_widget_show(frame); @@ -201,14 +232,37 @@ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(scrolledwindow); +#if GTK_CHECK_VERSION(1,3,0) + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow), + GTK_SHADOW_IN); + + /* Create & show plugin list */ + store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); + pluglist = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(pluglist), FALSE); + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("text", + renderer, "text", 0, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(pluglist), column); + gtk_container_add(GTK_CONTAINER(scrolledwindow), pluglist); + g_object_unref(G_OBJECT(store)); + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pluglist)); + g_signal_connect(G_OBJECT(selection), "changed", + G_CALLBACK(list_clicked), + NULL); +#else pluglist = gtk_list_new(); gtk_list_set_selection_mode(GTK_LIST(pluglist), GTK_SELECTION_BROWSE); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow), pluglist); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow), + pluglist); +#endif /* GTK_CHECK_VERSION */ + gtk_widget_show(pluglist); /* Right side: frame with description and the filepath of plugin */ - frame = gtk_frame_new(_("Description")); + frame = gtk_frame_new(_("Selected Plugin")); gtk_box_pack_start(GTK_BOX(tophbox), frame, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 6); gtk_frame_set_label_align(GTK_FRAME(frame), 0.05, 0.5); @@ -223,11 +277,27 @@ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(scrolledwindow); - +#if GTK_CHECK_VERSION(1,3,0) + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow), + GTK_SHADOW_IN); + + /* Create & show the plugin description widget */ + plugtext = gtk_text_view_new(); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(plugtext), GTK_WRAP_WORD); + gtk_text_view_set_editable(GTK_TEXT_VIEW(plugtext), FALSE); + gtk_container_add(GTK_CONTAINER(scrolledwindow), plugtext); + gtk_widget_set_size_request(GTK_WIDGET(plugtext), -1, 200); + + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(plugtext)); + gtk_text_buffer_create_tag(buffer, "bold", "weight", + PANGO_WEIGHT_BOLD, NULL); +#else plugtext = gtk_text_new(NULL, NULL); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow), plugtext); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwindow), + plugtext); gtk_text_set_word_wrap(GTK_TEXT(plugtext), TRUE); gtk_text_set_editable(GTK_TEXT(plugtext), FALSE); +#endif gtk_widget_show(plugtext); hbox = gtk_hbox_new(FALSE, 5); @@ -245,7 +315,7 @@ gtk_widget_show(plugentry); /* Build the bottom button bar */ - bothbox = gtk_hbox_new(TRUE, 10); + bothbox = gtk_hbox_new(TRUE, 3); gtk_box_pack_start(GTK_BOX(mainvbox), bothbox, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 5); gtk_widget_show(bothbox); @@ -255,28 +325,28 @@ add = picture_button(plugwindow, _("Load"), gnome_add_xpm); gtk_signal_connect(GTK_OBJECT(add), "clicked", GTK_SIGNAL_FUNC(load_file), NULL); - gtk_box_pack_start(GTK_BOX(bothbox), add, TRUE, TRUE, 0); + gtk_box_pack_start_defaults(GTK_BOX(bothbox), add); gtk_tooltips_set_tip(tooltips, add, _("Load a plugin from a file"), ""); config = picture_button(plugwindow, _("Configure"), gnome_preferences_xpm); gtk_widget_set_sensitive(config, FALSE); - gtk_box_pack_start(GTK_BOX(bothbox), config, TRUE, TRUE, 0); + gtk_box_pack_start_defaults(GTK_BOX(bothbox), config); gtk_tooltips_set_tip(tooltips, config, _("Configure settings of the selected plugin"), ""); reload = picture_button(plugwindow, _("Reload"), refresh_xpm); gtk_widget_set_sensitive(reload, FALSE); gtk_signal_connect(GTK_OBJECT(reload), "clicked", GTK_SIGNAL_FUNC(plugin_reload_cb), NULL); - gtk_box_pack_start(GTK_BOX(bothbox), reload, TRUE, TRUE, 0); + gtk_box_pack_start_defaults(GTK_BOX(bothbox), reload); gtk_tooltips_set_tip(tooltips, reload, _("Reload the selected plugin"), ""); unload = picture_button(plugwindow, _("Unload"), gnome_remove_xpm); gtk_signal_connect(GTK_OBJECT(unload), "clicked", GTK_SIGNAL_FUNC(unload_plugin_cb), pluglist); - gtk_box_pack_start(GTK_BOX(bothbox), unload, TRUE, TRUE, 0); + gtk_box_pack_start_defaults(GTK_BOX(bothbox), unload); gtk_tooltips_set_tip(tooltips, unload, _("Unload the selected plugin"), ""); close = picture_button(plugwindow, _("Close"), cancel_xpm); gtk_signal_connect(GTK_OBJECT(close), "clicked", GTK_SIGNAL_FUNC(hide_plugins), NULL); - gtk_box_pack_start(GTK_BOX(bothbox), close, TRUE, TRUE, 0); + gtk_box_pack_start_defaults(GTK_BOX(bothbox), close); gtk_tooltips_set_tip(tooltips, close, _("Close this window"), ""); update_show_plugins(); @@ -287,66 +357,84 @@ { GList *plugs = plugins; struct gaim_plugin *p; +#if GTK_CHECK_VERSION(1,3,0) + int pnum = 0; + GtkListStore *store; + GtkTreeIter iter; +#else GtkWidget *label; GtkWidget *list_item; GtkWidget *hbox; - +#endif + if (plugwindow == NULL) return; +#if GTK_CHECK_VERSION(1,3,0) + store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(pluglist))); + gtk_list_store_clear(store); +#else gtk_list_clear_items(GTK_LIST(pluglist), 0, -1); +#endif while (plugs) { p = (struct gaim_plugin *)plugs->data; +#if GTK_CHECK_VERSION(1,3,0) + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, plugin_makelistname(p->handle), -1); + gtk_list_store_set(store, &iter, 1, pnum++, -1); +#else label = gtk_label_new(plugin_makelistname(p->handle)); - hbox = gtk_hbox_new(FALSE, 0); /* for left justification */ + hbox = gtk_hbox_new(FALSE, 0); /* for left justification */ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); list_item = gtk_list_item_new(); gtk_container_add(GTK_CONTAINER(list_item), hbox); - gtk_signal_connect(GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(list_clicked), p); + gtk_signal_connect(GTK_OBJECT(list_item), "select", + GTK_SIGNAL_FUNC(list_clicked), p); gtk_object_set_user_data(GTK_OBJECT(list_item), p); - + gtk_widget_show(hbox); gtk_widget_show(label); gtk_container_add(GTK_CONTAINER(pluglist), list_item); gtk_widget_show(list_item); - +#endif plugs = g_list_next(plugs); } - /* Clear the display if nothing's selected */ - if (GTK_LIST(pluglist)->selection == NULL) { - guint text_len = gtk_text_get_length(GTK_TEXT(plugtext)); - gtk_text_set_point(GTK_TEXT(plugtext), 0); - gtk_text_forward_delete(GTK_TEXT(plugtext), text_len); - gtk_entry_set_text(GTK_ENTRY(plugentry), ""); - - gtk_widget_set_sensitive(config, FALSE); - gtk_widget_set_sensitive(reload, FALSE); - gtk_widget_set_sensitive(unload, FALSE); - } + clear_plugin_display(); } static void unload_plugin_cb(GtkWidget *w, gpointer data) { - GList *i; struct gaim_plugin *p; - +#if GTK_CHECK_VERSION(1,3,0) + p = get_selected_plugin(pluglist); + if(p == NULL) + return; +#else + GList *i; + i = GTK_LIST(pluglist)->selection; if (i == NULL) return; p = gtk_object_get_user_data(GTK_OBJECT(i->data)); - +#endif unload_plugin(p); update_show_plugins(); } static void plugin_reload_cb(GtkWidget *w, gpointer data) { - GList *i; struct gaim_plugin *p; +#if GTK_CHECK_VERSION(1,3,0) + p = get_selected_plugin(pluglist); + if(p == NULL) + return; + p = reload_plugin(p); +#else + GList *i; i = GTK_LIST(pluglist)->selection; if (i == NULL) @@ -354,35 +442,77 @@ /* Just pass off plugin to the actual function */ p = reload_plugin(gtk_object_get_user_data(GTK_OBJECT(i->data))); - +#endif update_show_plugins(); /* Try and reselect the plugin in list */ if (!pluglist) return; +#if GTK_CHECK_VERSION(1,3,0) + select_plugin(pluglist, p); +#else gtk_list_select_item(GTK_LIST(pluglist), g_list_index(plugins, p)); +#endif } + +#if GTK_CHECK_VERSION(1,3,0) +static void list_clicked(GtkWidget *w, gpointer data) +#else static void list_clicked(GtkWidget *w, struct gaim_plugin *p) +#endif { + void (*gaim_plugin_config)(); +#if GTK_CHECK_VERSION(1,3,0) + struct gaim_plugin *p; + GtkTextBuffer *buffer; + GtkTextIter iter; +#else gchar *temp; guint text_len; - void (*gaim_plugin_config)(); +#endif - if (confighandle != 0) + if (confighandle != 0) { gtk_signal_disconnect(GTK_OBJECT(config), confighandle); + confighandle = 0; + } + +#if GTK_CHECK_VERSION(1,3,0) + p = get_selected_plugin(pluglist); + if(p == NULL) { /* No selected plugin */ + clear_plugin_display(); + return; + } + + /* Set text and filepath widgets */ + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(plugtext)); + gtk_text_buffer_set_text(buffer, "", -1); + gtk_text_buffer_get_start_iter(buffer, &iter); + + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "Name:", -1, + "bold", NULL); + gtk_text_buffer_insert(buffer, &iter, " ", -1); + gtk_text_buffer_insert(buffer, &iter, (p->name != NULL) ? p->name : "", -1); + gtk_text_buffer_insert(buffer, &iter, "\n\n", -1); + gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "Description:", -1, + "bold", NULL); + gtk_text_buffer_insert(buffer, &iter, "\n", -1); + gtk_text_buffer_insert(buffer, &iter, + (p->description != NULL) ? p->description : "", -1); + gtk_entry_set_text(GTK_ENTRY(plugentry), g_module_name(p->handle)); +#else text_len = gtk_text_get_length(GTK_TEXT(plugtext)); gtk_text_set_point(GTK_TEXT(plugtext), 0); gtk_text_forward_delete(GTK_TEXT(plugtext), text_len); temp = g_strdup_printf("Name: %s\n\nDescription:\n%s", - (p->name != NULL) ? p->name : "", - (p->description != NULL) ? p->description : ""); + (p->name != NULL) ? p->name : "", + (p->description != NULL) ? p->description : ""); gtk_text_insert(GTK_TEXT(plugtext), NULL, NULL, NULL, temp, -1); g_free(temp); gtk_entry_set_text(GTK_ENTRY(plugentry), g_module_name(p->handle)); - +#endif /* Find out if this plug-in has a configuration function */ if (g_module_symbol(p->handle, "gaim_plugin_config", (gpointer *)&gaim_plugin_config)) { confighandle = gtk_signal_connect(GTK_OBJECT(config), "clicked", @@ -409,7 +539,7 @@ static const gchar *plugin_makelistname(GModule *module) { static gchar filename[PATHSIZE]; - gchar *filepath = g_module_name(module); + gchar *filepath = (char *)g_module_name(module); char *cp; if (filepath == NULL || strlen(filepath) == 0) @@ -428,5 +558,79 @@ return filename; } + +#if GTK_CHECK_VERSION(1,3,0) +static struct gaim_plugin *get_selected_plugin(GtkWidget *w) { + /* Given the pluglist widget, this will return a pointer to the plugin + * currently selected in the list, and NULL if none is selected. */ + gint index; + GList *plugs = plugins; + GtkTreeSelection *sel; + GtkTreeIter iter; + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(w)); + + /* Get list index of selected plugin */ + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(w)); + if(!gtk_tree_selection_get_selected(sel, &model, &iter)) + return NULL; + gtk_tree_model_get(model, &iter, 1, &index, -1); + + /* Get plugin entry from index */ + plugs = g_list_nth(plugins, index); + if(plugs == NULL) + return NULL; + else + return (struct gaim_plugin *)plugs->data; +} + +static void select_plugin(GtkWidget *w, struct gaim_plugin *p) { + /* Given the pluglist widget and a plugin, this will try to select + * entry in the list which corresponds with the plugin. */ + GtkTreeSelection *sel; + GtkTreeIter iter; + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(w)); + gchar temp[10]; + + if(g_list_index(plugins, p) == -1) + return; + + snprintf(temp, 10, "%d", g_list_index(plugins, p)); + gtk_tree_model_get_iter_from_string(model, + &iter, temp); + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(w)); + gtk_tree_selection_select_iter(sel, &iter); +} +#endif /* GTK_CHECK_VERSION */ + +static void clear_plugin_display() { +#if GTK_CHECK_VERSION(1,3,0) + GtkTreeSelection *selection; + GtkTextBuffer *buffer; + + /* Clear the plugin display if nothing's selected */ + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pluglist)); + if(gtk_tree_selection_get_selected(selection, NULL, NULL) == FALSE) { + buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(plugtext)); + gtk_text_buffer_set_text(buffer, "", -1); + gtk_entry_set_text(GTK_ENTRY(plugentry), ""); + + gtk_widget_set_sensitive(config, FALSE); + gtk_widget_set_sensitive(reload, FALSE); + gtk_widget_set_sensitive(unload, FALSE); + } +#else + /* Clear the display if nothing's selected */ + if (GTK_LIST(pluglist)->selection == NULL) { + guint text_len = gtk_text_get_length(GTK_TEXT(plugtext)); + gtk_text_set_point(GTK_TEXT(plugtext), 0); + gtk_text_forward_delete(GTK_TEXT(plugtext), text_len); + gtk_entry_set_text(GTK_ENTRY(plugentry), ""); + + gtk_widget_set_sensitive(config, FALSE); + gtk_widget_set_sensitive(reload, FALSE); + gtk_widget_set_sensitive(unload, FALSE); + } +#endif +} #endif Index: prefs.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/prefs.c,v retrieving revision 1.229 retrieving revision 1.230 diff -u -d -r1.229 -r1.230 --- prefs.c 2 Aug 2002 21:25:33 -0000 1.229 +++ prefs.c 5 Aug 2002 07:33:09 -0000 1.230 @@ -843,7 +843,7 @@ gtk_widget_show (frame); vbox = gtk_vbox_new(FALSE, 5); gtk_container_add (GTK_CONTAINER (frame), vbox); - gaim_dropdown(vbox, "Broswer", &web_browser_new, -1, + gaim_dropdown(vbox, "Browser", &web_browser_new, -1, "Netscape", BROWSER_NETSCAPE, "Konqueror", BROWSER_KONQ, "Mozilla", BROWSER_MOZILLA, @@ -1035,7 +1035,6 @@ gaim_button(_("Sending messages removes away status"), &away_options_new, OPT_AWAY_BACK_ON_IM, vbox); gaim_button(_("Queue new messages when away"), &away_options_new, OPT_AWAY_QUEUE, vbox); gaim_button(_("Ignore new conversations when away"), &away_options_new, OPT_AWAY_DISCARD, vbox); - gaim_button(_("Sounds while away"), &sound_options_new, OPT_SOUND_WHEN_AWAY, vbox); gtk_widget_show (vbox); @@ -1221,7 +1220,7 @@ gtk_tree_model_get_value (model, &iter, 2, &val); sound_row_sel = g_value_get_uint(&val); if (sound_entry) - gtk_entry_set_text(sound_entry, sound_file_new[sound_row_sel] ? sound_file_new[sound_row_sel] : "(default)"); + gtk_entry_set_text(GTK_ENTRY(sound_entry), sound_file_new[sound_row_sel] ? sound_file_new[sound_row_sel] : "(default)"); g_value_unset (&val); if (sounddialog) gtk_widget_destroy(sounddialog); @@ -1363,13 +1362,14 @@ gchar *message; gchar buffer[BUF_LONG]; char *tmp; + struct away_message *am; if (! gtk_tree_selection_get_selected (sel, &model, &iter)) return; gtk_tree_model_get_value (model, &iter, 1, &val); - message = g_value_get_string(&val); + am = g_value_get_pointer(&val); gtk_imhtml_clear(GTK_IMHTML(away_text)); - strcpy(buffer, message); + strncpy(buffer, am->message, BUF_LONG); tmp = stylize(buffer, BUF_LONG); gtk_imhtml_append_text(GTK_IMHTML(away_text), tmp, -1, GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_SCROLL); @@ -1390,7 +1390,7 @@ if (! gtk_tree_selection_get_selected (sel, &prefs_away_store, &iter)) return; - gtk_tree_model_get_value (prefs_away_store, &iter, 2, &val); + gtk_tree_model_get_value (prefs_away_store, &iter, 1, &val); am = g_value_get_pointer (&val); gtk_imhtml_clear(GTK_IMHTML(away_text)); rem_away_mess(NULL, am); @@ -1400,8 +1400,41 @@ } #else -void away_message_sel(GtkWidget *w, GtkWidget *list) {} -void remove_away_message(GtkWidget *widget, GtkWidget *list) {} +static struct away_message *cur_message; +void away_message_sel(GtkWidget *w, struct away_message *a) { + gchar buffer[BUF_LONG]; + char *tmp; + + cur_message = a; + + /* Clear the Box */ + gtk_imhtml_clear(GTK_IMHTML(away_text)); + + /* Fill the text box with new message */ + strncpy(buffer, a->message, BUF_LONG); + tmp = stylize(buffer, BUF_LONG); + + debug_printf("FSD: %s\n", tmp); + gtk_imhtml_append_text(GTK_IMHTML(away_text), tmp, -1, GTK_IMHTML_NO_TITLE | + GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_SCROLL); + gtk_imhtml_append_text(GTK_IMHTML(away_text), "<BR>", -1, GTK_IMHTML_NO_TITLE | + GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_SCROLL); + g_free(tmp); +} +void remove_away_message(GtkWidget *widget, GtkWidget *list) { + GList *i; + struct away_message *a; + + i = GTK_LIST(prefs_away_list)->selection; + + if (!i) + return; + if (!i->next) { + gtk_imhtml_clear(GTK_IMHTML(away_text)); + } + a = gtk_object_get_user_data(GTK_OBJECT(i->data)); + rem_away_mess(NULL, a); +} #endif GtkWidget *away_message_page() { @@ -1418,8 +1451,6 @@ GtkTreeViewColumn *col; GtkTreeSelection *sel; GtkTreePath *path; -#else - GtkWidget *list; #endif GSList *awy = away_messages; struct away_message *a; @@ -1439,14 +1470,13 @@ gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); #if GTK_CHECK_VERSION(1,3,0) - prefs_away_store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); + prefs_away_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); while (awy) { a = (struct away_message *)awy->data; gtk_list_store_append (prefs_away_store, &iter); gtk_list_store_set(prefs_away_store, &iter, - 0, a->name, - 1, a->message, - 2, a, -1); + 0, a->name, + 1, a, -1); awy = awy->next; } event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(prefs_away_store)); @@ -1462,16 +1492,32 @@ gtk_widget_show(event_view); gtk_container_add(GTK_CONTAINER(sw), event_view); #else - list = gtk_clist_new(1); + prefs_away_list = gtk_list_new(); while (awy) { - char *msg; + GtkWidget *ambox = gtk_hbox_new(FALSE, 5); + GtkWidget *list_item =gtk_list_item_new(); + GtkWidget *label; a = (struct away_message *)awy->data; - msg = a->name; - gtk_clist_append(GTK_CLIST(list), &msg); + gtk_container_add(GTK_CONTAINER(prefs_away_list), list_item); + gtk_signal_connect(GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(away_message_sel), + a); + gtk_object_set_user_data(GTK_OBJECT(list_item), a); + + gtk_widget_show(list_item); + + ambox = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(list_item), ambox); + gtk_widget_show(ambox); + + label = gtk_label_new(a->name); + gtk_box_pack_start(GTK_BOX(ambox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + awy = awy->next; + } - gtk_widget_show(list); - gtk_container_add(GTK_CONTAINER(sw), list); + gtk_widget_show(prefs_away_list); + gtk_container_add(GTK_CONTAINER(sw), prefs_away_list); #endif gtk_widget_show (vbox); @@ -1504,8 +1550,6 @@ g_signal_connect (G_OBJECT (sel), "changed", G_CALLBACK (away_message_sel), NULL); -#else - gtk_signal_connect(GTK_OBJECT(list), "changed", GTK_SIGNAL_FUNC(away_message_sel), NULL); #endif hbox = gtk_hbox_new(TRUE, 5); gtk_widget_show(hbox); @@ -1526,7 +1570,7 @@ gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(remove_away_message), event_view); #else button = picture_button(prefs, _("Remove"), gnome_remove_xpm); - //gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(create_away_mess), event_view); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(remove_away_message), prefs_away_list); #endif gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); if (misc_options & OPT_MISC_COOL_LOOK) @@ -1535,6 +1579,7 @@ #if GTK_CHECK_VERSION (1,3,0) button = pixbuf_button(_("_Edit"), "edit.png"); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(create_away_mess), event_view); #else button = picture_button(prefs, _("Edit"), save_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(create_away_mess), button); |