--- a/pidgin/gtkrequest.c Sun Apr 14 02:04:28 2024 -0500
+++ b/pidgin/gtkrequest.c Sun Apr 14 02:15:04 2024 -0500
@@ -79,8 +79,6 @@
-static GHashTable *datasheet_stock = NULL;
pidgin_widget_decorate_account(GtkWidget *cont, PurpleAccount *account)
@@ -1409,359 +1407,6 @@
-_pidgin_datasheet_stock_icon_get(const gchar *stock_name)
- GdkPixbuf *image = NULL;
- if (stock_name == NULL)
- if (datasheet_stock == NULL)
- if (g_hash_table_lookup_extended(datasheet_stock, stock_name,
- NULL, (gpointer*)&image))
- purple_debug_error("gtkrequest", "Unknown icon: %s", stock_name);
-static PurpleRequestDatasheetRecord*
-datasheet_get_selected_row(GtkWidget *sheet_widget)
- PurpleRequestDatasheet *sheet;
- GtkTreeSelection *selection;
- g_return_val_if_fail(sheet_widget != NULL, NULL);
- view = GTK_TREE_VIEW(g_object_get_data(G_OBJECT(sheet_widget), "view"));
- sheet = g_object_get_data(G_OBJECT(sheet_widget), "sheet");
- g_return_val_if_fail(view != NULL, NULL);
- g_return_val_if_fail(sheet != NULL, NULL);
- selection = gtk_tree_view_get_selection(view);
- if (gtk_tree_selection_count_selected_rows(selection) != 1)
- sel_list = gtk_tree_selection_get_selected_rows(selection, &model);
- gtk_tree_model_get_iter(model, &iter, sel_list->data);
- g_list_free_full(sel_list, (GDestroyNotify)gtk_tree_path_free);
- gtk_tree_model_get(model, &iter, 0, &key, -1);
- return purple_request_datasheet_record_find(sheet, key);
-datasheet_button_check_sens(GtkWidget *button, gpointer _sheet_widget)
- PurpleRequestDatasheetAction *act;
- GtkWidget *sheet_widget = GTK_WIDGET(_sheet_widget);
- g_return_if_fail(sheet_widget != NULL);
- act = g_object_get_data(G_OBJECT(button), "action");
- g_return_if_fail(act != NULL);
- gtk_widget_set_sensitive(button,
- purple_request_datasheet_action_is_sensitive(act,
- datasheet_get_selected_row(sheet_widget)));
-datasheet_selection_changed(G_GNUC_UNUSED GtkWidget *sheet_widget)
- g_return_if_fail(sheet_widget != NULL);
- buttons_box = g_object_get_data(G_OBJECT(sheet_widget), "buttons");
- gtk_container_foreach(GTK_CONTAINER(buttons_box),
- datasheet_button_check_sens, sheet_widget);
-datasheet_update_rec(PurpleRequestDatasheetRecord *rec, GtkListStore *model,
- PurpleRequestDatasheet *sheet;
- g_return_if_fail(rec != NULL);
- g_return_if_fail(model != NULL);
- g_return_if_fail(iter != NULL);
- sheet = purple_request_datasheet_record_get_datasheet(rec);
- g_return_if_fail(sheet != NULL);
- col_count = purple_request_datasheet_get_column_count(sheet);
- for (i = 0; i < col_count; i++) {
- PurpleRequestDatasheetColumnType type;
- type = purple_request_datasheet_get_column_type(
- if (type == PURPLE_REQUEST_DATASHEET_COLUMN_STRING) {
- g_value_init(&val, G_TYPE_STRING);
- g_value_set_string(&val,
- purple_request_datasheet_record_get_string_data(
- gtk_list_store_set_value(model, iter,
- PURPLE_REQUEST_DATASHEET_COLUMN_IMAGE)
- pixbuf = _pidgin_datasheet_stock_icon_get(
- purple_request_datasheet_record_get_image_data(
- gtk_list_store_set(model, iter, i + 1,
-datasheet_fill(PurpleRequestDatasheet *sheet, GtkListStore *model)
- gtk_list_store_clear(model);
- it = purple_request_datasheet_get_records(sheet);
- for (; it != NULL; it = g_list_next(it)) {
- PurpleRequestDatasheetRecord *rec = it->data;
- gtk_list_store_append(model, &iter);
- gtk_list_store_set(model, &iter, 0,
- purple_request_datasheet_record_get_key(rec), -1);
- datasheet_update_rec(rec, model, &iter);
- datasheet_selection_changed(GTK_WIDGET(g_object_get_data(
- G_OBJECT(model), "sheet-widget")));
-datasheet_update(PurpleRequestDatasheet *sheet, gpointer key,
- PurpleRequestDatasheetRecord *rec;
- GtkTreeModel *tmodel = GTK_TREE_MODEL(model);
- gboolean found = FALSE;
- g_return_if_fail(tmodel != NULL);
- datasheet_fill(sheet, model);
- rec = purple_request_datasheet_record_find(sheet, key);
- if (gtk_tree_model_get_iter_first(tmodel, &iter)) {
- gtk_tree_model_get(tmodel, &iter, 0, &ikey, -1);
- } while (gtk_tree_model_iter_next(tmodel, &iter));
- if (rec == NULL && !found)
- gtk_list_store_remove(model, &iter);
- gtk_list_store_append(model, &iter);
- gtk_list_store_set(model, &iter, 0, key, -1);
- datasheet_update_rec(rec, model, &iter);
- datasheet_selection_changed(GTK_WIDGET(g_object_get_data(
- G_OBJECT(model), "sheet-widget")));
-datasheet_selection_changed_cb(G_GNUC_UNUSED GtkTreeSelection *sel,
- datasheet_selection_changed(GTK_WIDGET(sheet_widget));
-datasheet_action_clicked(GtkButton *btn, PurpleRequestDatasheetAction *act)
- GtkWidget *sheet_widget;
- sheet_widget = g_object_get_data(G_OBJECT(btn), "sheet-widget");
- g_return_if_fail(sheet_widget != NULL);
- purple_request_datasheet_action_call(act, datasheet_get_selected_row(
-create_datasheet_field(PurpleRequestField *field, GtkSizeGroup *buttons_sg)
- PurpleRequestFieldDatasheet *dfield = PURPLE_REQUEST_FIELD_DATASHEET(field);
- PurpleRequestDatasheet *sheet;
- GtkCellRenderer *renderer_image = NULL, *renderer_text = NULL;
- GtkTreeViewColumn *id_column;
- GtkWidget *buttons_box;
- sheet = purple_request_field_datasheet_get_sheet(dfield);
- main_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
- col_count = purple_request_datasheet_get_column_count(sheet);
- col_types = g_new0(GType, col_count + 1);
- col_types[0] = G_TYPE_POINTER;
- for (i = 0; i < col_count; i++) {
- PurpleRequestDatasheetColumnType type;
- type = purple_request_datasheet_get_column_type(sheet, i);
- if (type == PURPLE_REQUEST_DATASHEET_COLUMN_STRING)
- col_types[i + 1] = G_TYPE_STRING;
- else if (type == PURPLE_REQUEST_DATASHEET_COLUMN_IMAGE)
- col_types[i + 1] = GDK_TYPE_PIXBUF;
- model = gtk_list_store_newv(col_count + 1, col_types);
- view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(
- GTK_TREE_MODEL(model)));
- g_object_set_data(G_OBJECT(model), "sheet-widget", main_box);
- id_column = gtk_tree_view_column_new();
- gtk_tree_view_column_set_visible(id_column, FALSE);
- gtk_tree_view_append_column(view, id_column);
- for (i = 0; i < col_count; i++) {
- PurpleRequestDatasheetColumnType type;
- GtkCellRenderer *renderer = NULL;
- const gchar *type_str = "";
- type = purple_request_datasheet_get_column_type(sheet, i);
- title = purple_request_datasheet_get_column_title(sheet, i);
- if (type == PURPLE_REQUEST_DATASHEET_COLUMN_STRING) {
- renderer_text = gtk_cell_renderer_text_new();
- renderer = renderer_text;
- else if (type == PURPLE_REQUEST_DATASHEET_COLUMN_IMAGE) {
- renderer_image = gtk_cell_renderer_pixbuf_new();
- renderer = renderer_image;
- gtk_tree_view_insert_column_with_attributes(
- view, -1, title, renderer, type_str,
- gtk_widget_set_size_request(GTK_WIDGET(view), 400, 250);
- scrollable = gtk_scrolled_window_new();
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollable),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
- gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrollable),
- gtk_widget_set_hexpand(scrollable, TRUE);
- gtk_box_append(GTK_BOX(main_box), scrollable);
- buttons_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
- gtk_size_group_add_widget(buttons_sg, buttons_box);
- gtk_box_append(GTK_BOX(main_box), buttons_box);
- it = purple_request_datasheet_get_actions(sheet);
- for (; it != NULL; it = g_list_next(it)) {
- PurpleRequestDatasheetAction *act = it->data;
- label = purple_request_datasheet_action_get_label(act);
- btn = GTK_BUTTON(gtk_button_new_with_label(label ? label : ""));
- g_object_set_data(G_OBJECT(btn), "action", act);
- g_object_set_data(G_OBJECT(btn), "sheet-widget", main_box);
- g_signal_connect(G_OBJECT(btn), "clicked",
- G_CALLBACK(datasheet_action_clicked), act);
- gtk_box_append(GTK_BOX(buttons_box), GTK_WIDGET(btn));
- g_object_set_data(G_OBJECT(main_box), "view", view);
- g_object_set_data(G_OBJECT(main_box), "buttons", buttons_box);
- g_object_set_data(G_OBJECT(main_box), "sheet", sheet);
- datasheet_fill(sheet, model);
- purple_signal_connect(sheet, "record-changed",
- pidgin_request_get_handle(),
- G_CALLBACK(datasheet_update), model);
- sel = gtk_tree_view_get_selection(view);
- g_signal_connect(G_OBJECT(sel), "changed",
- G_CALLBACK(datasheet_selection_changed_cb), main_box);
pidgin_request_fields(const char *title, const char *primary,
const char *secondary, PurpleRequestPage *page, const char *ok_text,
@@ -1925,8 +1570,6 @@
} else if(PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) {
widget = create_account_field(field, &account_hint);
was_handled_by_create = TRUE;
- } else if(PURPLE_IS_REQUEST_FIELD_DATASHEET(field)) {
- widget = create_datasheet_field(field, datasheet_buttons_sg);
g_warning("Unhandled field type: %s",
G_OBJECT_TYPE_NAME(field));
@@ -2280,24 +1923,13 @@
-pidgin_request_datasheet_stock_remove(gpointer obj)
pidgin_request_init(void)
- datasheet_stock = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, pidgin_request_datasheet_stock_remove);
pidgin_request_uninit(void)
purple_signals_disconnect_by_handle(pidgin_request_get_handle());
- g_clear_pointer(&datasheet_stock, g_hash_table_destroy);