void _fcitx_im_dialog_response_cb(GtkDialog *dialog, gint response, gpointer user_data) { FcitxImDialog* self = FCITX_IM_DIALOG(dialog); if (response == GTK_RESPONSE_OK) { GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(self->availimview)); add_foreach_context context; context.self = self; context.changed = FALSE; gtk_tree_selection_selected_foreach(selection, add_foreach, &context); if (context.changed) fcitx_input_method_set_imlist(self->improxy, self->array); } gtk_widget_destroy(GTK_WIDGET(dialog)); }
void _fcitx_im_widget_delim_button_clicked(GtkButton* button, gpointer user_data) { FcitxImWidget* self = user_data; GtkWidget *treeView = self->imview; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(self->imview)); GtkTreeIter iter; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { FcitxIMItem* item = NULL; gtk_tree_model_get(model, &iter, IM_LIST_IM, &item, -1); item->enable = false; g_free(self->focus); self->focus = NULL; fcitx_input_method_set_imlist(self->improxy, self->array); } }
void _fcitx_im_widget_movedown_button_clicked(GtkButton* button, gpointer user_data) { FcitxImWidget* self = user_data; GtkWidget *treeView = self->imview; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView)); GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(self->imview)); GtkTreeIter iter; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { FcitxIMItem* item = NULL; gtk_tree_model_get(model, &iter, IM_LIST_IM, &item, -1); int i; int switch_index = -1; for (i = self->array->len - 1; i >= 0; i -= 1) { if (g_ptr_array_index(self->array, i) == item) break; FcitxIMItem* temp_item = g_ptr_array_index(self->array, i); if (temp_item->enable) switch_index = i; } if (i != -1 && switch_index != -1) { gpointer temp = g_ptr_array_index(self->array, i); g_ptr_array_index(self->array, i) = g_ptr_array_index(self->array, switch_index); g_ptr_array_index(self->array, switch_index) = temp; g_free(self->focus); self->focus = g_strdup(item->unique_name); fcitx_input_method_set_imlist(self->improxy, self->array); } } }