Sun, 14 Apr 2024 02:15:04 -0500
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/
| pidgin/gtkrequest.c | file | annotate | diff | comparison | revisions |
--- 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); }