pidgin/pidgin

b2db8ddd4756
Parents e8a4f48d595f
Children 86afaa3533bc
Remove the GTK implemention of RequestDataSheet

This was only used by Gadu Gadu and we probably don't want to use it for
anything else.

Testing Done:
Called in the turtles.

Reviewed at https://reviews.imfreedom.org/r/3127/
--- 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 @@
} PidginRequestData;
-static GHashTable *datasheet_stock = NULL;
-
static void
pidgin_widget_decorate_account(GtkWidget *cont, PurpleAccount *account)
{
@@ -1409,359 +1407,6 @@
return sw;
}
-static GdkPixbuf*
-_pidgin_datasheet_stock_icon_get(const gchar *stock_name)
-{
- GdkPixbuf *image = NULL;
-
- if (stock_name == NULL)
- return NULL;
-
- /* core is quitting */
- if (datasheet_stock == NULL)
- return NULL;
-
- if (g_hash_table_lookup_extended(datasheet_stock, stock_name,
- NULL, (gpointer*)&image))
- {
- return image;
- }
-
- purple_debug_error("gtkrequest", "Unknown icon: %s", stock_name);
-
- return NULL;
-}
-
-static PurpleRequestDatasheetRecord*
-datasheet_get_selected_row(GtkWidget *sheet_widget)
-{
- PurpleRequestDatasheet *sheet;
- GtkTreeView *view;
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GList *sel_list;
- gpointer key;
-
- 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)
- return NULL;
-
- 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);
-}
-
-#if 0
-static void
-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)));
-}
-#endif
-
-static void
-datasheet_selection_changed(G_GNUC_UNUSED GtkWidget *sheet_widget)
-{
-#if 0
- gpointer buttons_box;
-
- 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);
-#endif
-}
-
-static void
-datasheet_update_rec(PurpleRequestDatasheetRecord *rec, GtkListStore *model,
- GtkTreeIter *iter)
-{
- guint i, col_count;
- 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(
- sheet, i);
- if (type == PURPLE_REQUEST_DATASHEET_COLUMN_STRING) {
- GValue val;
-
- val.g_type = 0;
- g_value_init(&val, G_TYPE_STRING);
- g_value_set_string(&val,
- purple_request_datasheet_record_get_string_data(
- rec, i));
- gtk_list_store_set_value(model, iter,
- i + 1, &val);
- } else if (type ==
- PURPLE_REQUEST_DATASHEET_COLUMN_IMAGE)
- {
- GdkPixbuf *pixbuf;
-
- pixbuf = _pidgin_datasheet_stock_icon_get(
- purple_request_datasheet_record_get_image_data(
- rec, i));
- gtk_list_store_set(model, iter, i + 1,
- pixbuf, -1);
- } else
- g_warn_if_reached();
- }
-}
-
-static void
-datasheet_fill(PurpleRequestDatasheet *sheet, GtkListStore *model)
-{
- const GList *it;
-
- gtk_list_store_clear(model);
-
- it = purple_request_datasheet_get_records(sheet);
- for (; it != NULL; it = g_list_next(it)) {
- PurpleRequestDatasheetRecord *rec = it->data;
- GtkTreeIter iter;
-
- 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")));
-}
-
-static void
-datasheet_update(PurpleRequestDatasheet *sheet, gpointer key,
- GtkListStore *model)
-{
- PurpleRequestDatasheetRecord *rec;
- GtkTreeIter iter;
- GtkTreeModel *tmodel = GTK_TREE_MODEL(model);
- gboolean found = FALSE;
-
- g_return_if_fail(tmodel != NULL);
-
- if (key == NULL) {
- datasheet_fill(sheet, model);
- return;
- }
-
- rec = purple_request_datasheet_record_find(sheet, key);
-
- if (gtk_tree_model_get_iter_first(tmodel, &iter)) {
- do {
- gpointer ikey;
-
- gtk_tree_model_get(tmodel, &iter, 0, &ikey, -1);
-
- if (key == ikey) {
- found = TRUE;
- break;
- }
- } while (gtk_tree_model_iter_next(tmodel, &iter));
- }
-
- if (rec == NULL && !found)
- return;
-
- if (rec == NULL) {
- gtk_list_store_remove(model, &iter);
- return;
- }
-
- if (!found) {
- 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")));
-}
-
-
-static void
-datasheet_selection_changed_cb(G_GNUC_UNUSED GtkTreeSelection *sel,
- gpointer sheet_widget)
-{
- datasheet_selection_changed(GTK_WIDGET(sheet_widget));
-}
-
-static void
-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(
- sheet_widget));
-}
-
-static GtkWidget *
-create_datasheet_field(PurpleRequestField *field, GtkSizeGroup *buttons_sg)
-{
- PurpleRequestFieldDatasheet *dfield = PURPLE_REQUEST_FIELD_DATASHEET(field);
- PurpleRequestDatasheet *sheet;
- guint i, col_count;
- GType *col_types;
- GtkListStore *model;
- GtkTreeView *view;
- GtkTreeSelection *sel;
- GtkWidget *scrollable;
- GtkCellRenderer *renderer_image = NULL, *renderer_text = NULL;
- GtkTreeViewColumn *id_column;
- GtkWidget *main_box;
- GtkWidget *buttons_box;
- const GList *it;
-
- 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;
- else
- g_warn_if_reached();
- }
- model = gtk_list_store_newv(col_count + 1, col_types);
- g_free(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);
- g_object_unref(model);
-
- 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;
- const gchar *title;
- 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) {
- type_str = "text";
- if (!renderer_text)
- renderer_text = gtk_cell_renderer_text_new();
- renderer = renderer_text;
- }
- else if (type == PURPLE_REQUEST_DATASHEET_COLUMN_IMAGE) {
- type_str = "pixbuf";
- if (!renderer_image)
- renderer_image = gtk_cell_renderer_pixbuf_new();
- renderer = renderer_image;
- } else
- g_warn_if_reached();
-
- if (title == NULL)
- title = "";
- gtk_tree_view_insert_column_with_attributes(
- view, -1, title, renderer, type_str,
- i + 1, NULL);
- }
-
- 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(view));
- 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;
- GtkButton *btn;
- const gchar *label;
-
- 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);
-
- return main_box;
-}
-
static void *
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);
} else {
g_warning("Unhandled field type: %s",
G_OBJECT_TYPE_NAME(field));
@@ -2280,24 +1923,13 @@
return &handle;
}
-static void
-pidgin_request_datasheet_stock_remove(gpointer obj)
-{
- if (obj == NULL)
- return;
- g_object_unref(obj);
-}
-
void
pidgin_request_init(void)
{
- datasheet_stock = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, pidgin_request_datasheet_stock_remove);
}
void
pidgin_request_uninit(void)
{
purple_signals_disconnect_by_handle(pidgin_request_get_handle());
- g_clear_pointer(&datasheet_stock, g_hash_table_destroy);
}