Mercurial > pidgin
diff src/gtkprefs.c @ 11740:7e0ad3b6882a
[gaim-migrate @ 14031]
Moved Plugins to Tools > Plugins
Made iChat Timestamp plugin instant apply
Made Proxy options visible only when needed.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sun, 23 Oct 2005 07:12:12 +0000 |
parents | cae2fb7e8594 |
children | 8d5ea84440ca |
line wrap: on
line diff
--- a/src/gtkprefs.c Sun Oct 23 06:46:07 2005 +0000 +++ b/src/gtkprefs.c Sun Oct 23 07:12:12 2005 +0000 @@ -42,8 +42,6 @@ #include "gtkdialogs.h" #include "gtkimhtml.h" #include "gtkimhtmltoolbar.h" -#include "gtkplugin.h" -#include "gtkpluginpref.h" #include "gtkprefs.h" #include "gtksound.h" #include "gtkthemes.h" @@ -65,7 +63,6 @@ static GtkWidget *prefs = NULL; static GtkWidget *debugbutton = NULL; static int notebook_page = 0; -static GtkTreeIter plugin_iter; static GtkTreeRowReference *previous_smiley_row = NULL; /* @@ -75,7 +72,6 @@ GtkWidget*, GtkTreeIter*, GtkTreeIter*, int); static void delete_prefs(GtkWidget *, void *); -static void update_plugin_list(void *data); static void update_spin_value(GtkWidget *w, GtkWidget *spin) @@ -345,104 +341,11 @@ } static void -add_plugin_prefs(GaimPlugin *plugin) -{ - /* - * NOTE: This is basically the same check as before - * (plug->type == plugin), but now there aren't plugin types. - * Not yet, anyway. I want to do a V2 of the plugin API. - * The thing is, we should have a flag specifying the UI type, - * or just whether it's a general plugin or a UI-specific - * plugin. We should only load this if it's UI-specific. - * - * -- ChipX86 - */ - if (GAIM_IS_GTK_PLUGIN(plugin)) - { - GtkWidget *config_frame; - GaimGtkPluginUiInfo *ui_info; - - ui_info = GAIM_GTK_PLUGIN_UI_INFO(plugin); - config_frame = gaim_gtk_plugin_get_config_frame(plugin); - - if (config_frame != NULL) - { - ui_info->page_num = - prefs_notebook_add_page(_(plugin->info->name), NULL, - config_frame, NULL, - &plugin_iter, notebook_page++); - } - } - - if (GAIM_PLUGIN_HAS_PREF_FRAME(plugin)) - { - GtkWidget *gtk_frame; - GaimPluginUiInfo *prefs_info; - - prefs_info = GAIM_PLUGIN_UI_INFO(plugin); - prefs_info->frame = prefs_info->get_plugin_pref_frame(plugin); - gtk_frame = gaim_gtk_plugin_pref_create_frame(prefs_info->frame); - - if (GTK_IS_WIDGET(gtk_frame)) - { - prefs_info->page_num = - prefs_notebook_add_page(_(plugin->info->name), NULL, - gtk_frame, NULL, - (plugin->info->type == GAIM_PLUGIN_PROTOCOL) ? NULL : &plugin_iter, - notebook_page++); - } else if(prefs_info->frame) { - /* in the event that there is a pref frame and we can - * not make a widget out of it, we free the - * pluginpref frame --Gary - */ - gaim_plugin_pref_frame_destroy(prefs_info->frame); - } - } -} - -static void -delete_plugin_prefs(GaimPlugin *plugin) -{ - if (GAIM_IS_GTK_PLUGIN(plugin)) - { - GaimGtkPluginUiInfo *ui_info; - - ui_info = GAIM_GTK_PLUGIN_UI_INFO(plugin); - - if (ui_info != NULL && ui_info->page_num > 0) { - gtk_notebook_remove_page(GTK_NOTEBOOK(prefsnotebook), - ui_info->page_num); - } - } - - if (GAIM_PLUGIN_HAS_PREF_FRAME(plugin)) - { - GaimPluginUiInfo *prefs_info; - - prefs_info = GAIM_PLUGIN_UI_INFO(plugin); - - if (prefs_info->frame != NULL) { - gaim_plugin_pref_frame_destroy(prefs_info->frame); - prefs_info->frame = NULL; - } - - if (prefs_info->page_num > 0) { - gtk_notebook_remove_page(GTK_NOTEBOOK(prefsnotebook), - prefs_info->page_num); - } - } -} - -static void delete_prefs(GtkWidget *asdf, void *gdsa) { - GList *l; - /* Close any "select sound" request dialogs */ gaim_request_close_with_handle(prefs); - gaim_plugins_unregister_probe_notify_cb(update_plugin_list); - /* Unregister callbacks. */ gaim_prefs_disconnect_by_handle(prefs); @@ -455,10 +358,6 @@ gtk_tree_row_reference_free(previous_smiley_row); previous_smiley_row = NULL; - for (l = gaim_plugins_get_loaded(); l != NULL; l = l->next) - { - delete_plugin_prefs(l->data); - } } static void smiley_sel(GtkTreeSelection *sel, GtkTreeModel *model) { @@ -1045,9 +944,9 @@ const char *proxy = value; if (strcmp(proxy, "none") && strcmp(proxy, "envvar")) - gtk_widget_set_sensitive(frame, TRUE); + gtk_widget_show(frame); else - gtk_widget_set_sensitive(frame, FALSE); + gtk_widget_hide(frame); } static void proxy_print_option(GtkEntry *entry, int entrynum) @@ -1144,14 +1043,8 @@ gtk_box_pack_start(GTK_BOX(vbox), prefs_proxy_frame, 0, 0, 0); proxy_info = gaim_global_proxy_get_info(); - if (proxy_info == NULL || - gaim_proxy_info_get_type(proxy_info) == GAIM_PROXY_NONE || - gaim_proxy_info_get_type(proxy_info) == GAIM_PROXY_USE_ENVVAR) { - - gtk_widget_set_sensitive(GTK_WIDGET(prefs_proxy_frame), FALSE); - } gaim_prefs_connect_callback(prefs, "/core/proxy/type", - proxy_changed_cb, prefs_proxy_frame); + proxy_changed_cb, prefs_proxy_frame); table = gtk_table_new(4, 2, FALSE); gtk_container_set_border_width(GTK_CONTAINER(table), 0); @@ -1232,6 +1125,10 @@ gaim_set_accessible_label (entry, label); gtk_widget_show_all(ret); + if (proxy_info == NULL || + gaim_proxy_info_get_type(proxy_info) == GAIM_PROXY_NONE || + gaim_proxy_info_get_type(proxy_info) == GAIM_PROXY_USE_ENVVAR) + gtk_widget_hide(table); return ret; } @@ -1829,268 +1726,6 @@ return ret; } -static GtkWidget *plugin_description=NULL, *plugin_details=NULL; - -static void prefs_plugin_sel (GtkTreeSelection *sel, GtkTreeModel *model) -{ - gchar *buf, *pname, *perr, *pdesc, *pauth, *pweb; - GtkTreeIter iter; - GValue val = { 0, }; - GaimPlugin *plug; - - if (! gtk_tree_selection_get_selected (sel, &model, &iter)) - return; - gtk_tree_model_get_value (model, &iter, 3, &val); - plug = g_value_get_pointer(&val); - - pname = g_markup_escape_text(_(plug->info->name), -1); - pdesc = (plug->info->description) ? - g_markup_escape_text(_(plug->info->description), -1) : NULL; - pauth = (plug->info->author) ? - g_markup_escape_text(_(plug->info->author), -1) : NULL; - pweb = (plug->info->homepage) ? - g_markup_escape_text(_(plug->info->homepage), -1) : NULL; - - if (plug->error != NULL) { - perr = g_markup_escape_text(_(plug->error), -1); - buf = g_strdup_printf( - "<span size=\"larger\">%s %s</span>\n\n" - "<span weight=\"bold\" color=\"red\">%s</span>\n\n" - "%s", - pname, plug->info->version, perr, pdesc ? pdesc : ""); - g_free(perr); - } - else { - buf = g_strdup_printf( - "<span size=\"larger\">%s %s</span>\n\n%s", - pname, plug->info->version, pdesc ? pdesc : ""); - } - gtk_label_set_markup(GTK_LABEL(plugin_description), buf); - g_free(buf); - - buf = g_strdup_printf( -#ifndef _WIN32 - _("<span size=\"larger\">%s %s</span>\n\n" - "<span weight=\"bold\">Written by:</span>\t%s\n" - "<span weight=\"bold\">Web site:</span>\t\t%s\n" - "<span weight=\"bold\">File name:</span>\t%s"), -#else - _("<span size=\"larger\">%s %s</span>\n\n" - "<span weight=\"bold\">Written by:</span> %s\n" - "<span weight=\"bold\">URL:</span> %s\n" - "<span weight=\"bold\">File name:</span> %s"), -#endif - pname, plug->info->version, pauth ? pauth : "", pweb ? pweb : "", plug->path); - - gtk_label_set_markup(GTK_LABEL(plugin_details), buf); - g_value_unset(&val); - g_free(buf); - g_free(pname); - g_free(pdesc); - g_free(pauth); - g_free(pweb); -} - -static void plugin_load (GtkCellRendererToggle *cell, gchar *pth, gpointer data) -{ - GtkTreeModel *model = (GtkTreeModel *)data; - GtkTreeIter iter; - GtkTreePath *path = gtk_tree_path_new_from_string(pth); - GaimPlugin *plug; - gchar buf[1024]; - gchar *name = NULL, *description = NULL; - - GdkCursor *wait = gdk_cursor_new (GDK_WATCH); - gdk_window_set_cursor(prefs->window, wait); - gdk_cursor_unref(wait); - - gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_model_get (model, &iter, 3, &plug, -1); - - if (!gaim_plugin_is_loaded(plug)) { - gaim_plugin_load(plug); - add_plugin_prefs(plug); - } - else { - delete_plugin_prefs(plug); - gaim_plugin_unload(plug); - } - - gdk_window_set_cursor(prefs->window, NULL); - - name = g_markup_escape_text(_(plug->info->name), -1); - description = g_markup_escape_text(_(plug->info->description), -1); - if (plug->error != NULL) { - gchar *error = g_markup_escape_text(plug->error, -1); - g_snprintf(buf, sizeof(buf), - "<span size=\"larger\">%s %s</span>\n\n" - "<span weight=\"bold\" color=\"red\">%s</span>\n\n" - "%s", - name, plug->info->version, error, description); - g_free(error); - } else { - g_snprintf(buf, sizeof(buf), - "<span size=\"larger\">%s %s</span>\n\n%s", - name, plug->info->version, description); - } - g_free(name); - g_free(description); - - gtk_label_set_markup(GTK_LABEL(plugin_description), buf); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, - gaim_plugin_is_loaded(plug), -1); - - gtk_label_set_markup(GTK_LABEL(plugin_description), buf); - gtk_tree_path_free(path); - - gaim_gtk_plugins_save(); -} - -static void -update_plugin_list(void *data) -{ - GtkListStore *ls = GTK_LIST_STORE(data); - GtkTreeIter iter; - GList *probes; - GaimPlugin *plug; - - gtk_list_store_clear(ls); - gaim_plugins_probe(GAIM_PLUGIN_EXT); - - for (probes = gaim_plugins_get_all(); - probes != NULL; - probes = probes->next) - { - plug = probes->data; - - if (plug->info->type != GAIM_PLUGIN_STANDARD || - (plug->info->flags & GAIM_PLUGIN_FLAG_INVISIBLE)) - { - continue; - } - - gtk_list_store_append (ls, &iter); - gtk_list_store_set(ls, &iter, - 0, gaim_plugin_is_loaded(plug), - 1, plug->info->name ? _(plug->info->name) : plug->path, - 2, _(plug->info->summary), - 3, plug, -1); - } -} - -static GtkWidget *plugin_page () -{ - GtkWidget *ret; - GtkWidget *sw, *vp; - GtkWidget *event_view; - GtkListStore *ls; - GtkCellRenderer *rend, *rendt; - GtkTreeViewColumn *col; - GtkTreeSelection *sel; - GtkTreePath *path; - GtkWidget *nb; - - ret = gtk_vbox_new(FALSE, GAIM_HIG_CAT_SPACE); - gtk_container_set_border_width (GTK_CONTAINER (ret), GAIM_HIG_BORDER); - - sw = gtk_scrolled_window_new(NULL,NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); - - gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0); - - ls = gtk_list_store_new (4, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), - 1, GTK_SORT_ASCENDING); - - update_plugin_list(ls); - - event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(ls)); - - rend = gtk_cell_renderer_toggle_new(); - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (event_view)); - - col = gtk_tree_view_column_new_with_attributes (_("Load"), - rend, - "active", 0, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col); - - rendt = gtk_cell_renderer_text_new(); - col = gtk_tree_view_column_new_with_attributes (_("Name"), - rendt, - "text", 1, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW(event_view), col); - - rendt = gtk_cell_renderer_text_new(); - col = gtk_tree_view_column_new_with_attributes(_("Summary"), - rendt, - "text", 2, - NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(event_view), col); - - g_object_unref(G_OBJECT(ls)); - gtk_container_add(GTK_CONTAINER(sw), event_view); - - - nb = gtk_notebook_new(); - gtk_notebook_set_tab_pos (GTK_NOTEBOOK(nb), GTK_POS_BOTTOM); - gtk_notebook_popup_disable(GTK_NOTEBOOK(nb)); - - /* Description */ - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - plugin_description = gtk_label_new(NULL); - - vp = gtk_viewport_new(NULL, NULL); - gtk_viewport_set_shadow_type(GTK_VIEWPORT(vp), GTK_SHADOW_NONE); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_NONE); - - gtk_container_add(GTK_CONTAINER(vp), plugin_description); - gtk_container_add(GTK_CONTAINER(sw), vp); - - gtk_label_set_selectable(GTK_LABEL(plugin_description), TRUE); - gtk_label_set_line_wrap(GTK_LABEL(plugin_description), TRUE); - gtk_misc_set_alignment(GTK_MISC(plugin_description), 0, 0); - gtk_misc_set_padding(GTK_MISC(plugin_description), GAIM_HIG_BOX_SPACE, GAIM_HIG_BOX_SPACE); - gtk_notebook_append_page(GTK_NOTEBOOK(nb), sw, gtk_label_new(_("Description"))); - - /* Details */ - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - plugin_details = gtk_label_new(NULL); - - vp = gtk_viewport_new(NULL, NULL); - gtk_viewport_set_shadow_type(GTK_VIEWPORT(vp), GTK_SHADOW_NONE); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_NONE); - - gtk_container_add(GTK_CONTAINER(vp), plugin_details); - gtk_container_add(GTK_CONTAINER(sw), vp); - - gtk_label_set_selectable(GTK_LABEL(plugin_details), TRUE); - gtk_label_set_line_wrap(GTK_LABEL(plugin_details), TRUE); - gtk_misc_set_alignment(GTK_MISC(plugin_details), 0, 0); - gtk_misc_set_padding(GTK_MISC(plugin_details), GAIM_HIG_BOX_SPACE, GAIM_HIG_BOX_SPACE); - gtk_notebook_append_page(GTK_NOTEBOOK(nb), sw, gtk_label_new(_("Details"))); - gtk_box_pack_start(GTK_BOX(ret), nb, TRUE, TRUE, 0); - - g_signal_connect (G_OBJECT (sel), "changed", - G_CALLBACK (prefs_plugin_sel), - NULL); - g_signal_connect (G_OBJECT(rend), "toggled", - G_CALLBACK(plugin_load), ls); - - path = gtk_tree_path_new_first(); - gtk_tree_selection_select_path(sel, path); - gtk_tree_path_free(path); - - gaim_plugins_register_probe_notify_cb(update_plugin_list, ls); - - gtk_widget_show_all(ret); - return ret; -} - int prefs_notebook_add_page(const char *text, GdkPixbuf *pixbuf, GtkWidget *page, @@ -2117,7 +1752,6 @@ static void prefs_notebook_init() { GtkTreeIter p, c, c2; - GList *l; prefs_notebook_add_page(_("Buddy List"), NULL, list_page(), &c, &p, notebook_page++); prefs_notebook_add_page(_("Conversations"), NULL, conv_page(), &c, &p, notebook_page++); prefs_notebook_add_page(_("Smiley Themes"), NULL, theme_page(), &c2, &c, notebook_page++); @@ -2132,14 +1766,6 @@ #endif prefs_notebook_add_page(_("Logging"), NULL, logging_page(), &p, NULL, notebook_page++); prefs_notebook_add_page(_("Away / Idle"), NULL, away_page(), &p, NULL, notebook_page++); - - if (gaim_plugins_enabled()) { - prefs_notebook_add_page(_("Plugins"), NULL, plugin_page(), &plugin_iter, NULL, notebook_page++); - - for (l = gaim_plugins_get_loaded(); l != NULL; l = l->next) { - add_plugin_prefs(l->data); - } - } } void gaim_gtk_prefs_show(void) @@ -2176,7 +1802,7 @@ /* The notebook */ prefsnotebook = notebook = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (vbox), notebook, FALSE, FALSE, 0); - + gtk_widget_show(prefsnotebook); /* The buttons to press! */ bbox = gtk_hbutton_box_new(); @@ -2194,7 +1820,7 @@ prefs_notebook_init(); /* Show everything. */ - gtk_widget_show_all(prefs); + gtk_widget_show(prefs); } static void